Rosetta(ロゼッタ)

Appleが2006年からMacに対して遂行した、PowerPCからIntelアーキテクチャーへの移行に際して、「Universal Binary(ユニバーサルバイナリー)」と共にデベロッパー各位に提唱された移行支援テクノロジーの一つ(Mac OS Xにおける基盤技術の一つ)。PowerPCバイナリーの互換性維持を主目的としたPowerPCバイナリートランスレーター(PowerPC実行環境)としてMac OS X for Intelに実装されており、既存のPowerPCアプリケーション(PowerPCネイティブコードのみをバンドルするバイナリーパッケージ)を Intelアーキテクチャーにおいて実行可能な形式に迅速、且つ透過的に変換するロールを担っている(これは、命令セットのエミュレーションとは異なるアプローチで展開されているため、機能的な制限を受ける事はない)。

PowerPCバイナリーをIntelアーキテクチャーにおいてシームレスに実行可能なバイナリートランスレーター

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

ユニファイドなバイナリーパッケージ(アプリケーションバンドル)に、両アーキテクチャーにおいて実行可能なネイティブコードがバンドルされており、Mac OS Xが当該アプリケーションを実行する際に、基盤プロセッサーに適合する命令セットが適宜に選択される事となる。

「Rosetta」は「PowerPC G4」互換環境として実装されているが、同プロセッサーが実装していたベクトル演算処理ユニット「Velocity Engine(AltiVec)」には対応していない。一方では、PowerPC環境のエミュレーションを行っている訳ではないため、「Rosetta」を介して実行する各種アプリケーションが機能的な制限を受ける事は少なく、米国時間2006年9月29日付にてリリースされた「Mac OS X 10.4.8」では、パフォーマンス全般の大幅な向上が示されている。

互換性面での注意事項

互換性面に関しては、以下のアーキテクチャー、環境等が未サポートとなっている。

  • 「PowerPC G5」のネイティブコードを包含するアプリケーション
  • Classic環境を含む「Classic Mac OS」対応アプリケーション全般
  • 「JNI(Java Native Interface)」APIを使用しているJavaアプリケーション
  • Javaバイトコードを内包するPowerPCバイナリー
  • 「System Preferences(システム環境設定)」における一部のプログラム等、非アプリケーションのバイナリー
  • PowerPCコードとx86コードが混在したプロセス
  • PowerPC用の「Kernel Extension(カーネルエクステンション)」を必要とするアプリケーション

その他にも「Final Cut Pro」「Motion」「Soundtrack Pro」「DVD Studio Pro」「Aperture」「Logic Pro」「Logic Express」「Final Cut Express」等、Appleプロアプリケーションにおける一部のPowerPCバイナリーは「Rosetta」のサポート対象外となっている。また、任意のアプリケーション上でPowerPC対応のプラグイン(エクステンション)を使用する場合には、アプリケーション自体を「Rosetta」上で実行させる必要がある(「Universal Binary」としてビルドされているアプリケーションも、「File(ファイル)」>「Get Info(情報を見る)」>「Open using Rosetta(Rosettaを使用して開く)」オプションを有効にして実行する事によって「Rosetta」上で起動する事が可能となっている)。

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」以降に移行した後に、然るべき調整と再コンパイルが必要となっていた。

Rosetta 2

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

その際に、「歴史は繰り返す」の格言を準えるが如くに、「Universal 2 Binary」と共にデベロッパー各位に提唱された移行支援テクノロジーの一つ(Intelバイナリーの互換性維持を主目的としたIntelバイナリートランスレーター(Intel実行環境))に、再びこの名称が採用された。PowerPCからIntelアーキテクチャーへの移行時と同様に、既存のIntelアプリケーション(Intelネイティブコードのみをバンドルするバイナリーパッケージ)を Apple Siliconアーキテクチャーにおいて実行可能な形式に迅速、且つ透過的に変換するロールを担っている(これは、命令セットのエミュレーションとは異なるアプローチで展開されているため、機能的な制限を受ける事はない)。

尚、macOSベースのデスクトップ仮想化ソフトウェア「Parallels Desktop for Mac」は、ArmベースのLinux(ゲストOS)において、「Rosetta 2」を介してx86_64バイナリーを実行可能としている。(最終更新日 2024年3月3日)。