Infinite MacでMac OS Xを実行する
(blog.persistent.info)- Infinite Macがブラウザ上で初期のMac OS Xを実行できるようになり、現在は10.1と10.3が最もよくサポートされている
- 既存のDingusPPCルートがカーネルパニックとグラフィック問題で行き詰まったため、2000年代初頭のMac OS Xエミュレーションを目標に作られたPearPCの移植へと方針転換した
- 性能は依然として遅く、Mac OS X 10.2が完全に動作するまでほぼ2分かかり、最適化で短縮できた時間も約15秒程度にとどまる
- PowerPCの浮動小数点処理で
FPビットの検査を見落としていたバグがDockの描画やFinderウィンドウの問題を引き起こしており、修正の過程でDingusPPCの安定性も改善された - Infinite HDは初期Mac OS X時代のインディーソフトウェアやDeveloper CDのツールを収めるよう再構成されたが、HFS/HFS+の違いと古い
.dmg互換性が制約として残っている
ブラウザで初期のMac OS Xを実行
- Infinite Macは現在、初期のMac OS Xを実行できる
- Mac OS X 10.1とMac OS X 10.3が最もよくサポートされているバージョン
- 実行速度は速くないが、当時の実機もそこまで大きく優れていたわけではないという感覚に近い
- 時代に合ったソフトウェアを同梱するInfinite HDも、初期Mac OS X期のインディーソフトウェア中心に再構成された
PearPC移植への方針転換
- 当初はDingusPPCでMac OS XをInfinite Mac上で動かそうとしていたが、昨夏ごろにカーネルパニックとグラフィック崩れから先へ進めなくなった
- 決定的実行モードで問題の範囲を絞ろうとしたものの、次の一手は明確ではなかった
- 代替としてPearPCを選択した
- PearPCは2000年代初頭、x86 WindowsおよびLinuxマシンでMac OS Xをエミュレートするために作られた
- Intel移行後は関心が薄れ、事実上停止したコードベースとして扱われてきた
- kanjitalk755が現代のmacOSでビルド・実行できるPearPCの実験ブランチを作っていたことが、移植の出発点になった
- PearPCはマルチプラットフォームのコードベースで、スレッドのような移植が難しい概念を広範には使っておらず、WebAssembly/EmscriptenおよびInfinite Macランタイムへ移しやすかった
- 数日のうちにビルド、ビデオ出力、ディスクイメージ読み込み、マウス・キーボード入力の接続まで進んだ
- 結果として、Mac OS X 10.2をブラウザ上で以前より安定して実行できるようになった
性能最適化と残るボトルネック
- PearPCはMac OS X 10.2をより安定して動かしたが、DingusPPCより遅く感じられた
- DingusPPCのベンチマークハーネスをPearPCへ移し、既存のDingusPPC最適化作業をPearPCにも繰り返し適用した
- 両エミュレータともルックアップテーブルベースの純粋インタプリタであり、作業は比較的直接的だった
- Mac OS X 10.2の起動時間を約15秒短縮した
- 最適化後でも、完全に操作可能な状態になるまでほぼ2分かかる
- Infinite Mac UIには、Mac OS Xの起動が遅い可能性があるという案内を追加した
- 最大のボトルネックはPearPCのMMUキャッシュ欠如にある
- すべてのload/storeが複雑なアドレス計算を経由するため高コストになる
- DingusPPCにはより成熟した階層キャッシュがあり、効果的に見える
- PearPCは10.2〜10.4実行でDingusPPCより安定している可能性があるが、コードベースはあまり原則的ではない
- カスタムファームウェアとビデオドライバを使っている
- Mac OS Xに必要なPowerPC命令の一部しか実装していない
- 長期的には、DingusPPCが高速で安定し、正確な選択肢になることが期待されている
FPビット検査と描画バグ
- PearPCインタプリタに「統合デコードテーブル」方式をopcode系統ごとに適用していた際、浮動小数点演算の変更でリグレッションが発生した
- Dockに描画グリッチが生じた
- Finderウィンドウが開かなかった
- opcodeグループ59と63のディスパッチでは単純なルックアップだけでなく、まずMachine State Registerの
FPビットを確認する必要があったFPビットが設定されていなければ、“floating point unavailable”例外を投げる
- 当時のMacで使われていたPowerPCチップにはFPUがあったが、Mac OS X起動中にはその例外が頻繁に発生する
- 当時のxnuカーネルソースには
FPビットをクリアする箇所と例外ハンドラがある - コンテキストスイッチ時のFPUレジスタ保存・復元を避けるための最適化と見られる
- 当時のxnuカーネルソースには
- 最適化したディスパッチコードにも同じ
FP検査を実装すると、描画問題は消えた - 同じバグはDingusPPCにも残っていた
- DingusPPCは
FPビットを確認せず、浮動小数点命令を常に通していた - 手早い修正で例外を発生させるようにすると、Mac OS Xの描画グリッチが消えた
- その後、正式実装と性能低下回避の修正が入り、DingusPPCの安定性は大きく向上した
- DingusPPCは
- 両エミュレータを組み合わせることで、実行可能な初期Mac OS Xの範囲が広がった
- DingusPPCは10.1を安定して実行できる
- PearPCは10.1を安定して実行できない
- 10.0は依然として不安定で、Public Betaは即座にカーネルパニックを起こす
Infinite HDの再構成
- Infinite Macの魅力の一つは、時代に合ったソフトウェアを収めたInfinite HDが一緒にマウントされる点にある
- Mac OS X対応に合わせ、80〜90年代のクラシックMacアプリを超えて、初期Mac OS X時代のソフトウェアを収めた別バージョンを作成した
- 個人的に好んでいたアプリに加え、提案を受けて一覧を拡張した
- ディスクイメージは既存の自動化手法を拡張して生成した
- 初期Mac OS X期にはディスクイメージ利用が非常に多かったため、生成イメージ内の追加フォルダへ
.dmgを取り込む機能を追加した
- 初期Mac OS X期にはディスクイメージ利用が非常に多かったため、生成イメージ内の追加フォルダへ
- 古い
.dmgは拡張子が同じでも複数の変種があり、現代のmacOSのhdiutilでは常にマウントできなかった- 最終的にdmg2imgでrawパーティションを先に抽出した
- その後、現代のmacOSがマウントしてコピーできる新しいディスクイメージを作り直す迂回策を使った
- 実際のソフトウェア収集では、2000年代初頭〜中盤のMac OS Xソフトウェアが空白地帯だった
- Macintosh Gardenにも一部はあるが、優先度は高くない
- 元ベンダー側では古すぎて削除されている場合が多い
- Wayback Machineを多用した
- 各Mac OS Xバージョンに対応するDeveloper CDもインストールし、Project BuilderやInterface Builderのようなツールを使えるようにした
ファイルシステムと複数ディスクのマウント
- ディスクビルド工程はHFS中心だが、この時代の標準はHFS+だった
- HFS+はより長いファイル名や任意のUnicode文字を含めるなど、より高度な機能を提供する
- HFS+機能に依存するディスクイメージファイルは、損失なく変換できない
- 大半のソフトウェアでは大きな問題にならなかった
- 起動ディスク、Infinite HD、Saved HDまで最大3台のドライブをマウントするため、DingusPPCフォークの手法を借用した
- 起動時に指定された任意個数のパーティションイメージから、その場でマルチパーティションのディスクイメージを生成する
AquaモードとサイトUI
- Mac OS X追加を完成させるため、Infinite MacサイトのコントロールにもAquaモードを追加した
- 従来はclassic、Platinum、NeXTの外観があった
- Aquaデザインでは10.0/10.1スタイルを選んだ
- 10.3や10.4のより抑制された版の方が好みだが、10.0/10.1の方がノスタルジーが強いと判断した
- OSと同じ画像アセットを使うため、スクリーンショットではなく元のリソースを抽出した
- Aquaアセットは半透明要素を多く使うため、通常のスクリーンショットでは不十分だった
- resource_dasmとpxm2tgaを使って
Extras.rsrcから元アセットを抽出した
Classic実行、verboseモード、小さな発見
- 複数イメージをマウントできるため、Mac OS 9パーティションを併置してClassic互換環境を起動できる
- この機能は10.1でのみ動作する
- PearPCはClassicをサポートしていなかった
- 結果として、WebAssembly仮想マシン内でエミュレートされたMac OS Xの中で、クラシックMacアプリをエミュレートできる
- Mac OS Xイメージにより、Calculatorの動作変化も確認できた
- 10.3までは
=を繰り返し押す動作がなかった - 10.4にはその動作があった
- 10.3までは
- Mac OS Xの起動が遅いため進行状況をより見せる目的で、verboseモードを露出させた
- PearPCには内蔵方式があった
- DingusPPCには起動時にOpen Firmware変数を指定する機能を追加した
- Infinite Macのカスタムインスタンスダイアログでは「Debug Mode」スイッチとして公開される
macosx.appドメインも確保しようとしたが、すでに登録されていた- そのドメインは特定のYouTube動画へリダイレクトされる
- 動画のYouTuberは自分が登録したものではないと答えた
次の候補とQEMUの可能性
- Mac OS X対応により、Infinite Macは現代のmacOSにかなり近い地点まで到達した
- その先にも2回のCPU移行と、いくつかの小さな変化が残っている
- Tigerは現在のmacOSユーザーにも基本的に認識できる姿をしている
- より深い、あるいはより特殊なレトロコンピューティング対象としては、A/UX、Lisa、Pippin、Newtonが残っている
- 以前はQEMUをWebAssemblyへ移植するのは大きすぎるプロジェクトだと考えており、qemu.jsの性能も実用性が低そうに見えた
- 最近、qemu-wasmとFOSDEM発表を通じて可能性を再確認した
- Linuxゲストのデモ性能は心強い
- 100MBデータのMD5チェックサムを計算する即席ベンチマークでは、qemu-wasmは8秒、DingusPPCは13秒、PearPCは18秒かかった
- グラフィカルなゲストであるMac OS Xとは、なお大きな隔たりがある
1件のコメント
Hacker Newsの意見
PearPCが数年よく持ちこたえたのは確かだが、元のメンテナーが列車事故で亡くなったあと、勢いの大半を失った
当時は熱心なユーザーでありコミュニティの一員でもあって、今思い出しても涙が出る
https://www.wired.com/2004/07/pearpc-coauthor/
Infinite Macは、クラシックMacintoshとNeXTのシステムリリースやソフトウェアを集め、Webブラウザから簡単にアクセスできるようにしたコレクション
https://infinitemac.org/
記事で最も興味深かった部分の一つは、700行未満のPPC CPUエミュレータへのリンクだった
https://github.com/kwhr0/macemu/blob/master/SheepShaver/src/...
6502エミュレータではこうした簡潔さを見かけるが、比較的現代的なアーキテクチャでは珍しい
今20歳の技術好きがOS X 10.4や10.5、10.6に触れたらどう感じるのか、想像がつかない
ほろ苦いことに、暗黒時代の人が古典彫刻を前にして「人類はかつてどうやってこんなものを作れたのだろう?」と思う場面が浮かぶ
ただし好みは変わる。実際の暗黒時代の人々は「この異教的な退廃は何だ?」と思ったかもしれないし、今なら「写真みたいなアイコンなんてダサい!」と見るかもしれない
アプリのインストールも相変わらず「IKEA式のdmgからアプリをドラッグして置く」方式で、たまにzipやpkgがある。Finderウィンドウにはすでに左サイドバーのブックマークがあり、Dockも同じように動作する。変な3D Dockの時期はあったが、Leopardだった気がする
Mac App Storeはないが、今でもほとんど誰も使っていないほうだし、SpotlightはTigerで新登場した。Windows XPと11の違いよりずっと見分けやすい。XPは11とは動作方式がかなり違う
当時はシステムフォルダを触ることが今ほど複雑ではなかった
初期中世にも美しい遺物や建築物はたくさんあった。多くは残っていないが、サットン・フーの船葬やアングロ・サクソンの教会のように、実際に見たものだけでも例はある
スクリーンショットが本当に驚き。個人的にはMac OS Xのほうが今日のMac OSよりずっと良く見える
明確で整然としていて、「よし、この環境なら仕事ができそうだ!」という感じがする
今のMac OSは「助けて、キャンディの袋に落ちたんだけど、どうやって出ればいいの?」みたいな感じ。他の人もこう感じるのか気になる
Windowsも同じ。OSそのもの上で作業することはほとんどなく、ネイティブアプリもまれで、大半はブラウザベースか、サードパーティのデザインシステムを使うクロスプラットフォームアプリだ
ソフトウェア企業がソフトウェアをうまく作っているふりをするのにも、もううんざりだ
10.4 Tigerも似ているが、上部メニューバーが光沢仕上げで、時間がたつといまいちに感じた。10.5 Leopardには派手で野暮ったい3D Dock、透明な上部メニューバー、より現代的なグラデーションがあった
当時は格好よかったが、グラデーションはブラッシュドメタルとAquaほど格好よくはない。その後は全部ちょっと退屈
10年以上最後のコミットがなかったpearpcプロジェクトで成功したというのが意外: https://github.com/sebastianbiallas/pearpc
彼のフォークは https://github.com/mihaip/pearpc にある
WebAssemblyターゲットを追加したが、x86-64対応も維持しているようだ
さらに、NextStepをInfinite Macに入れた過程についてもブログに書いている: https://blog.persistent.info/2024/03/infinite-mac-nextstep.h...
こういうものは本当に良い。当時の Aqua は啓示のような存在だった
祖母でも使える使いやすさを備えたメインストリームの Unix で、主要なサードパーティアプリまで対応していたのだから、完全なホームランだった
Liquid Glass でそうした要素が一部戻ってくることを願っているが、正直 Aqua は今見ても格好いい
Windows Vista や Linux テーマのような模倣が見落としていたのは、すべてがどれほど一貫していて使いやすかったかだった。見た目は格好よかったが、それ以上に重要なのは本当にうまく機能していたことだ
懐かしい UI が見えてうれしい。Macintosh OS 8 あたりの Platinum、OS X 10.3 と 10.4 あたりの、なめたくなるような MacOS X UI が恋しい
SunOS/Slowlaris の OpenLook、NeXTStep/OpenStep UI、オレンジと緑を決して混ぜるべきではなかった Winblows XP 以前の頂点だった Microsoft Windows 2000 も良かったし、SGI の IRIX と Motif 系の楽しさも思い出す
UI 要素はほとんど常に区別でき、理解でき、一貫していた。標準 UI コントロールを操作すれば、実行前から何が起こるか正確に分かり、実際にもその通りになった
カスタマイズ可能で、テーマを当てられ、置き換え可能で、より格好よくした結果が、今日私たちが手にしているものなのだろう
初期の OS X 時代は Mac の本当の 黄金期 だった。ハードウェアは x86 とかなり競争力があり、OS は史上最高レベルだった
結局どちらもきしみ始めたが、今はハードウェアの第二の黄金期なので、いつか近いうちに Mac OS が再び素晴らしくなるかもしれないと夢見ることはできる
ただし新しいハードウェア黄金期であっても、ここでのエミュレーション性能は M1 と Safari ではほとんど使い物にならないレベルに近い
カーネルパニックは毎日のようにあり、動画を見ていると QuickTime がセグメンテーションエラーで落ちることもあった
wmv や divx のようなファイル形式を再生するには、適切なコーデックを探してインストールするクエストをしなければならなかった
見た目を良くしようとして空気の流れのための通気口をきちんと入れなかったため、過熱もあった
エントリー向けの標準 M4 mini は驚異的だ。コンピュータ全体が、同程度の性能の x86 GPU 1個より少ない電力で動く
Dark Castle! 子どもの頃、父が Apple Lisa を持っていた。Apple 向けの会計ソフト製品群を開発していたので、Apple が親切にも提供してくれたマシンだった
当時はこの驚くべきマシンを当たり前のものと思っていて、ゲームと MacPaint にしか使っていなかった。父の 3.5 インチディスクのコレクションの中に「Dark Castle」と書かれたディスクがあったが、覚えていない理由で Lisa では動かなかった
ゲームだろうとは思っていたがプレイできず、とても残念で、その謎めいたディスクに魅了されていた
2025年になって Infinite Mac System 7 エミュレータを起動した: https://infinitemac.org/1991/System%207.0
心臓がどきりとした。「Games」フォルダの中にまさに Dark Castle があった
30年を経て、ついにこのゲームを遊べるようになった。グラフィックは魅力的で、Sierra の古典である King’s Quest や Prince of Persia の要素も感じられる
https://en.wikipedia.org/wiki/Dark_Castle
今夜の予定はこれで決まりだ