Mac OS X 10.6 na PowerPC
Zanedlouho to bude patnáct let od chvíle, kdy Steve Jobs vystoupil na Apple Worldwide Developer Conference a oznámil, že Mac OS X vedl tajný dvojí život: kromě oficiálního firemního hardware, založeného na procesorech PowerPC G4 a G5, je od počátku překládán i pro procesory od Intelu. A když už byl na pódiu, také ohlásil úplný přechod k x86-kompatibilním procesorům v následujících dvou letech. První počítače s Intelem dorazily půl roku poté a do čtrnácti měsíců od ohlášení byl přechod hotov. Pro počítače s PowerPC vydal Apple v roce 2007 ještě jednu verzi systému - Mac OS X 10.5 (Leopard) - avšak pak už se soustředil pouze na hardware nový, v roce 2008 vydaný Mac OS X 10.6 (Snow Leopard) už byl k dispozici pouze pro Intel.
Současné fungování obou platforem po jistou dobu umožňovaly dvě technologie: Rosetta a Universal binary. Rosetta byl dynamický JIT překladač binárního kódu určeného původně pro PowerPC do kódu spustitelného na Intelu a jejím primárním účelem tedy bylo spouštění starých, pro novou architekturu nepřeložených aplikací na novém železe.
Universal binary, jak už název napovídá, je systém slepování binárek pro různé procesorové architektury do jedné. Systém při spuštění programu hledá binárku, kterou zná a tu spustí - pro programátory píšící v jazyce dostatečně vysoké úrovně je pak přechod otázkou několika zaškrtávátek v GUI či parametrů v příkazovém řádku před samotnou kompilací. Apple s tímto přístupem měl zkušenosti jak ze svého prvního přechodu mezi procesory (680x0→PowerPC, tehdy se to jmenovalo Fat binary) tak z dob NeXTu a OpenStepu, který běžel na x86, 680x0, SPARC a PA-RISC a kompilátor Objective-C v něm uměl vyprodukovat jeden binární soubor spustitelný na všech uvedených procesorech.
Samotná podpora ze strany Apple pak vypadala tak, že od Mac OS X 10.4 (Tiger) systém rozumí univerzálním binárkám a obsahuje Rosettu, ve verzi 10.5 je pak celý sám univerzální a lze ho beze změny, jen vyjmutím disku a vložením jinam, používat jak na PowerPC, tak na Intelu (tedy teoreticky, na Intelu je totiž použita GUID partition table, ze které PowerPC stroje neumí nabootovat, opačně to ovšem jde - Intel Macy rozumí staršímu Apple Partition Map). Verze 10.6 už univerzální nebyla, PowerPC kód z ní byl před vydáním odstraněn. Rosetta zmizela s verzí 10.7 a bylo hotovo.
Jenže nic není dokonalé a v průběhu několika let poté, co Apple oficiálně všechnu podporu PowerPC ukončil, se na různých místech daly najít různé její pozůstatky. Ještě třeba v závěru roku 2012 (doba OS X 10.8) se daly najít univerzální binárky například v balíčcích pro podporu RAW formátu aktuálních zrcadlovek:
Vichy:MacOS logout$ file RawCamera
RawCamera: Mach-O universal binary with 3 architectures
RawCamera (for arch i386): Mach-O dynamically linked shared library i386
RawCamera (for arch x86_64): Mach-O 64-bit dynamically linked shared library x86_64
RawCamera (for arch ppc): Mach-O dynamically linked shared library ppc
Jediné, co univerzální nebylo, byl instalátor těchto balíčků - ten vyžadoval pro svůj běh Intel, jinde se spustit odmítl a tím odradil většinu běžných klikacích uživatelů od dalšího pokusnictví. V terminálu to přitom bylo pár příkazů následovaných jedním restartem a systém najednou znal i formáty, které znát neměl. Tehdy se mi to velmi hodilo.
A tím se dostávám k samotnému jádru tématu tohoto článku: v polovině letošního března několik uživatelů fóra MacRumors začalo procházet předprodukční verze Mac OS X 10.6, které Apple rozesílal vývojářům a zjistili, že minimálně dvě z nich - 10A96 a 10A190 byly plně univerzální, pouze instalátor trval na Intelu a pro oficiálně nepodporované počítače chyběla velká část ovladačů. Rychle vyrobili sadu patchů, která instalaci umožní, chybějící ovladače doplnili z 10.5.8 (tj. z posledního update 10.5, který vyšel až po developer preview 10.6) a došli k funkční verzi Snow Leoparda na PowerPC počítačích s procesory G4 a G5.
Aktuálně probíhá testování různých modelů, zdá se, že systém běží na všem, na čem běžela 10.5. a není pomalejší. Některé počítače mají problémy s podporou hardwarové akcelerace grafiky, jinde vše funguje jak má. Další vývoj směřuje k hledání zapomenutých univerzálních komponent v pozdějších verzích systému a jejich doplňování do současné funkční verze.
Praktické využití je samozřejmě nulové - jak hardware tak systém jsou dávno za zenitem. Věci se ale ne vždy dělají pro praktické důvody, někdy jde jen o to ukázat, že to jde a zvlášť, když jste už druhý měsíc povětšinou zavřeni doma a nudíte se.