SlimeRESCUE-AS400
CL 救済 実証済 データ救済 実証済 RPG / COBOL 救済 開発中
IBM i (AS/400) の *PGM バイナリから、元ソースファイルが失われていても現代コードとデータへ救済する。
IBM i の *PGM は z/Architecture のロードモジュールと根本的に異なり、
生の機械語ではなく TIMI / MI (Machine Interface = 機械独立の高水準中間表現)
を encapsulate しています (native PowerPC は SLIC が隠蔽)。
そのため SlimeRESCUE-AS400 は「機械語の逆アセンブル」ではなく、
*PGM が抱える復元可能情報を使う設計です ―
これが z/Arch 系より AS/400 で 有利に働く理由です。
AS/400 は便利さゆえ 20〜30 年無停止で稼働し続け、
構築 SIer の消滅やソース (FD・旧 PC・テープ) の喪失が特に多い一方で、
動いている *PGM 自体は機械上に生存しているからです。
3 層救済 ― 各層の実証状況を正直に
SlimeRESCUE-AS400 は *PGM の性質に応じて 3 層で救済します。
現時点の実機実証状況をそのまま記載します。
| 層 | 内容 | 状態 | 実機検証 (IBM i 7.5) |
|---|---|---|---|
| CL 救済 ✓ | RTVCLSRC で *PGM から CL ソースを完全復元 → SlimeCL で Rust / bash (将来 Java) へ |
実証済 | world-first 実証: 元ソースファイルが 空 の *PGM から RTVCLSRC (CPC0560) で実ソース・実変数名を復元 → SlimeCL → Rust が 実機 CALL と byte-exact 一致 (=425) |
| データ救済 ✓ | 全物理ファイルのレコードを文字 (EBCDIC) / zoned / packed (COMP-3) / binary / float / DECFLOAT で byte-exact 吸出し | 実証済 | P10〜P19 で実機 member バイトと byte-exact 一致 (固定長 RECFM・COMP-3 符号・IEEE float・DECFLOAT16/34 含む) |
| RPG / COBOL 救済 ⧖ | *PGM の observability (ILE debug view / MI テンプレート) からソース・名前を再構成 |
開発中 | 取得 API (QTEDBGS の QteRetrieveModuleViews / QteRetrieveViewText) に 到達・バインド済。完走には debug-mode 文脈 (専用 / 対話) が必要 ― 共同検証で個別評価 |
RMVOBS で observability を剥がした *PGM は
プログラム復元が不可になります (データ救済は引き続き可能)。実案件は
無償 PoC / 共同検証で個別に適用可否を見極めます。
実機 IBM i 7.5 での検証
机上ではなく 実機 IBM i 7.5 (公開 IBM i 環境、RZKH GmbH 運営) 上で end-to-end 検証しています。「IBM i で既に動く実物がある」状態です。
| 検証環境 | IBM i 7.5 (5250 / SSH、書込可ライブラリで実オブジェクト生成) |
|---|---|
| CL 救済 (world-first) | RTVCLSRC PGM(...) → CPC0560、回収ヘッダの「元ソースファイル」=空欄。*PGM 内から復元した CL ソースのみから SlimeCL → Rust を生成し、実機 CALL の結果と byte-exact 一致 (00000000425) |
| データ救済 | 対話画面再構成 + 全 CRUD (RCVF / 埋込 RUNSQL) + EBCDIC 固定長の zoned / packed COMP-3 / binary BE / IEEE float / DECFLOAT16・34 を実 member バイトと 無変換で byte-exact 照合 |
| RPG / COBOL 取得 API | ILE C ハーネスを CRTCMOD → CRTPGM ... BNDSRVPGM(QSYS/QTEDBGS) でバインドし実行到達。取得鎖 QteRetrieveModuleViews → QteRegisterDebugView → QteRetrieveViewText を確認 (完走には debug-mode 文脈) |
動作例 (CL 救済 / 実機)
元ソースファイルを使わず、*PGM バイナリだけから現代 Rust を復活させた実機ログ:
== SlimeRESCUE-AS400 — *PGM binary -> recovered source -> SlimeCL -> Rust ==
RTVCLSRC : CPC0560 (object 上の元ソースファイル: <EMPTY>)
live *PGM (IBM i) : 00000000425
rescued->SlimeCL : 00000000425
=> PASS — *PGM (ソースファイル無し) -> RTVCLSRC -> SlimeCL -> Rust、
byte-exact == 実機 IBM i = 425
※ 元の .clp は一切読んでいません。候補コードは *PGM オブジェクト
自体から RTVCLSRC が引き戻したソースだけから生成しています。
技術仕様 (詳細)
| 対象 | IBM i (AS/400 / iSeries / System i) の *PGM オブジェクトおよび物理ファイル |
|---|---|
*PGM の性質 | TIMI / MI (機械独立の高水準中間表現) を encapsulate、native PowerPC は SLIC が隠蔽。生機械語の逆アセではなく復元情報経路を用いる |
| CL 復元 | RTVCLSRC (元ソースファイル不要、observability が既定保持されていれば *PGM から実ソースを復元) → SlimeCL で現代言語へ |
| RPG / COBOL 経路 | ILE debug view (DBGVIEW) / MI テンプレート由来の observability を、QTEDBGS source-debug API (QteRetrieveModuleViews / QteRetrieveViewText) で取得。debug-mode 文脈が必須 (CPF9541) |
| データ形式 | EBCDIC (cp037 系) / zoned decimal / packed COMP-3 / binary BE 2 の補数 / IEEE float (BE single・double) / DECFLOAT (decimal64・decimal128、DPD declet) |
| 出力先言語 | SlimeCL → Rust / bash (単一バイナリ・no-external-lib)。将来 Java、SlimeNENC 資産連携 |
| 留意 (caveat) | RMVOBS 等で observability を剥がした *PGM はプログラム復元不可 (データ救済は可)。プログラム復元は observability 状態に依存 |
適用シナリオ
- 構築 SIer 消滅・ソース喪失: 20〜30 年無停止稼働の AS/400 で、元ソースが FD / 旧 PC / テープごと失われ、動く
*PGMしか残っていない - RPG プログラマ退職・引継ぎ断絶: 改修できる人材が不在、現行業務だけが稼働し続けている
- M&A 後の情報資産整理: 統合後にソース所在が不明、オブジェクトと物理ファイルしか残っていない
- 監査・可視化要件:
*PGMが実装している処理と業務データを可視化してドキュメント化 - 業務継続を前提とした現代化: 現行 AS/400 を急に止めず、救済した資産を段階的に現代コードへ ― 継続と共存の文脈で
関連 / 価格
SlimeRESCUE-AS400 は Binary 起点プレミアム SKU。 ソース起点 SKU に対する単価設定 (代替手段の乏しさ + AS/400 ソース喪失案件の市場性) は SlimeRESCUE ファミリ共通方針に準じます。ボリュームディスカウント、SIer パートナー margin、 無償 PoC / 共同検証の条件は パートナーページ 参照、詳細は NDA 後開示。
関連: SlimeRESCUE ファミリー · SlimeRESCUE-VOS3 (z/Arch 系) · 国産オフコン modernization 共同検証
