Tipps & Tutorials: 20. August 2007,

Unterschied zwischen Universal und Fat Binaries

Macnotes
Macnotes - Logo

Seit Apples Umstieg auf Intel-Prozessoren kommen einem die Begriffe Universal und Fat Binaries immer wieder unter. Doch was versteckt sich dahinter? Wir wollen es erklären.

Mit Universal Binaries bezeichnet Apple Programme, die sowohl Programmcode für PowerPC- als auch Intel-Macs enthalten. Daher müssen solche Anwendungen nicht auf den Intel-Macs von Rosetta emuliert werden, sondern können direkt ausgeführt werden.

Binärformate

Ausführbare Programme werden in einem bestimmten Binärformat gespeichert. Dieses enthält einen Header, der z. B. Informationen enthält, welche Bibliotheken geladen werden müssen und an welcher Stelle die Ausführung des Programms beginnen soll. Diese Informationen sind nötig, damit der Programmstarter die richtige Ausführungsumgebung für ein Programm herstellen kann. Das „Executable and Linking“-Format (kurz ELF) ist quasi Standard bei Unix-basierten Betriebssystemen.

Mach-O-Binärformat

Apple verwendet bei Mac OS X allerdings ein anderes Format, das Mach-O heißt. Dieses Format wurde bereits bei NextStep verwendet. Das Mach-O-Format kann im Gegensatz zum ELF-Format Binärcode für mehrere Architekturen enthalten. Damit ist es möglich die Programmvarianten für unterschiedliche Architekturen in eine ausführbare Datei zu packen. Der Programmstarter lädt dann anhand der Header-Informationen den richtigen Binärcode und startet das Programm.

Dieses Konzept ist nicht neu und bei Apple gibt es gewissermaßen ein Tradition damit. Bereits beim Umstieg von Motorola 68k-Prozessoren auf PowerPC kamen die damals „Fat Binaries“ genannten Binärdateien zum Einsatz. Darin war sowohl der Code für die 68k- als auch die PowerPC-Prozessoren enthalten. Mit dem Umstieg auf Intel-Prozessoren wurde dieses Konzept neu belebt und Universal Binary getauft. Gemeint ist damit, dass in dieser Mach-O-Datei der Programmcode für PowerPC- und Intel-Prozessoren enthalten ist. Inzwischen ist noch der Binärcode für die 64-Bit-Varianten beider Architekturen hinzugekommen. Insgesamt kann es also bis zu vier Varianten in einer Binärdatei geben.

Technik

Mit dem Kommandozeilenprogramm objdump kann man die einzelnen Architekturen innerhalb einer Binärdatei sichtbar machen. Das Programm ist Bestandteil der „GNU binutils“. Analysiert man z. B. das beliebte FTP-Programm Transmit, erhält man im Terminal folgende Ausgabe:

ml $ objdump -f Transmit.app/Contents/MacOS/Transmit 
In archive Transmit.app/Contents/MacOS/Transmit:

Transmit.app/Contents/MacOS/Transmit:     file format mach-o-be
architecture: powerpc:common, flags 0x000001ff:
HAS_RELOC, EXEC_P, HAS_LINENO, HAS_DEBUG, HAS_SYMS, HAS_LOCALS, DYNAMIC, WP_TEXT, D_PAGED
start address 0x00002bd0

Transmit.app/Contents/MacOS/Transmit:     file format mach-o-le
architecture: i386, flags 0x000001ff:
HAS_RELOC, EXEC_P, HAS_LINENO, HAS_DEBUG, HAS_SYMS, HAS_LOCALS, DYNAMIC, WP_TEXT, D_PAGED
start address 0x00000000

Man kann erkennen, dass Transmit Binärcode für die PowerPC- und die i386-Architektur (Intel) enthält. Das Format mach-o-be gibt an, dass es sich hier um Daten im Big-Endian-Format handelt – mach-o-le steht analog für Little-Endian-Daten; die Startadressen für beide Architekturen sind unterschiedlich.

Vor- und Nachteile

Der Vorteil Binärcode unterschiedlicher Architekturen in einer ausführbaren Datei zu kombinieren ist, dass nicht zahllose Varianten der gleichen Applikation angeboten werden müssen. Man lädt einfach das Programm herunter und kann sicher sein, dass es den richtigen Code für die eigene Architektur enthält. Für Softwareanbieter erleichtert sich damit der Vertrieb. Die Auswahl des richtigen Binärcodes übernimmt der Programmstarter des Betriebssystems. Eine andere Möglichkeit wäre alle nötigen Varianten in einem Installationspaket zu verpacken und den Installer die richtige Variante auswählen zu lassen. Das ist allerdings nicht so bequem für den Anwender.

Der Nachteil ist, dass die Größe von Programmen anwächst, da sie Binärcode für unterschiedliche Architekturen enthalten. Allerdings ist dieser Nachteil angesichts heutiger Festplattengrößen verschmerzbar. Die Ausführungsgeschwindigkeit solcher Anwendungen leidet nicht darunter, da der Programmstarter nur den für die Architektur benötigten Code lädt.

Ballast abwerfen

Wer dennoch den unnötigen Ballast der zweiten Architektur von seinem Mac zu verbannen möchte, kann zu Programmen wie z. B. Xslimmer greifen. Damit kann man den nicht benötigten Binärcode entfernen. Allerdings kann man dann die so auf Diät gesetzte Anwendung nicht mehr beliebig auf einen anderen Mac übertragen.

Unterschied zwischen Universal und Fat Binaries
3,5 (70%) 4 Bewertungen

Ähnliche Beiträge

Tipp: Apps Beenden beim Apple TV 4G Vielen Nutzern des neuen Apple TV der vierten Generation wird es gar nicht aufgefallen sein, doch gerade weil es nun einen App Store gibt, kann es nöt...
Apple TV: Screenshots anfertigen und Videos aufzei... Wir erläutern im Folgenden, wie man von den Inhalten, die man mit dem neuen Apple TV wiedergibt, Screenshots anfertigen kann oder Videos aufzeichnen. ...
Tipp: Rausfinden, ob der eigene Mac Metal-kompatib... Apple hat Ende September OS X El Capitan veröffentlicht. Version 10.11 des Desktop-Betriebssystems ist die erste, die Apples Metal-Schnittstelle nutzt...
Keine News mehr verpassen! Unsere App für iOS und Android mit praktischer Push-Funktion.






Zuletzt kommentiert



 4 Kommentar(e) bisher

  •  thomas (21. August 2007)

    Wieder etwas dazu gelernt. Spätestens wenn die Fat-Binarys dann die möglichen 4 Plattformen unterstützen werden daraus Fett-Binarys. Techn. ist es ziemlich interessant die Binarys für unterschiedliche Plattformen in eines zu packen. Und jetzt das ganze noch Betriebssystemübergreifend. (Naja, wenn wir mal groß und stark sind vielleicht =)

  •  Christian (21. August 2007)

    Super Artikel, so was findet man anderswo nicht. Mehr davon bitte!

  •  Martin Laux (21. August 2007)

    Sehr schöner Artikel!
    Besten Dank!

  •  René (21. August 2007)

    Kannte das Konzept zwar schon, aber objdump noch nicht. Außerdem ein sehr schön geschriebener Technikartikel -> bitte mehr davon ^^


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>