Linux est devenu un système d’exploitation incontournable. Présent dans tous les domaines qui touchent à l’électronique ou l’informatique, il s’agit même dans bien des cas de celui qui domine le marché. Mais comment en est-on arrivé là ? C’est une question de culture générale à laquelle je vais tenter de répondre aujourd’hui.
Multics
Comme il faut commencer quelque part, commençons par Multics. Nous sommes en 1964, et dans le cadre du projet MAC du MIT, l’équipe de recherche avait pour but de concevoir un nouveau système d’exploitation expérimental poussant plus loin les concepts de leur dernière création, le système CTSS. Il devait permettre l’ajout à chaud de la RAM, des périphériques ou même des CPU. Son rôle était aussi l’exécution simultanée de plusieurs logiciels à la fois ainsi que la gestion d’une multitude d’utilisateurs.
Pour cette mission, le MIT s’est associé avec General Electric (GE) qui fournissait l’ordinateur sur lequel Multics allait être développé : le GE 635. Notons tout de même que celui-ci était déjà vendu avec un système d’exploitation plus traditionnel, GE n’avait donc pas à attendre la maturité de Multics pour pouvoir rendre son matériel rentable. Bell Telephone Laboratories rejoignit le projet en novembre 1964 dans l’objectif de réaliser un système à temps partagé pouvant être employé en interne, par ses ingénieurs.
Multics est un précurseur de beaucoup de concepts novateurs, comme l’utilisation d’un système de fichier hiérarchique, les anneaux de protection, ou encore la présence d’un shell supportant la manipulation du noyau. Certaines fonctionnalités qu’il implémentait ne sont presque reprises nulle part ailleurs, comme le single-level storage, rendant les mémoires volatiles (RAM) et persistantes (par exemple sur disque dur) accessibles depuis une interface totalement homogène. Le dynamic linking aussi est une approche inexistante dans les systèmes plus jeunes. Celui-ci permet au noyau de rechercher lui-même l’emplacement et la version adéquate d’une bibliothèque externe à injecter dans l’espace mémoire du processus.
Malheureusement, le destin se révélera dur pour ce précurseur, dont l’héritage continue aujourd’hui de vivre au travers nos systèmes d’exploitation modernes. En avril 1969, Bell décide de se retirer du projet, car le budget alloué à celui-ci arrivait à bout alors que le résultat était encore bien loin d’être opérationnel. Quant à General Electric, n’ayant aucun réel intérêt à voir ce nouvel OS débarqué suivait l’affaire de façon peu assidue… Multics finit néanmoins par être mature vers la fin des années 70, mais l’unique matériel qu’il supportait était déjà considéré comme obsolète. L’OS continuera tout de même son fastidieux développement jusqu’en 1985 et engendrera quand même des millions de dollars, avant d’entamer une mort lente qui sera actée en octobre 2000 avec l’arrêt du dernier système connu.
UNIX
Comme évoqué dans le paragraphe précédent, Bell Labs quitta le projet MAC en avril 1969, laissant ainsi sur le carreau une poignée de développeurs censés mettre un terme à leurs activités de recherche pour se recentrer sur de l’informatique plus opérationnelle. Privé de « stimulateur », c’est par le jeu que Ken Thompson, l’un des anciens membres de l’équipe des laboratoires Bell réussi à retrouver la richesse intellectuelle que lui avait été retirée. Il avait en effet entrepris la création de Space Travel, qui était à la mode du moment (le 21 juillet 1969, l’Homme marche pour la première fois sur la lune). Celui-ci avait été pensé pour fonctionner sous Multics puis était réécrit pour GECOS (l’OS conventionnel de GE). Malheureusement, l’affichage était très saccadé, et une partie coûtait environ $75 de frais de CPU. Ken finit par trouver une vieille machine dans un couloir : un PDP-7 qui ferait parfaitement l’affaire. Avec l’aide de son ami Dennis Ritchie, ils se mirent à la réécriture du jeu en assembleur compatible avec ce nouveau processeur, en allant de plus en plus profondément dans la couche applicative : gestion des nombres flottants, création d’un système de fichier, puis de la notion de processus, un lot d’utilitaires permettant la copie, l’édition ou la lecture de contenu et enfin, d’un shell. À ce moment, GECOS était encore employé pour concevoir les logiciels qui étaient ensuite téléversés sur le PDP-7 via des bobines de papier. Finalement, le socle devint si gros que le PDP-7 puisse se suffire à lui-même. UNIX était né, même s’il n’a été baptisé qu’en 1970 [1] !
Suite à une procédure antitrust touchant AT&T, Bell Labs qui en dépend, n’avait pas le droit de faire de commerce sur des technologies autres que celles en rapport avec le téléphone ou le télégraphe. Ils n’avaient donc que peu d’intérêts concernant ce système d’exploitation… Si ce n’est peut-être celui de se demander comment certains de leurs employés pouvaient monopoliser un ordinateur d’une centaine de kilos pendant des journées entières de travail sur une tâche dont ils avaient décidé unilatéralement d’y accorder une priorité si haute. Mais bon, ça n’est visiblement pas arrivé. Toujours est-il que cette faible considération à l’égard d’UNIX a permis sa diffusion à moindre coût dans les milieux universitaires.
Ce n’est en fait qu’à partir de 1972, que le monde prit conscience du marché susceptible d’exister au tour du logiciel qui était jusqu’alors fourni à titre d’accessoire avec l’ordinateur physique. En effet, de nouveaux acteurs n’ayant pas les ressources nécessaires à autant de recherche et développement se mirent à construire du matériel compatible avec les logiciels vendu par IBM. IBM découpa donc ses offres pour facturer les deux produits séparément et éviter de se faire ainsi « piller ». C’est à partir de ce moment que les deux corps de métier se sont réellement détachés et que l’on commença à voir émerger des entreprises basées sur le matériel, comme IBM, Memorex ou Calcomp et de l’autre une industrie du logiciel, à laquelle Microsoft appartient [2].
C’est finalement en 1979 que l’évolution l’UNIX prit un coup d’accélérateur, quand l’appel d’offres de la DARPA pour l’implémentation de la couche TCP/IP fut accordé à l’université de Berkeley pour la concevoir sur sa propre version d’UNIX qui fonctionnait déjà sur plusieurs types d’ordinateurs. Ce financement aura permis le développement d’UNIX BSD et de TCP/IP, créant ainsi le premier système d’exploitation orienté vers la communication réseau [3].
De par cet intérêt toujours plus gros d’UNIX de la part du monde de la recherche informatique qui voyait en lui quelque chose de relativement performant, mais surtout bon marché, AT&T finit par entreprendre également la commercialisation de sa branche en propulsant dès 1983 System V (système cinq). System V et BSD, ont pendant longtemps été présenté comme deux idéologies différentes d’une même technologie. La première aura été considérée comme le penchant productiviste d’UNIX, celui censé apporter de l’argent alors que le second était perçu comme la version plus sportive, celle où la passion de la recherche et du jeu domine.
Minix
La mode des années 80 était donc pour les constructeurs de matériel informatique de développer pour chacun d’entre eux leur propre implémentation d’UNIX. Nous avions XENIX, conçu par Microsoft en 1980, AIX par IBM, Solaris, HP-UX, Ultrix, etc. La disparité était telle que le gouvernement État-Unien mandata l’IEEE en 1988 pour la création d’une norme, dénommée POSIX que chacun de ces éditeurs devait respecter s’ils voulaient continuer à pouvoir répondre aux appels d’offres. C’était une façon d’imposer une relative interopérabilité permettant à un même logiciel de fonctionner sur l’ensemble de ces systèmes d’exploitation [4].
Un autre de ces clones d’UNIX était développé par un professeur de l’Université libre d’Amsterdam : Andrew Tanenbaum. Il s’agissait de Minix. Le principal attrait de celui-ci résidait dans son aspect éducatif. En effet, Andrew l’avait conçu comme support de cours et d’illustration pour les premières versions de son livre « Operating Systems: Design and Implementation ».
La découverte d’UNIX par Linus Torvalds
Linus Torvalds est un Finlandais dont la passion pour l’informatique n’a probablement que peu d’égaux étant donné que depuis sa plus tendre enfance, il en faisait sa principale et presque unique activité avec, bien sûr, le fait de dormir, manger et aller à l’école. « Comme Sara [la sœur de Linus] et moi [la mère de Linus] disions souvent : il suffit de lui donner un placard avec un bon ordinateur et de le nourrir avec des pâtes sèches pour qu’il soit parfaitement heureux » [JFF:page 70].
Son premier rapport avec le monde UNIX ce fut en lisant le livre d’Andrew Tanenbam « Operating system : design and implémentation » pour se préparer à son nouveau cours sur UNIX et sur le C lors de son entrée à l’université d’Helsinki en 1990. Il devient très vite admiratif face à la simplicité des concepts présents. Dans sa biographie, Linus fait d’ailleurs une analogie que je trouve intéressante :
Un mauvais système est un système conçu avec des interfaces différentes pour tout ce que vous faites. UNIX est l’opposé. Il nous fournit les éléments de construction qui sont suffisants pour faire ce que l’on veut sous une forme claire et simple. C’est comme avec les langages, il y en a certains ou chaque lettre signifie une chose très concrète et bien délimitée. C’est par exemple le cas pour le mandarin dont chaque symbole a une signification complexe, mais qui n’autorise qu’une très faible combinaison de ceux-ci. C’est l’approche employée par VMS ou Windows : ils implémentent des fonctionnalités intéressantes, mais dont l’utilité reste très cloisonnée. À l’inverse, UNIX a choisi une optique similaire à une langue comme l’anglais : nous avons vingt-six lettres très simples à écrire, mais qui nous permettent, via des combinaisons, de faire ce que l’on veut avec. – [Just For Fun, page 54].
Linus fait ici référence aux notions d’appels systèmes, de la philosophie « tout est fichier », de la façon dont les processus sont gérés et enfin, du shell. Il y a d’ailleurs une anecdote intéressante à ce sujet illustrant le revers que peuvent représenter des interfaces aussi efficaces. Linus, pour accéder à Internet et lire les newsgroups, passait depuis son PC à un serveur de l’université sur lequel il se connectait automatiquement, à l’aide d’un script qu’il avait conçu et qu’il employait sur l’interface /dev/tty1
désignant son modem. Une typo l’aura conduit un jour à lancer celui-ci sur /dev/hda1
. Bien qu’un disque dur et un modem n’aient pas du tout le même fonctionnement interne, les drivers UNIX firent très bien leur travail et le programme s’exécuta sans aucun problème… Malheureusement, la réécriture du disque avec les instructions censées être transmises à la carte réseau corrompit sa partition, rendant son PC inopérant [JFF, page 89].
C’est en désirant prolonger son expérience avec le système d’exploitation qu’il utilisa en cours, que Linus acheta à crédit, le 2 janvier 1991 son nouvel ordinateur sur lequel il décida d’installer Minix.
La création de Linux
Minix déplut à Linus via plusieurs aspects. Le fait que le système était à but éducatif le limitait au niveau de pas mal de fonctionnalités qu’Andrew ne comptait pas résoudre sous prétexte de vouloir conserver la simplicité actuelle. Des patchs avaient été développés par la communauté palliant à certains de ses tords, mais la licence de diffusion rendait leurs installations pénibles, car l’utilisateur était forcé de d’abord acheter la version originale, puis d’appliquer à la main l’intégralité des correctifs, ce qui était très rébarbatif voir difficile, surtout en comparaison avec ce qu’aurait été le partage d’un nouveau noyau clef en main si celui-ci avait été libre. C’est d’ailleurs un reproche que fera Linus à Andrew lors de leur célèbre confrontation [5].
Parmi la liste des aspects techniques que Linus n’appréciait pas dans Minix, nous avions l’émulation du terminal dont il dépendait fortement pour employer Internet via son université. C’est donc en suivant le même chemin que Ken Thompson que Linus allait progressivement concevoir ce qui plus tard, serait un système d’exploitation à part entière. Au début, Linus développait son émulateur sur une disquette, qu’il booterait en standalone depuis le BIOS de son ordinateur. Pour ce faire, il devait comprendre et gérer le fonctionnement de son processeur. Puis vain le moment ou l’accès au disque dur se fit sentir, simplement pour y récupérer des fichiers à transmettre sur les newsgroups. Cela nécessitait quand même la création d’un driver complet, qui lui-même imposait un socle très important. Finalement, Linus se retrouvais à lire les pages de manuels de SUN OS pour y trouver une description des appels systèmes à implémenter pour la norme POSIX, et à tenter de les reproduire. Ensuite c’est le shell Bash qu’il porta. Linus travailla de façon intensive sur son projet d’avril au 25 août 1991 pour enfin aboutir à la version 0.01 de Linux [6].
L’évolution de Linux
Les deux principales forces de Linux étaient qu’à cette époque, il n’existait pas encore vraiment de système performant pour les micro-pc et que Linus était très ouvert aux remarques de la communauté. C’est ainsi qu’il fut le premier à implémenter un mécanisme de page-to-disk, plus connu aujourd’hui sous le nom de swap, pour qu’un utilisateur allemand n’ayant accès qu’à 2Mio de RAM (la moyenne du moment était de 4) puisse lui aussi compiler le kernel [JFF-page 90].
Avec l’évolution toujours plus massive des PC domestiques, de plus en plus de passionnés ont vu en Linux le système d’exploitation sur lequel l’épanouissement pouvait être le plus intense possible : il était gratuit, sa communauté était grandissante et le fait qu’il soit libre permit à tout développeur suffisamment doué d’ajouter une pierre à l’édifice, ce qui était (et est encore !) très reconnaissant, tant pour soi que pour ses paires.
Très vite, le milieu industriel aussi a constaté qu’il devenait de plus en plus portable, stable et opérationnel. De plus, la licence GPL qui l’englobait autorisait une utilisation commerciale. Des revendeurs ont donc commencé à naître, qui ont compris en quoi il pouvait être bénéfique pour eux de payer des gens à coder Linux pour leur compte : pour les fournisseurs de matériel, c’est une bonne façon de s’assurer que celui-ci sera parfaitement compatible, pour les sociétés de services, de fiabiliser les logiciels qu’ils manipulent. C’est avec ce schéma en perspective que Linux est devenu aujourd’hui le système d’exploitation fédérant des milliers de développeurs venant des quatre coins du monde et travaillant pour une multitude d’entreprises différentes, qui n’ont pourtant aucun pouvoir de décision : ça reste Linus qui a le dernier mot, même s’il sous-traite de plus en plus cette tâche à d’autres [7]. Par exemple, Linux 4.13, c’est 1681 contributeurs représentés par 225 entreprises et 25 % d’indépendants [8]. On verra bien jusqu’où ce noyau créé initialement pour le fun ira, mais j’ai l’impression qu’il a encore de beaux jours devant lui !
Crédit images :
- Le Tux en couverture par Flaticon.
- Le PDP-7 par Toresbe.
- L’image du jeu Space Travel par Ken Thompson.
Sources :
- [1] The Evolution of the Unix Time-sharing System — Dennis M. Ritchie, Bell Laboratories, Murray Hill NJ, 07974 — PDF
- [2] De Multics à Unix et au logiciel libre — Laurent Bloch — Article de blog
- [3] Voices from the Open Source Revolution (ISBN : 1-56592-582-3), partie : “DARPA Support” — Marshall Kirk McKusick — Article HTML
- [4] The POSIX Family of Standards — Stephen R. Walli — PDF
- [5] Article de newsgroup : « LINUX is obsolete? » — Lien Google Group
- [6] Article de newsgroup : « What would you like to see most in minix? » — Lien Google Group
- [7] How patches get into the Kernel — Page Web
- [8] Linux Kernel Development Report – Jonathan Corbet (LWN.net), Greg Kroah-Hartman (The Linux Foundation) — Présentation PDF
- [JFF] Just For Fun (ISBN 0-06-662072-4) — Linus Torvalds, David Diamond — Lien de téléchargement
Publication originale :