Site WWW de Laurent Bloch
Slogan du site

ISSN 2271-3905
Cliquez ici si vous voulez visiter mon autre site, orienté vers des sujets moins techniques.

Pour recevoir (au plus une fois par semaine) les nouveautés de ce site, indiquez ici votre adresse électronique :

De Multics à Unix et au logiciel libre
Article mis en ligne le 16 juillet 2014
dernière modification le 2 février 2024

par Laurent Bloch

Un échec plein d’avenir

Multics est un système d’exploitation né en 1964 au MIT (Massachusetts Institute of Technology) dans le cadre d’un projet de recherche nommé MAC, sous la direction de Fernando Corbató. La même équipe avait déjà créé le système CTSS. Multics était destiné aux ordinateurs General Electric de la famille GE 635, pour lesquels le constructeur fournissait de son côté un système d’exploitation plus conventionnel. Le projet associait le MIT, General Electric et les Bell Telephone Laboratories (une filiale d’AT&T, American Telegraph and Telephone, qui détenait le monopole des télécommunications pour les États-Unis).

L’objectif du projet était la réalisation d’un grand système informatique capable de fournir des services interactifs en temps partagé à un millier d’utilisateurs simultanés. Multics comportait beaucoup d’innovations de grande portée : le langage de commande pour piloter le fonctionnement de la machine était un langage de programmation, le même que celui dont disposait l’utilisateur pour interagir avec le système, le shell, inventé par Louis Pouzin pour le système prédécesseur de Multics, CTSS (cf. ci-dessous). Le système d’exploitation était écrit en langage évolué (en l’occurrence PL/1), voie ouverte par les systèmes Burroughs écrits en Algol, mais encore peu fréquentée. Les concepts de mémoire centrale pour les données volatiles et de fichiers pour les données persistantes étaient fondus en un concept unique de mémoire virtuelle segmentée, certains segments étant dotés de la qualité de persistance. Les segments persistants étaient catalogués dans des répertoires à l’organisation arborescente. Moins spectaculaire en apparence mais peut-être aussi importante était l’existence de toute une collection d’outils programmables et combinables entre eux destinés à faciliter le travail d’un type d’utilisateur : le programmeur, et plus spécialement celui qui écrivait un système d’exploitation.

Malgré ou à cause de toutes ces qualités uniques et promises à un grand avenir, Multics fut en gros un échec, au moins du point de vue de sa diffusion. Ses mérites furent reconnus tardivement, et le plus souvent tacitement, par ceux qui en reprirent les idées à leur compte.

Cette méconnaissance longue des mérites de Multics a ses raisons : la technologie des ordinateurs disponible à l’époque de sa diffusion, essentiellement pendant les années 1970, ne permettait de mettre en œuvre les méthodes et les concepts élaborés de ce système qu’au prix d’une grande lourdeur. Les ordinateurs exploités sous Multics étaient gros, chers et lents. L’institut de statistique qui employait à l’époque l’auteur de ces lignes en avait acquis un, fruit de la fusion CII-Honeywell-Bull, et ses experts en informatique démographique avaient essayé d’imaginer les moyens de traiter avec cet engin les recensements de la population, mais ils avaient fini par regarder ce drôle de système un peu de l’œil de la poule qui a couvé un œuf de cane.

Leur perplexité n’avait d’ailleurs d’égale que celle des ingénieurs commerciaux qui essayaient de vendre la chose, ou celle des ingénieurs spécialistes de Multics auxquels nous posions des questions incongrues comme « Pourrions-nous traiter des fichiers sur bande magnétique en traitement par lots ? », méthode béotienne mais indispensable à l’époque du fait de la faible capacité des disques.

Il résulta de cette expérience peu de résultats nouveaux dans le travail statistique courant, mais un sursaut intellectuel parmi ceux des informaticiens qui n’avaient pas définitivement sombré dans la léthargie coboliste [1] dont on n’émergerait que pour sombrer dans Windows. Si changer de langage ou de système ne rend pas plus intelligent, il y a des systèmes et des langages qui incitent à la réflexion, et d’autres moins. Cela dépend pour une grande part du type d’initiative laissé à l’utilisateur et du niveau d’intelligibilité que le système exhibe. Il y a des systèmes dont les paramètres de fonctionnement sont enfouis dans des fichiers binaires inaccessibles à l’utilisateur, qui n’a qu’un seul choix : cliquer sur des menus en espérant que cela finira par produire un résultat désiré ; c’est le cas de Windows. Unix au contraire contient tous ses paramètres dans des fichiers texte lisibles et réunis dans un endroit connu (le répertoire /etc). La première méthode n’est justifiable que si la réalisation du système est sans faille, et autorise l’utilisateur à ne jamais se préoccuper de ces paramètres, ce qu’ont réussi les concepteurs de MacOS, mais pas ceux de Windows ; elle suppose aussi que lesdits utilisateurs ne sont que cela, utilisateurs, qu’ils ne nourrissent aucun intérêt pour le système et n’envisagent pas une seconde de se mettre à le modifier, ou du moins à en modifier le comportement en jouant sur les paramètres.

Multics, sous cet angle comme sous certains autres, était un précurseur d’Unix, système qui considère ses utilisateurs comme des personnes intelligentes, mais aussi suffisamment intéressées par le système lui-même pour lui consacrer un temps non négligeable dont les employeurs ne comprennent pas toujours la fécondité. C’est ainsi que des industriels ont inventé pour Unix une interface utilisateur nommée CDE (Common Desktop Environment) dont le principe est de plaquer sur le système une sorte de super-Windows dont le paramétrage, réservé à des administrateurs, est ensuite propagé à la masse des utilisateurs. Cette vision centralisée et hyper-organisée aurait sans doute bien réussi dans les années 1960, mais elle risque de ne pas résister aux sables mouvants de la sociologie réelle des organisations des années 2000.

Où l’on commence à rêver à Unix

Les créateurs d’Unix, Ken Thompson et Dennis M. Ritchie, avaient une forte expérience de Multics, et ils savaient aussi bien ce qu’ils voulaient en retenir que ce qu’ils en rejetaient. Ils en retenaient notamment les aspects suivants :

 Le système est écrit non pas en assembleur, mais dans un langage de haut niveau (PL/1 pour Multics, C pour Unix). Seuls quelques fragments du code du noyau intimement liés à un matériel particulier sont en assembleur. Ceci facilite le portage [2] du système sur un nouveau modèle d’ordinateur. On a pu dire que le langage C était un assembleur portable.
 Le système de commandes qui permet de piloter le système est le même interpréteur qui permet à l’utilisateur d’exécuter des programmes et des commandes, et il donne accès à un langage de programmation. C’est le shell.
 Le système de fichiers d’Unix est très inspiré de celui de Multics, d’où vient aussi l’idée d’exécuter chaque commande comme un processus distinct.
 Mais surtout, comme Dennis Ritchie l’a expliqué dans son article de 1979, ce que lui et ses collègues des Bell Laboratories voulaient retrouver de Multics en créant Unix, c’était un système qui engendrait pour ainsi dire spontanément la communication et l’échange d’expériences entre ses adeptes.

Cette qualité, partagée par Multics et Unix, d’être propice à la création d’une communauté ouverte et communicative, mérite que l’on s’y arrête. Lorsque Multics a été introduit dans l’Institut statistique évoqué ci-dessus, il y a immédiatement cristallisé la formation d’une petite communauté intellectuelle, que la Direction n’a d’ailleurs eu de cesse de résorber parce qu’elle n’en comprenait pas la fécondité et qu’elle percevait son activité comme un gaspillage. D’innombrables expériences similaires ont eu lieu autour de Multics et d’Unix, sans qu’une cause unique puisse leur être attribuée. Le fait que ces systèmes aient été créés par des chercheurs, habitués à l’idée que la connaissance soit objet de partage gratuit et de communication désintéressée mais assortie de plaisir, est un élément. L’existence de logiciels commodes pour la création de textes, le courrier électronique et les forums en ligne a aussi joué, mais cette existence était-elle une cause ou une conséquence ? La nature programmable du shell, l’accès possible pour tous aux paramètres du système, inscrits dans des fichiers de texte ordinaires, encourageaient un usage intelligent du système, et l’intelligence va de pair avec l’échange.

Si l’on compare Multics et Unix aux systèmes industriels disponibles à l’époque, comme l’OS 360, GCOS 8 ou plus tard VMS de Digital Equipment, il apparaît que ces derniers ne sont pas conçus dans le même esprit : l’utilisateur dispose d’un mode d’emploi du système, réputé contenir les solutions pour tout problème qu’il pourrait se poser. Lorsque tout ceci est bien fait, comme par exemple dans VMS, le système à mémoire virtuelle conçu pour l’ordinateur VAX, cela suscite un usage efficace et commode mais passif du système.

L’auteur de ces lignes a été un utilisateur longtemps réticent et sceptique d’Unix, dérouté par l’aspect « boîte à outils » du système. VMS, que je pratiquais simultanément, avait été conçu par une équipe de (très bons) ingénieurs, soucieux de livrer un produit homogène et cohérent, et ils avaient parfaitement réussi. La meilleure preuve de cette réussite était la documentation du système, souvent un aspect un peu négligé : celle de VMS était une merveille de clarté et d’exhaustivité, au prix certes d’un nombre impressionnant de mètres linéaires de rayonnage. Mais quel que soit le problème à résoudre, on était sûr que la réponse était dans la « doc ». Lorsque Digital Equipment a produit sa propre version d’Unix, ils ont publié un petit manuel résumé des commandes Unix, baptisé « The little grey book » (la couleur canonique de la documentation Digital venait de virer de l’orange au gris). Par opposition, la documentation VMS s’est trouvée baptisée « The big grey wall ».

