Unix: il sistema operativo che ha stabilito nuovi standard
Lo sviluppo di Unix rappresenta senz’ombra di dubbio una pietra miliare della storia dei computer. Il sistema operativo non ha soltanto apportato alcuni dei concetti basilari per le tecniche informatiche, come ad esempio il file system strutturato gerarchicamente in cartelle: è servito anche come base per lo sviluppo di altri sistemi, come ad esempio il sistema operativo di Apple macOS o il progetto open source Linux, il quale a propria volta ha dato vita a numerose derivazioni come Ubuntu, Debian o Android mobile. In che senso Unix è divenuto una delle applicazioni più influenti per la gestione dei computer e come ha potuto un team di sviluppatori concepire le proprie idee solamente usando lavagne e appunti?
La prima pietra: il progetto Multics
Nel 1965 un gruppo di lavoro presentò la propria idea di un nuovo sistema operativo nell’ambito della Joint Computer Conference, una conferenza tenuta negli Stati Uniti. Il gruppo consisteva di colleghi del Massachusetts Institute of Technology (MIT), della General Electric e dei Bell Laboratories (Bell Labs) di AT&T (parte del dipartimento ricerca e sviluppo di Nokia dal 2016). Battezzarono il sistema operativo Multiplexed Information and Computing Service, abbreviato in Multics. Il team perseguiva approcci completamente nuovi, con particolare attenzione al concetto di time sharing. Dunque Multics si può annoverare tra i primi sistemi che consentivano a più utenti di lavorare contemporaneamente su uno stesso computer, condividendo il tempo di elaborazione del processore utilizzato.
Per il progetto il gruppo di lavoro di Multics aveva bisogno di un calcolatore che soddisfacesse una serie di caratteristiche: da un lato doveva disporre di un set di comandi puliti e strutturati per poter utilizzare il previsto linguaggio di programmazione PL/I di IBM. Dall’altro doveva anche essere in grado di supportare l’utilizzo contemporaneo di diversi utenti e lavorare in asincrono per minimizzare le perdite di prestazione nella gestione della memoria. Per questo motivo inizialmente si optò per il GE-635 e in seguito per il GE-645 di General Electric. Lo sviluppo fu condotto sul già esistente sistema multiutente CTSS, che era stato sviluppato dal MIT già agli inizi degli anni 60.
I ritardi nello sviluppo del PL/I Compiler, le impasse finanziarie, le differenze all’interno del gruppo e le crescenti pressioni dall’esterno portarono infine Bell Labs a ritirarsi dal progetto nel 1969.
Da Multics a Unix
Multics fu ulteriormente sviluppato presso il MIT e successivamente commercializzato sulle macchine Honeywell 6180 fino al 1986 da Honeywell International Inc., dopo il suo acquisto da parte di General Electric. L’informatico Ken Thompson, che allora era collaboratore di Bell Labs, non abbandonò l’idea di un sistema multiutente: insieme a Dennis Ritchie e a un piccolo team di AT&T iniziò a pianificare un proprio sistema sulla base dei principi di Multics. La ricerca di un computer che si prestasse al progetto non ebbe inizialmente successo e poiché Bell Labs si era pronunciata contro l’eventuale acquisto di un esemplare che potesse fare al caso, gli sviluppatori dovettero accontentarsi di mettere su carta e lavagna i propri progressi.
Alla fine riuscirono a procurarsi un minicomputer PDP-7 usato appartenente a Digital Equipment Corporation (DEC). Il calcolatore in questione, che occupava “soltanto” lo spazio di un armadio a muro, funzionava con il sistema operativo GECOS (General Electric Comprehensive Operating System), che da questo momento servì da piattaforma di sviluppo.
Presto nacquero strumenti software di grande importanza come una riga di comando (sh), un editor (ed) ed un file system già esistente in forma cartacea, anche se inizialmente in un linguaggio assembly (vicino all’hardware, ma semplificato per gli utenti umani). Siccome il nuovo sistema operativo, al contrario di Multics, permetteva l’accesso a soltanto due utenti, i quali potevano eseguire soltanto un processo alla volta, venne nominato Unics. A causa della limitazione nelle lunghezze dei nomi dei file in GECOS, venne abbreviato in Unix.
Prima B, poi C: Unix viene dotato di un linguaggio di programmazione proprio
Dopo aver creato Unix e qualche programma elementare, il team di Bell Labs si occupò di sostituire il corrente linguaggio assembly con varianti di minore complessità. Il piano per lo sviluppo di un compilatore per il linguaggio IBM Fortran già esistente venne abbandonato dopo poco tempo. Al suo posto i collaboratori iniziarono a lavorare a una nuova lingua, che si orientava al modello PL/I (il linguaggio di Multics) e BCPL (Basic Combined Programming Language), sviluppato presso il MIT. A questo scopo Ritchie e gli altri scrissero da capo alcuni degli strumenti di sistema in questo linguaggio imperativo, fino a che nel 1970 ottennero un nuovo calcolatore PDP-11 e dovettero ripensare nuove soluzioni, dato che la nuova architettura di sistema non era, come invece quella del PDP-7 e del linguaggio di programmazione B, orientata alle parole, bensì ai byte.
Nei due anni successivi Bell Labs sviluppò il successore di C, la cui sintassi e altre proprietà si trovano in vari linguaggi di programmazione moderni come l’estensione C++, Java, JavaScript, PHP e Perl. Nel 1973, quando il linguaggio era ormai giunto a maturazione, il team di sviluppatori iniziò a riscrivere l’intero kernel di Unix in C. Il risultato venne reso pubblico dal team di Unix a metà degli anni 70. Poiché all’epoca AT&T, un monopolista controllato dallo stato nel settore delle telecomunicazioni, non era autorizzato a vendere alcun software, Unix (versione 6), nel frattempo un sistema multiutente che consentiva anche diversi processi contemporaneamente, fu reso disponibile gratuitamente in tutte le università interessate con incluso un compilatore C che rendeva il sistema utilizzabile su quasi tutte le piattaforme.
Hardware friendly e open source: Unix conquista la scena degli sviluppatori
Con il rilascio del software Unix per le istituzioni educative iniziò la marcia trionfale del nuovo sistema operativo, inizialmente più che altro come giocattolo per i programmatori.
Gli ordinari processi di lavoro sugli ex mainframe IBM e sulle macchine PDP continuavano a funzionare, infatti, su sistemi nativi come RSX-11, RT-11 o IST. Per gli sviluppatori il valore del codice sorgente creato dal kernel e le relative applicazioni non si limitava certo a una semplice esperienza di apprendimento: Unix richiedeva davvero poco agli hardware, inoltre la facilità di utilizzo invitava a sperimentarlo e svilupparlo ulteriormente. A raccogliere la sfida fu soprattutto l’Università di California a Berkley, l’università da cui proveniva Thompson, anche grazie al contributo di un professore in visita nel neonato dipartimento di informatica.
Così Bill Joy e Chuck Haley, che all’epoca erano studenti, migliorarono Pascal, il sistema sviluppato da Thompson, e programmarono con ex un editor di testo completamente nuovo, predecessore di vi, tuttora una delle installazioni standard nei sistemi unixoid. Nel 1977 apparve infine una variante di Unix modificata sotto la direzione di Joy, che conteneva tutte le migliorie e gli sviluppi ottenuti fino a quel momento. La Berkeley Software Distribution (BSD), che successivamente integrò tra gli altri il protocollo network TCP/IP nell’universo di Unix rendendo appetibile per la prima volta l’impostazione di un sistema operativo libero (grazie alla licenza BSD), è considerata da allora una delle varianti più importanti di Unix.
Gli anni 80: la commercializzazione e la guerra di Unix
Negli anni successivi le continue e significative innovazioni attirarono l’attenzione di tutto il mondo, mentre gli aspetti finanziari divenivano sempre più importanti. Già nel 1979 Microsoft acquisì una licenza Unix V7 per sviluppare tra le altre cose le porte per i processori Intel e Motorola. Negli anni successivi l’azienda di software pubblicò Xenix, inteso come sistema operativo standard per i PC, che però aveva requisiti hardware piuttosto elevati. Microsoft affidò la ricerca per lo sviluppo a SCO (Santa Cruz Operation), un produttore di software, per concentrarsi su OS/2 e sullo sviluppo di MS-DOS.
Anche Bill Joy nel 1982 prese parte alla competizione aprendo l’azienda Sun Microsystems, proprietaria del sistema basato su BSD SunOS (il predecessore di Solaris), specificamente progettato per l’uso su server e workstation.
Tra AT&T, che nel frattempo aveva ottenuto il permesso per la commercializzazione, e l’Università di Berkeley, che si era contraddistinta grazie a numerosi programmatori per la qualità e quantità di innovazioni, esplose quindi una vera e propria lotta per godere dei vantaggi di Unix. Così inizialmente AT&T cercò di conquistare il mercato con il System III (1981) e in particolare con l’ottimizzato System V (1983), entrambi basati su Unix V7, mentre l’Università di Berkeley pubblicò contemporaneamente 4.2BSD, per il quale furono rilasciate più di 1.000 licenze in 18 mesi. Era sicuramente molto più amato del System V, che era a pagamento e che oltretutto, rispetto alla variante di Berkeley, non disponeva del Fast File System (FFS) e delle possibilità di networking (grazie al TCP/IP).
Con il quarto release del System V (1988), AT&T implementò queste e altre funzioni di BSD, ma anche di Xenix e SunOS, il che portò molti utenti a decidersi per la soluzione commerciale.
Unix diventa una soluzione server
Se i vari sistemi Unix competevano tra loro nella ricerca delle soluzioni migliori e per il bene della propria comunità, Apple e Microsoft ingaggiarono una gara nel settore dei personal computer e successivamente nell’ambiente server. Mentre Microsoft era concentrata sulla corsa ai PC domestici, nel 1991 apparse sulla scena Linux, un sistema basato su Unix che si preparava a conquistare negli anni seguenti l’ambiente server. Con questo pacchetto creato da un kernel a licenza gratuita e con il software GNU, anch’esso disponibile gratuitamente, lo sviluppatore Linus Torvalds soddisfò il desiderio di un sistema operativo open source concorrenziale, colpendo pienamente nel segno. A oggi esistono numerose derivazioni di Unix-Linux, come Debian, CentOS, Red Hat o Ubuntu, chiamati anche derivati, come software di sistema per server di tutti i tipi. In particolare Ubuntu è sempre più amato per i PC di casa. Linux, di cui abbiamo parlato più diffusamente nel nostro articolo su Linux, non è però l’unico dei successori di Unix a poter vantare grandi successi nel mondo dei computer: a partire da Mac OS X 10.0 e Mac OS X Server 1.0, il sistema operativo di Apple si basa su Darwin, una variante gratuita di BSD. Lo stesso Unix di Berkeley compare con numerose derivazioni gratuite come FreeBSD, OpenBSD o NetBSD. Con iOS (lo stesso sistema di macOS) e Android (basato sul kernel di Linux), anche i sistemi operativi più diffusi per i dispositivi mobili appartengono alla famiglia di Unix.
Che cos’è Unix: le caratteristiche più importanti
L’importanza di Unix consiste innanzitutto nel fatto che molte delle sue caratteristiche sono state un’innovazione epocale per i tempi, che non soltanto hanno influenzato i successivi sviluppi dei sistemi unixoid, ma sono state assimilate anche dai concorrenti Apple e Microsoft per i loro sistemi operativi. In particolare sono le seguenti caratteristiche ad aver reso Unix un apripista per i moderni sistemi operativi:
File system gerarchico e universale
Fin dall’inizio un elemento fondamentale di Unix fu l’organizzazione gerarchica del file system che permetteva all’utente di strutturare i file in cartelle. Alla directory root (root significa radice), contrassegnata dalla barra “/”, può essere assegnato un numero a piacere di sottodirectory. Secondo il principio di base “everything is a file” (“tutto è un file”) Unix può raffigurare unità, dischi rigidi, terminali o calcolatori esterni come file di dispositivo nel file system. Inoltre alcuni derivati, tra cui anche Linux, mostrano i processi e le loro proprietà come file nel file system virtuale procfs.
Esecuzione di diversi processi contemporaneamente (multitasking)
Decisiva per il successo di Unix fu anche la possibilità di eseguire più processi o programmi allo stesso tempo, senza che si intralciassero a vicenda. Per evitare ciò, infatti, il sistema operativo fin dall’inizio si basava sul multitasking preventivo: questo metodo, il cosiddetto scheduler (dall’inglese schedule = scadenzario), che è parte del kernel del sistema operativo, si fa carico dei singoli processi seguendo un sistema di priorità. Apple e Microsoft giunsero a simili soluzioni per la gestione dei processi molto più tardi, soltanto negli anni 90.
Sistema a più utenti (multiuser system)
Già a partire da Multics il fine principale era quello di realizzare un sistema che consentisse a più utenti di lavorare contemporaneamente. A questo scopo venne assegnato un proprietario a ogni programma e processo. E anche se inizialmente Unix era limitato a soltanto due utenti, questa rimane una caratteristica che contraddistingue dall’inizio il portfolio del software di sistema. Il vantaggio di un tale sistema multiutente non è soltanto la possibilità di poter utilizzare nello stesso momento singoli processori, ma anche la relativa gestione dei diritti: gli amministratori potevano ora definire diversi diritti di accesso e disponibilità di risorse per diversi utenti. Per fare ciò era però innanzitutto necessario che l’hardware del computer lo permettesse.
Possibilità di networking
Con il rilascio del 4.2BSD nel 1983, Berkeley Unix fu uno dei primi sistemi operativi a integrare lo stack del protocollo Internet, e ha così fornito la base per Internet e una semplice configurazione di rete, consentendo di agire come client o server.
Alla fine degli anni 80 con la citata quarta versione del System V, si affacciò sul mercato anche una variante del sistema AT&T commerciale, nel quale venne inserita la leggendaria famiglia di protocolli nel kernel. Windows, invece, poté supportare un’estensione corrispondente soltanto con il 3.11 (1993) un’estensione corrispondente.
Indipendenza della piattaforma
Ai tempi della nascita di Unix, mentre in generale gli altri sistemi operativi e le loro applicazioni erano finalizzati specificamente a un preciso tipo di processore, il team di Bell Labs si mosse fin da subito nella direzione di un sistema portatile. In realtà si iniziò con un linguaggio assembly, ma, non appena realizzata la struttura di base del software di sistema, fu avviato il progetto di un linguaggio di programmazione di livello superiore, dal quale sarebbe nato lo storico linguaggio C.
Di fatto le componenti scritte in C, nonostante fosse incluso un compiler, erano ancora molto legate all’architettura delle macchine PDP, che Ritchie e gli altri utilizzavano come base per i propri lavori. Con la versione Unix V7, che era stata fortemente rivista (1979), il sistema operativo si è guadagnato la reputazione di sistema portatile.
Il principio di Unix toolbox e la shell
I sistemi Unix combinano una quantità di tool e comandi che normalmente sono concepiti soltanto per pochi compiti specifici. Per questo Linux attinge ad esempio ai tool di GNU. Per la generale risoluzione dei problemi vale il principio di trovare risposte in combinazione con tool standard, anziché di sviluppare nuove programmazioni specifiche. Il tool più importante da questo punto di vista è sempre stata la shell (sh), un’interprete di comandi orientata al testo che offre ampie opzioni di programmazione. La classica interfaccia utente si può utilizzare anche senza un’interfaccia grafica grafica, anche se una tale interfaccia, che è entrata nell’ambiente Unix al più tardi con Linux, aumenta naturalmente la semplicità di utilizzo. La shell offre una serie di vantaggi per gli utenti esperti:
- Funzionamento semplificato grazie al completamento automatico
- Funzione copy-paste
- Utilizzabile in modo interattivo (accesso diretto) o non interattivo (esecuzione di script)
- Grande flessibilità, poiché le singole applicazioni (strumenti, comandi) sono combinabili quasi liberamente
- Interfacce utente standardizzate e stabili, cosa non sempre garantita con un GUI
- Documentazione automatica dei percorsi di lavoro degli script
- Implementazione veloce e semplice delle applicazioni
In sintesi: chi vuol capire un sistema operativo deve dare uno sguardo a Unix
L’ascesa di Microsoft e Apple, legata a doppio filo ai fondatori Bill Gates e Steve Jobs, non ha sicuramente eguali. Le ragioni dell’enorme successo di entrambe le multinazionali risiedono sicuramente nell’operato pionieristico di Dennis Ritchie, Ken Thompson e del resto del team Unix negli anni tra il 1969 e il 1974. Unix non soltanto portò a diversi tipi di derivati propri, ma ha anche influenzato altri sistemi operativi con i propri concetti come quello del file system strutturato gerarchicamente, la potente shell o la portabilità. Al fine di implementare quest’ultimo è stato sviluppato C, il linguaggio di programmazione più influente della storia dei computer.
Per farsi un’idea delle possibilità di linguaggio e dell’insieme di funzioni dei sistemi operativi, non c’è miglior oggetto di osservazione di un sistema Unix. Oltretutto non dovete per forza ricorrere a una delle varianti classiche: distribuzioni Linux come Gentoo o Ubuntu sono aggiornate alle moderne esigenze, senza tuttavia rinunciare alla funzione principale, il massimo controllo sul sistema. Con macOS, che è sicuramente più adatto ai principianti, si è invece un po’ più limitati nelle possibilità. Questo sistema operativo riesce a coniugare con maestria la potente base Unix a un’interfaccia grafica dal design accattivante.