Universal Binary(ユニバーサルバイナリー)

米Apple Inc.が2006年からMacに対して遂行したPowerPCからIntelアーキテクチャーへの移行に際して、デベロッパー各位に提唱された移行支援テクノロジーの一つ(Mac OS Xアプリケーションにおける実行形式(バイナリー形式)の一つ)。ユニファイドなバイナリーパッケージ(アプリケーションバンドル)に、両アーキテクチャーにおいて実行可能なネイティブコードがバンドルされており、Mac OS Xが当該アプリケーションを実行する際に、基盤プロセッサーに適合する命令セットが適宜に選択される事となる。

「PowerPC Mac(Mac OS X for PowerPC)」「Intel Mac(Mac OS X for Intel)」の双方に対応すべくして、2種のネイティブコードをバンドル

Intelアーキテクチャーへの移行初期(2006年〜2007年)には、「Universal Binary」をビルドする事が可能なIDE(Integrated Development Environment、統合開発環境)は「Xcode 2.1」以降に限定されており、「Metrowerks CodeWarrior」等のサードパーティー環境にて構築されたアプリケーションは、既存のソースコードを「Xcode 2.1」以降、「GCC 4.0(GNU Compiler Collection 4.0)」以降に移行する必要があった(GCCは、「Xcode」においてアプリケーションをコンパイル、リンクするために用いるオープンソースのGNUコンパイラーコレクション)。

コンパイル時に「Architectures to build for:」とラベルされたチェックボックスにて「PowerPC」「Intel」の何れかを排他的に選択するか、或いは双方を選択(Universal Binary)するかによって、ターゲットとなるアーキテクチャーを指定する事となる。尚、「Universal Binary」をビルドするためには、アプリケーションの全ての構成要素が「Universal Binary」化されていなければならない。

PowerPCバイナリートランスレーター「Rosetta」と併せて、PowerPCからIntelへの移行を促進

Mac OS X for Intelには「Rosetta(ロゼッタ)」と称される PowerPCバイナリーの互換性維持を主目的としたバイナリートランスレーター(PowerPC実行環境)も実装されており、既存のPowerPCアプリケーション(PowerPCネイティブコードのみをバンドルするバイナリーパッケージ)を Intelアーキテクチャーにおいて実行可能な形式に迅速、且つ透過的に変換するロールを担っている。

「Rosetta」が実装されたシステムでは、「CFM(Code Fragment Manager)」「Mach-O」ABI(Application Binary Interface)によって齎される、PowerPCバイナリーをIntelアーキテクチャーに向けたx86コードに適宜変換すべくした「Dynamic Recompilation」と称される変換プロセスが、アプリケーション起動時よりバックグラウンドにおいて自動的に実行されるため、ユーザーはアーキテクチャーの相違(或いは変換プロセス)等を意識する事なく、既存のソフトウェアリソースをシームレスに利用する事が可能となっている。

これは、命令セットのエミュレーションとは異なるアプローチで展開されているため、機能的な制限を受ける事はない。

PowerPC、Intel、両アーキテクチャー間における命令レベルの互換性

尚、PowerPC、Intel、両アーキテクチャー間には、命令アラインメントに関する各種のルール、エンディアン(Big Endian(ビッグエンディアン)、Little Endian(リトルエンディアン))の相違、整数型におけるゼロ除算、C言語における「ABI(Application Binary Interface、アプリケーションバイナリーインターフェイス)」のハンドリング等の 命令レベルにおける互換性はない(一方で、「Rosetta」によるバイナリートランスレーション(バイナリー変換)には、エンディアンを統一するためのプロセスが含まれている)。

尚、Cocoaフレームワークはエンディアンの相違を透過的に吸収するが、許容限度が低いグラフィックスAPI、及び「External C(外部C)」「C++」APIを使用する場合には注意が必要となる。また、カスタムリソースを使用するCarbonフレームワークは、エンディアン処理を適切に行うべくして再編成する必要が生じるケースもある。一例として、「Metrowerks CodeWarrior」にて作成されたCarbonアプリケーションは、「Xcode 2.1」以降に移行した後に、然るべき調整と再コンパイルが必要となっていた。

Universal 2 Binary

米国時間2020年6月22日より開幕した世界開発者会議「WWDC 2020(Worldwide Developers Conference 2020)」において、Appleは通算で3度目となるアーキテクチャー(CPU)の変更を発表し、同年10月より、IntelからApple Siliconへの移行が開始された。

その際に、「歴史は繰り返す」の格言を準えるが如くに、「Rosetta 2」と共にデベロッパー各位に提唱された移行支援テクノロジーの一つ(macOSアプリケーションにおける実行形式(バイナリー形式)の一つ)に、再びこの名称が採用された。PowerPCからIntelアーキテクチャーへの移行時と同様に、ユニファイドなバイナリーパッケージ(アプリケーションバンドル)に、Intel、Apple Silicon両アーキテクチャーにおいてネイティブ実行可能なネイティブコードがバンドルされており、macOSが当該アプリケーションを実行する際に、基盤プロセッサーに適合する命令セットを適宜に選択して実行する事が可能となっている(最終更新日 2022年12月12日)。