Habitué donc à l’univers confortable et hyper-balisé de VMS, je découvrais avec Unix un système de prime abord beaucoup moins homogène, même si je devais découvrir plus tard que son homogénéité résidait ailleurs. Comme chaque commande Unix s’exécute sous le contrôle d’un processus distinct, elle peut être assez découplée du noyau du système. Cette modularité, qui est un avantage, avait permis de confier l’écriture de beaucoup de commandes à des étudiants en stage, quand elles n’étaient pas tout simplement des contributions spontanées, et alors leur qualité et celle de leur documentation pouvaient être assez inégales.

De Multics les créateurs d’Unix rejetaient la lourdeur. La tentation fatale, pour des auteurs de systèmes informatiques en général, et de systèmes d’exploitation ou d’architectures de processeurs tout particulièrement, consiste à céder au perfectionnisme et à réaliser des dispositifs qui ajouteront au système global une complexité considérable pour résoudre des problèmes qui ne surgiront que très rarement. Les problèmes rares peuvent se contenter de solutions inefficaces mais simples. Force est de constater que les auteurs de Multics n’ont pas évité cette ornière. VMS non plus d’ailleurs, qui succédait aux merveilleux RSX-11M et autres IAS.

Frederick P. Brooks, le concepteur de l’OS/360, dans son livre justement célèbre The Mythical Man-Month, décrit ce qu’il appelle le syndrome du second système, et qui s’applique à Multics comme à l’OS/360 : une équipe constituée en grande partie des mêmes hommes autour de Fernando Corbató avait développé avec succès CTSS ; en s’attaquant à Multics ils ont voulu y introduire tous les perfectionnements coûteux qu’ils avaient, avec sagesse mais frustration, écartés de leur œuvre précédente. En informatique comme ailleurs, point de salut sans une part de renoncement.

En fait, à la fin des années 1960, l’échec de Multics aux Bell Labs était patent. L’équipe qui allait y concevoir Unix, autour de Ken Thompson et Dennis Ritchie, comprit que Multics ne serait pas utilisable pour un travail réel dans un délai raisonnable. De son côté le propriétaire de Multics, la compagnie General Electric, se sentait assez peu concerné par ce système développé par des chercheurs universitaires et préférait commercialiser ses ordinateurs avec son système conventionnel, GECOS. Lorsque Multics deviendrait utilisable, à la toute fin des années 1970, les ordinateurs qu’il pouvait piloter étaient définitivement périmés et sans espoir de succession.

Dans un article de 1979 Dennis Ritchie a décrit cette période où les Bell Labs se retiraient du projet Multics. Ce processus s’accompagnait d’un autre facteur d’incertitude : une réorganisation visait à séparer les équipes de recherche en informatique des équipes de l’informatique opérationnelle ; ce genre de séparation, conforme aux vues des managers financiers efficaces et à jugeote courte, a pour conséquence habituelle de diminuer les moyens disponibles pour la recherche et de réduire la qualité de l’informatique opérationnelle, privée de stimulation intellectuelle. Le groupe de D. Ritchie, K. Thompson, M. D. McIlroy et Joseph F. Ossanna souhaitait conserver l’environnement de travail luxueux que Multics leur procurait à un coût d’autant plus exorbitant qu’ils en étaient les derniers utilisateurs. Pour ce faire ils allaient développer leur propre système sur un petit ordinateur bon marché et un peu inutilisé récupéré dans un couloir, un PDP 7 de Digital Equipment. Unix était sinon né, du moins conçu.

Les hommes d’Unix : sociologie des sciences et des hiérarchies

Effectivement, peu de femmes dans cette histoire. Raison de plus pour mentionner Evi Nemeth (disparue en mer en 2013 entre l’Australie et la Nouvelle-Zélande), et, peut-être pas tout à fait dans le même domaine ni à la même époque, Radia Perlman, spécialiste des protocoles de réseau [3], et Elizabeth Zwicky.

Le lecteur, à la fin de l’alinéa précédent, se sera peut-être fait la réflexion que pour que des employés d’une grande entreprise puissent développer un système d’exploitation, même ascétique, pendant leur temps libre, il fallait que leur encadrement ne soit pas trop rigide. Parce que ce même lecteur devrait maintenant être convaincu que le système d’exploitation est l’objet technique le plus complexe que l’homme ait conçu et réalisé au cours du XXe siècle. Quelle était au fait la mission théorique de ces jeunes gens ? Qui contrôlait la réalisation de leurs objectifs ?

Peter H. Salus a écrit un livre (A Quarter Century of UNIX) qui met en scène les principaux acteurs de la naissance d’Unix. De prime abord, on est frappé en lisant ces aventures de découvrir que cette création, qui a eu des répercussions considérables dans les domaines technique autant qu’industriel et économique, n’a vraiment été décidée ni par un groupe industriel, ni par un gouvernement, ni par aucun organisme doté de pouvoir et de moyens financiers importants. On peut d’ailleurs en dire autant de l’Internet, une autre création aux répercussions considérables, d’ailleurs très liée à Unix et issue du même milieu social.

À la lecture du livre de Salus, quiconque a un peu fréquenté les milieux scientifiques d’une part, les milieux industriels de l’autre, ne peut manquer d’être frappé par le caractère décalé, pour ne pas dire franchement marginal, de la plupart des acteurs de la genèse unixienne.

Le monde de la science a sa hiérarchie, où les disciplines spéculatives et abstraites ont le pas sur les recherches appliquées et les disciplines descriptives, et où bien sûr (surtout en France) les chercheurs sont patriciens et les ingénieurs et techniciens ilotes, entourés d’une population au statut incertain, les étudiants en thèse ou en post-doc, dont une minorité d’élus accédera au patriciat mais dont la majorité ne deviendra même pas ilote, contrainte à descendre aux enfers, c’est-à-dire le monde réel des entreprises industrielles et commerciales.

Dans cet univers social, l’informatique, discipline récente et mal identifiée, perçue (au mépris de toute vraisemblance, mais qu’importe au sociologue) comme un vague sous-produit de la branche la moins noble des mathématiques (l’analyse numérique), se situe plutôt vers le bas. Au sein de la discipline informatique, le haut du pavé est tenu par les domaines où il y a une théorie possible, de préférence mathématique ou à la rigueur physique : linguistique de la programmation, algorithmique (surtout numérique ou logique), traitement de l’image ou du signal en général. Les systèmes d’exploitation disposent de tout un arsenal de concepts, mais pas d’une théorie, c’est ainsi ; de surcroît ils sont bien près du matériel, cette chose qui a des relents de cambouis et de sueur. Donc ils sont en bas. Alors des ingénieurs qui s’occupent de systèmes d’exploitation...

Le monde industriel (nous nous plaçons à l’époque de la naissance d’Unix, avant la prise de pouvoir par les financiers à costume noir et cortex de calmar) a (avait ?) un système de valeurs symétrique de celui de la science : on y respecte (au moins dans les entreprises dotées d’une vraie tradition industrielle et qui ont su la conserver, c’est-à-dire, en France, rarement) celui qui fait des choses, de vraies choses. C’est un univers dominé par les ingénieurs, qui sont censés se coltiner avec la matière. On sait bien qu’une industrie dynamique doit avoir des centres de recherche, et que dans ces endroits travaillent des types bizarres appelés chercheurs, mais même si on ne les méprise pas vraiment, ils sont considérés avec une certaine distance.

Or que nous apprend Salus ? Thompson et Ritchie étaient chercheurs dans une entreprise industrielle. Au fur et à mesure de leur apparition, les noms de ceux qui ont fait Unix, parmi eux Kirk McKusick, Bill Joy, Eric Allman, Keith Bostic, sont toujours accompagnés d’un commentaire de la même veine : ils étaient étudiants undergraduates ou en cours de PhD, et soudain ils ont découvert qu’Unix était bien plus passionnant que leurs études. Bref, les auteurs d’Unix n’ont jamais emprunté ni la voie qui mène les ingénieurs perspicaces vers les fauteuils de Directeurs Généraux, ni celle que prennent les bons étudiants vers la tenure track, les chaires prestigieuses, voire le Nobel [4].

Introduction à la démarche unixienne

Comme le note Christian Queinnec aux premiers mots de son livre ABC d’Unix « UNIX est un système de production de programme ». Et, conformément à l’esprit d’Unix, cette assertion est à prendre à la fois de façon extensive : ce système comporte tout ce dont peut rêver un auteur de programme, et, aussi, de façon restrictive : malgré quelques concessions récentes, il ne comporte fondamentalement rien d’autre. Les Unix modernes tels que Linux sont certes dotés de logiciels utilisables par le commun des mortels, avec des interfaces graphiques, mais les vrais unixiens n’en abusent pas.

La documentation canonique d’Unix (les man pages) constitue une excellente entrée en matière : aucun effort pédagogique, aucune de ces redondances qui facilitent l’acquisition d’une notion. Les mots en sont comptés, aucun ne manque mais pas un n’est de trop. La lecture attentive (très attentive) de ces pages délivre une information nécessaire et suffisante à l’usage du système, d’où une locution proverbiale souvent proférée par les Unixiens expérimentés en réponse à un néophyte qui demande de l’aide : « RTFM ! » (Read the f... manual !). On le voit, Unix est à l’opposé de ces logiciels à interface graphique dont les vendeurs laissent croire qu’ils peuvent être utilisés sans lire aucune documentation [5].

