第12回 Universal Binary【前編】Undocumented Mac OS X(2/5 ページ)

» 2007年11月30日 00時20分 公開
[白山貴之,ITmedia]

MAB(Multi Architecture Binary)とそのいきさつ

 このUniversal Binaryの仕組みはMac OS X 10.0、いやそれ以前の開発時点から搭載されていたMABそのものだ(コラム2)。MABでは、複数のCPU向けのコードを格納した実行ファイルのことをFATバイナリと呼んでいた。

 そもそも、MABはMac OS Xの祖先であるNeXTのOSであるNeXTSTEP 3.1にて実装されたものだ。当時NeXTはCPUにモトローラ製68040を使用する独自のハードウェア*から汎用のPC/AT互換機*にOSの動作環境の移行を画策しており、その移行をスムーズに行うために実装されたのだ*

 当時のNeXTのアーキテクチャに関してもう少し説明すると、NeXTは本来、1台1台個別に運用するのではなく、数十台から数百台規模のネットワーク上での統合運用を前提として作られていた。例えば第2回で解説したNetInfoというアカウント情報や/etc以下に配置されるような設定情報を集中管理する枠組みがあり、インストール直後のNeXTをただネットワークにつなぐだけで自動的にNetInfoの管轄下に結合されたのである。NetInfoはNFSのauto mountのテーブルも提供していたため、1度管轄下に入ればNFSの共有ボリュームも自動的にマウントされ、共有ボリューム上のホームディレクトリやアプリケーションも自在に活用できた。こうした仕組みによって、管理者にとっては管理コストのかからない環境を、利用者にとってはネットワークに接続されるどのマシンを使ってもまったく同じように使える非常に美しい環境を実現していたのだ。

 NeXTハードウェアの68040とPC/AT互換機のx86ではCPUが異なり、互いのコードを実行できない。そのままだと、NeXTハードウェアには68040のアプリケーションを収めた共有ボリュームを、PC/AT互換機にはx86用アプリケーションを納めた共有ボリュームをそれぞれ個別に用意し、クライアントマシンのアーキテクチャごと個別にマウントしなければならない。それではせっかく下げた管理コストがほかのUNIXマシンレベルまで戻ってしまうし、利用者にはマシンごとに使えるアプリケーションが異なる不便な環境になってしまい、まったくもって美しくない。

 だからこそ、単一の実行ファイル中に異なる複数のアーキテクチャのコードを共存させたのだ。そうすることで、単一の共有ボリュームに配置された単一のアプリケーションをNeXTハードウェアとPC/AT互換機のどちらからも実行でき、美しい状態が保たれる。後に、PA-RISCをCPUとするHPのワークステーションやSPARCをCPUとするSunのワークステーションで動作するNeXTSTEPがリリースされたが、それは単に実行ファイルがサポートするアーキテクチャの種類を増やすだけのことであり、NeXTハードウェアやPC/AT互換機とまったく同じように扱えた*

「Intel Mac」に続くMAB

 その後、このMABの機能はMac向けNeXTSTEPとも言えるMac OS X Server 1.0に引き継がれた。開発時Rhapsodyというコードネームで呼ばれたそれは、NeXTSTEPの遺志を引き継ぎPC版であるRhapsody for Intelのリリースもアナウンスされていた。もちろんNeXTが実現した美しい状態を引き継ぐ予定だったのだろう。しかし、プロジェクトとしてのRhapsodyの頓挫とともにRhapsody for Intelの話は立ち消えとなってしまった。

 Mac OS Xのパブリックβが出荷されていたころ、オープンソースソフトウェアとしてのDarwinもひっそりとリリースされた。このDarwinは、PowerPC版とともにIntel版のバイナリやインストールCDも用意されており、MABの機能も継続してサポートされた。

 2005年のWWDCにおけるスティーブ・ジョブズの発言を信用するなら、Darwinとして公開されていたカーネルおよびUNIXツール部分以外の、GUIや各種アプリケーションといったMac OS Xの構成要素もずっとx86環境下でビルドされ、動作するようにメンテナンスされていた。Intel CPUへの移行は2005年6月の思いつきではなく、いつでも取り得るオプション*として確保され続けており、それを可能にする基盤技術としてMABはずっとサポートされ続けていたのだ。

