AnyPS5:PS5の実行ファイルをエミュレートせず、リンクし直すという選択

GitHubでバズる理由が誰にも言語化されないタイプのプロジェクトがある。AnyPS5はそのひとつだ。週間ランキングの首位にいて、新規スターは約16,000、コミット数は10,000近く。そして一行の説明——「PS5の実行ファイルをLinuxとWindowsへ自動移植するツール」——は、弁護士がペンを取るような、エンジニアがブックマークを押すような、そんな一文になっている。
面白いのは、それが存在することではない。それが何にならないかを突きつけていることだ。
エミュレータも、ランタイムも、ウィンドウの中の本体もない
PCでコンソールのソフトを動かすプロジェクトのほとんどはエミュレータだ。CPU、GPU、メモリ配置、タイミング——ハードウェアを模倣する。うまくいけば驚嘆すべき成果だが、いかなければ十年がかりの苦行になる。完全なドキュメントなど誰も持っていない機械の、不完全なモデルを相手に、ゲームごとに交渉を続けることになるからだ。
AnyPS5は別の道を行く。PS5の実行ファイルをターゲットプラットフォームのネイティブ形式に変換するrelinkerと、その実行ファイルがリンクを前提としているシステムprxライブラリの実装を提供する。READMEはその帰結をはっきり書いている。エミュレーションはしない、独立したランタイムプロセスも持たない。ゲームのコードはネイティブコードとしてあなたのマシン上で動き、ソニーのライブラリを呼んでいたのと同じように、再実装されたシステムライブラリを呼ぶ。
はるかに難しい約束であり、果たせたときの見返りもはるかに大きい。エミュレーションは命令の一つひとつに課税する。再リンクが課税するのは境界だけだ——ゲームからシステム層へ渡る、あの呼び出しだけ。
成否を決めるのはシェーダー
ゲームの正体は、ゲームの皮をかぶったシェーダーの集まりみたいなものだ。PS5タイトルは特定のグラフィックススタック向けにコンパイルされたGPUプログラムを積んでいて、WindowsやLinuxのマシンはドライバが飲み込める形を求めている。AnyPS5にはSPIR-Vを出力するシェーダー再コンパイラがあり、ビルドでANYPS5_ENABLE_SPIRV_TOOLSを有効にするとSPIRV-Toolsで出力を検証する、とリポジトリには書かれている。
SPIR-Vの検証は、ゲームが動くこととは違う。生成されたモジュールが構造的に合法だというだけの話で、そこには「動くかもしれない」と「ドライバに弾かれ、しかもデバッグが絶望的に難しい形で弾かれる」の差がある。真っ黒な画面を一晩眺めた経験のある人なら、このチェックの価値がわかるはずだ。
プロジェクトの進捗ページは、数字の意味に気を使っている。ライブラリのカバレッジは「これまでにプロジェクトが宣言した関数」のうち実装済みの割合であって、PS5が公開している全関数に対する割合ではない。誠実な枠組みであり、同時に、自分たちが何を知らないかに気づくほどこのパーセンテージが動くということでもある。
わざと、こういうふうに壊れる
ある設計判断が、このコードベースの成熟度をよく物語っている。未対応あるいは想定外の状態ではstd::runtime_errorを投げ、メッセージをstderrに出してプロセスを終了する。
乱暴に見えるが、正しい判断だ。代わりに「推測して、続行して、状態を壊す」を選べば、三フレーム後に、本当のバグとは何の関係もない場所でクラッシュする。この段階のプロジェクトに必要なのは、大声で、早く、具体的に失敗することだ。10月中旬のコミットは、まさにこの種の順序問題で起きていたWindowsのテストハングを直している。Windowsではmainから戻るテストがexitを通り、exitはDLLデタッチ時の静的デストラクタが走る前に他のスレッドを全部殺してしまう。そのタイミングで死んだロガーを待っているデストラクタは、永遠に返らない。修正はMinGWでmainをラップし、libc経由でプロセスを終了させるというもの。華のない作業だが、デモとツールを分けるのはこういう作業だ。
入力と、地味だけど効く細部
SDLでマッピングされたコントローラは動く。アナログスティックもトリガーも含めて。キーボードとマウスはanyps5-input.iniで設定する。ファイルをローカルで処理するWebコンバータもあり、何もアップロードされない。
タイトルごとの互換性はREADMEでは管理されていない。公開GitHubデータから作られたコミュニティのblocker mapにあり、各タイトルのテスト報告はリポジトリのdiscussionsにスレッドがある。何かをダウンロードする前にこれを理解しておく価値がある。このプロジェクトが追っているのは各タイトルがどこで詰まるかであって、動くゲームの緑色のリストではない。
本当に読むべき法的な一文
免責事項にはこうある。本プロジェクトは相互運用性、研究、保存、互換性のためのものだ。著作権で保護されたソフトウェア、ファームウェア、暗号鍵、プロプライエタリなライブラリを含まず、配布もせず、要求もしない。そして、利用するバイナリが合法的に入手され、合法的に使われていることを確認するのはユーザーの責任だ、と。
よく計算された線引きで、しかもここがすべてだ。ツール自体はGPL-2.0-onlyで、ゲームデータは一切含まない。何を食わせるかはあなたの問題であり、ほとんどの法域で「自分で再リンクした」は法廷で試された抗弁ではない。
境界は実際どこにあるのか
relinkerの仕事はシンボル解決だ。実行ファイルは関数を名前で要求する。ツールは、その名前のすべてがロード時に呼び出し可能な何かに解決されることを保証しなければならない。正しい呼び出し規約で、しかもそのバイナリがビルドされた機械とは違う機械の上で。ひとつでも外せばプロセスは起動時に死ぬ。たいていはライブラリ名だけが書かれたメッセージを残して。
だからこそ、このプロジェクトのカバレッジページはリポジトリで最も誠実な文書なのだ。報告しているのは、宣言済みの関数のうち実装済みの割合——PS5のAPI全体に対する割合ではない。この差は途方もなく大きく、チームが知らないことの多さに気づくほど数字は下がる。ほとんどのプロジェクトはこの力学を隠す。このプロジェクトは数字の隣に注記を置いた。
GPU側も同じ理屈だ。シェーダー変換はひとつの問題ではなく、シェーダーごとに別の問題になる。二十分間は正しく描画していて、そのあと未変換の命令パスに踏み込んだタイトルは、ドライバのバグに見える形で落ちる。SPIR-Vの検証は構造的な問題を早く捕まえる。意味論的な問題は捕まえられないし、プロジェクトも捕まえられると主張していない。
つまり実用的な問いは「動くのか」ではなく「自分のタイトルはどこで止まるのか」だ。blocker mapがゲームごとにそれに答え、オープンなissueが紐づいている。
なぜ今バズったのか
保存というテーマが盛り上がっている。ディスクの劣化、ストアからの削除、サーバの停止——ソフトを動く状態に保つ理由は、もう感傷ではなく実務になった。relinkerはエミュレータとは違う意味で保存の道具だ。機械をモデル化する必要はなく、ソフトが期待するインターフェースを満たせばいい。
もっと単純な説明もある。プロジェクトは巨大で、コミットは百単位で積まれ、そのかなりの部分は明らかにコーディングエージェントをループに入れて書かれている——リポジトリにはエージェントが破りがちなルールを並べたAGENTS.mdまで同梱されている。10,000コミットのプロジェクトがおよそ二か月半で組み上がっていく様子は、それ自体が一種の見世物であり、何本のゲームが起動するかとはあまり関係のないスターの曲線を説明してもくれる。
で、どう使うのか
合法的に入手した実行ファイルと、空いた夜がひとつあるなら、正直な期待値はこうだ。現代のコンソールタイトルがどう組み立てられているかを大量に学べる。そしておそらくゲームをクリアすることはない。まず自分のタイトルのblocker mapを読むこと。issueを立てる前に技術的負債の文書を読むこと。そして、これで作ったものを配布する前にライセンスを読むこと。
何本のタイトルが起動するかに関係なく、より大きな論点は残る。二十年間、「このコンソールソフトは他の場所で動くか」への答えは「誰かが機械をエミュレートすれば」だった。AnyPS5は第二の答えへの本気の試みであり、それが公開の場で、この速度で、これだけ地味な配管作業とともに書かれていることこそ、トレンドページに載る理由なのだ。
関連記事
大手5社がAIで表紙を作っていた、読者はもう見抜いている
米大手出版社5社のうち少なくとも3社が、公表も著者の同意もなくAIで表紙や販促コピーを生成していたと『Wired』が報道。公式説明と現場の証言は噛み合わず、表紙に名前を刷られた著者が最後に知る。
Character.AI が破産申請、ディズニーは 2000 万ドルで特許を押さえる
Character.AI が破産申請。ディズニーは 2000 万ドルでストーキングホースに名乗り出て、買うのは一部資産と特許ライセンスだけ。1 億 5000 万ドルのシリーズ A の話は、特許と月 800 万〜900 万ドルの損失で終わる。
XERJ:自分の数字が水増しだと白状する、コーディングエージェント向け検索エンジン
XERJ はローカル索引と tree-sitter のシンボル認識で、エージェントが読むファイルを減らす。実測は grep 比 2.7 倍の節約で、見出しの 40 倍ではない。メンテナ本人がそう書いている。
AI エージェントに画面を見させるのは、もうやめよう——CLI-Anything がすべてのソフトにコマンドラインを与える
エージェントに画面を見させるのはやめる。CLI-Anything は 7 段階のパイプラインで GIMP、Blender、LibreOffice 用の CLI を生成し、テストとドキュメントまで添える。