À qui était, comme l’auteur, habitué aux systèmes des grands ordinateurs IBM des années 1970, ou au système VMS que Digital Equipment Corporation (DEC) avait développé pour ses ordinateurs VAX, la transition était rude. Les systèmes d’IBM et de DEC étaient conçus dans le but d’élargir l’audience de l’informatique à des utilisateurs moins professionnels, à une époque où les micro-ordinateurs n’existaient pas. Pour ce faire, la syntaxe de leur langage de commandes cherchait à s’adoucir en utilisant des lexèmes plus proches du langage humain, en tolérant des abréviations ou au contraire des tournures plus bavardes mais plus faciles à mémoriser. La réponse du système à une commande était aussi édulcorée : présentation aérée, commentaires explicatifs.

Pour un Unixien, toutes ces variations pédagogiques ne sont que concessions coupables à l’ignorance informatique des secrétaires et des comptables. L’initiation informatique des ces professions respectables est peut-être un objectif louable, mais dont il ne veut rien savoir, et Unix non plus, parce que pour un développeur [6] ces aides pédagogiques sont autant d’obstacles à son travail.

La syntaxe des commandes Unix est sèche comme un coup de trique, d’une part parce qu’elles sont destinées à des professionnels qui les connaissent par cœur à force de les utiliser à longueur de journée, d’autre part parce qu’elles constituent un langage de programmation (le shell) qui permettra d’automatiser des opérations répétitives, et que pour un langage toute souplesse syntaxique se paye en espace et en temps (il faut bien écrire les instructions qui vont interpréter les commandes, et autant de variations possibles autant de dizaines de lignes de code en plus).

La réponse du système à l’utilisateur qui lui soumet une commande est tout aussi austère, le plus souvent d’ailleurs il n’y a pas de réponse. Ainsi, si vous voulez modifier le nom d’un fichier, et que le nouveau nom que vous souhaitez lui donner est déjà pris par un autre fichier, si le renommage est effectué le fichier homonyme sera détruit. Les systèmes à l’usage des secrétaires, des comptables ou des présidents d’université, face à un tel cas, posent la question à l’utilisateur : « veux-tu vraiment détruire l’autre fichier ? », ou renomment le fichier menacé. Pour Unix rien de tel : le fichier est froidement détruit sans même une notification post mortem. C’est un système pour les vrais hommes, qui savent ce qu’ils font, assument leurs erreurs et savent les réparer.

Mais à cet ascétisme il y a une raison encore plus impérieuse, et qui n’est pas de l’ordre du sado-masochisme. L’invention sans doute la plus géniale d’Unix est la possibilité, par la simple syntaxe du shell, de réaliser des opérations de composition de processus, au sens algébrique du terme.

Les opérations les plus simples consistent à rediriger les résultats de sortie d’une commande vers un fichier, et à donner en entrée à une commande des données stockées dans un fichier, ce qui n’est pas encore de la composition de processus. Mais pour réaliser ceci il fallait déjà standardiser les formats d’entrée et de sortie des commandes, et découpler les mécanismes d’entrée et de sortie, pour introduire les notions d’entrée standard et de sortie standard, ce qui ouvrait la voie à des réalisations plus ambitieuses.

L’opérateur de composition de processus en séquence est «  ; ». On remarque la concision. « a ; b » se lit : exécuter la commande a, puis la commande b. La plupart des commandes Unix s’exécutent comme un processus indépendant. Le lancement d’un programme créé par un utilisateur obéit à la même syntaxe et aux mêmes règles, ce qui encourage les développeurs à utiliser les conventions des commandes Unix, et ainsi à contribuer à l’enrichissement du système.

L’opérateur de composition de processus parallèles asynchrones est « & ». « a & b » se lit : lancer l’exécution de a, puis sans attendre qu’elle se termine lancer aussitôt b. Les deux processus seront concomitants (et concurrents pour l’acquisition du contrôle du processeur).

L’opérateur de composition de processus parallèles synchrones est « | ». « a | b » se lit : lancer l’exécution de a, puis lancer b qui va aussitôt attendre la première ligne de résultat issue de a, la traiter puis se bloquer en attente de la suivante, etc.

Prenons un exemple simple : je veux la liste de tous les processus en cours d’exécution qui exécutent le serveur WWW Apache, avec leur numéro de processus.

La commande qui affiche la liste des processus s’appelle « ps », qui doit, pour afficher non seulement les processus de l’utilisateur mais tous les autres, être agrémentée des paramètres a et x, ce qui s’écrit donc « ps ax ». Cette commande va produire la liste de tous les processus, avec leur numéro et le nom du programme exécuté, à raison d’une ligne par processus. Je veux filtrer cette liste pour n’en retenir que les lignes où le nom de programme qui apparaît est apache.

Parmi les plus belles commandes d’Unix il faut citer grep (pour global regular
expression print
retranscrit plus tard en general regular expression parser, analyseur général d’expressions régulières). Cette commande peut faire des choses très savantes, mais nous allons l’utiliser de façon très simple, pour retrouver une chaîne de caractères dans le texte soumis à son entrée standard. « grep apache » signifie : si la ligne de l’entrée standard contient le texte « apache », afficher le texte à l’écran, sinon passer à la suivante.

Nous allons composer les deux commandes « ps ax » et « grep apache » par l’opérateur de composition parallèle synchrone « | » :

ps ax | grep apache

Chaque ligne issue de la première commande sera soumise à la seconde pour analyse, ce qui réalisera le filtre souhaité :

$ ps ax | grep apache
  284 ?        S      0:00 /usr/sbin/apache
  295 ?        S      0:00 /usr/sbin/apache
  296 ?        S      0:00 /usr/sbin/apache
  297 ?        S      0:00 /usr/sbin/apache
  298 ?        S      0:00 /usr/sbin/apache
  299 ?        S      0:00 /usr/sbin/apache
  434 pts/0    S      0:00 grep apache

Je reçois ainsi la liste de tous les processus Apache avec leur numéro, et en prime le processus d’analyse, puisque sa ligne de commande comporte elle aussi le texte apache.

Cette métaphore du filtre est promue au rang de paradigme par UNIX : les programmes vraiment unixiens doivent être écrits comme des filtres, c’est à dire recevoir un flux de caractères sur leur entrée standard et émettre un flux de caractères (convenablement modifié) sur leur sortie standard, ce qui permet de les combiner ad libitum.

C’est le livre de Jean-Louis Nebut [7] qui me semble-t-il explicite le mieux la syntaxe du shell en termes de filtres et de composition de processus. Il est aisé de concevoir que le fonctionnement d’un tel système suppose une discipline assez ascétique dans la syntaxe des commandes et leur mode d’interaction. Notamment, puisqu’elles doivent être les syntagmes d’un langage de programmation, dont les programmes sont usuellement appelés shell scripts, il n’est pas souhaitable que les commandes engagent un dialogue avec l’utilisateur, qui dans ce cas ne sera pas un humain mais le système d’exploitation. Vous avez dit interface graphique ? passez votre chemin : seule vaut la ligne de commande.

Dissémination d’Unix

Un système exigeant

Nous venons de dire qu’Unix était un système de production de programme, conçu pour satisfaire les programmeurs professionnels et à peu près personne d’autre. Comment expliquer alors qu’il se soit répandu dans beaucoup d’autres domaines, souvent au prix de beaucoup de crises de nerfs de la part d’utilisateurs furieux ? Parce qu’il faut bien dire qu’Unix n’est pas un système confortable pour qui n’est pas disposé à y consacrer la moitié de son temps de travail.

L’auteur de ces lignes, il y a de nombreuses années, a compris que s’il voulait espérer conserver l’estime de certains collègues il lui fallait savoir se servir assez couramment d’Unix et surtout de l’éditeur de texte Emacs avec lequel d’ailleurs il compose le présent texte. Cette prise de conscience a entraîné de nombreuses et lourdes conséquences. Il en va d’Emacs comme d’Unix : aucun espoir d’acquérir un minimum de maîtrise de cet éditeur (œuvre géniale de Richard Stallman) sans plusieurs heures de pratique quotidienne, qui au bout de quelques mois permettront de savoir raisonnablement utiliser quelques dizaines parmi ses 14 000 et quelques fonctions, sans parler du langage de programmation qui lui est incorporé. Bien, il fallait s’y mettre, et pour cela une seule solution : utiliser Unix et Emacs pour tout, rédaction de documents, courrier électronique, lecture des News du Net.

De ce type de situation on serait tenté d’inférer une conception un peu paradoxale du métier d’informaticien : le travail consisterait essentiellement à rester en symbiose avec le système et les outils de base comme Emacs, à se tenir au courant de leurs évolutions en fréquentant des collègues, par des rencontres, des colloques, les News, à essayer les nouveaux logiciels dès leur sortie, et, logiquement, à en produire soi-même. Il va de soi que dans cette perspective les demandes trop précises d’un employeur qui n’aurait pas compris ce processus seraient perçues comme autant d’obstacles mesquins. Le trait ici est bien sûr forcé, mais l’employeur avisé n’oubliera pas que ses ingénieurs, pour rester compétents, ont besoin de temps pour les activités énoncées ci-dessus.

La conclusion qui semblerait logique après la lecture des lignes précédentes serait qu’Unix aurait dû disparaître sous les coups furieux des DRH et des chefs de projet, ou du moins aurait dû rester cantonné à un petit monde de chercheurs, de développeurs et de hobbyistes. Il n’en a rien été pour au moins deux raisons exposées ci-dessous.

