# Rosetta (Apple)

Rosetta ist ein Framework von Apple zur transparenten Emulation von Programmen für eine andere, vorher von Apple in den Computern der Mac-Reihe genutzten Prozessorarchitektur. Programme bleiben somit unverändert auf Macs mit Prozessoren einer anderen Architektur unter macOS ausführbar. Der Name ist angelehnt an den Stein von Rosetta, der wesentlich zur Entzifferung der Hieroglyphen beitrug.
Die erste Version von Rosetta war zwischen 2006 und 2011 Bestandteil des Betriebssystems Mac OS X und ermöglichte, für die PowerPC-Architektur kompilierte Programme unverändert auf der x86-Architektur (32- und 64-Bit: IA-32 und x64) von „Intel-Macs“ auszuführen.
Mit Rosetta 2 ist es auf den Ende 2020 vorgestellten Macs mit M1-Arm-Prozessor unter macOS möglich, Programme auszuführen, die für die Intel-x64-Architektur kompiliert wurden.

## Geschichte

Das Betriebssystem macOS von Apple geht auf OPENSTEP (ursprünglich NeXTStep) zurück. Es hat im Kern eine portable Basis (Mach-Kernel) und lief auf einer Vielzahl unterschiedlicher Architekturen. Nachdem das Betriebssystem Ende 1996 von Apple gekauft wurde, lief es jedoch nur noch auf Apples eigenen Rechnern und somit auf der Architektur der Macintosh-Rechner – 1997 war dies die PowerPC-Architektur, auf die es portiert und optimiert wurde. Der Kern des Betriebssystems wurde als Darwin zusammengefasst und der Quelltext unter einer offenen Lizenz verfügbar gemacht.
Als Apple 2005 aufgrund der unzureichenden Leistung der PowerPC-Prozessoren G4 von Motorola und G5 von IBM schließlich die Entscheidung traf, auf die Intel-x86-Architektur zu wechseln, war das Betriebssystem bereits als x86-Version lauffähig. Seit 2007 läuft ein auf Darwin und macOS basierendes Betriebssystem, iOS, auf der mit dem iPhone eingeführten ARM-Architektur. Die Prozessoren wurden anfangs gemeinsam mit Samsung entwickelt, seit dem Apple A8 von 2014 sind die Prozessoren reine Apple-Produkte. 2020 gab Apple den Schwenk von Intel-Prozessoren zu den hauseigenen ARM-SoCs auch beim Mac bekannt, ein Schritt, der zuvor bereits seit Jahren als Gerücht die Runde machte. Die ARM-SoCs sind seit dem im iPad Pro der 4. Generation von 2020 verbauten A12Z in Leistung und Energieverbrauch den Intel-Prozessoren ebenbürtig. Für Apple war es daher kein großer Aufwand, macOS auf die ARM-Architektur zu portieren, auf der mit iOS eine Variante bereits seit über einem Jahrzehnt ihren Dienst tut.
Rosetta ist in beiden Fällen eine in das Betriebssystem integrierte transparente Emulation, um Anwendungen für die jeweilig vorherige Architektur weiterhin ausführen zu können. Die Programme laufen dabei in ihrer Ausführungsgeschwindigkeit zwar langsamer, sind damit aber in ihrer unveränderten Form weiter nutzbar, obwohl nicht für jede Anwendung volle Kompatibilität garantiert werden kann. Der Emulator ist dabei nur ein Teil der Strategie für den Übergang zu einer anderen Prozessorarchitektur, da die Entwickler von Anwendungen für den Mac angehalten sind, Universal Binaries anzubieten, die nativen Binärcode für jeweils beide Architekturen enthalten. Das Konzept von Universal Binaries stammt noch aus dem NeXTStep-Erbe, wo theoretisch für alle möglichen Architekturen Code in einem einzigen ausführbaren Programm enthalten sein kann.

## Rosetta

Wechsel der Prozessorarchitektur von PowerPC (Prozessoren von IBM und Motorola) auf die 32-Bit- und 64-Bit-x86-Architektur (i386 und x86-64), anfangs zur Unterscheidung auch „Intel-Macs“ bezeichnet (Macs mit x86-Prozessoren von Intel):

### Hintergründe

