PowerPC vs Intel
Saturday, November 17th, 2007Ik draai nu al een dikke week Leopard op m’n Macbook Pro, en daarnet moest ik een kleine applicatie laten lopen dat een bepaalde file gaat aanpassen. Voordat de file echter aangepast wordt, zal de patcher onderzoeken als de file wel correct is, en die doet dit aan de hand van een checksum. Om de één of andere idiote reden is dit met een SHA1 check, en niet met iets eenvoudigs als een MD5. Maar op zich zou dit geen probleem mogen zijn.
Op een unix-gebasseerd systeem is er de goeie libcrypto die zich bezighoudt met alle mogelijk gecijfer voor encrypties en checksums, en het merendeel van de standaard algoritmes implementeert. Op Apple is die er ook, zelfs in twee versies (0.9 en 0.9.7), en de standaard is gezet op de laatste, wat de recentste is.
Echter, sommige applicaties hebben echt wel de 0.9 nodig, want enkele mogelijkheden werden aangepast in de laatste versies, en enkele werden zelfs gewoon weggehaald. Geen paniek zou je denken, ze zijn toch beide aanwezig.
Apple heeft macs gemaakt met twee soorten processoren. Vroeger was het al PowerPC wat de klok sloeg, nu is er ook Intel. Gelukkig bestaat er zoiets als “universal” binaries, wat dus een stuk code bevat voor beide processoren. Observe:
bernards-macbook:Projects bernard$ file /usr/lib/libcrypto.0.9.7.dylib /usr/lib/libcrypto.0.9.7.dylib: Mach-O universal binary with 4 architectures ... (for architecture ppc7400): Mach-O dynamically linked shared library ppc ... (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64 ... (for architecture i386): Mach-O dynamically linked shared library i386 ... (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
(wat geknipt voor de leesbaarheid)
Wat blijkt nu bij de oude versie:
bernard-macbook:Projects bernard$ file /usr/lib/libcrypto.0.9.dylib /usr/lib/libcrypto.0.9.dylib: Mach-O dynamically linked shared library ppc
What the hell! Enkel een PPC versie, terwijl er in Tiger wel eentje was voor Intel en PPC. Godver!
Feit is, er is geen oplossing voor, Apple moet zijn lib gewoon even hercompileren.