Naissance d’une communauté

Lorsqu’après quelques années de travail assez confidentiel il n’a plus été possible à AT&T (American Telegraph and Telephone) d’ignorer le travail de Thompson et Ritchie, celui-ci avait acquis une certaine ampleur et une certaine notoriété, notamment dans le monde universitaire. AT&T décida de vendre Unix assez cher aux entreprises [8], et se laissa convaincre (en 1974) d’en concéder l’usage gratuit aux universités. Cette décision fut à l’origine de la popularité d’Unix dans le monde universitaire. C’est en fait après le démantèlement du monopole d’AT&T en 1982 qu’Unix devint un véritable produit commercial pour les entreprises.

C’est en 1974 que Vinton Cerf (de l’Université Stanford) et Robert Kahn (de BBN) publièrent le premier article sur TCP/IP, qui allait devenir le cœur des protocoles de l’Internet. Le travail sur les protocoles fut intense, avec des contributions décisives, soit dit sans chauvinisme, du Français Louis Pouzin déjà cité. En 1977 TCP/IP atteignit une certaine maturité, et c’est de ce moment que l’on peut dater la naissance de l’Internet expérimental.

En 1979 la DARPA lançait des appels d’offres assez généreux auprès des centres de recherche prêts à contribuer au développement de TCP/IP, elle souhaitait notamment l’adapter au VAX 11/780, l’ordinateur à mots de 32 bits que DEC venait de lancer (les PDP-11 étaient des machines à mots de 16 bits). Bill Joy, du Computer Systems Research Group (CSRG) de l’Université de Californie à Berkeley et futur fondateur de Sun Microsystems, convainquit la DARPA qu’Unix serait une meilleure plateforme que VMS pour ce projet parce qu’Unix avait déjà été porté sur plusieurs types d’ordinateurs.

De fait, dès 1977 le CSRG avait créé une version expérimentale d’Unix (la « 1BSD », pour Berkeley System Distribution) dérivée de la Sixth Edition des Bell Labs. La Seventh Edition de 1978 tournait sur DEC PDP-11 et avait été portée sur un ordinateur à mots de 32 bits, l’Interdata 8/32 : elle fut portée sur VAX sous le nom de 32V, et le CSRG (nommément Bill Joy et Ozalp Babaõglu) réunit ces diverses souches pour créer la 3BSD en 1979.

Le financement de la DARPA devait stimuler les deux projets : le développement de cette nouvelle version d’Unix nommée « Unix BSD », résolument tournée vers le monde des réseaux, et celui de ce que l’on connaît aujourd’hui sous le nom de TCP/IP. De ce jour, les développements respectifs de TCP/IP, de l’Internet et d’Unix furent indissociables. La souche Bell Labs continua son évolution indépendamment pour engendrer en 1983 la version System V. La suite de cette histoire se trouve ci-dessous.

La disponibilité pratiquement gratuite pour les universités, les subventions généreuses de la DARPA, c’était deux contributions de poids au succès d’Unix. Un troisième ingrédient s’y ajouta, sans lequel les deux autres n’eussent sans doute pas suffi : ce monde du réseau des centres de recherche était par ses traditions prédisposé aux échanges intellectuels, et justement la construction du réseau lui fournissait le moyen de s’y adonner de façon décuplée. Dans le monde scientifique d’antan, les contacts avec l’extérieur un peu lointain étaient l’apanage des patrons de laboratoire, qui allaient aux conférences où ils accédaient à des informations qu’ils pouvaient ensuite distiller pendant des séminaires suivis religieusement par les disciples. Avec le réseau, de simples étudiants ou de vulgaires ingénieurs pouvaient entrer en contact directement avec des collègues prestigieux. En outre, ces échanges étaient indispensables, parce qu’Unix était gratuit, mais sans maintenance, les utilisateurs étaient contraints de s’entr’aider pour faire fonctionner leurs systèmes. Je me rappelle encore en 1981 les collègues de l’IRCAM qui administraient un des premiers VAX sous Unix d’Europe, toute leur maintenance logiciel était en direct avec Berkeley. Une communauté (scientifique ? technique ? dans les marges de la science et de la technique ?) allait se créer. L’association USENIX en serait une des instances visibles, mais elle resterait largement informelle.

Il est à noter que cette communauté serait assez vite internationale : pour les managers d’AT&T qui s’étaient laissé convaincre de concéder Unix gratuitement aux chercheurs, comme pour la DARPA, le monde informatisable se limitait aux États-Unis et à leur extension canadienne, ils n’avaient pas un instant envisagé l’existence d’universités en Europe ou en Australie, et encore moins qu’elles puissent s’intéresser à Unix. Pourtant, Salus énumère les institutions inscrites à la première liste de diffusion électronique, telles que citées par le numéro 1 de UNIX NEWS de juillet 1975, et on y trouve déjà l’Université catholique de Louvain et l’Université hébraïque de Jérusalem. N’oublions pas que le premier article consacré à Unix était paru dans les Communications of the Association for Computing Machinery (CACM), l’organe de la principale société savante informatique, en juillet 1974, sous la plume de Thompson et Ritchie, seulement un an auparavant donc.

Accéder au réseau, pour les non-Américains, posait quand même un problème de taille : financer une liaison téléphonique transatlantique privée n’était, et n’est toujours pas, à la portée d’un budget de laboratoire. Ce n’est pas avant la décennie 1980 que les subventions conjuguées de la National Science Foundation (NSF) américaine et, par exemple, du ministère français de la Recherche permettront un accès convenable pour l’époque à ce qui était devenu entre-temps l’Internet. Mais dès les années 1970 des groupes Unix quasi militants apparaissaient dans quelques pays : Australie en 1975, Grande-Bretagne en 1976, Pays-Bas en 1978, France en 1981. Unix se propage sur bande magnétique, son usage est recommandé de bouche à oreille, c’est assez analogue au phénomène des radio-amateurs dans les années 1960 : tout le plaisir est de réussir à établir une communication avec le Japon ou le Kenya, peu importe après tout ce que l’on se dit, mais le sentiment d’appartenance à la même société d’initiés est d’autant plus fort que les gens sérieux et raisonnables ne comprennent pas.

Ce milieu social d’étudiants en rupture de PhD et d’ingénieurs de centres de calcul dont les responsables ont renoncé à comprendre la teneur exacte de l’activité va assurer le développement d’Unix et de l’Internet, tant les deux sont indissociables. Ce faisant ils vont engendrer une nouvelle entité technique et économique, le logiciel libre. Tout cela sans maîtrise d’ouvrage, sans cahier des charges, sans business plan, sans marketing, sans conduite du changement ni plan qualité, ni tout un tas d’autres choses soi-disant indispensables.

Avant d’aborder la question du logiciel libre, il faut s’interroger sur un phénomène quand même surprenant : nous avons dit qu’Unix était très inconfortable pour tout autre qu’un développeur utilisant ses diverses fonctions à longueur de journée. Comment expliquer alors qu’en une dizaine d’années il se soit vu reconnaître une position hégémonique dans tout le monde de la recherche ? Parce que même dans les départements d’informatique des universités et des centres de recherche, la majorité des gens ne passent pas leur temps à programmer, il s’en faut même de beaucoup, alors ne parlons pas des biologistes ou des mathématiciens.

La réponse n’est pas univoque. Mon hypothèse est que si cette population d’étudiants et d’ingénieurs, pauvre en capital social et en légitimité scientifique, a pu se hisser à cette position hégémonique, c’est que la place était à prendre. Pendant les années 1960 et 1970, on assiste aux tentatives des autorités académiques légitimes de l’informatique, dont les porte-drapeaux ont nom Dijkstra, Hoare, Knuth, ou en France Arsac, Ichbiah, Meyer, pour imposer leur discipline comme une science à part entière, égale de la Physique ou de la Mathématique. Pour ce faire ils élaborent des formalisations, des théories, des concepts souvent brillants. Peine perdue, ils échouent, malgré le succès technique et économique retentissant de l’informatique, ou peut-être même victimes de ce succès. Le public, fût-il universitaire, ne discerne pas l’existence d’une science derrière les objets informatiques qui deviennent de plus en plus ses outils de travail quotidiens. Les raisons de cet état de fait restent en grande partie à élucider, sur les traces de chercheurs en histoire de l’informatique tels en France Pierre-Éric Mounier-Kuhn, Valérie Schafer ou Camille Paloque-Berges. Ce désarroi identitaire de l’informatique universitaire snobée par ses collègues laissait le champ libre à des non-mandarins d’autant plus dépourvus de complexes qu’ils n’avaient aucune position à défendre et que le contexte économique d’Unix lui permettait de se développer dans les marges du système, sans gros budgets hormis le coup de pouce initial de la DARPA. Les financements absorbés par Unix et TCP/IP sont assez ridicules si on les compare à ceux de l’intelligence artificielle, sans doute la branche la plus dispendieuse et la plus improductive de la discipline [9], ou même à ceux du langage Ada, projet sur lequel se sont penchées toutes les bonnes fées de la DARPA et du monde académique, et qui finalement n’a jamais percé en dehors des industries militaires et aérospatiales (ce n’est déjà pas si mal, mais les espoirs étaient plus grands).