コラム2 Universal Binary? Multi Architecture Binary?

 Appleという会社は、高度な技術を持つ企業であると同時にそうした技術とは遠い、一般ユーザーを主な顧客とする企業でもある。連載初回の冒頭でも述べたとおり、主だった顧客への説明のため技術の枝葉をばっさり落とした誤解を恐れない説明をしたり、技術的な呼称をキャッチーなフレーズに呼び換えるなどといったことを頻繁に行っている。例えば、PowerPC 970というチップを「G5」と呼んだり、ZeroConfという技術を「Bonjour(旧Rendezvous)」と呼んだりなどだ。

 技術的には分かりやすい名称「Multi Architecture Binary」も、x86への移行という表舞台に立つことになったためにそうした呼び換えが行われた。それが「Universal Binary」である。ldのマニュアルなどもMulti Architectureと書かれていた部分がUniversalに書き改められている。

 しかし、ドキュメントはともかくソース中の関数名や構造体の呼称などはさすがに従来の「fat」などの略語がまだ残っている。ソースを読むときにはそうしたことも心にとどめるておくと良いだろう。


このページで出てきた専門用語

独自のハードウェア

黒く塗装されていたことからBlack Hardwareとか黒NeXTと呼ばれていた。この黒NeXTを400台も大量導入、全学生に使用させていた大阪大学では、黒NeXTがなまって「黒猫」と呼ばれていた。

汎用のPC/AT互換機

当時PC/AT互換機といえば白く四角い不格好な箱に収められていることが多かったため、Black Hardwareに対してWhite Hardwareとか白NeXTとか呼ばれていた。ただ、白猫と呼ばれていたかどうかは、わたしは寡聞にして知らない。

その移行をスムーズに行うために実装されたのだ

そういう意味では、Intel CPUへの移行は10年前にすでに行われたことをもう1度実行しているだけで、未知の道程ではない。日本国内の一部のセンセーショナルな報道とは異なり、WWDCにおいて落ち着いた雰囲気で歓迎された理由は、海外の古参開発者はそうした事情をよく知っているからである。もちろん、Apple自身もそのことはよく分かっており、当時の失敗(例えば、当時は発表と同時に黒NeXTの出荷を終了してしまったため、PC/AT互換機向けのNeXTSTEPが出荷されるまで開発も販売も麻痺してしまった)を踏まえて堅実な路線(開発者への評価環境のリリースなど)を取っている。

同じように扱えた

ただ、まだNeXTに勢いのあったPC/AT互換機向けNeXTSTEP 3.1のリリース時はともかく、PA-RISCに対応したNeXTSTEP 3.2、SPARC対応のNeXTSTEP 3.3と時代を経るにつれ勢いは衰え、サポートするソフトハウスも減ってしまった。そのため、4つのアーキテクチャすべてをサポートしたアプリケーションを出荷するソフトハウスはごく少数で、実際にはアーキテクチャごとに使えるアプリケーションが変わってしまい、同じようにとはいえなくなってしまった。

取り得るオプション

最も、MABだけでは後方互換性という意味では機能不足で、Transitive Corporationの開発したQuick Transitというトランスレーション技術を入手し、PowerPCのコードをPC上で動作させることができたのも重要な要因である。移行への要因という意味では、ノートマシンに搭載可能なG5や3GHz以上で動作するG5の出荷の見込みが立たず、PowerPCの将来性に不安も大きかったといえるだろう。


関連キーワード

Mac | Mac OS X | x86 | Apple | WWDC


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