Le noyau des systèmes d'exploitation modernes n'est plus écrit en assembleur dépendant de l'architecture processeur, mais essentiellement en langage C compilé qui lui est portable dès lors qu'un compilateur existe pour le processeur cible ( merci Brian Kernighan et Dennis Ritchie ).
Intel, AMD, Sun,.... fournissent des compilateurs pour leurs processeurs mais il existe aussi des compilateurs croisés ( cross compiler ) capables de produire du code pour des cibles multiples.
A partir de là il est possible de compiler un même module de code source en C pour i686, x89_64, IA64, Sparc, ....
Ceci étant, certains modules en particulier ceux de la couche d'abstraction matériel ( HAL -
http://fr.wikipedia.org/wiki/Couche_d%27abstraction_mat%C3%A9rielle ) doivent quand même être réécrits essentiellement pour prendre en compte non pas l'architecture du processeur qui est gérée par le compilateur mais l'architecture de la machine.
Le nombre de modules devant être réécrits reste cependant cependant très faible par rapport au nombre de modules présent dans un système d'exploitation :
$ rpm -ql kernel | wc
4987 4987 364347
Pour Fedora, si tu vas sur la page
http://mirrors.fedoraproject.org/publiclist/Fedora/12/ tu peux constater qu'il existe (existait) des versions différentes pour
i386 ==> Intel / AMD 32 bits
x86_64 ==> Intel / AMD 64 bits
ppc ==> IBM Power PC 32 bits
ppc64 ==> IBM Power PC 64 bits
s390x ==> IBM 390 Mainframe
sparc ==> Sun 32 bits
sparc64 ==> Sun 64 bits
arm ==> ARM
ia64 ==> Intel Itanium
Dans tous les cas il s'agit de Fedora mais les codes exécutables sont différents.
Si tu vas sur la page
http://koji.fedoraproject.org/koji/buildinfo?buildID=167288http://koji.fedoraproject.org/koji/buildinfo?buildID=167288 tu peux voir qu'il y a
- un seul jeu de source ( src )
à partir duquel sont crées des packages contenant des modules pour différentes architectures
- i686
- ppc
- ppc64
- x86_64
et aussi des modules non exécutables indépendants de l'architecture
- noarch