Finalement, les outsiders unixiens l’ont emporté par leur séduction juvénile et leur occupation du terrain pratique, qui leur a permis de proposer à telle ou telle discipline les outils qui lui manquaient au moment crucial : le système de composition de documents TeX pour les mathématiciens, qui seul répondait à leurs exigences typographiques, et pour les informaticiens toutes sortes de langages et surtout d’outils pour créer des langages. J’ai vu dans le monde de la biologie Unix supplanter VMS : il faut bien dire que les tarifs pratiqués par Digital Equipment et la rigidité de sa politique de produits lui ont coûté la domination d’un secteur qui n’avait pas beaucoup de raisons de lui être infidèle. Un collègue m’a confié un jour « Le principal argument en faveur d’Unix, c’est que c’est un milieu sympathique ». Cet argument m’avait paru révoltant, mais je crois qu’il avait raison, si l’on prend soin de préciser que par « sympathique » on entend « propice aux libres échanges intellectuels ».

Le schisme

Une si belle unanimité ne pouvait pas durer (et aurait été de mauvais augure). La souche BSD manifestait une certaine indépendance par rapport à l’orthodoxie AT&T. Ci-dessus nous avons laissé d’une part les versions issues de la souche Bell Labs, regroupées à partir de 1983 sous l’appellation System V, de l’autre celles issues de la souche BSD, qui en 1983 en sont à la version 4.2BSD. De cette époque on peut vraiment dater la séparation de deux écoles rivales. On pourra se reporter au livre de McKusick et ses coauteurs [10] qui donne dans ses pages 5 et 6 un arbre phylogénétique complet du genre Unix.

Quelles étaient les différences entre System V et BSD ? En fait la seule différence vraiment profonde, perceptible dans l’architecture du noyau, était le code destiné à la communication entre processus (et de ce fait au fonctionnement du réseau), organisé dans les systèmes BSD selon le modèle de socket, tandis que les System V utilisaient un autre modèle, moins versatile, baptisé STREAMS. BSD fut aussi en avance pour adopter un système de mémoire virtuelle à demande de pages et un système de fichiers amélioré (Fast File System). Autrement certaines commandes du shell étaient différentes, ainsi que le système d’impression et l’organisation des fichiers de paramètres du système (répertoire /etc) [11], etc. La différence était surtout perceptible pour les ingénieurs système et pour les développeurs de logiciels proches du noyau.

Au fur et à mesure qu’Unix se répandait, certains industriels en percevaient l’intérêt commercial et lançaient des gammes de matériels sous Unix. Bill Joy et certains de ses collègues de Berkeley créaient en 1982 Sun Microsystems dont les ordinateurs à base de processeurs Motorola 68000 mettaient en œuvre une version dérivée de BSD, SunOS. Chez DEC c’était Ultrix. HP-UX de Hewlett-Packard et AIX d’IBM étaient de sensibilité System V. Dès 1980 Microsoft avait lancé Xenix ; à ce sujet il convient d’ailleurs de noter qu’à cette époque Bill Gates considérait Unix comme le système d’exploitation de l’avenir pour les micro-ordinateurs ! AT&T lançait ses propres microprocesseurs et ses propres ordinateurs (la gamme 3B) sous Unix, qui n’eurent aucun succès : le démantèlement du monopole d’AT&T sur les télécommunications aux États-Unis au début des années 1980 lui donnait l’autorisation de commercialiser des ordinateurs, mais cela ne suffit pas à assurer le succès de cette gamme de machines...

En fait les différences idéologiques étaient plus tranchées que les différences techniques. Le monde de la recherche et de l’université, ouvert sur les réseaux, penchait pour BSD, issu du même univers, cependant que le monde de l’entreprise avait tendance à se méfier de l’Internet (ou à lui être indifférent) et à se tourner vers la version de la maison-mère, System V.

Il y eut des trahisons sanglantes et impardonnées : en 1992, Sun, porte-drapeau du monde BSD avec SunOS 4.1.3, à l’époque le meilleur Unix de l’avis de la communauté des développeurs, conclut avec AT&T des accords d’ailleurs sans lendemain aux termes desquels il passait à System V sous le nom de Solaris, honni par les puristes BSD. C’était un peu comme si le pape avait annoncé, du balcon de Castelgandolfo, son ralliement à la Réforme.

Ce qui est certain, c’est que ces luttes de clans et ce culte de la petite différence ont beaucoup nui à la diffusion d’Unix et beaucoup contribué au succès des systèmes Windows de Microsoft. La communauté des développeurs a également déployé tous ses efforts pour combattre toute tentative de développer au-dessus d’Unix et du système de fenêtrage X une couche d’interface graphique « à la Macintosh », qui aurait rendu le système utilisable par des non-professionnels. De tels systèmes sont apparus (Gnome, KDE), alors que la bataille a été gagnée (au moins provisoirement) par Windows. Mais après tout Android et iOS sont des Unix...

On peut aujourd’hui considérer que le schisme BSD-System V est résorbé dans l’œcuménisme : tous les System V ont des sockets (pour faire du TCP/IP il faut bien) et tous les BSD ont le système de communication inter-processus (IPC) STREAMS de System V, notamment. Mais l’idéologie BSD reste toujours vivace.

Aux sources du logiciel libre

Principes

Le logiciel libre mobilise beaucoup les esprits en ce début de millénaire. La définition même de la chose suscite de nombreuses controverses dues en partie au fait que le mot anglais free signifie à la fois libre et gratuit. Si l’on s’en tient à une acception restrictive, l’expression logiciel libre désigne un modèle économique et un mouvement associatif créés en 1984 par un informaticien de génie, Richard M. Stallman, auteur depuis 1975 d’un logiciel extraordinaire, Emacs. En 1983, Stallman, qui travaillait au laboratoire d’intelligence artificielle du MIT, excédé par les restrictions au développement d’Unix induites par les droits de propriété industrielle d’AT&T et de quelques autres industriels [12], fonde le projet GNU (« GNU is Not Unix ») destiné à créer un système d’exploitation libre de droits et dont le texte source serait librement et irrévocablement disponible à tout un chacun pour l’utiliser ou le modifier.

L’année suivante, Stallman crée la Free Software Foundation (FSF) pour « promouvoir le droit de l’utilisateur d’ordinateur à utiliser, étudier, copier, modifier et redistribuer les programmes d’ordinateur », c’est à dire étendre le modèle du projet GNU à d’autres logiciels. Un corollaire indissociable de ce principe est que le texte source du logiciel libre doit être accessible à l’utilisateur, ainsi que la documentation qui permet de l’utiliser. Cette clause confère à tout un chacun le moyen de modifier le logiciel ou d’en extraire tout ou partie pour une création nouvelle. Pour assurer la pérennité du principe, tout logiciel libre conforme aux idées de la FSF est soumis aux termes d’une licence, la GNU GPL (GNU General Public License), qui impose les mêmes termes à tout logiciel dérivé. Ainsi il n’est pas possible de détourner du logiciel libre pour créer du logiciel non libre sans violer la licence.

Préhistoire

Avant d’examiner plus avant les tenants et les aboutissants de ces principes et de ce modèle économique, il convient de signaler que jusqu’en 1972 le logiciel, s’il n’était pas libre au sens de la GPL, était pratiquement toujours disponible gratuitement et très souvent sous forme de texte source, et ce parce que jusqu’alors la conscience du coût et de la valeur propre du logiciel était dans les limbes. IBM, qui avait fini par accaparer 70% du marché mondial de l’informatique, distribuait systèmes d’exploitation et logiciels d’usage général à titre de « fournitures annexes » avec les ordinateurs.

Peu après l’annonce de la gamme IBM 360 en 1964, RCA annonça les ordinateurs Spectra 70 dont l’architecture était conçue afin de pouvoir accueillir le logiciel développé pour les IBM 360, y compris le système d’exploitation. Cette ambition ne se réalisa pas, notamment parce que les ingénieurs de RCA n’avaient pu se retenir d’ajouter à leur système des « améliorations » qui en détruisaient la compatibilité, mais IBM avait perçu la menace et commença à élaborer une parade juridique qui consistait à séparer la facturation du logiciel de celle du matériel : ce fut la politique d’unbundling (dégroupage), annoncée en 1969, mais dont l’application à ce moment fut entamée assez mollement.

Au début des années 1970, quelques industriels (notamment Telex, Memorex et Calcomp) commencèrent à vouloir profiter de la manne et pour cela vendre des matériels compatibles avec ceux d’IBM (disques, dérouleurs de bandes, imprimantes, et plus tard unités centrales et mémoire), c’est à dire tels que les clients pourraient les acheter et les utiliser en lieu et place des matériels IBM originaux. IBM riposta à ce qu’il considérait comme une concurrence déloyale en cessant de divulguer le code source des parties de système d’exploitation qui permettaient la conception et le fonctionnement des systèmes concurrents. Il en résulta des procès acharnés, et en 1972 un arrêt de la Cour suprême des États-Unis, au nom de la législation anti-trust créée pour limiter l’emprise de Rockfeller, statua dans le procès Telex-IBM et imposa à IBM de facturer à part logiciel et matériel. Ceci précipita l’entrée en vigueur de la politique d’unbundling. Les observateurs de l’époque déclarèrent que cela n’aurait aucun effet, mais deux industries étaient nées : celle du matériel compatible IBM, qui serait florissante une vingtaine d’années, et celle du logiciel, dont Microsoft est le plus beau fleuron.

Précurseurs

