Rosettaとは
Rosettaは、
Appleが開発した、異なるCPUアーキテクチャ間で
バイナリの互換性を維持するための技術です。具体的には、あるアーキテクチャ用にコンパイルされたプログラムコード(
バイナリ)を、別のアーキテクチャ上で実行できるように動的に変換します。
Rosettaの歴史
Rosettaは、2004年にMacintoshが
PowerPCアーキテクチャからIntelアーキテクチャへと移行する際に導入されました。これにより、既存の
PowerPC用アプリケーションを、新しいIntelベースのMacでも動作させることが可能になりました。この技術は、仮想化ミドルウェア開発で実績のあった米Transitive社の技術を基にしています。
2006年にリリースされたIntel版
Mac OS X v10.4.4に初めて搭載され、
Mac OS X v10.6 "Snow Leopard"まで対応しました。しかし、
Mac OS X Lionでは廃止されました。
Rosettaの仕組みとパフォーマンス
Rosettaは、アプリケーションのコード全体を事前に変換するのではなく、実行時に必要なコードを動的に変換します。これは、
キャッシュメモリのような仕組みで、必要な部分だけを変換することで、効率的な動作を実現しています。ただし、コード変換のオーバーヘッドがあるため、ネイティブ実行と比較するとパフォーマンスは低下します。
PowerPCバイナリはx86コードに変換されますが、ユーザーはCPUの違いを意識することなくアプリケーションを実行できます。しかし、変換処理による速度低下は避けられず、同じクロック数のCPUでも、ネイティブ実行に比べてパフォーマンスが低下することが知られています。特に、
PowerPC時代のアプリケーションはビッグ
エンディアンで
エンディアンが統一されているため、Intelアーキテクチャのリトル
エンディアンに変換する際にバイトスワップとアライメント調整が必要となり、パフォーマンス低下の大きな要因となっています。しかし、バイトオーダーに依存しない処理がメインのアプリケーションでは、非常に優れたパフォーマンスを発揮する可能性もあります。
RosettaはClassic環境やスクリーンセーバ、システム環境設定などの非アプリケーションはサポートしていません。また、
PowerPCコードとx86コードが混在した
プロセスも処理できないため、
PowerPC対応プラグインを使用するには、アプリケーション全体をRosettaで起動する必要があります。この点は、68kコードと
PowerPCコードの混在を可能にしたMac OSのコード変換機構とは異なります。
Rosetta 2の登場
2020年、
AppleはMacのアーキテクチャをIntel x86-64から
Appleシリコンへと移行することを発表しました。この移行に伴い、Intel向けアプリケーションを
Appleシリコン搭載のMacで実行するために、Rosetta 2が導入されました。
Rosetta 2は、Intel向けアプリケーションをARMベースの
Appleシリコンで実行できるようにするソフトウェアです。macOS Big Surで利用可能となり、インストール時にARMプログラムに変換する機能が実装されています。
Appleシリコンの効率の高さから、Rosettaが不得意としていた計算量の多いプロユースソフトウェアも、Rosetta 2を通じてほぼ全て変換できるようになりました。Rosetta 2のインストールは任意で、
Appleシリコン搭載Macで初めてIntel向けアプリケーションを起動した際にインストールできます。
Rosettaのまとめ
Rosettaは、異なるアーキテクチャ間のソフトウェア互換性を保つための重要な技術です。旧アーキテクチャのアプリケーションを新しい環境で利用できるようにすることで、移行期間におけるユーザーエクスペリエンスを向上させる役割を果たしています。RosettaとRosetta 2の登場により、
Appleのアーキテクチャ移行はスムーズに進められました。
関連項目
FX!32 - DEC Alpha向けの類似技術
QuickTransit