Een universal binary, of in het Nederlands: een universeel binair bestand, is een door computerfabrikant Apple geïntroduceerd begrip voor een uitvoerbaar bestand dat zowel op een PowerPC- als op een op Intel x86-gebaseerde Apple Macintosh-computer draait. Een universal binary bevat hiertoe twee verschillende varianten van de uitvoerbare code voor een toepassing: enerzijds de uitvoerbare code voor een PowerPC-processor en anderzijds de code voor een Intel-processor. Voor de Mac-gebruiker bestaat er echter geen verschil in gebruik; het programma wordt op de gewoonlijke wijze geïnstalleerd en gebruikt.

Logo

Het Mac OS X besturingssysteem kan een Universal Binary bij het uitvoeren herkennen aan de header. Het zorgt vervolgens dat alleen de juiste uitvoerbare code wordt verwerkt. Het grote voordeel van Universal Binaries is dat toepassingen voor beide typen Macs volledig geschikt zijn. Indien een (oudere) toepassing alleen in PowerPC formaat beschikbaar is, kan deze toch op een Intel-processor draaien dankzij een vertaalsysteem genaamd Rosetta. Ook hier merkt de gebruiker geen verschil in gebruik op, maar treedt echter wel snelheidsverlies op. De keerzijde van een Universal Binary is dat het altijd de programma-code in tweevoud bevat. Dat betekent dat er enige opslagruimte verspild wordt, aangezien de Mac altijd maar een van de twee binaire bestanden gebruikt. Om deze reden kiezen een aantal programmeurs / ontwikkelaars ervoor om een programma apart ter beschikking te stellen in respectievelijk Intel en PowerPC formaat. Een voorbeeld hiervan is VLC media player.

De Universal Binary werd op de Worldwide Developers Conference (WWDC) 2005 aangekondigd, om de overgang tussen de bestaande PowerPC-architectuur naar de nieuwe Intel-gebaseerde systemen te versoepelen. De oorsprong van Universal Binaries is te vinden in het Mach-O-Fat-formaat, dat in de NeXTSTEP en OPENSTEP besturingssystemen werd gebruikt, aangezien deze systemen voor meerdere architecturen geschikt moesten zijn. Heden ten dage bevatten open source-bestanddelen van Mac OS X nog steeds verwijzingen naar toenmalige processoren, zoals M68k en SPARC.

Achtergrond

bewerken

Universal binaries worden tot stand gebracht met het binaire formaat Mach-O, dat binaire code voor meerdere processorarchitecturen kan bevatten. Dit in tegenstelling tot het ELF-formaat, dat bij Linux en andere Unix-achtige besturingssystemen veel wordt toegepast. Met het tool objdump uit de GNU Binutils kan de binaire code van een Universal Binary worden uitgelezen.

Voorgeschiedenis

bewerken

Bij de overstap van de Motorola 68k naar de PowerPC processor-architectuur gebruikte Apple al het idee om in één bestand code voor meerdere processoren onder te brengen. Toen werd daarvoor het begrip Fat Binary gebruikt. Het werd toen niet gerealiseerd als Mach-O-bestand, maar in het modernere PEF-bestandsformaat (Preferred Executable Format). De code voor de 68k-processor was daarbij ondergebracht in de resource fork en de code voor de PPC-processor in de data fork.