D'UNIX à Linux : l'histoire qui explique tout
Quitter

Leçon 2 sur 7 · Histoire

La famille UNIX — BSD, System V et la norme POSIX

30 min Debian 12

Objectif

Comprendre comment UNIX s'est divisé en plusieurs branches rivales, pourquoi une norme commune (POSIX) a été nécessaire, et pourquoi ce que vous apprenez sur Linux marche en grande partie sur macOS ou FreeBSD.

L'essentiel

  • À l'université de Berkeley, UNIX devient BSD : c'est là qu'arrivent le réseau TCP/IP, l'éditeur vi et le shell csh.
  • Après le démantèlement d'AT&T (1984), l'entreprise vend sa version officielle : System V.
  • Chaque constructeur crée son UNIX payant (Solaris, AIX, HP-UX…), incompatible avec les autres : ce sont les « guerres UNIX ».
  • La norme POSIX (1988) fixe ce qu'un système « de type UNIX » doit offrir ; Linux la suit de près.
  • Un procès (1992-1994) bloque BSD au moment même où Linux naît, ce qui pousse beaucoup de développeurs vers Linux.

1. Berkeley reçoit UNIX (1974-1977)

Comme vous l'avez vu dans la leçon 0.1, AT&T distribue UNIX aux universités avec son code source. L'université de Californie à Berkeley l'installe en 1974. Ken Thompson y passe même une année sabbatique (1975-1976) comme professeur invité.

Un étudiant, Bill Joy, se met à améliorer le système. En 1978, il diffuse une première collection de programmes : la Berkeley Software Distribution, ou BSD. Au départ, c'est un simple ajout à l'UNIX d'AT&T ; peu à peu, cela devient un système complet.

Ce que BSD a apporté, et que vous utiliserez sur Linux :

Apport de Berkeley Ce que vous en ferez sur Linux
L'éditeur vi (Bill Joy, 1976) vi et son successeur vim sont présents sur presque tous les serveurs
Le shell csh Moins utilisé aujourd'hui, mais l'historique des commandes et le contrôle des tâches (jobs, fg, bg) viennent de cette époque
La pile réseau TCP/IP et les sockets (4.2BSD, 1983) Tout le réseau moderne : ssh, serveurs web, Internet entier
Le système de fichiers rapide (FFS) L'idée des blocs et inodes reprise par ext2, ext3, ext4

L'arrivée de TCP/IP est un tournant : l'agence militaire américaine DARPA, qui finance le futur Internet, choisit BSD comme système de référence au début des années 1980. UNIX et Internet grandissent ensemble.

2. AT&T entre dans le commerce : System V (1983)

En 1982, un accord avec la justice américaine prévoit le démantèlement d'AT&T, effectif au 1er janvier 1984. En échange, l'entreprise a enfin le droit de vendre de l'informatique.

AT&T commercialise alors sa version officielle d'UNIX : System III (1982), puis System V (1983), avec ses « versions » successives (Release 2, 3, 4). La version SVR4 (System V Release 4, fin des années 1980), développée avec Sun, réunit une grande partie des idées de BSD et de System V.

Plusieurs habitudes de Linux viennent de System V :

ls /etc/init.d/       # les scripts de démarrage « à la System V » (RHEL 6, vieux Debian)
ps -ef                # la syntaxe System V de ps (avec un tiret)
ps aux                # la syntaxe BSD de ps (sans tiret) — Linux accepte les deux !

Le fait que ps accepte deux styles d'options est un souvenir vivant de cette double origine.

3. Les UNIX commerciaux (années 1980-1990)

Chaque grand constructeur prend une licence UNIX et crée sa propre version, adaptée à ses machines (et vendue avec elles) :

Système Éditeur Base Encore utilisé ?
SunOS puis Solaris Sun Microsystems (racheté par Oracle en 2010) BSD, puis System V R4 (Solaris, 1992) Dans quelques grandes entreprises
AIX IBM (à partir de 1986) System V Oui, sur les serveurs IBM Power (banques, assurances)
HP-UX Hewlett-Packard System V En fin de vie
IRIX Silicon Graphics System V Abandonné (années 2000)
Xenix Microsoft, puis SCO System V Abandonné
Ultrix, Tru64 DEC BSD, puis OSF/1 Abandonnés

Le cas de Sun est intéressant : l'entreprise est cofondée en 1982 par… Bill Joy, l'auteur de BSD. Les stations Sun étaient les machines de référence des universités et d'Internet dans les années 1980-1990.

4. Les « guerres UNIX » (1988-1993)

Chacun de ces UNIX ajoute ses propres commandes, options et outils. Un programme écrit pour AIX doit être modifié pour tourner sur HP-UX. Un administrateur formé sur Solaris est perdu sur IRIX.

