Infinite Mac で BeOS が動くようになった
BeOS が Infinite Mac のブラウザ上で動くようになり、その実現にはエミュレータが無意識に Mac OS の癖へ依存していた箇所の修正が必要だった。
日本語
コピー

tl;dr: Infinite Macのブラウザ上で、さまざまなバージョンの BeOS が動く。Infinite Mac は、1984 年から 2005 年までの Macintosh Cinematic Universe を体験できる私のサイトだ。今回追加した環境は Mac 版のカウンターパートと完全に対等で、すぐに起動でき(大容量ディスクはストリーミングで読み込む)、Infinite HD にプリインストールされたソフトを触ったり、Internet Archive から CD-ROM を挿入したり、「Saved HD」ドライブに作業内容を保存したりできる。
BeOSはマルチメディアに重点を置いたマルチタスク・マルチスレッドの OS で、やがて 90 年代半ばの Power Macintosh に移植された。Mac コミュニティの多くを感心させ、BeOS を生み出した企業 Be の買収まで検討した Apple 自身もその一人だ。次世代 OS を求めて Apple が迷走した顛末を追ってきた人なら、選ばれなかった道がどんなものだったのか、この環境で確かめられる。

BeOS を動かすまで
Infinite Mac でのそれなりに手のかかる(とはいえ達成感のある)前回のプロジェクトを終えて、私はもっと手早く成果の出る仕事を探していた。BeOS はずっと前から気になっていたし、(A/UX とは違って)個人的な縁もあった。秋葉原で BeBox を見かけたこと、BeView で自分の Mac を BeBox に擬態させたこと、そして最終的には Power Macintosh 8500 で BeOS をデュアルブートしたこと。すでに組み込んでいたエミュレータ DingusPPC が BeOS の実行で良い進捗を上げていたので、サイトに追加するのはディスクイメージをいくつか用意するだけの話に見えた。
最初は思ったとおりに単純だった。公式にサポートされていた Power Mac のひとつである Power Macintosh 7300 の構成を追加し、インストール CDを見つけ、ディスクイメージを作れば、あっさり動き出した。ところが使い込んで他のバージョンも入れ始めると、小さなバグやエッジケースが次々と見つかった。
- ADB エミュレーションのバグのせいで、BeOS のブートローダーはすべての修飾キーが押されたままになっていると判断していた。その結果、毎回あの(醜い PC BIOS 風の)パーティション選択画面が出ていた。
- 画面の色深度を変えるとき、通知が必要なハードウェアはビデオコントローラとデジタル-アナログコンバータの 2 つある。DingusPPC は Mac OS がこの通知を送る順序にたまたま依存していた。BeOS はたまたま逆の順序を選んでいたため、表示が壊れることになった。
- BeOS の初期バージョンはビデオメモリの更新をリトルエンディアンモードで行っていた1。DingusPPC はそのハードウェア機能をサポートしていなかった。
- 後のバージョンの BeOS は HFS パーティションをマウントできたが、machfs Python ライブラリで生成したボリュームで問題が起きていた。BeOS は一部のデータ構造の埋め方について、Mac OS より(正しく)厳格だったのだ。
- ほかにもいろいろあって、この 1 か月に DingusPPC へアップストリームしたコミットの大半は、BeOS との互換性を高めるためのものだった。

SheepShaverは今なお現役の Power Macintosh エミュレータで、Infinite Mac もこれを組み込んでいる。そのルーツは BeOS にある。エミュレーションがもう一段重なるというインセプションぶりが面白く、これも動くところを見たかった。結果として、こちらにも互換性の修正が必要だった。ROM が物理メモリアドレスにどうマッピングされるかというエッジケースに依存しており、DingusPPC はそこを正確にモデル化していなかったのだ。
これらのバグ修正の多くには共通するパターンがある。DingusPPC(と Infinite Mac)は主に Mac OS の実行に注力してきたため、知らず知らずのうちに Mac OS の癖や実装上の選択に依存するようになっていた。そこに独立して開発された OS を加えると新しい経路が試され、その結果としてエミュレートされるハードウェアの精度が上がった。誤解のないように言えば、DingusPPC は最初からかなり出来が良かった。メンテナ陣には敬意を表したい。今回の作業を経て、PowerPC 版 BeOS を動かせるエミュレータはこれだけ2だと思う。また、MkLinux(これにも思い出がある)やRhapsodyのような別の OS の起動にも役立てばと期待している。

