Chapitre 7. Linux à la pointe du progrès

Table des matières
Le portage sur Amiga et Motorola
Micro-noyaux
De l'Alpha à la portabilité
Espace noyau et espace utilisateur
GCC
Modules noyau
La portabilité aujourd'hui
L'avenir de Linux

Linux, aujourd'hui, compte des millions d'utilisateurs, des milliers de développeurs, et sa part de marché augmente. Il est utilisé dans des systèmes embarqués et pour contrôler des robots, il a voyagé à bord de la navette spatiale. Je voudrais pouvoir dire que je l'avais prévu, que cela s'inscrivait dans un projet de domination du monde, mais à vrai dire j'ai été un peu surpris. Le passage du nombre d'utilisateurs de Linux de un à cent m'est apparu beaucoup plus nettement que la transition entre ces derniers et le million suivant.

La réussite de Linux ne dépend pas d'une disposition préalable visant à le rendre portable et répandu mais plutôt de l'efficacité des principes gouvernant sa conception et son mode de développement. Ces fondations solides ont permis d'obtenir plus facilement portabilité et disponibilité.

Comparons Linux aux projets commercialement soutenus, par exemple Java ou MS-Windows NT. L'engouement créé par Java a convaincu beaucoup de personnes que write once, run anywhere (écrivez une fois, exécutez partout) vaut quelques sacrifices. Nous entrons dans une période où un nombre croissant de matériels informatiques différents seront utilisés, il s'agit donc bien d'un concept important. Sun n'a cependant pas inventé cette notion de "write once, run anywhere". La portabilité est depuis longtemps le saint Graal de l'industrie informatique. Microsoft, par exemple, a d'abord espéré que MS-Windows NT devienne un système d'exploitation portable pouvant fonctionner sur les machines Intel mais aussi sur les processeurs RISC, courants dans les stations de travail. Linux n'a jamais eu un objectif si ambitieux. C'est donc une ironie du sort que Linux soit devenu une plate-forme efficace à ce titre.

Linux a tout d'abord été conçu pour une seule architecture : l'Intel 386. Il fonctionne aujourd'hui sur tout type de machine, du PalmPilot à la station Alpha ; il s'agit du système d'exploitation porté sur le plus grand nombre d'architectures disponible sur PC. Si vous écrivez un programme pour Linux, il pourra être "write once, run anywhere" pour un grand nombre de machines différentes. Il est intéressant d'observer les décisions prises lors de la conception de Linux et la manière dont son développement a évolué afin de voir comment il a réussi à se transformer en quelque chose qui n'était pas du tout prévu à l'origine.

Le portage sur Amiga et Motorola

Linux est un système d'exploitation de type Unix, mais il ne s'agit pas d'une version d'Unix, ce qui lui confère un héritage différent de, par exemple, celui de FreeBSD. Les créateurs de ce dernier ont débuté avec le code source de Berkeley Unix et leur noyau en est directement issu. Il s'agit donc d'une version d'Unix, dans la lignée directe de ses prédécesseurs. Linux, en revanche, a pour but de fournir une interface compatible avec Unix, mais le noyau a été complètement réécrit, sans aucune référence au code source d'Unix. Ainsi, Linux n'est pas un port d'Unix, mais un nouveau système d'exploitation.

Je n'avais vraiment pas l'intention, au début, de porter ce nouveau système d'exploitation sur d'autres plates-formes. En premier lieu, je voulais obtenir quelque chose qui fonctionne sur mon 386.

Le premier effort de taille fait pour rendre le code du noyau de Linux portable a eu lieu afin de commencer son port sur les machines Alpha de DEC. Il ne s'agissait toutefois pas du premier port.

Le premier port a été réalisé par une équipe qui rendit disponible le noyau Linux sur la famille Motorola 68000 (puce présente dans les premiers ordinateurs Sun, Apple et Amiga). Les programmeurs responsables voulaient vraiment faire quelque chose de bas niveau et en Europe, beaucoup de personnes dans la communauté Amiga étaient particulièrement rétives à MS-DOS ou MS-Windows.

Même si la communauté Amiga a réussi à obtenir un système fonctionnant sur les 68000, je ne considère pas vraiment qu'il s'agisse d'un port réussi de Linux. Ils ont pris le même style d'approche que celle que j'avais adoptée lorsque j'ai commencé à écrire Linux ; écrire, sans aucune référence, un code destiné à assurer un certain type d'interface. Ainsi, ce premier port pour 68000 pouvait être considéré comme un système d'exploitation ressemblant à Linux, un embranchement du code d'origine.

De ce point de vue, ce premier port 68000 de Linux n'a pas aidé à créer un Linux portable, mais il y contribua d'une autre manière. Quand j'ai commencé à penser au port pour Alpha, j'ai dû étudier l'expérience du port 68000. Si nous prenions la même approche avec les Alpha, j'aurais alors à maintenir trois codes de base différents. Même si cela aurait été possible au niveau de la programmation, ce n'était pas gérable. Je ne pouvais veiller au développement de Linux s'il fallait pour cela maintenir une nouvelle base de code chaque fois que quelqu'un voulait Linux sur une nouvelle architecture. À la place, je voulais faire un système où j'aurais une branche spécifique pour les Alpha, une autre pour les 68000 et une troisième pour les x86, toutes articulées autour d'une base de code commune.

C'est pourquoi il y eut une réécriture importante du noyau à cette époque, qui fut aussi motivée par la volonté de permettre à un nombre croissant de développeurs de travailler de concert.