À la fin des années 1980, deux camps s'affrontent :

          AT&T + Sun                       IBM, DEC, HP et d'autres
   (System V Release 4, 1988-1989)       (Open Software Foundation, 1988)
       « UNIX International »                     « OSF/1 »
                   \                               /
                    \___ incompatibilités, procès,  ___/
                          clients perdus

Pendant que les constructeurs se disputent, un concurrent avance tranquillement sur les PC : Microsoft Windows NT (1993). Et, sans que personne ne s'en doute encore, un étudiant finlandais commence en 1991 à écrire un noyau sur son PC…

5. POSIX : la règle commune (1988)

Pour sortir du chaos, l'organisme de normalisation IEEE publie en 1988 la norme POSIX (IEEE 1003.1). Le nom, suggéré par Richard Stallman (que vous retrouverez à la leçon 0.3), signifie à peu près Portable Operating System Interface, avec un « X » pour UNIX.

POSIX décrit ce que doit offrir un système de type UNIX, sans dire comment le programmer :

POSIX définit… Exemples
Les appels système que les programmes peuvent utiliser ouvrir un fichier, créer un processus
Le langage du shell if, for, case, les redirections > et `
Les commandes de base et leurs options ls, cp, grep, sed, awk, find
Les droits et les signaux chmod 755, kill -9

Plus tard, l'organisme The Open Group (propriétaire de la marque « UNIX » depuis les années 1990) publie la Single UNIX Specification. Seuls les systèmes certifiés et payant la licence ont le droit de s'appeler officiellement « UNIX ». C'est le cas de macOS (certifié depuis la version 10.5, en 2007), d'AIX ou de Solaris.

Linux n'est pas certifié UNIX (la certification coûte cher et n'apporte rien à un projet libre), mais il suit POSIX de très près. C'est pourquoi on dit que Linux est un système « de type UNIX » (Unix-like).

getconf _POSIX_VERSION    # quelle version de POSIX ? ex. 200809 = édition de 2008

Conseil pratique pour toute votre carrière : quand vous écrivez un script qui doit tourner partout, écrivez-le en sh POSIX plutôt qu'avec des astuces propres à bash. Sur Debian et Ubuntu, /bin/sh est d'ailleurs dash, un shell POSIX minimal : un script « bash » lancé avec sh peut y échouer.

6. Le procès qui a freiné BSD (1992-1994)

À la fin des années 1980, les développeurs de Berkeley entreprennent de remplacer tout le code d'origine AT&T dans BSD, pour pouvoir le diffuser librement. En 1991 sort Net/2, presque entièrement libre. Des projets en dérivent : 386BSD (1992), pour les PC, et la société BSDi, qui vend une version commerciale.

En 1992, USL (Unix System Laboratories, la filiale UNIX d'AT&T) attaque BSDi, puis l'université de Californie, en justice : BSD contiendrait encore du code et des secrets d'AT&T. Pendant deux ans, personne ne sait si BSD pourra continuer à être distribué. Les entreprises hésitent à l'utiliser.

En 1993, Novell rachète USL. Le procès se termine par un accord début 1994 : quelques fichiers sont retirés ou modifiés, et Berkeley publie 4.4BSD-Lite (1994), libre de tout code AT&T.

Mais pendant ces deux années d'incertitude, un autre système, libre et sans aucun risque juridique, a avancé très vite : Linux. Linus Torvalds l'a dit lui-même : si un BSD libre pour PC avait été disponible à ce moment-là, il n'aurait peut-être jamais écrit son noyau.

7. Les descendants de BSD aujourd'hui

Net/2 (1991) et 386BSD (1992), puis 4.4BSD-Lite (1994)
 ├── FreeBSD (1993) ── serveurs, Netflix (diffusion vidéo), base du système des PlayStation récentes
 ├── NetBSD  (1993) ── « tourne sur tout », très portable
 │     └── OpenBSD (1995) ── sécurité avant tout ; a créé OpenSSH (1999)
 └── NeXTSTEP / Darwin ── base de macOS et iOS (avec le micro-noyau Mach)

FreeBSD et NetBSD sont nés en 1993 de 386BSD ; après l'accord de 1994, ils ont été reconstruits sur 4.4BSD-Lite.

Vous utilisez donc peut-être déjà BSD sans le savoir : macOS et iOS en descendent, et OpenSSH, que vous emploierez sur chaque serveur Linux, est développé par l'équipe d'OpenBSD.

8. La frise de la leçon

1974  Berkeley reçoit UNIX
1978  Première distribution BSD (Bill Joy)
1982  Fondation de Sun ; accord de démantèlement d'AT&T ; System III
1983  System V (AT&T) ; 4.2BSD apporte TCP/IP
1984  AT&T démantelé : UNIX devient un produit commercial
1986  AIX (IBM)
1988  POSIX (IEEE 1003.1) ; création de l'OSF ; début des « guerres UNIX »
1991  Net/2 ; Linus Torvalds commence Linux
1992  Procès USL contre BSDi ; Solaris 2 (base System V R4)
1993  FreeBSD, NetBSD ; Novell rachète USL
1994  Accord : 4.4BSD-Lite, libre de code AT&T

Pièges fréquents

  • Croire qu'une commande vue sur macOS marchera pareil sur Linux. Les deux suivent POSIX, mais les options diffèrent souvent : sed -i s'écrit sed -i '' sur macOS (outils BSD), sed -i sur Linux (outils GNU).
  • Confondre « UNIX » et « de type UNIX ». « UNIX » est une marque réservée aux systèmes certifiés. Linux et FreeBSD sont « de type UNIX ».
  • Écrire #!/bin/sh en tête d'un script plein de syntaxe bash. Sur Debian et Ubuntu, sh est dash : les tableaux ou [[ … ]] y échouent. Écrivez #!/bin/bash si vous utilisez bash.
  • Penser que les scripts /etc/init.d/ sont toujours utilisés. Ils viennent de System V ; depuis RHEL 7 et Debian 8, c'est systemd qui démarre les services.

Lab

Cette fois, vous êtes sur Debian 12. Vous allez vérifier par vous-même l'héritage POSIX du système :

getconf _POSIX_VERSION    # la version de POSIX suivie
ls -l /bin/sh             # vers quel shell pointe /bin/sh ?
ps -ef | head -n 3        # syntaxe System V
ps aux | head -n 3        # syntaxe BSD : même résultat ou presque

Les tâches : enregistrer la version POSIX, découvrir quel shell se cache derrière /bin/sh, et noter les deux grandes branches d'UNIX. Puis cliquez sur Vérifier.


Quiz

  1. Quelles sont les deux grandes branches d'UNIX, et qui a créé chacune d'elles ?
  2. Citez deux apports majeurs de BSD que vous utiliserez sur Linux.
  3. Qu'est-ce que POSIX, et pourquoi est-ce utile à un administrateur ?
  4. Linux a-t-il le droit de s'appeler officiellement « UNIX » ? Pourquoi ?
  5. Pourquoi le procès USL contre BSDi (1992-1994) a-t-il profité à Linux ?
Réponses
  1. BSD, créée à l'université de Berkeley (Bill Joy et ses collègues), et System V, la version commerciale d'AT&T.
  2. Au choix : la pile réseau TCP/IP et les sockets, l'éditeur vi, le shell csh (historique, contrôle des tâches), le système de fichiers rapide, et plus récemment OpenSSH (OpenBSD).
  3. Une norme (IEEE, 1988) qui définit les commandes, le shell et les appels système d'un système de type UNIX. Un script ou un savoir-faire conforme à POSIX fonctionne sur Linux, BSD, macOS…
  4. Non : « UNIX » est une marque réservée aux systèmes certifiés par The Open Group. Linux suit POSIX mais n'est pas certifié : c'est un système « de type UNIX ».
  5. Pendant deux ans, l'avenir juridique de BSD était incertain ; développeurs et entreprises se sont tournés vers Linux, libre et sans risque juridique.

Sources de référence : M. K. McKusick (Open Sources, 1999), documents de normalisation POSIX et The Open Group, Debian Reference (licence libre). Texte original MasterLinux.

Exercices pratiques

À réaliser sur Debian 12

Le terminal en ligne ouvre bientôt. En attendant, réalisez ces tâches sur votre machine Linux, une machine virtuelle ou WSL.

  1. Demandez au système quelle version de la norme POSIX il respecte (getconf _POSIX_VERSION) et enregistrez la réponse dans /root/posix.txt
    Afficher un indicegetconf _POSIX_VERSION > /root/posix.txt — la réponse est une date au format AAAAMM.
    Voir la solution
    getconf _POSIX_VERSION > /root/posix.txt

    Vérification : grep -qx '[0-9][0-9][0-9][0-9][0-9][0-9]' /root/posix.txt

  2. Sur Debian, /bin/sh est un lien vers un petit shell POSIX. Enregistrez le résultat de ls -l /bin/sh dans /root/sh.txt
    Afficher un indicels -l affiche la cible d'un lien après une flèche -> ; ajoutez > /root/sh.txt
    Voir la solution
    ls -l /bin/sh > /root/sh.txt

    Vérification : grep -q dash /root/sh.txt

  3. Écrivez dans /root/branches.txt les deux grandes branches d'UNIX, une par ligne : BSD puis System V
    Afficher un indiceprintf écrit plusieurs lignes : printf 'BSD\nSystem V\n' > /root/branches.txt
    Voir la solution
    printf 'BSD\nSystem V\n' > /root/branches.txt

    Vérification : grep -qix bsd /root/branches.txt && grep -qix 'system v' /root/branches.txt

Références officielles consultées : M. K. McKusick, « Twenty Years of Berkeley Unix » (Open Sources, O'Reilly, 1999) ; IEEE Std 1003.1 (POSIX) et The Open Group — Single UNIX Specification ; Debian Reference — chapitre 1. Texte original MasterLinux.