Storia di Unix e Linux: dal 1969 a oggi
Scopri come Unix è diventato Linux: Bell Labs nel 1969, licenze AT&T, BSD di Berkeley, la causa del 1992 e perché i server hanno scelto Linux.
La storia di Unix e Linux, in breve
La storia di Unix e Linux è una lunga disputa su chi possa possedere il codice sorgente. Unix è nato presso Bell Labs nel 1969. Linux è nato a Helsinki nel 1991 e non contiene alcuna parte del codice originale di Unix. Ciò che è passato dall'uno all'altro è stato un modello progettuale e un insieme di interfacce pubblicate: file, processi, pipe e una shell che combina piccoli programmi. Unix si è diffuso nelle università negli anni '70 perché un accordo antitrust del 1956 vietava ad AT&T (American Telephone and Telegraph) di vendere software; per questo Bell Labs concedeva in licenza il codice sorgente a basso costo. Unix finì per essere usato ovunque, pur restando di proprietà di AT&T, e le successive controversie sulle licenze determinarono quale sistema libero di tipo Unix sarebbe finito nel rack del server.
1969: un PDP-7 dismesso e le idee che sono rimaste
Bell Labs abbandonò il progetto Multics nel 1969. Multics (multiplexed information and computing service) era un grande sistema di time-sharing sviluppato con MIT e General Electric, ma i Labs decisero che era troppo complesso da completare. Ken Thompson conservò le idee che riteneva utili e scartò le altre, scrivendo un piccolo sistema di time-sharing su un minicomputer PDP-7 dismesso. Dennis Ritchie si unì a lui. Il nome Unix era una battuta ai danni di Multics.
Nel 1970 il sistema fu trasferito su un PDP-11 acquistato dai Labs per i dattilografi dell'ufficio brevetti, perché era più facile ottenere fondi per uno strumento di elaborazione testi che per un sistema operativo. La macchina disponeva di 24 KB di memoria core, divisa tra il sistema e i programmi utente. Questo finanziamento casuale spiega perché il primo manuale Unix, datato novembre 1971, fosse una raccolta di documenti formattati e perché si digiti ancora man 5 crontab. I numeri delle sezioni di quel manuale sono gli stessi del tuo.
Due modifiche resero permanente il progetto. Le pipe arrivarono nella Version 3, nel 1973, perché Doug McIlroy sosteneva da anni che fosse possibile collegare i programmi in sequenza, e Thompson aggiunse l'operatore |, così l'output di un programma diventava l'input del programma successivo. Poi la Version 4, più tardi nel 1973, fu riscritta in C. Un sistema operativo scritto in un linguaggio portabile può essere trasferito su hardware per il quale non era stato progettato, ed è per questo che Unix è sopravvissuto a tutte le macchine su cui era nato.
Perché Unix si diffuse: AT&T non poteva venderlo
Un decreto di consenso del 1956 concluse un procedimento antitrust contro AT&T. AT&T mantenne il monopolio telefonico e accettò una limitazione in cambio: sarebbe rimasta fuori dai settori diversi dalle telecomunicazioni. Il software era uno di questi settori. Perciò, quando le università chiesero Unix, Bell Labs non poteva venderlo come prodotto. Concesse in licenza il codice sorgente a un prezzo simbolico, senza supporto né garanzia.
L'effetto fu rilevante e non era quello previsto da AT&T. La Sixth Edition di Unix, rilasciata nel 1975, raggiunse centinaia di dipartimenti di informatica con il codice sorgente completo. John Lions, presso la University of New South Wales, stampò il codice sorgente del kernel con un commento riga per riga e lo usò per l'insegnamento. Un'intera generazione imparò come funziona un sistema operativo leggendo un sistema operativo reale.
Poi la licenza cambiò. La licenza della Seventh Edition del 1979 vietava di usare il codice sorgente nei corsi, quindi il commento di Lions circolò come una serie di fotocopie di fotocopie. Questa è la struttura dell'intera vicenda. Unix era diffuso ovunque e contemporaneamente non libero, quindi ogni miglioramento realizzato da qualcuno migliorava il codice proprietario di qualcun altro.
Berkeley: le componenti di Unix che si digitano davvero
Ken Thompson trascorse l'anno accademico 1975-1976 presso l'University of California, Berkeley, e lasciò alle sue spalle un gruppo Unix molto attivo. Il Computer Systems Research Group (CSRG) di Berkeley distribuiva nastri con miglioramenti locali. Quei nastri divennero BSD, la Berkeley Software Distribution. Bill Joy scrisse gran parte del lavoro iniziale: 1BSD nel 1978, quindi 2BSD nel 1979, che includeva l'editor vi e la C shell.
La C shell è l'origine di !! e !$. Bash ha ereditato quella sintassi. Per questo, ancora oggi, l'espansione della cronologia di bash continua a sorprendere chi digita un punto esclamativo tra virgolette doppie, a più di quarant'anni di distanza.
DARPA (la US Defense Advanced Research Projects Agency) finanziò quindi Berkeley per integrare i nuovi protocolli Internet in Unix. 4.2BSD, rilasciato nell'agosto 1983, includeva TCP/IP (transmission control protocol over internet protocol) e l'interfaccia di programmazione delle applicazioni socket. Ogni servizio di rete sul server chiama ancora socket(), bind(), listen() e accept() in quest'ordine, perché Berkeley scelse quei nomi nel 1983.
Un dettaglio determinò il decennio successivo. Un nastro BSD non era un sistema completo. Era un insieme di aggiunte a Unix di AT&T e, per eseguirlo legalmente, era necessaria una licenza valida per il codice sorgente di AT&T. Berkeley sostituì le parti di AT&T con codice proprio nell'arco di diversi anni, un file alla volta. La questione se la sostituzione fosse effettivamente completa arrivò in seguito in tribunale.
1984: la frammentazione e le guerre Unix
Il Bell System fu smembrato il 1 gennaio 1984 e con esso venne meno il consent decree che aveva tenuto AT&T fuori dal settore software. AT&T poteva ora vendere Unix come prodotto, e lo fece. Le licenze commerciali per il codice sorgente divennero costose, quindi Unix smise di essere il sistema economico che un'università metteva a disposizione degli studenti.
I vendor lo avevano già frammentato. Ogni azienda produttrice di workstation distribuiva il proprio Unix sul proprio hardware, quindi alla fine degli anni 1980 un programma scritto per un sistema doveva essere portato sul successivo. Nel 1988 il settore si divise in due gruppi che sostenevano standard diversi: da un lato l'Open Software Foundation, dall'altro Unix International. Per anni distribuirono sistemi incompatibili mentre discutevano su quale fosse il vero Unix.
Da quella situazione nacque POSIX (portable operating system interface). IEEE 1003.1 fu pubblicato nel 1988 e definì ciò che un sistema Unix-like deve fare: le system call, il comportamento della shell, le utility standard e le interfacce della libreria C. Questo è più importante di quanto possa sembrare, perché uno standard è una specifica e nessuna licenza lo copre. Tre anni dopo, uno studente scrisse un kernel basandosi su quei documenti.
Minix e il vuoto che ha lasciato
Andrew Tanenbaum ha rilasciato Minix nel 1987 come sistema didattico per il suo manuale sui sistemi operativi. Minix era un sistema compatto simile a Unix; il codice sorgente era incluso nel libro e il sistema funzionava sui PC economici che gli studenti possedevano realmente. Era legale studiarlo in aula, mentre la Seventh Edition Unix non lo era più.
Minix è rimasto volutamente compatto, perché doveva poter essere spiegato in un libro, e Tanenbaum ha rifiutato patch che lo avrebbero trasformato in un sistema adatto alla produzione. Anche la licenza non era libera: era necessario acquistare il libro e la redistribuzione di una versione modificata di Minix non dipendeva da una decisione dell'utente. Nel 1991, quindi, uno studente poteva studiare un kernel funzionante simile a Unix, ma non poteva costruirci sopra qualcosa di duraturo.
GNU aveva tutto, tranne un kernel
Richard Stallman annunciò il progetto GNU nel settembre 1983, con l’obiettivo di creare un sistema completo, libero e simile a Unix. Nel 1991 GNU aveva prodotto gran parte dei componenti che circondano un kernel: il compilatore GCC, la libreria GNU C, le utilità binarie e bash, la shell scritta da Brian Fox nel 1989 e quella in cui il server avvia ancora oggi la sessione dell’utente. Il kernel GNU, Hurd, continuava a essere rimandato.
La GNU General Public License versione 2 fu pubblicata nel giugno 1991. La sua regola è semplice. È possibile usare e modificare il codice; se si distribuisce il risultato, è necessario distribuire anche il codice sorgente alle stesse condizioni. Questa regola diventerà il punto centrale di questa storia, tra due sezioni.
Agosto 1991: il post su comp.os.minix
Il 25 agosto 1991, uno studente di Helsinki pubblicò un messaggio nel gruppo Usenet comp.os.minix:
Hello everybody out there using minix -
I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones.La versione 0.01 fu pubblicata nel settembre 1991. Non condivideva codice né con Unix né con Minix. Era un nuovo kernel per 386, sviluppato su una macchina Minix, scritto in base alle interfacce POSIX e abbinato agli strumenti GNU già disponibili. Nel gennaio 1992 Tanenbaum disse a Torvalds che un kernel monolitico era un'architettura obsoleta. Dal punto di vista progettuale aveva un'argomentazione valida, ma Torvalds stava rispondendo a una domanda diversa: cosa funziona bene sull'unico computer economico di cui dispone uno studente.
Nel febbraio 1992, la versione 0.12 fu nuovamente concessa in licenza secondo la GPL. In seguito Torvalds ha definito questa la sua decisione migliore. La licenza originale di Linux vietava qualsiasi trasferimento di denaro, impedendo così l'attività dei fornitori di CD e delle aziende di supporto che sarebbero arrivate in seguito. La GPL consentiva le attività commerciali, imponendo però che ogni modifica distribuita fosse reintegrata nello stesso albero condiviso.
La causa legale: da aprile 1992 a febbraio 1994
Berkeley rilasciò Networking Release 2 (Net/2) nel giugno 1991: un sistema BSD quasi completo, dal quale erano stati rimossi i file derivati da AT&T. Mancavano sei file del kernel. Bill e Lynne Jolitz scrissero i sostituti e rilasciarono 386BSD 0.0 nel marzo 1992, quindi 386BSD 0.1 il 14 luglio 1992. Ora esisteva un BSD gratuito, completo e maturo per il 386, mentre Linux era ancora un kernel sviluppato per hobby. Berkeley Software Design, Inc. (BSDi) vendeva una build commerciale supportata, BSD/386, e la pubblicizzava con il numero di telefono 1-800-ITS-UNIX.
Nell'aprile 1992, Unix System Laboratories (USL), la consociata di AT&T che allora deteneva Unix, citò BSDi davanti a un tribunale federale del New Jersey per questioni relative a segreti commerciali e al marchio Unix. La causa fu in seguito modificata per includere anche i Regents of the University of California. Nel 1993 l'Università avviò una causa riconvenzionale in California, sostenendo che AT&T avesse distribuito codice Berkeley all'interno di System V senza il riconoscimento richiesto dalla relativa licenza.
Il nucleo della controversia legale si sgretolò nel 1993. Il giudice Dickinson Debevoise negò a USL un'ingiunzione preliminare, ritenendo probabilmente infondata la rivendicazione del copyright di USL sul vecchio codice 32V, perché AT&T aveva distribuito quel codice per anni senza avvisi di copyright. A metà del 1993 Novell acquistò USL da AT&T e la dirigenza di Novell voleva chiudere la controversia. La causa si concluse con un accordo nel febbraio 1994. Dei circa 18,000 file presenti nella distribuzione Berkeley, tre furono rimossi e circa settanta ricevettero avvisi di copyright USL.
Berkeley rilasciò 4.4BSD-Lite nel giugno 1994; il codice era conforme ai requisiti legali. FreeBSD e NetBSD, entrambi fondati nel 1993 sul codice Net/2 oggetto della controversia, dovettero quindi ricostruire i propri sistemi sulla nuova base. L'operazione occupò gran parte del resto del 1994. Linux 1.0 fu rilasciato nel marzo 1994, nel corso di questa ricostruzione.
Perché Linux ha conquistato i server e non BSD?
La causa legale è la risposta più comune, e fa parte della spiegazione. Tra aprile 1992 e febbraio 1994, chiunque scegliesse un Unix libero per un prodotto doveva valutare una rivendicazione ancora in corso da parte degli avvocati di AT&T e un kernel sviluppato da uno studente finlandese, contro il quale nessuno poteva intentare una causa. Era esattamente il periodo in cui arrivò il web e comparvero le prime distribuzioni Linux: Slackware nel luglio 1993, Debian nell'agosto 1993, poi Red Hat e SUSE.
Altri quattro fattori furono altrettanto importanti quanto la causa legale.
- Hardware. Linux puntò sul PC 386 standard fin dalla prima riga di codice, e quello fu l'hardware che divenne economico. Il centro di gravità di BSD era il VAX e la workstation, mentre il porting per 386 fu un'iniziativa esterna di due persone.
- Licenza. La GPL impone a un'azienda che distribuisce un kernel modificato di pubblicare le modifiche, quindi il lavoro dei produttori confluiva nuovamente in un unico albero del codice. La licenza BSD consente a un'azienda di mantenere private le proprie modifiche, e le aziende lo fecero.
- Modello di sviluppo. Torvalds integrava rapidamente patch provenienti da sviluppatori esterni e pubblicava nuove versioni con continuità. 386BSD rilasciava le versioni abbastanza lentamente da spingere i propri utenti a creare due fork nel 1993, dando origine a NetBSD e FreeBSD, e a un altro fork nel 1995, che portò a OpenBSD.
- Effetto di rete. Gli sviluppatori si concentrano sul sistema in cui sono già presenti altri sviluppatori, e i driver vengono scritti per il sistema con il maggior numero di utenti.
È importante essere precisi sulla questione tecnica. Nel 1994 BSD era il sistema più completo, con una base coerente, una storia documentata e codice di rete che Linux avrebbe impiegato anni a raggiungere. Nel 1994 nessuno scelse Linux perché fosse migliore. Lo scelsero perché era disponibile, libero da vincoli legali, funzionava sull'hardware che già possedevano e migliorava ogni settimana.
Cosa ha conservato BSD e dove viene eseguito oggi
BSD è ancora utilizzato. Quello che ha perso è la posizione predefinita. La prova più evidente si trova sul tuo stesso computer: il progetto OpenBSD ha sviluppato OpenSSH nel 1999, che oggi è il server SSH presente in quasi tutti i sistemi Linux distribuiti. Per questo le pratiche relative alle chiavi SSH che vale la pena imparare sono identiche in entrambe le famiglie.
Netflix distribuisce video da appliance FreeBSD. Junos, il sistema operativo dei router Juniper, si basa su FreeBSD. Il software di sistema delle PlayStation deriva da FreeBSD. macOS e iOS di Apple includono codice BSD nel kernel e in gran parte dello userland. La licenza permissiva che ha impedito a BSD di mantenere l'albero condiviso dei server ha portato il codice BSD all'interno di numerosi dispositivi hardware che non lo dichiarano.
Se devi scegliere oggi, la domanda è pratica, non storica. Il confronto tra Linux e FreeBSD come server riguarda ZFS, i jail, l'albero dei ports e la quantità di software di terze parti che presume Linux come sistema sottostante. FreeBSD 15 come server è un sistema attuale e mantenuto, non un reperto da museo. E Linux rispetto a Windows Server è una questione distinta, la cui risposta dipende dallo stack applicativo in uso.
Il design del 1969 che oggi usi su un VPS
Ognuno di questi elementi è più vecchio della maggior parte delle persone che lo utilizzano.
- La pipe.
who | wc -lconta gli utenti connessi perché Version 3 Unix, nel 1973, consentiva all'output di un programma di diventare l'input di un altro programma. - Le sezioni del manuale.
man 1 lseman 5 crontabusano lo schema di numerazione del manuale del novembre 1971. - La suddivisione del filesystem.
/usresiste perché il disco root di quel PDP-11 si riempì nel 1971 e gli sviluppatori spostarono i file sul secondo gruppo di dischi. Da allora le distribuzioni hanno annullato la suddivisione: eseguils -ld /binsu Ubuntu 24.04 o Debian 13 e ottieni un collegamento simbolico ausr/bin. - Le chiamate socket. Berkeley le scrisse per 4.2BSD nel 1983 e ogni demone di rete le utilizza ancora.
- POSIX. Uno script
#!/bin/shscritto in base allo standard funziona senza modifiche su Linux, FreeBSD, macOS e Solaris, perché lo standard è ciò che tutti questi sistemi hanno implementato.
Quando noleggi un server privato virtuale e accedi al sistema, stai digitando su un'interfaccia progettata per una macchina con 24 KB di memoria e un ufficio brevetti da gestire. È sopravvissuta perché l'interfaccia è stata pubblicata, discussa, standardizzata e poi reimplementata da zero da persone a cui non è mai stato consentito di vedere il codice originale.
FAQ
Linux contiene codice Unix originale?
No. Linus Torvalds ha scritto il kernel da zero a partire dal 1991, puntando alle interfacce POSIX anziché a codice sorgente AT&T. L'eredità Unix è un insieme di principi progettuali e di un'interfaccia pubblicata: file, processi, pipe e nomi delle system call. Anche gli strumenti GNU che circondano il kernel sono stati scritti da zero, a partire dal 1983. Questa indipendenza spiega perché la causa di AT&T relativa al codice BSD non abbia mai coinvolto Linux.
Quando si è svolta la causa di AT&T contro BSD e ha portato alla fine di BSD?
USL, la controllata di AT&T proprietaria di Unix, ha citato in giudizio BSDi nell'aprile 1992 e in seguito ha aggiunto l'Università della California come convenuta. Nel 1993 il giudice ha respinto la richiesta di un'ingiunzione preliminare, ritenendo probabilmente infondata la rivendicazione del copyright sul vecchio codice 32V. Novell ha acquistato USL a metà del 1993 e ha raggiunto un accordo nel febbraio 1994: sono stati rimossi 3 file su circa 18,000 e circa settanta hanno ricevuto nuove note sul copyright. BSD non è finito. La causa ne ha congelato l'adozione durante i due anni in cui il mondo stava scegliendo un Unix libero.
Perché Linux ha conquistato i server invece di BSD?
La certezza giuridica è stata una delle ragioni: per tutto il 1992 e il 1993 Linux non era coinvolto in alcuna causa, mentre BSD ne aveva una in corso. Gli altri fattori sono stati l'386 come piattaforma di destinazione fin dal primo giorno, la GPL, che riportava le modifiche dei vendor in un unico albero del codice, e un processo di integrazione abbastanza rapido da mantenere l'interesse dei contributori mentre 386BSD si divideva in 3 progetti. Il merito tecnico non è stato il fattore decisivo, perché nel 1994 BSD era il sistema più completo.
Vale ancora la pena usare FreeBSD oggi?
Sì, per ragioni concrete: ZFS integrato nel sistema di base, i jail come modello maturo di isolamento, un sistema di base sviluppato come un'unità coerente e una documentazione che rimane accurata. Il costo è il lavoro necessario per la compatibilità, perché la maggior parte dei software server di terze parti, degli strumenti per i container e del supporto dei vendor presuppone Linux. Scegliete FreeBSD quando le sue funzionalità di storage e networking giustificano questo costo, non per fedeltà alla sua linea storica.