Si l’Église chrétienne a reconnu à Jérémie, Isaïe, Daniel et Ézéchiel la qualité de précurseurs de la vraie foi et de la venue du Sauveur, Richard Stallman est plus intransigeant, mais n’en a pas moins lui aussi des précurseurs. Ils se situent dans les limbes, à l’époque où ARPANET engendrait TCP/IP, qui était bien évidemment du logiciel, et qui était distribué aux membres du réseau, c’est à dire, nous l’avons vu, potentiellement à toutes les universités et tous les centres de recherche. Comme tout cela se passait à Berkeley, il en résulta que le système de prédilection de TCP/IP et, partant, de l’Internet fut Unix, et que traditionnellement les principaux logiciels de réseau sous Unix furent distribués gratuitement, du moins aux centres de recherche, sous les termes d’une licence dite « BSD » qui garantissait les droits de propriété intellectuelle des « Régents de l’Université de Californie ». Les éléments de base du protocole TCP/IP proprement dit font partie du noyau Unix BSD, d’où ils ont assez vite été adaptés aux noyaux des autres Unix, cependant que les logiciels d’application qui en permettaient l’usage, tels que Sendmail pour envoyer du courrier électronique, Ftp pour transférer des fichiers, Telnet pour se connecter à un système distant, etc., étaient distribués indépendamment. Plus tard Bind pour la gestion du service de noms de domaines, INN pour le service de News et beaucoup d’autres logiciels s’ajouteront à cette liste, toujours gratuitement.

Par ailleurs, Unix devenait populaire dans le monde de la recherche et les logiciels développés par des scientifiques étaient aussi rendus disponibles dans des conditions analogues : TeX pour la composition typographique, Blast pour la comparaison de séquences biologiques, Phylip pour l’analyse phylogénétique, pour ne citer que trois exemples parmi une foule, sont disponibles selon les termes de licences assez variées (ou d’absence de licence...), mais toujours sans versement de redevances. Bref, le monde de la recherche fait et utilise du logiciel libre depuis longtemps sans forcément le dire ni même en avoir conscience.

Économie du logiciel

L’économie du logiciel, étudiée notamment avec brio par Michel Volle dans son livre e-conomie [13], exprime un paradoxe dont la conscience ne s’est manifestée que récemment. Citons Michel Volle dans la présentation de son livre : « Le “système technique contemporain” est fondé sur la synergie entre micro-électronique, informatique et automatisation. On peut styliser sa fonction de production en supposant qu’elle est “à coûts fixes” : le coût de production, indépendant du volume produit, est payé dès l’investissement initial. Développons cette hypothèse : les usines étant des automates, l’emploi réside dans la conception et la distribution. La distribution des revenus n’est pas reliée au salariat. Les entreprises différencient leur production pour construire des niches de monopole. Elles organisent leurs processus autour du système d’information. Le commerce passe par des médiations empruntant la communication électronique.

