Storia di Unix e Linux: dal 1969 a oggi
Scopri come Unix è nato ai Bell Labs nel 1969, tra licenze AT&T, BSD e la causa del 1992, e perché i server hanno scelto Linux invece di BSD.
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. Tra i due sistemi sono stati trasferiti 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 1970 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 è finito ovunque, pur appartenendo al di fuori di AT&T a nessuno, e le successive controversie sulle licenze hanno determinato quale sistema libero simile a Unix sarebbe finito nel rack dei server.
1969: un PDP-7 di recupero e le idee 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 fosse troppo complesso da completare. Ken Thompson mantenne le idee che riteneva valide e scartò le altre, quindi scrisse 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é finanziare uno strumento di elaborazione testi era più semplice che finanziare un sistema operativo. La macchina disponeva di 24 KB di memoria core, suddivisa tra il sistema e i programmi utente. Questo finanziamento ottenuto per caso 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 di sezione di quel manuale sono gli stessi del tuo.
Due modifiche resero permanente il design. Le pipe arrivarono nella Version 3, nel 1973, perché Doug McIlroy sosteneva da anni che fosse necessario poter collegare i programmi uno dopo l'altro, 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 chiuse 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 notevole e non era quello previsto da AT&T. La Sixth Edition Unix, rilasciata nel 1975, raggiunse centinaia di dipartimenti di informatica con il codice sorgente completo. John Lions, dell'University of New South Wales, stampò il codice sorgente del kernel con un commento riga per riga e lo utilizzò 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, nel 1979, vietava di usare il codice sorgente nei corsi, quindi il commento di Lions circolò come fotocopia di fotocopia. Questa è la struttura dell'intera storia. Unix era diffuso ovunque, ma non era libero allo stesso tempo; di conseguenza, 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 la University of California, Berkeley, e lasciò alle sue spalle un gruppo Unix molto attivo. Il Computer Systems Research Group (CSRG) di Berkeley distribuì nastri con miglioramenti sviluppati localmente. Quei nastri divennero BSD, la Berkeley Software Distribution. Bill Joy scrisse gran parte dei primi componenti: 1BSD nel 1978, poi 2BSD nel 1979, che includeva l'editor vi e la C shell.
La C shell è l'origine di !! e !$. Bash ne ha ereditato la sintassi. Per questo, oltre quarant'anni dopo, l'espansione della cronologia di bash continua a sorprendere chi digita un punto esclamativo tra virgolette doppie.
DARPA (la US Defense Advanced Research Projects Agency) pagò 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. Ancora oggi ogni servizio di rete sul server chiama socket(), bind(), listen() e accept() in quest'ordine, perché Berkeley scelse questi 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. Nel corso di diversi anni Berkeley sostituì le parti di AT&T con codice proprio, file per file. La questione se la sostituzione fosse davvero completa arrivò in seguito in tribunale.
1984: la separazione, poi le guerre Unix
Il Bell System fu separato il 1 January 1984 e con esso venne meno il consent decree che aveva tenuto AT&T fuori dal settore del 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à forniva agli studenti.
I vendor lo avevano già suddiviso in varianti. 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 su quello successivo. Nel 1988 il settore si divise in due schieramenti contrapposti sugli standard: da un lato la Open Software Foundation, dall’altro Unix International. Per anni le aziende distribuirono sistemi incompatibili, discutendo su quale fosse il vero Unix.
POSIX (portable operating system interface) nacque da quella situazione. 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 di tipo Unix di piccole dimensioni. Il codice sorgente era incluso nel libro e il sistema funzionava sui PC economici che gli studenti possedevano realmente. In aula era possibile esaminarlo legalmente, mentre la Seventh Edition Unix non lo consentiva più.
Minix è rimasto volutamente di piccole dimensioni, perché doveva poter essere spiegato in un libro. Tanenbaum ha rifiutato patch che lo avrebbero trasformato in un sistema adatto alla produzione. Anche la licenza non era libera: bisognava acquistare il libro e non si era autorizzati a ridistribuire una versione modificata di Minix. Nel 1991, quindi, uno studente poteva leggere un kernel funzionante di tipo Unix, ma non poteva costruirci sopra nulla 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 e libero, simile a Unix. Nel 1991 GNU aveva prodotto quasi tutti i componenti che circondano un kernel: il compilatore GCC, la libreria C di GNU, le utilità binarie e bash, la shell che Brian Fox scrisse nel 1989 e nella quale il server avvia ancora oggi la sessione. Il kernel GNU, Hurd, era il componente la cui disponibilità continuava a slittare.
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 rilasciata 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 progetto obsoleto. La sua osservazione sul piano progettuale era fondata, ma Torvalds stava rispondendo a una domanda diversa: che cosa funziona bene sull'unico computer economico posseduto da uno studente.
Nel febbraio 1992, la versione 0.12 fu ridistribuita con licenza GPL. Da allora Torvalds ha definito questa la sua decisione migliore. La licenza originale di Linux vietava qualsiasi trasferimento di denaro, impedendo di fatto l'attività dei distributori di CD e delle aziende di supporto che sarebbero arrivate in seguito. La GPL consentiva le attività commerciali, imponendo però che ogni modifica distribuita confluisse nuovamente nello stesso albero condiviso.
La causa: 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 delle sostituzioni e rilasciarono 386BSD 0.0 nel marzo 1992, quindi 386BSD 0.1 il 14 luglio 1992. Esisteva ormai un BSD libero, completo e maturo per l'architettura 386, proprio 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 possedeva Unix, citò BSDi davanti al tribunale federale del New Jersey per segreti commerciali e violazione del marchio Unix. In seguito la causa fu 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 propria licenza.
Il fondamento giuridico della causa venne meno nel 1993. Il giudice Dickinson Debevoise respinse la richiesta di USL di 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 nuova dirigenza di Novell voleva chiudere la controversia. La causa si concluse con un accordo nel febbraio 1994. Dei circa 18,000 file della distribuzione Berkeley, tre furono rimossi e a circa settanta furono aggiunti avvisi di copyright di USL.
Berkeley rilasciò 4.4BSD-Lite nel giugno 1994 e il codice risultava legalmente pulito. FreeBSD e NetBSD, entrambi fondati nel 1993 sul codice Net/2 contestato, dovettero quindi ricostruire i propri sistemi sulla nuova base; il lavoro occupò gran parte del resto del 1994. Linux 1.0 fu rilasciato nel marzo 1994, nel corso di quella 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 uno Unix libero per un prodotto doveva valutare una causa ancora in corso promossa dagli avvocati di AT&T e un kernel realizzato da uno studente finlandese, contro il quale nessuno poteva intentare una causa. Fu esattamente il periodo in cui arrivò il web e comparvero le prime distribuzioni Linux: Slackware nel luglio 1993, Debian nell'agosto 1993, quindi Red Hat e SUSE. Red Hat trasformò quel vantaggio iniziale nello standard commerciale, e il percorso da Red Hat Linux a CentOS e poi a Rocky e AlmaLinux spiega perché una distribuzione fondata nel 1993 stabilisca ancora oggi cosa viene eseguito su moltissimi server aziendali.
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 il cui costo diminuì. Il centro di gravità di BSD erano i sistemi VAX e le workstation, mentre il porting su 386 fu un'iniziativa esterna realizzata da due persone.
- La 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 di sviluppo. La licenza BSD consente a un'azienda di mantenere private le proprie modifiche, e le aziende lo fecero.
- Il modello di sviluppo. Torvalds integrava rapidamente le patch di sviluppatori sconosciuti e pubblicava continuamente nuove versioni. 386BSD rilasciava nuove versioni abbastanza lentamente da spingere i suoi stessi utenti a creare due fork nel 1993, dando origine a NetBSD e FreeBSD, e a un altro fork nel 1995, dando origine a OpenBSD.
- L'inerzia del successo. Gli sviluppatori si concentrano dove sono già presenti altri sviluppatori, e i driver vengono scritti per il sistema che ha più utenti.
È importante essere obiettivi sulla questione tecnica. Nel 1994 BSD era il sistema più completo, con una base coerente, una storia documentata e un codice di rete al quale Linux impiegò anni per avvicinarsi. Nel 1994 nessuno scelse Linux perché fosse migliore. Lo scelse perché era disponibile, privo di vincoli legali, funzionava sull'hardware che gli utenti già possedevano e migliorava ogni settimana.
Cosa ha conservato BSD e dove viene eseguito oggi
BSD è andato avanti. Ha perso la posizione predefinita. Le prove più chiare si trovano sul proprio computer: il progetto OpenBSD ha scritto OpenSSH nel 1999, che oggi è il server SSH presente in quasi tutti i sistemi Linux distribuiti. Per questo le abitudini relative alle chiavi SSH che vale la pena apprendere sono identiche in entrambe le famiglie.
Netflix distribuisce video da appliance FreeBSD. Junos, il sistema operativo dei router Juniper, è basato su FreeBSD. Il software di sistema di 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 molti dispositivi hardware che non lo dichiarano.
Se si deve scegliere oggi, la domanda è pratica, non storica. Il confronto tra Linux e FreeBSD come server riguarda ZFS, jail, l'albero dei ports e la quantità di software di terze parti che presuppone Linux. FreeBSD 15 come server è un sistema attuale e mantenuto, non un reperto da museo. Linux rispetto a Windows Server è invece una questione distinta, la cui risposta dipende dallo stack applicativo.
Il design del 1969 che usi oggi su un VPS
Ognuno di questi elementi è più vecchio della maggior parte delle persone che lo usano.
- La pipe.
who | wc -lconta gli utenti con sessione attiva perché Version 3 Unix, nel 1973, consentiva di usare l'output di un programma come 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 pacchetto di dischi. Da allora le distribuzioni hanno annullato questa 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 continua a usarle.
- POSIX. Uno script
#!/bin/shscritto in base allo standard viene eseguito senza modifiche su Linux, FreeBSD, macOS e Solaris, perché lo standard è l'elemento che tutti questi sistemi hanno implementato.
Un'eredità non è sopravvissuta al passaggio: la sequenza di avvio basata su script di shell che Linux aveva ereditato da System V è ormai scomparsa da quasi tutte le distribuzioni e l'argomento con cui è stata sostituita da systemd è la disputa più recente su come dovrebbe essere un sistema Unix-like.
Quando noleggi un virtual private server e accedi, 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 riguarda il design e 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 causato la fine di BSD?
USL, la controllata di AT&T proprietaria di Unix, ha fatto causa a BSDi nell'aprile 1992 e in seguito ha aggiunto l'University of California tra i convenuti. Nel 1993 il giudice ha respinto la richiesta di injunction preliminare, ritenendo probabilmente infondata la rivendicazione del copyright sul vecchio codice 32V. Novell ha acquistato USL a metà del 1993 e ha definito la causa nel febbraio 1994: sono stati rimossi tre file su circa 18,000 e a circa settanta sono state aggiunte nuove indicazioni di copyright. BSD non è scomparso. La sua adozione si è però fermata nei due anni in cui il mondo sceglieva un Unix libero.
Perché Linux ha conquistato i server invece di BSD?
La certezza giuridica è stata una delle ragioni: nel 1992 e nel 1993 Linux non era coinvolto in alcuna causa, mentre BSD lo era. Gli altri fattori sono stati l'adozione del 386 come piattaforma di riferimento fin dall'inizio, la GPL, che riportava le modifiche dei vendor in un unico albero, e un processo di integrazione abbastanza rapido da mantenere l'interesse dei contributori mentre 386BSD si divideva in tre 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 base, i jail come modello maturo di isolamento, un sistema base sviluppato come unità coerente e una documentazione che rimane aggiornata. 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 più antica discendenza.