Infinite Mac 側では、カスタムコントロールに「BeOS」風の外観を用意したり、ライブラリ用のソフトウェアを集めたりといった目に見える変更があった。ほかにも、ブラウザウィンドウのサイズに合った画面解像度を OS に事前選択させるため、動的に生成したコンテンツをディスク上に重ねる必要があった(A/UX でやったのと同様だ)。こうした面倒なリバースエンジニアリングには、今回も AI エージェント(私の場合は引き続き Codex)が役に立った。OS が画面サイズを記したファイルをディスクに保存している、と観察するのと、そのニュアンスをすべて再現できるのとでは話が違う。ましてや、後のリリースでフォーマットが変わっているのだからなおさらだ。
Power Mac 向け BeOS の最初のバージョンであるDeveloper Release 8.2には、1997 年 4 月 1 日を過ぎると起動できなくなるタイムボムが仕込まれていた。単に焦らせるためではなく、Be が無期限に配布できないライセンスフォントレンダラーを同梱していたためだ。DR8.3 でこれに対処したものの、記念すべきこの初版を起動可能にするには、結局カスタム日付のサポートを使って、そのディスクを選んだときに有効な日付をハードコードすることになった。
BeOS の感想
BeOS が現役だった頃に一度触ってはみたが、「速い。サードパーティ製ソフトが全部恋しい」以上の感想を持つほど使った記憶はない。About This Particular Macintoshには当時の記事があり、Macworld Expo Boston での Be の1 回目と2 回目の出展や、R3とR4.5のレビューが読める。なかなか興味深い。Be 自身が公開したこの動画でも、当時強みと考えていた機能を一通り見られる。
2026 年の目で見ても、その速さには驚かされる。起動も操作も速く、はるかに少ないことしかやっていない同時代の Mac OS と比べると特にそうだ(ウィンドウのライブドラッグは Mac OS X まで登場しなかった)。POSIX サブシステムと Unix 風のシェルも(A/UX とは違って)現代的に感じる。ターミナルであちこち覗いても何の問題もなかった。革新的な部分も多いが、その一部(属性とライブクエリを備えたBFS)は、残り(レプリカントはウィジェットの先駆けだが、使い道が思いつかなかった)より面白い。
また、開発者向けで作りかけのシステムだという印象も受ける。同梱アプリの多くは技術デモだ(とはいえ Utah teapot を嫌いな人などいないだろう)。一方、当時のBe のホームページは開発者向けリリースノートに直接リンクし、CodeWarrior のリリースやバグトラッカーへのアクセスについて説明している。未完成なのはサードパーティ製ソフトも同じで、ある Amiga 雑誌の CDに BeOS 用ソフトがいくつか入っているのを見つけたが、その大半は文字どおりあるいは比喩的に「version 0.1」という趣だった。公平に見れば、もっと作り込まれたソフトもあった。たとえば元 ClarisWorks のチームによるGobe Productiveだ。これを含む各種ソフトは Infinite HD に入っているので試せる(より新しい OS バージョンで動かすのが望ましい)。
インターフェースは当時目新しかったようだが、それがどこまで通用したかは気になるところだ3。特徴的なタブ付きのウィンドウタイトルは見た目はいいが、ドラッグできる領域が狭くなるので、ウィンドウを動かすたびに余計に考え込むことになる。既定のカーソルが手の形なのも、従来の矢印に比べてクリックの精度が落ちる(「指」のどのピクセルがホットスポットなのか)。UI のその他の部分は、完全に一貫しているとは言いがたい Windows と Mac のハイブリッドに見える。Deskbar はスタートメニューのように使え4、メニュー項目には Alt キーによるアクセラレータがある一方で、スプリングロード式フォルダや空間的な Finder である Tracker も備わっている。
Tracker といえば、Be がこれをオープンソース化していたこと(さらにオープンソース版からの変更を取り込んでいたこと)は知らなかった。これはちょうど Be がインターネット家電へと軸足を移した頃の話だ。画面いっぱいのブラウザアプリだけを載せるなら、ファイルマネージャにエンジニアリングのリソースを割く必要はない。このインタビューで Tracker の開発者が経緯を詳しく語っている。

自分でbake-offをやってみよう:NeXT vs. Be
これと比べると、NeXTStepはずっと成熟して見える。似たような混乱(独自ハードウェアから既製 PC への移行、企業戦略の転換)は NeXT にもあったが、おそらく時間的余裕があったおかげで、もう少しうまく処理していた。たとえば NeXT は 68K、Intel、PA-RISC など複数のアーキテクチャで動く「ファット」バイナリをサポートしていた。BeOS では別々の実行ファイルにする必要があり、ユーザーがどちらを動かすか選ばなければならず、配布も面倒だった(Infinite HD に収録するソフトを探すのが大変だったのはこのせいだ)。さらに悪いことに、CD-ROM 上に並行したディスクパーティションを用意しなければならなかった。BFS はホストのエンディアンを使うため、PowerPC で書き込んだディスクは Intel では読めず、その逆も同じだった。とはいえ、私が NeXT びいきなのは、Apple が最終的にどちらの OS を選んだかを知っているからかもしれない。
その他のサイト改善
前回の更新からまだ間もないが、使い勝手の改善をいくつか詰め込んだ。エミュレートしたマシンの画面をスクリーンショットとして撮ったり、動画(音声付き)として録画したりできるようになった。画面に表示されていた内容をそのままダンプするので、画像コンテンツを忠実にキャプチャできる。

OS の CD-ROM コレクションも、Rhapsody や Mac OS X の Developer Preview などを加えて充実させた。今のところは願望的なものではある(DingusPPC ではまだ動かせない)が、コンプリート欲は満たしてくれる。これらの CD は自分の Cloudflare R2 バケットにミラーして配信している。Internet Archive は素晴らしいリソースだし(寄付もできる)、そこからのストリーミングは最近ますます不安定になっている。自分が負荷を増やしたくはないし、スポンサーのおかげで数ギガバイトを配信する余裕もある。
次は何かというと、このもう一つの Mac のタイムラインはこれでカバーできたので、そろそろ前日譚を掘ってみる頃合いかもしれない。