L’investissement est risqué, la concurrence est mondiale et violente. On retrouve dans cette présentation stylisée des aspects tendanciels de notre économie. Elle éclaire la description des secteurs de l’informatique, de l’audiovisuel, des réseaux (télécommunications, transport aérien, etc.), du commerce, ainsi que les aspects stratégiques et tactiques des jeux de concurrence dans ces secteurs et dans ceux qui les utilisent. On voit alors que cette économie hautement efficace pourrait aller au désastre si elle était traitée sur le mode du “laissez faire”, sans considérer les exigences de l’éthique et de la cohésion sociale. » (texte disponible sur le site http://www.volle.com selon les termes de la GNU Free Documentation License).

Dans le cas du logiciel ces traits sont particulièrement marqués : la création d’un logiciel important tel qu’un système d’exploitation [14] est une tâche colossale qui peut mobiliser des centaines de personnes pendant une décennie, le coût marginal du produit final livré dans un grand magasin est pratiquement nul, le prix payé par le client est essentiellement celui de la boîte en carton, des frais de transport et de gestion et de l’effort commercial. Il en résulte, dans l’industrie du logiciel, une tendance irréversible au monopole : dans une industrie à coût marginal de production nul, dès que vous vendez plus que les autres, vous êtes très vite beaucoup plus riche, avec les conséquences qui en découlent. Dès lors qu’un marché prend forme et s’organise, il émerge un fournisseur unique : Microsoft pour les systèmes des micro-ordinateurs et la bureautique, Oracle pour les bases de données, SAP pour la gestion financière et comptable, SAS pour l’analyse statistique. Quelques concurrents subsistent, en permanence au bord de la faillite ou cachés dans des « niches » de marché [15].

Manuel Serrano en a tiré les conséquences dans sa thèse d’habilitation [16] en plaidant pour le « logiciel moyen » : les grands logiciels ne seraient devenus encombrants, dans bien des cas, que par la prolifération incontrôlée d’un processus de développement devenu bureaucratique. Une réflexion plus intense d’un groupe plus petit et plus conscient des objectifs à atteindre permettrait d’obtenir un logiciel plus petit et de meilleure qualité.

Dans cette situation désespérante, l’espoir de diversité, dans un contexte industriel classique, ne peut venir que de l’apparition de nouveaux segments de marchés, desservis par de nouvelles technologies, rôle joué dans le passé par les mini-ordinateurs, puis les micro-ordinateurs à base de microprocesseur, innovations technologiques qui réduisaient de plusieurs ordres de grandeur les coûts de production.

Modèle du logiciel libre

Le logiciel libre, face à cette situation, représente un potentiel très dynamique, parce qu’il obéit à un modèle économique tout autre. Microsoft ne peut utiliser contre lui aucune des armes classiques de la concurrence industrielle, telles que la guerre des prix, la publicité, les fournitures associées, l’effet de gamme, etc., parce que le logiciel libre n’est sur aucun de ces terrains.

Les caractères économiques du logiciel libre ont été étudiés, entre autres, par Marie Coris dans son travail de thèse de doctorat à l’Université Montesquieu de Bordeaux IV (voir sa communication au congrès JRES 2001 Impact des logiciels libres sur l’industrie du logiciel : vers un nouveau modèle productif ?). Elle énumère d’abord les caractères du logiciel en général :

 un bien d’information, aspect amplement développé ici dont découle l’importance des économies d’échelle ;
 un bien en réseau : son utilité croît en raison du nombre de ses utilisateurs ;
 un bien à cheval entre public et privé :

  • le coût de production pratiquement engagé en totalité dès le premier exemplaire,
  • l’usage non destructif (il peut être utilisé par un nombre infini d’utilisateurs),
  • l’usage non exclusif (il est difficile d’empêcher quelqu’un d’autre de l’utiliser) sont des caractéristiques d’un bien public,
  • le recours à la protection du droit d’auteur ou du brevet permet d’annuler les aspects « publics », par exemple en limitant la reproductibilité, et de faire du logiciel un bien privé.

L’alternative se situe entre le logiciel comme bien privé, idée des entreprises telles que Microsoft, Oracle, etc., et le logiciel comme bien public, idée du logiciel libre.

Volle, Coris et d’autres ont montré que le marché d’un bien d’information ne peut prendre que deux formes :

 si les instances de ce bien sont suffisamment différenciées, plusieurs fournisseurs peuvent coexister dans des niches du marché ;
 dès qu’un fournisseur réussit à prendre sur ses concurrents un avantage significatif en déniant leur différence, il obtient une situation de monopole du fait des économies d’échelle considérables procurées par le volume des ventes.

Le logiciel libre échappe à cette alternative parce qu’il se situe hors de la logique marchande, et que la rétribution de ses auteurs relève des domaines symbolique et moral. Michel Volle a fait remarquer qu’un auteur de logiciel libre aurait aussi un accès facilité au capital-risque le jour où il voudrait créer une entreprise du fait de la reconnaissance acquise dans le domaine non marchand.

La GNU GPL définit parfaitement les « quatre libertés » caractéristiques du logiciel libre : liberté d’utilisation, liberté de copie, liberté de modification et liberté de redistribution. Elle autorise donc la modification et la redistribution, mais en imposant que le logiciel reste sous GPL, et ce également dans le cas de l’incorporation d’un logiciel libre à un nouveau logiciel : le caractère « libre » est héréditaire et contagieux. Dans ce dispositif, le statut du code source détermine la nature publique du bien, plus qu’il ne sert vraiment à la maintenance par l’utilisateur. La publicité du code interdit l’appropriation privée. Mais plonger dans les sources pour y introduire des modifications est une entreprise à n’envisager qu’avec circonspection ; cela risque de coûter fort cher.

Reste à se poser une question : le logiciel libre, comme le logiciel non libre, est écrit par des hommes et des femmes qui y consacrent tout ou partie de leur vie professionnelle et qui ne vivent pas de l’air du temps. Qui finance la production de logiciels libres, et comment, puisque, quoique ses apôtres s’en défendent, sa caractéristique principale est bien qu’il est possible de l’utiliser sans bourse délier ?

Bertrand Meyer, dans un article assez polémique de critique du libre [17], dresse une nomenclature des sources de financement possibles, qui énerve les adeptes mais à laquelle il est difficile de dénier toute véracité :

  1. une donation : le développeur vit de sa fortune personnelle ou développe pendant ses nuits et ses jours de congé ;
  2. le financement public : le logiciel a été créé par un centre de recherche, une université ou une autre entreprise publique ;
  3. le financement privé : une entreprise décide de distribuer un logiciel développé à ses frais selon le modèle libre ;
  4. la subvention (publique ou privée) : le développeur crée un logiciel en utilisant son temps de travail et les ressources de son employeur, public ou privé, sans que celui-ci lui ait confié cette tâche.

Le cas 4 est celui qui provoque parfois quelque agacement, et on ne peut exclure qu’il soit assez répandu. Cela dit, un examen de ce cas informé par les tendances les plus récentes de la sociologie du travail montre que cette situation n’est pas forcément scandaleuse, et que l’initiative prise par le développeur peut comporter des avantages pour son employeur même s’il n’en avait pas initialement conscience. La création d’Unix en est le plus bel exemple, et si l’on regarde en arrière, on peut se dire qu’AT&T en aurait sans doute tiré encore plus d’avantages en en faisant un logiciel libre ; Unix ne lui a pas vraiment rapporté beaucoup d’argent, et sa facturation aux entreprises a considérablement restreint sa diffusion. Le succès actuel de Linux apporte ex post des arguments à l’appui de cette hypothèse. Toutefois, Bertrand Meyer a raison d’écrire que sans le couple Intel-Microsoft il n’y aurait jamais eu de PC à 600 Euros, et partant jamais de succès pour Linux.

Un exemple typique et très instructif du cas 3 est celui du logiciel Ghostscript, produit par la société Aladdin Enterprises, qui est un interpréteur du langage PostScript. PostScript est un langage de description de pages utilisé comme format de sortie par de nombreux logiciels et comme format d’entrée par beaucoup d’imprimantes. Ghostscript est utile pour afficher à l’écran le contenu d’un fichier PostScript, et pour l’imprimer sur une imprimante dépourvue d’interpréteur PostScript incorporé, ce qui est le cas notamment de beaucoup de petites imprimantes à jet d’encre. Ce logiciel a deux groupes bien distincts d’utilisateurs : des millions de propriétaires de petites imprimantes bon marché qui veulent afficher et imprimer du PostScript, et une dizaine d’industriels fabricants d’imprimantes, qui incorporent Ghostscript par paquets de cent mille exemplaires à leurs productions.

Dans sa grande sagesse, la société Aladdin Enterprises a décidé de ne pas se lancer dans la commercialisation à grande échelle d’un logiciel qui vaudrait quelques dizaines d’Euros, et de le distribuer aux particuliers sous les termes d’une licence dite Aladdin Ghostscript Public License, qui protégeait la propriété intellectuelle d’Aladdin et permettait un usage gratuit. Depuis 2000, Ghostscript est un logiciel libre disponible sous les termes de la GNU GPL. Aladdin Enterprises tire plutôt ses revenus de la clientèle des fabricants d’imprimantes.

Le cas 2 est sans doute le plus fréquent. La justification initiale de ce modèle me semble remonter au principe constant de l’administration américaine : ce qui a été payé une fois par le contribuable ne doit pas l’être une seconde fois. Les logiciels dont le développement a été financé par des contrats de recherche de la DARPA doivent être mis gratuitement à la disposition du public, au même titre que les photos de l’espace prises par la NASA.

Ce principe ne semble pas scandaleux : ce qui a été financé par l’argent public [18] (au sens large) revient au public. Les résultats de la recherche publique sont disponibles publiquement. Il s’agit d’un système de redistribution : tous les contribuables financent les logiciels produits de cette façon, et les bénéficiaires en sont les utilisateurs. Il est légitime de s’interroger sur l’équité de ce processus de répartition, mais il en est sans doute de pires.

Qui pourrait s’estimer lésé ? Essentiellement les entreprises dont la prospérité repose sur le logiciel commercial, et qui pourraient arguer d’une concurrence déloyale, puisque le plus souvent alimentée par des financements publics. Curieusement, on observe peu de protestations de cette nature, et encore moins de procès.

Il convient aussi de remarquer que le modèle du logiciel libre, s’il n’apporte apparemment que des avantages à l’utilisateur, peut comporter des inconvénients pour l’auteur, qui s’interdit en fait tout contrôle exclusif sur la divulgation de son travail. Certes, les clauses de la GNU GPL permettent la commercialisation de logiciel libre, et il est parfaitement possible de recourir au système de la double licence, par exemple GNU GPL pour le monde académique et licence commerciale pour le monde industriel. Mais il est clair qu’un logiciel novateur dont l’auteur peut espérer des revenus importants sera mal protégé des contrefaçons si son code source est divulgué. En fait, dans le monde académique la pression idéologique pour la GNU GPL est très forte, et les auteurs de logiciels qui souhaitent vivre des fruits de leur activité de développeur plutôt que d’un emploi universitaire (ou qui, faute d’un tel emploi, n’ont pas le choix) sont assez marginalisés par ce système. Le caractère contagieux et contraignant de la GNU GPL est très pénalisant pour l’auteur qui ne souhaiterait pas vivre dans l’abnégation (c’est le terme exact : le logiciel qu’il a écrit ne lui appartient plus), ou qui, faute d’avoir obtenu un poste dans un organisme public, ne le pourrait pas. Il y a des exemples d’auteurs qui pour avoir refusé les servitudes de la GNU GPL se sont vu mettre au ban de la communauté, leurs travaux passés sous silence et leurs logiciels exclus des serveurs publics.

En fait, la réalité usuelle du développeur de logiciel libre est qu’il gagne sa vie autrement, et que la rétribution qu’il attend pour son oeuvre est la reconnaissance de ses pairs. Quiconque bénéficie du logiciel libre ressent le désir d’y contribuer et ainsi d’adhérer à une communauté perçue comme éthique. Il est souhaitable que la GNU GPL ne reste pas hégémonique et que d’autres licences aux termes moins idéologiques et plus équilibrés apparaissent dans le monde du logiciel libre.

Une autre façon de faire du logiciel

Le modèle du logiciel libre n’est pas sans influence sur la nature même du logiciel produit. En effet, dans ce contexte, un auteur peut facilement utiliser d’autres logiciels s’ils sont libres, que ce soit pour recourir à des bibliothèques de fonctions générales ou pour s’inspirer d’un logiciel aux fonctions analogues mais dans un environnement différent.

Des systèmes de développement coopératif se mettent en place par le réseau, qui seraient impensables pour du logiciel non-libre : les programmes sous forme source sont accessibles sur un site public, et chacun peut soumettre sa contribution. L’archétype de ce mode de développement est celui du noyau Linux proprement dit, coordonné par Linus Torvalds personnellement.

Pour qu’un tel procédé donne des résultats utilisables, il faut que le logiciel présente une architecture qui s’y prête, notamment une grande modularité, afin que chaque contributeur puisse travailler relativement indépendamment sur telle ou telle partie. Par exemple, dans le noyau Linux, tout ce qui permet le fonctionnement de machines multi-processeurs et la préemption des processus en mode noyau demande une synchronisation beaucoup plus fine des fils (threads) d’exécution : les adaptations nécessaires ont été réalisées par Robert Love, ce qui a été possible parce qu’il n’était pas trop difficile d’isoler les parties du code concernées. À l’inverse, lorsque Netscape a voulu donner un statut Open Source à une partie du code de son navigateur connue sous le nom Mozilla, l’opération a été rendue difficile parce que le code initial n’avait pas été réalisé selon un plan suffisamment modulaire.

Finalement, la réutilisation de composants logiciels, dont plusieurs industriels parlent beaucoup depuis des années sans grand résultat, sera sans doute réalisée plutôt par les adeptes de l’Open Source. En effet, l’achat d’un tel composant est un investissement problématique, tandis que le récupérer sur le réseau, l’essayer, le jeter s’il ne convient pas, l’adopter s’il semble prometteur, c’est la démarche quotidienne du développeur libre. On pourra lire à ce sujet l’article de Josh Lerner et Jean Tirole, The Simple Economics of Open Source.

L’analyse détaillée des conséquences d’un tel mode de construction de logiciel reste à faire, mais en tout cas il ne fait aucun doute que le résultat sera très différent. Rappelons les étapes classiques de la construction d’un système informatique pour un client selon le mode projet :

 expression des besoins ;
 cadrage, opportunité, faisabilité ;
 spécification ;
 réalisation ;
 recette...

Oublions tout cela dans le monde du libre. Le logiciel commence à prendre forme autour d’un noyau, noyau de code et noyau humain, généralement une seule personne ou un tout petit groupe. L’impulsion initiale procède le plus souvent du désir personnel des auteurs de disposer du logiciel en question, soit qu’il n’existe pas, soit que les logiciels existants ne leur conviennent pas, que ce soit à cause de leur prix ou de leur environnement d’exécution. Puis d’autres contributions viennent s’ajouter, presque par accrétion. Un coordonnateur émerge, souvent l’auteur initial, il assure la cohérence de l’ensemble ; on l’appelle dictateur bienveillant. Quand des divergences de vue surgissent, il peut y avoir une scission : ainsi deux versions sont disponibles pour Emacs, Gnu Emacs et Xemacs, toutes deux libres.

Le catalogue du logiciel libre est assez vaste. Tout d’abord le logiciel libre avant la lettre :

 TeX, LATEX, respectivement de Donald Knuth et de Leslie Lamport, avec lesquels est réalisé le présent document ;
 les logiciels réseau :

  • Sendmail, pour envoyer du courrier ;
  • Bind, pour résoudre les noms de domaine,
  • beaucoup d’autres, ce sont eux qui « font marcher » l’Internet ;

 X Window System ;
 des quantités de programmes scientifiques : l’essentiel de la biologie moléculaire se fait avec du logiciel libre.

Et pour le logiciel libre canonique, de stricte obédience :

 Gnu Emacs, un éditeur, et son rival Xemacs, GCC, un compilateur C, The Gimp, un concurrent libre de Photoshop, GNAT, un environnement de programmation ADA, GNOME, un environnement graphique pour Linux, gnumeric, un tableur ;
 Linux, FreeBSD, OpenBSD, NetBSD, des systèmes d’exploitation Unix ;
 PostgreSQL et MySQL, des systèmes de gestion de bases de données relationnelles ;
 Apache, un serveur WWW.

Chacun dans son domaine, ces logiciels sont de toute première qualité, et il n’y a pas à hésiter : ce sont eux qu’il faut utiliser ! Il manque bien sûr des choses, comme un logiciel OCR comparable à Omnipage de Caere...

Linux

Linux est indubitablement un système emblématique du logiciel libre. S’il y a d’autres systèmes d’exploitation libres, y compris dans la famille Unix, et si les logiciels libres ne sont pas tous destinés à Unix, l’association avec Linux est inévitable.

Le début de ce chapitre montre la filiation entre le mouvement autour d’Unix et le développement du logiciel libre, mais le paradoxe était qu’Unix lui-même n’était pas libre, AT&T en détenait les droits. Pourtant la communauté Unix était très attachée à l’idée de l’accès au code source du système, puisque le développement de nouveaux logiciels, certains très proches du système, ne pouvait être entrepris qu’avec un tel accès. En outre les droits d’AT&T semblaient contestables, parce qu’Unix avait recueilli beaucoup de contributions extérieures souvent non rémunérées. Plusieurs moyens ont été envisagés pour briser ou contourner ce paradoxe.

Le premier moyen consistait à obtenir d’AT&T une licence source. Si pour des chercheurs ou des universitaires c’était théoriquement possible, pratiquement des obstacles surgissaient. Si l’on était loin des États-Unis et que l’on n’avait pas de relations dans ce milieu, nouer les contacts nécessaires pouvait demander des mois. Une fois la licence source obtenue, il fallait obtenir du fournisseur de son ordinateur les sources de la version de système précise installée sur la machine, ce à quoi il ne se prêtait pas toujours avec bonne volonté. Bref, le seul moyen de pouvoir accéder réellement aux sources d’un système opérationnel était d’appartenir à un des groupes en vue du monde Unix. Rappelons qu’au début des années 1980 une machine capable de « tourner » Unix et le réseau coûtait au minimum l’équivalent de 100 000 Euros et que l’Internet n’atteignait pas l’Europe (il fallait se contenter du réseau UUCP, plus fruste).

Ces difficultés étaient particulièrement ressenties par les enseignants qui voulaient initier leurs étudiants à Unix, ce qui était bien sûr impossible sans accès au code source. Ils ont très tôt imaginé des moyens de contourner les droits d’AT&T. Le précurseur quasi légendaire de cette démarche fut un professeur australien, John Lions, dont le livre de 1977 A Commentary on the Unix System, V6 comportait le code du noyau. AT&T n’avait autorisé qu’un tirage limité, mais comme en URSS du temps de Brejnev apparut une véritable activité clandestine de Samizdat. Ce livre fut réédité en 1996, et il mérite toujours d’être lu. John Lions aura vu la publication légale de son œuvre avant sa mort en décembre 1998.

Andrew Tanenbaum, professeur à l’Université Libre d’Amsterdam (Vrije Universiteit Amsterdam) (il vient en 2014 de prendre sa retraite), rencontra le même problème. Pour les besoins de son enseignement il créa de toutes pièces un système miniature inspiré d’Unix, adapté aux micro-ordinateurs à processeur Intel et baptisé Minix. Le cours donna naissance à un livre dont les premières versions (1987) comportaient en annexe le code de Minix. Il était également possible d’acheter les disquettes pour installer Minix sur son ordinateur, mais ce n’était ni très bon marché ni très commode. C’est en partant de Minix que Linus Torvalds créa Linux.

Pendant ce temps le groupe BSD travaillait à expurger son code de toute instruction rédigée par AT&T, de façon à l’affranchir de tout droit restrictif. Le résultat fut 4.3BSD Net1 en 1989, puis 4.3BSD Net2 en 1991. L’objectif était de produire 4.4BSD-Lite en 1993, mais USL (Unix System Laboratories, une branche d’AT&T qui était à l’époque propriétaire des droits Unix) attaqua ce projet en justice, ce qui en différa la réalisation d’un an. Du groupe BSD émanèrent aussi un système Unix pour processeurs Intel en 1992, 386BSD, et une société destinée à le commercialiser, BSD Inc. Mais tous ces efforts furent retardés par des questions juridiques. Ils débouchèrent, sensiblement plus tard, sur les Unix libres FreeBSD, OpenBSD et NetBSD.

Rappelons que depuis 1983 le projet GNU visait lui aussi à produire un système similaire à Unix mais libre de droits et disponible sous forme source. Au début des années 1990 ce groupe avait réalisé un certain nombre de logiciels libres utilisables sur les divers Unix du marché, notamment des utilitaires, mais toujours pas de noyau. En fait ce n’est qu’en 2000 que le système Hurd destiné à remplacer le noyau Unix et basé sur le micro-noyau Mach créé à l’Université Carnegie-Mellon commença à ressembler à un vrai système.

Le salut allait venir d’ailleurs. En 1991 un étudiant de l’Université d’Helsinki, Linus Torvalds, achète un ordinateur doté d’un processeur Intel 386 et cherche un moyen d’explorer son fonctionnement. Minix lui semble une voie prometteuse, dans laquelle il s’engage, mais il y rencontre quelques obstacles et commence à réécrire certaines parties du noyau. En août 1991 Linux est né, en septembre la version 0.01 est publiée sur le réseau. Elle ne peut fonctionner que sous Minix. La version 0.02 publiée le 5 octobre 1991 permet l’usage du shell bash et du compilateur C gcc, deux logiciels GNU. La première version réputée stable sera la 1.0 de mars 1994.

Pour résumer la nature de Linux, nous pourrions dire que c’est un noyau, issu à l’origine de celui de Minix, et dont le développement est toujours assuré sous la supervision personnelle de Linus Torvalds, entouré des outils GNU, le tout sous licence GPL. Ce que Linus Torvalds a fait, d’autres auraient peut-être pu le faire eux-mêmes, et ils regrettent sans doute d’en avoir laissé l’occasion, à un Européen de surcroît, mais l’histoire est ainsi.

Linux est au départ plutôt un Unix System V, mais doté de toutes les extensions BSD souhaitables, ainsi que des dispositifs nécessaires à la conformité POSIX [19]. Sa principale originalité tient sans doute à son processus de développement : alors que tous les autres systèmes d’exploitation cités dans ce chapitre ont été développés par des équipes organisées, le développement du noyau Linux s’est fait depuis le début par « appel au peuple » sur l’Internet. Quiconque s’en sent la vocation peut participer aux forums, lire le code et proposer ses modifications (appelées patches). Elles seront examinées par la communauté, et après ce débat Linus Torvalds tranchera et décidera de l’incorporation éventuelle au noyau officiel. Il est difficile d’estimer les effectifs d’une telle communauté informelle, mais le nombre de contributeurs actifs au noyau Linux était en 2003 sans doute inférieur à 200 (nombre de développeurs recensés pour la version 2.0. Plus récemment : 1 326 contributeurs à la version 3.2 de janvier 2013). Le succès de Linux résulte sans doute en partie de facteurs impondérables : pourquoi l’appel initial de Torvalds a-t-il séduit d’emblée ? La réponse à cette question est sûrement complexe, mais en tout cas le succès est incontestable. Ce qui est sûr, c’est que l’appel à contribution d’août 1991 répondait à une attente et à une frustration largement répandues.

Comme nous pouvons nous y attendre, Linux connaît aussi la division en chapelles. Ici elles s’appellent « distributions ». Au début, la diffusion des éléments de Linux s’effectuait par le réseau, mais assez vite cela devint volumineux et compliqué. Il fallait transférer le noyau lui-même (en code source), ainsi que les logiciels (surtout GNU) sans lequel il aurait été inutilisable, en veillant à la synchronisation des versions compatibles. Au bout de quelques années apparurent des éditeurs qui distribuaient pour un prix modique des CD-ROMs comportant tout ce qu’il fallait pour démarrer.

Par exemple en 1996 on pouvait acheter pour l’équivalent de moins de 30 Euros (somme compatible avec la notion de logiciel libre, puisqu’elle ne rémunérait que la copie, l’emballage et la distribution, pas le logiciel lui-même) le jeu de CD Infomagic, qui comportait notamment la distribution Slackware. La Slackware était une distribution assez ascétique : les différents logiciels étaient simplement fournis sous forme d’archives compressées qu’il fallait compiler, en bénéficiant quand même du logiciel de gestion de configuration make.

D’autres distributions proposent des paquetages : il s’agit de programmes tout compilés. Rassurez-vous, les principes du logiciel libre sont respectés, le paquetage source est fourni à côté. Les distributions RedHat et Debian ont chacune leur format de paquetage, leur logiciel d’installation qui en outre contrôle les dépendances entre paquetages, l’installation et la mise à jour par le réseau, etc. Il faut bien reconnaître que c’est assez pratique. Mais pour le débutant qui se lance dans l’installation de Linux il est néanmoins conseillé d’avoir à proximité un ami qui est déjà passé par là !

(Avec l’aimable autorisation des Éditions Vuibert pour mon livre Systèmes d’exploitation des ordinateurs : histoire, fonctionnement, enjeux (disponible en ligne librement, suivre le lien) dont ce texte est adapté.)