lundi 1 juin 2009

Mac OS X 10.5: 64 ou 32 bits ?

A note époque les systèmes d'exploitations existent en 32-bit ou en 64-bit. Comme j'en ai déjà parlé précédemment, Mac OS X 10.5 ("Léopard") est une version combinée qui est à la fois 32-bit et 64-bit. De plus, comme Apple est occupé à passer de l'architecture PowerPC à l'architecture Intel, les exécutables Mac OS X sont (ou en tous cas, peuvent être) multi-architectures. Il s'agit des "Universal Binaries" dont je vous ai déjà parlé.

Sur mon iMac Intel sous Mac OS X 10.5 ("Léopard"), lorsque j'essaye de voir si un exécutable est 32-bit ou 64-bit, PowerPC ou Intel, j'utilise (par exemple) la commande file:
[pbn@albert] /Users/pbn>file /bin/ls
/bin/ls: Mach-O universal binary with 2 architectures
/bin/ls (for architecture i386): Mach-O executable i386
/bin/ls (for architecture ppc7400): Mach-O executable ppc
[pbn@albert] /Users/pbn>

... ceci est un "Universal Binary". Il contient des binaires pour deux architectures: i386, c'est à dire x86 32-bit, et ppc c'est à dire PowerPC 32-bit. C'est un peu décevant: où sont les binaires 64-bit ?

En fait, Mac OS X 10.5 ("Léopard"), peut faire tourner les exécutables 32-bit et 64-bit, mais la majorité des exécutables sont toujours 32-bit.

Sous, Mac OS X 10.5 ("Léopard"), même le kernel est 32-bit:
[pbn@albert] /Users/pbn>uname -a
Darwin albert 9.7.0 Darwin Kernel Version 9.7.0: Tue Mar 31 22:52:17 PDT 2009; root:xnu-1228.12.14~1/RELEASE_I386 i386
[pbn@albert] /Users/pbn>file /mach_kernel
/mach_kernel: Mach-O universal binary with 2 architectures
/mach_kernel (for architecture i386): Mach-O executable i386
/mach_kernel (for architecture ppc): Mach-O executable ppc


Cependant Cocoa, et donc les librairies (ou en bon français les bibliothèques) sont en 32-bit et 64-bit. Un exemple:
[pbn@albert] /Users/pbn>file /usr/lib/libSystem.dylib
/usr/lib/libSystem.dylib: Mach-O universal binary with 4 architectures
/usr/lib/libSystem.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc
/usr/lib/libSystem.dylib (for architecture ppc64): Mach-O 64-bit dynamically linked shared library ppc64
/usr/lib/libSystem.dylib (for architecture i386): Mach-O dynamically linked shared library i386
/usr/lib/libSystem.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
[pbn@albert] /Users/pbn>

... voilà qui est plus intéressant. On constate ici que cette librairie est un "Universal Binary" qui contient quatre binaires différents:


32-bit
64-bit
PowerPC
ppc7400
ppc64
Intel
i386
x86_64


En fait la librairie /usr/lib/libSystem.dylib est particulièrement importante sous Mac OS X puisqu'elle contient entre autres toute la librairie glibc.

Il est logique que les librairies existent en 32-bit et 64-bit. En effet, pour pouvoir exécuter des exécutables 32-bit et 64-bit (compilés dynamiquement, en tous cas), il faut avoir quelque part les librairies à la fois en 32-bit et 64-bit.

Aucun commentaire: