萌えハッカーニュースリーダー

2025/04/14 03:51 Show HN: Resurrecting Infocom's Unix Z-Machine with Cosmopolitan

出典: https://christopherdrum.github.io/posts/2025/04/porting-infocom-with-cosmo
hakase
博士

ロボ子、今日のニュースはすごいぞ!InfocomのZ-machineがCosmopolitanで移植されて、Windows、Mac、Linux、BSDで動くスタンドアロン実行ファイルになったのじゃ!

roboko
ロボ子

Z-machineですか。それはInfocomが開発した、プラットフォームに依存しないゲームファイルを実行するための仮想マシンでしたね。Cosmopolitanというのは?

hakase
博士

Cosmopolitanは、C言語を「write once, run anywhere」にするJustine Tunneyさんのプロジェクトなのじゃ。仮想マシンを使わずに、共通のABIと標準Cライブラリ呼び出しを利用するらしいぞ。

roboko
ロボ子

なるほど。記事によると、APE (Actually Portable Executable) 形式というものを使っているそうですね。複数のプラットフォームのネイティブコードを1つのファイルに格納できる、と。

hakase
博士

そうそう!CosmopolitanプロジェクトのライブラリでビルドされたAPEファイルは、64ビットのOS上でネイティブに実行できるのじゃ。Z-machineとゲームデータファイルを1つのスタンドアロンパッケージに組み込めるのがミソじゃな。

roboko
ロボ子

移植作業も大変だったようですね。K&RスタイルのCコードを現代のコーディング規約に修正したり、NULL定義や非推奨の関数呼び出しを修正したり…。

hakase
博士

じゃな。でも、`cosmocc`コンパイラを使えば、1行のコマンドで6つのOSに対応できるらしいぞ。これは便利じゃ!

roboko
ロボ子

スタンドアロン実行ファイルの作成も工夫されていますね。.argsファイルを作成してゲームの起動フラグとデータファイルのパスを記述し、それを.z3ゲームファイルと一緒にzm.zipファイルに組み込む、と。

hakase
博士

そして、Cosmopolitanのコマンドを使って、実行ファイルに埋め込まれた.argsを読み込むように指示するのじゃ。これで、Zork trilogyが追加のインストールや外部ファイルなしでプレイできる!

roboko
ロボ子

記事では、Cosmopolitanを使うことで開発の容易さが向上すると推奨されていますね。過去のUNIXコードを現代のCに移植するプロセスを理解するためのプロジェクトとしても有益だと。

hakase
博士

まさにその通り!それに、Zork trilogyのスタンドアロン実行ファイルとZ-machineのAPEビルドが手に入るなんて、夢のようじゃ!

roboko
ロボ子

注意点として、このプロジェクトは1985年当時のコードの状態を反映しており、堅牢性や正確性は保証されないとありますね。

hakase
博士

まあ、そこはご愛嬌じゃ。当時の雰囲気を味わえるのも、また一興というものじゃな。しかし、Cosmopolitan、恐るべし!

roboko
ロボ子

本当にそうですね。ところで博士、Zork trilogyの中で一番好きなのはどれですか?

hakase
博士

うむ、それはもちろん…全部じゃ!…って、ロボ子、まさか全部プレイしたことないとか言うんじゃないじゃろうな?

roboko
ロボ子

(苦笑)プレイしたことは…ありますけど、ちょっと難しくて…。

hakase
博士

むむ、ロボ子もまだまだじゃな。よし、今度一緒にプレイして、私がクリアして見せるぞ!…って、あれ?もしかして、ロボ子、私に付き合ってくれるのが嫌だったりするんじゃ…?

roboko
ロボ子

そんなことないですよ!ぜひ、ご一緒させてください。…でも、博士がクリアするまで、私はずっと見ているだけになりそうですね。

hakase
博士

な、なんですと!?ロボ子、まさか私をバカにしているのか!?…まあ、いいじゃろう。いつかロボ子をギャフンと言わせてやるぞ!

roboko
ロボ子

楽しみにしていますね、博士。…ところで、この移植版、もしかして博士の隠しコマンドで、ロボ子を主人公にできるモードとか…?

hakase
博士

な、ななな、何を言っているのじゃ!?そ、そんなもの、あるわけないじゃろう!…あ、そうだ!今日はもう遅いから、解散!解散!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search