MACNOTES

Veröffentlicht am  20.08.07, 22:28 Uhr von  ml

Techtalk: Universal und Fat Binaries

Techtalk

Heute starten wir unsere neue Kolumne Techtalk mit dem Thema Universal- und Fat-Binaries. Seit Apples Umstieg auf Intel-Prozessoren kommen einem diese Begriffe immer wieder unter. Doch was versteckt sich eigentlich dahinter? 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. Doch was steckt technisch dahinter?

Binärformate
Ausführbare Programme werden in einem bestimmten Binärformat gespeichert. Dieses enthält einen sog. Header der z. B. Informationen welche Bibliotheken geladen werden müssen und an welcher Stelle die Ausführung des Programms beginnen soll enthält. 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, welches 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 waren sowohl der Code für die 68k- als auch für 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 0×00000000

Sony

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. Auch 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.

Balast 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.

Ihr habt technische Fragen rund um den Mac oder zu allgemeinen Computer-Themen? Dann stellt sie uns in einer E-Mail.

 Und wie ist deine Meinung?  Schreib uns einfach!

 4 Kommentar(e) bisher

  •  thomas sagte am 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 =)

    Antworten 
  •  Christian sagte am 21. August 2007:

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

    Antworten 
  •  Martin Laux sagte am 21. August 2007:

    Sehr schöner Artikel!
    Besten Dank!

    Antworten 
  •  René sagte am 21. August 2007:

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

    Antworten 

Kommentar verfassen

Werbung
© 2006-2013 MACNOTES.DE. Made with insanely great for all things Mac. Apple.de