Im Jahr 2005 kündigte Apple an, von den seit 1994 eingesetzten, gemeinsam mit IBM und Motorola entwickelten PowerPC-Prozessoren auf x86-Prozessoren von Intel umzusteigen. Neben der völlig anderen Befehlssatzarchitektur besteht ein weiterer wesentlicher Unterschied der Prozessortypen in der Verarbeitung der Byte-Reihenfolge (der PowerPC ist Big-Endian, die x86-Architektur ist Little-Endian).
Damit bisher entwickelte Software auch auf den neuen Intel-Macs genutzt werden konnte, lizenzierte Apple Software der Firma Transitive Technologies, die schon davor etliche Konvertierungsprogramme für unterschiedliche Prozessoren anbot, und vermarktete die eigene Implementation der QuickTransit genannten Emulationssoftware unter dem Namen Rosetta. Transitive wurde 2008 von IBM übernommen und die Cross-Plattform-Virtualisierungstechnik ging in PowerVM auf.
Gleichzeitig entwickelte Apple die eigenen Entwicklerwerkzeuge weiter und ermöglichte die Entwicklung von Universal Binaries, bei denen der ausführbare Code für mehrere Prozessorarchitekturen in einer einzigen Programmdatei verpackt ist.
Während die Betriebssysteme Mac OS X Tiger (10.4) und Leopard (10.5) sowohl PowerPC- als auch Intel-Macs unterstützten, ist macOS ab Version Snow Leopard (10.6) nur noch für Intel-Macs erhältlich. Seit der Veröffentlichung von Mac OS X Lion (10.7) im Juli 2011 ist Rosetta kein Bestandteil des Betriebssystems mehr; für PowerPC-Prozessoren entwickelte Software kann daher auf aktuellen Macs nicht mehr ausgeführt werden. Universal Binaries sind jedoch grundsätzlich auch auf späteren Versionen von macOS ausführbar, da sie neben dem PowerPC-Binärcode auch jenen für die x86-Architektur enthalten. Allerdings sind viele Anwendungen dieser Zeit 32-Bit-Programme („i386“ für 32-Bit-x86 bzw. IA-32), somit sind auch die meisten Universal Binaries mit 32-Bit-PowerPC/x86-Code unter macOS Catalina, das nur noch 64-Bit unterstützt, nicht mehr ausführbar. Doch auch bis macOS Mojave, das noch 32-Bit-Programme unterstützt, sind aufgrund tiefgreifender Änderungen am Betriebssystem alte Anwendungen (inklusive Universal Binaries) nicht immer lauffähig, beispielsweise Microsoft Office 2008. In einigen Fällen gibt es jedoch neuere Versionen sowie Portierungen auf 64-Bit („x86-64“ für 64-Bit-x86 bzw. x64).

### Arbeitsweise

Rosetta ist ein sogenannter Dynamic Binary Translator, es läuft also im selben Prozess wie das auszuführende Programm und übersetzt einzelne Codeblöcke erst dann, wenn sie vom Programm aufgerufen werden. Teile des Programms, die nicht ausgeführt werden (zum Beispiel weil der Nutzer eine Funktion des Programms nicht nutzt), werden also auch nicht übersetzt.
Bei der Übersetzung wird der aufgerufene PowerPC-Codeblock zunächst in ein prozessorunabhängiges Zwischenformat übersetzt, woraus anschließend für die Zielarchitektur optimierter Code erzeugt wird. Dieser native Code wird dann auf der Hardware ausgeführt. Vergleichbare Software kommt teils auch ohne die Nutzung eines Zwischenformats aus, dieses wurde von Transitive vermutlich eingeführt, weil deren Software mehrere Quell- und Zielarchitekturen unterstützte.
Im Gegensatz zu einer Emulation, bei der einzelne Anweisungen übersetzt werden, ermöglicht die blockweise Übersetzung von aufeinanderfolgenden Anweisungen ein semantisches Verständnis des zu übersetzenden Codeblocks und somit eine Optimierung des aus dem Zwischenformat erzeugten, nativen Programmcodes. Apple betonte daher selbst, dass keine Emulation stattfindet.

### Einschränkungen

Rosetta versteht Programmcode, der für einen PowerPC G3 und G4 geschrieben wurde, und kann den gesamten AltiVec-Befehlssatz übersetzen. Software, die einen G5 voraussetzt, ist dagegen nicht ausführbar, was jedoch nur sehr wenige Programme betrifft. Außerdem verweigert sich Rosetta allen hardwarenahen Funktionen; Kernel-Module oder Treiber für Scanner, Tastaturen und Audiogeräte lassen sich damit beispielsweise nicht übersetzen. Ebenso weisen einige Programme eine schwache Leistung auf; manche Programme sind nicht zu verwenden.

## Rosetta 2

Rosetta 2 ist ein Teil von macOS ab Big Sur, um bei Apples Übergang von Intel-x86-64-Prozessoren auf Arm-Prozessoren (Apple Silicon) zu helfen. Zusätzlich zur Echtzeitübersetzung, wie schon mit Rosetta, unterstützt Rosetta 2 die Übersetzung des Programmes bei der Installation.