Red Hot Cyber

La cybersecurity è condivisione.
Riconosci il rischio, combattilo, condividi le tue esperienze ed 
incentiva gli altri a fare meglio di te.

Cerca
Crowdstrike

La storia del Kernel Linux (2 di 2). I primi hacker fino alla versione 1.0.

Massimiliano Brolli : 10 Novembre 2021 13:52

Articolo a cura di Pietro Cornelio e Massimiliano Brolli

Precedenti articoli: La storia del Kernel Linux (1 di 2). Da Torvalds alla community hacker

Nel primo articolo abbiamo conosciuto Linus Torvalds, la sua adolescenza e l’interesse smodato verso i computer. Abbiamo anche visto che dopo aver messo mano su un sistema operativo MINIX (che non poteva essere modificato come codice sorgente) si spinse a creare dapprima una shell e successivamente dei driver fino a definire un sistema operativo primordiale che al momento non era ancora autonomo.

Subito dopo la condivisione dell’embrione di quello che poi divenne Linux, al Newsgroup comp.os.minix, tutto iniziò a cambiare rapidamente ed è dal 17 settembre del 1991 che riprendiamo questa entusiasmante storia.

Dopo la mail al Newsgroup

“Non penso che fossero più di una o due le persone che lo provarono”, disse Torvalds in quando “dovevano installare il compilatore speciale, creare una partizione pulita per poterla usare come boot, compilare il mio kernel e poi avviare la shell. Avviare la shell era praticamente tutto ciò che si potesse fare con quella versione.”

Potevi stamparti i sorgenti, che non erano più di 10.000 righe, meno di 100 pagine se le stampavi in caratteri piccoli. Ari Lemke si occupò di far arrivare il sistema operativo sul sito ftp, e detestava il nome Freax che gli aveva affibiato Torvalds.

Preferiva l’altro nome – Linux – quindi depositò il codice sorgente all’interno di una directory chiamata “Linux”; residente all’interno di “pub/OS/Linux” .

Torvalds sistemò alcuni bachi, come quello che causava il blocco quando veniva esaurita la memoria e riuscì a portare il compilatore GCC sul sistema operativo Linux in modo da poter compilare piccoli programmi.

Il che voleva dire che gli utenti non avrebbero avuto bisogno di caricare il compilatore GCC prima di avviare il sistema operativo Linux. All’inizio di ottobre ci fu il rilascio della versione 0.02 che comprendeva la sistemazione di alcuni bug e qualche programma aggiuntivo. Il mese dopo Torvalds rilasciò la versione 0.03.

Linus Torvalds affermo anni dopo:

mi sarei potuto fermare alla fine del 1991. Avevo fatto un sacco di cose che mi sembravano interessanti. Non funzionava tutto alla perfezione, ma secondo me nel mondo del software è facile perdere interesse per un progetto una volta che ne hai risolto i problemi fondamentali. Ed era ciò che stava succedendo a me. Il debug di un software non è un’attività divertentissima. Poi accaddero due cose che mi fecero continuare. Primo: distrussi per errore la mia partizione Minix; Secondo: la gente continuava a mandarmi i propri pareri sul sistema.

All’epoca facevo il boot in Linux ma utilizzavo Minix come ambiente principale di sviluppo. Usavo Linux soprattutto per leggere le e-mail e le news dal computer dell’università tramite l’emulazione di terminale che avevo scritto. Il computer dell’università era sempre occupato, così avevo scritto un programma che lo chiamava automaticamente. Ma in dicembre mi collegai per errore al mio disco fisso invece che al modem. Stavo cercando di collegarmi a /dev/tt1, la linea seriale. Feci un errore e mi collegai in automatico a /dev/hda1, il disco fisso. Il risultato finale fu che sovrascrissi per errore le parti più critiche della partizione in cui avevo Minix. Fu a quel punto che dovetti prendere una decisione: potevo reinstallare Minix oppure cogliere l’occasione al volo e dire a me stesso che Linux era abbastanza buono da poterlo sostituire. Avrei scritto i programmi per compilare Linux direttamente al suo interno e quando avessi sentito il bisogno di Minix avrei semplicemente aggiunto quella funzione a Linux. Abbandonare l’ambiente di partenza e rendere veramente indipendente un programma è un passo concettuale notevole, tanto che alla fine di novembre rilasciai la nuova versione chiamandola .10. Qualche settimana più tardi venne la versione 0.11”.

I primi hacker che si unirono a Torvalds

Da li in poi, dopo l’interessamento della community a Linux, ecco che una serie di persone si unirono al progetto, dando una mano a Torvalds. Di seguito riportiamo, presi dai file C, i nomi dei primi programmatori che aiutarono Torvalds, presi dall’head dei sorgenti della versione di Linux 0.11. D fatto al momento fu soltanto “Theodore Ts’o”.


Theodore Ts’o, il primo programmatore che si unì a Torvalds sul kernel Linux

linux/kernel/blk_drv/ramdisk.c/* * linux/kernel/blk_drv/ramdisk.c * * Written by Theodore Ts’o, 12/2/91 *//* * malloc.c — a general purpose kernel memory allocator for Linux. * * Written by Theodore Ts’o ([email protected]), 11/29/91…

I primi sviluppi consigliati dagli utenti

Ecco che Linus Torvalds inizia a implementare le prime importanti funzioni per risolvere problemi degli utenti e disse:

Ricordo che in dicembre ci fu un tizio in Germania che aveva solo 2 megabyte di RAM e stava cercando di compilare il kernel ma non riusciva a far girare il GCC perché all’epoca questo compilatore aveva bisogno di più di un megabyte. Mi chiese se Linux poteva essere compilato con un compilatore meno pesante, che non avesse bisogno di tutta quella memoria. Così decisi che anche se io non avevo bisogno di quella funzione in particolare, l’avrei implementata per lui. Si chiama page-to-disk e significa che anche se uno ha solo 2 mega di RAM può simulare di averne di più usando il disco come memoria. Eravamo più o meno a Natale del 1991. Ricordo che il 23 dicembre stavo cercando di far funzionare il page-to-disk. Il 24 dicembre funzionava abbastanza bene, ma ogni tanto mandava in blocco la macchina. Il 25 era a tutto posto. Quella fu la prima funzione che aggiunsi per soddisfare i bisogni di qualcun altro. E ne ero fiero.”

Ma ogni giorno che passava, la comunità degli utenti di Linux diventava più grande. Torvalds riceveva e-mail da posti che aveva sognato di visitare, come l’Australia e gli Stati Uniti. Il page-to-disk era una cosa notevole, perché Minix non l’aveva mai fatto. Infatti venne incluso all’interno della versione 0.12, che venne rilasciata la prima settimana di gennaio 1992.

La gente cominciò subito a confrontare Linux non solo con Minix, ma anche con Coherent, un piccolo clone di Unix sviluppato dalla Mark Williams Company. Sin dall’inizio, il fatto di aggiungere il page-to-disk portò Linux un passo avanti rispetto alla concorrenza. Fu a quel punto che Linux decollò.

All’improvviso c’erano persone che passavano da Minix a Linux. All’epoca Linux non faceva tutte le cose che faceva Minix, ma faceva la maggior parte delle cose che interessano davvero alla gente. E aveva questa funzione che in molti trovavano davvero utile: con il page-to-disk potevi far girare programmi più grossi rispetto alla tua memoria.

Torvalds disse:

“Il fatto è che per rendere Linux utilizzabile mi ero basato su una serie di strumenti distribuiti liberamente in internet: anch’io avevo lavorato salendo sulle spalle dei giganti. Il più importante di questi free software era il compilatore GCC, con un copyright in General Public License, la creazione di Richard Stallman universalmente conosciuta come GPL (o «copyleft»). Così abbandonai il mio vecchio copyright e adottai la GPL, un documento scritto da R. Stallman con la supervisione di alcuni avvocati (e dato che c’entrano degli avvocati, è lungo parecchie pagine). Il nuovo copyright venne incluso nella versione 0.12, ma ricordo di essere rimasto sveglio la notte dopo il rilascio, tormentato dall’idea dell’interesse commerciale che il sistema avrebbe suscitato”.

Minix contro Linux

Tutta quell’attenzione non fu soltanto positiva. Torvalds disse che sebbene non aveva mai amato molto i confronti, fu costretto a difendere Linux quando Andrew Tanenbaum si mise ad attaccare Linux, in quanto stava soppiantando il suo.


Interfaccia grafica di MINIX di qualche anno dopo, molto simile a Windows 95

Erano entrambi dei nerd, per cui tutto questo scambio avvenne tramite e-mail. Torvalds disse relativamente a questa questione:

“Chi poteva volergliene se gli stavano girando vorticosamente? Prima che venissero creati i newsgroup dedicati a Linux, io usavo continuamente i newsgroup di Minix per fare degli annunci che riguardavano Linux o per trovare persone a cui interessasse il sistema operativo. Perché mai Andrew avrebbe dovuto gradire la cosa? Aveva idee opposte alle mie su come andasse costruito un sistema operativo. All’epoca Andrew faceva parte di una scuola di informatici che sosteneva un approccio microkernel ai sistemi operativi. Aveva realizzato Minix in microkernel e anche Amoeba, il sistema su cui stava lavorando all’epoca, era dello stesso genere. Si trattava di un movimento molto vivace nei tardi anni Ottanta e nei primi anni Novanta. E il successo di Linux era una minaccia. Così Andrew continuava a mandare al newsgroup messaggi assai spiacevoli.”

La teoria alla base del microkernel parte dall’idea che i sistemi operativi sono complessi. Per cui si cerca di eliminare parte della complessità con una forte modularizzazione. Il principio dell’approccio microkernel è che il kernel – che si trova alla base della base della base si un sistema operativo – dovrebbe fare il meno possibile.

La sua funzione principale è comunicare. Tutte le altre cose che un computer offre sono servizi disponibili tramite i canali di comunicazione microkernel. Nell’approccio microkernel lo spazio dei problemi va suddiviso al punto che nessuna sua parte sia complessa. Torvalds trovava questo approccio stupido.

Diceva che le interazioni lo rendevano molto più complesso di quanto potrebbe essere se molti servizi fossero inclusi nel kernel stesso, come avviene in Linux. Un altro problema di Minix era che potevi avere le sorgenti ma le licenze non ti permettevano di farci un granché.

Prendete uno come Bruce Evans, che aveva fatto un bel po’di interventi chirurgici su Minix e l’aveva reso più utilizzabile. Non poteva incorporare i suoi miglioramenti. Si doveva limitare a fare delle patch. Da un punto di vista pratico era un disastro.

Da un punto di vista legale non poteva mettere a disposizione degli utenti un’immagine di boot in modo che questi potessero fare facilmente un aggiornamento. Così gli utenti dovevano seguire un percorso a tappe per ottenere un sistema utilizzabile. Una cosa tremendamente scomoda.


Linus legge a video le email del prof. Tanenbaum

Gli scambi con il professor Tanenbaum

Torvalds iniziò a comunicare con Andrew Tanenbaum all’inizio del 1992. Torvalds disse riferendosi al primo messaggio di Tanenbaum: “Immaginate di collegarvi in rete in una mattina gelida e di trovarvi di fronte la versione non tagliata di questo messaggio”:

Da: [email protected] (Andy Tanenbaum) A: Newsgroup: comp.os.minix Oggetto: LINUX è obsoleto Data: 29 gennaio 1992 12:12:50 GMT Sono stato negli USA per un paio di settimane, per cui non ho commentato particolarmente LINUX (non che avrei detto molto se fossi stato a casa), ma per quello che vale ho un paio di commenti da fare ora. Come molti di voi sanno, per me MINIX è un hobby, una cosa che faccio la sera quando mi stufo di scrivere libri e non ci sono grosse guerre, rivoluzioni o udienze del senato da seguire in diretta sulla CNN. Il mio vero lavoro è quello di professore e ricercatore nell’area dei sistemi operativi. Dato il lavoro che faccio, credo di sapere qualcosina su dove andranno a parare i sistemi operativi nei prossimi dieci anni circa. Due aspetti sono evidenti: 1.MICROKERNEL CONTRO SISTEMA MONOLITICO La maggior parte dei sistemi operativi più vecchi sono monolitici, il che vuol dire che l’intero sistema operativo è un unico file a.out che gira in «modalità kernel». Questo binario contiene la gestione dei processi, la gestione della memoria, il file system e il resto. Esempi di questi sistemi sono UNIX, MS-DOS, VMS, MVS, OS/360, MULTICS e molti altri. L’alternativa è un sistema basato su microkernel, in cui la maggior parte dell’OS gira come processi separati, per lo più fuori dal kernel. I processi comunicano passando dei messaggi. Il lavoro del kernel consiste nel gestire il passaggio dei messaggi, l’interrupt, i processi di basso livello e a volte l’I/O. Esempi di questo tipo di architettura sono RC4000, AMOEBA, CHORUS, MACH e Windows/NT (di prossima uscita). Potrei lanciarmi in una lunga storia sui meriti relativi delle due architetture, ma basti dire che tra le persone che progettano sistemi operativi il dibattito è fondamentalmente chiuso. Il microkernel ha vinto, MINIX è un sistema basato su microkernel. Il file system e la gestione della memoria sono processi separati che girano fuori dal kernel. Anche i drive I/O sono processi separati. LINUX è un sistema monolitico. Un grande passo indietro verso gli anni Settanta. 2.PORTABILITÀ MINIX è stato progettato per essere ragionevolmente portabile, ed è stato portato dalla linea Intel al 680×0 (Atari, Amiga, Macintosh), allo SPARC e al ns32016. LINUX è legato abbastanza saldamente all’80×86. Ed è la strada sbagliata. Non fraintendetemi, non è che non sia felice dell’esistenza di LINUX. Mi toglierà di torno tutta quella gente che vorrebbe trasformare MINIX in BSD. Ma in tutta onestà consiglierei a chiunque voglia un sistema operativo *libero* e **MODERNO** di cercare un OS basato su microkernel e portabile, magari qualcosa tipo GNU. Andy Tanenbaum ([email protected])“Sapevo di dover difendere il mio onore, per cui risposi” disse Tovalds:
Da: [email protected] (Linus Benedict Torvalds) Oggetto: RE: LINUX è obsoleto Data: 29 gennaio 92 23:14:26 GMT Organizzazione: Università di Helsinki Be’, con un oggetto come questo temo proprio che dovrò rispondere. Mi scuso con gli utenti di minix che hanno sentito parlare anche troppo di linux. Mi piacerebbe riuscire a *ignorare l’amo*, ma… è il momento di farsi una bella litigata! Nel messaggio «[email protected]» [email protected] (Andy Tanenbaum) scrive: >Sono stato negli usa per un paio di settimane, per cui non ho commentato particolarmente LINUX (non che avrei detto molto se »fossi stato a casa), ma per quello che vale ho un paio di commenti da fare ora. >Come molti di voi sanno, per me MINIX è un hobby, una cosa che faccio la sera quando mi stufo di scrivere libri e non ci sono grosse guerre, rivoluzioni o udienze del senato da seguire in diretta sulla CNN. Il mio vero lavoro è quello di professore e ricercatore nell’area dei sistemi operativi. Questa sarebbe una scusa per i limiti di minix? Mi dispiace, ma hai perso: io ho molte più scuse di te e nonostante questo linux dà la polvere a minix su quasi tutta la linea. Per non parlare del fatto che la maggior parte del codice migliore di minix sembra essere stata scritta da Bruce Evans. Risposta 1: tu faresti minix per hobby: guarda chi fa soldi con minix e chi invece regala linux. Poi vienimi a parlare di hobby. Rendi minix disponibile liberamente e una delle mie obiezioni principali scomparirà. Linux è stato decisamente un hobby (ma uno di quelli seri, i migliori) per me: non ci faccio soldi e non fa nemmeno parte dei miei studi universitari. L’ho fatto tutto nel mio tempo libero e con la mia macchina. Risposta 2 : il tuo lavoro è quello di professore e ricercatore. È una gran bella scusa per alcune delle bufale di minix. Posso solo sperare (e dare per scontato) che Amoeba non faccia schifo come minix. >1. MICROKERNEL CONTRO SISTEMA MONOLITICO È vero, linux è monolitico, e concordo sul fatto che il microkernel è più carino. Se ti fossi limitato ad argomentare meno, probabilmente sarei stato d’accordo con quasi tutto quello che hai scritto. Da un punto di vista teorico (ed estetico), linux perde. Se il kernel GNU fosse stato pronto la primavera scorsa, non avrei nemmeno iniziato il mio progetto: il fatto è che non era pronto, e non lo è nemmeno adesso. Linux vince decisamente su questo fronte: è disponibile qui e ora. >MINIX è un sistema basato su microkernel, [parte cancellata, ma non tanto da confondere le idee] LINUX è un sistema monolitico. Se questo fosse l’unico criterio per valutare la «bontà» di un kernel, avresti ragione. Quello che però non dici è che minix non si gioca molto bene il microkernel e ha dei problemi con il multitasking reale (nel kernel). Se avessi creato un sistema operativo che avesse dei problemi con un file system multithreading, non condannerei gli altri con tanta leggerezza. Anzi: farei del mio meglio perché gli altri si dimenticassero del mio fiasco. [sì, lo so che ci sono degli hack per il multithreading in minix, ma sono appunto hack e bruce evans mi dice che ci sono parecchi problemi.] >2. PORTABILITÀ «La portabilità è per chi non sa scrivere programmi nuovi» Il fatto è che linux è più portabile di minix. Sento che stai dicendo: «Cosa?» È vero, ma non nel senso che intendi tu: ho reso linux il più possibile conforme agli standard (senza avere davanti gli standard POSIX). Portare delle cose in linux è in generale molto più facile che portarle in minix. Concordo sul fatto che la portabilità sia una buona cosa, ma solo quando ha effettivamente un senso. Non ha alcun senso cercare di rendere eccessivamente portabile un sistema operativo: aderire a un API portabile è abbastanza. L’idea stessa di un sistema operativo è quella di utilizzare le caratteristiche hardware e nasconderle dietro uno strato di chiamate di alto livello. È esattamente ciò che fa linux: utilizza un sottoinsieme di caratteristiche del 386 più grande di quanto sembrino fare altri kernel. Naturalmente questo rende il kernel poco portabile, ma rende anche molto più semplice l’architettura. É il compromesso che ha reso possibile linux. Sono d’accordo anche sul fatto che linux porta la non-portabilità all’estremo: ho preso il mio 386 lo scorso gennaio e linux era in parte anche un progetto per imparare qualcosa sulla macchina. Molte cose avrebbero dovuto essere fatte in modo più portabile, se fosse stato un vero progetto. Ma non sto cercando delle scuse: è stata una decisione di design, e lo scorso aprile, quando ho iniziato il progetto, non pensavo che qualcun altro avrebbe voluto usarlo. Sono felice di poter dire che mi sbagliavo, e dato che le mie sorgenti sono liberamente disponibili a tutti, chiunque può cercare di portarlo, anche se non sarà facile. Linus P.S.:>Mi scuso se vi sono sembrato troppo aggressivo. minix non è male se non hai altro a disposizione. Amoeba può essere una scelta possibile se hai 5-10 386 di riserva, ma non è certamente il mio caso. Di solito non mi tuffo a pesce a una litigata in rete, ma quando si parla di linux divento suscettibile 🙂

Linux, sempre più in ascesa: l’X Window

Nel 1992 il sistema operativo passò dallo statuto di giocattolo a qualcosa di integrato nella vita delle persone, nelle loro attività, nei loro affari. Il passaggio avvenne nella primavera del 1992, circa un anno dopo che avevo iniziato l’emulazione di terminale, quando la prima versione del sistema di finestre X iniziò a girare sotto Linux.

Questo significava che il sistema operativo era in grado di supportare un’interfaccia grafica che gli utenti potevano utilizzare contemporaneamente su più finestre, grazie al progetto di X window nato al MIT. Questo fu un grande cambiamento.

“Ricordo che ci avevo scherzato sopra con Lars, più o meno un anno prima che accadesse, dicendogli che un giorno avremmo fatto girare X e saremmo stati in grado di fare qualsiasi cosa. Non pensavo che sarebbe successo tanto in fretta. Fu un hacker di nome Orest Zborowski che riuscì a portare X in Linux.”

Il contributo di Orest mise a disposizione non solo le finestre; aprì anche una grande porta verso il futuro. I socket erano utilizzati per la rete locale in modo da consentire il funzionamento del sistema X Window. Era quindi possibile partire da quegli stessi socket per far fare a Linux il grande salto vero le reti esterne.

Linux e la rete

Senza le reti, Linux era utilizzabile solo da persone che se ne stavano a casa propria e usavano un modem per collegarsi, oppure facevano tutto in locale. Con grande ottimismo si iniziarono a sviluppare le reti Linux sopra i socket originali, anche se non erano stati affatto pensati per i collegamenti di rete.

Torvalds era convinto che l’obbiettivo era vicino tanto che fece un grande salto nello schema di numerazione delle versioni. Nel marzo 1992 avevo pensato di rilasciare la versione 0.13. Invece, con l’interfaccia grafica funzionante, pensò che Linux stesse ormai intorno al 95 per cento del raggiungimento dell’obiettivo, ovvero rilasciare un sistema operativo completo e affidabile, dotato di reti.

Così la nuova release fu la 0.95, ama Linus disse:

“Ragazzi, avevo decisamente corso troppo. Che ingenuo… Le reti sono una brutta bestia e alla fine ci vollero esattamente due anni per metterle a posto, per dare loro una forma che si potesse rendere pubblica. Quando aggiungi le reti all’improvviso introduci una serie di nuovi problemi. Problemi di sicurezza, per esempio. Non sai chi c’è là fuori, né cosa vuoi fare. Devi stare molto attento che qualcun altro non ti mandi in crash il computer inviandoti dei pacchetti spazzatura. Non puoi più controllare chi sta cercando di contattare la tua macchina. E poi molte persone hanno impostazioni di sistema diversissime. Sembrava che saremmo andati avanti così per sempre. “

Alla fine del 1993 Linux aveva delle funzioni di rete quasi utilizzabili, anche se alcune persone avevano dei seri problemi a farle girare.

Non si riusciva a gestire reti che non avessero confini ad 8 bit.

Dato che Torvalds era stato così ottimista nella numerazione della versione 0.95, si ritrovò presto a gestire dei problemi. Nei due anni che ci vollero per arrivare alla versione 1.0, la community dovette fare dei salti mortali con i numeri delle release. Non c’erano molti numeri tra 95 e 100, ma si continuava a rilasciare nuove versioni basate su sistemazioni di bachi o nuove funzionalità.

Quando si arrivò alla versione 0.99, si iniziarono ad inserire ulteriori livelli di release per indicare i livelli delle patch, e poi ci si affidò all’alfabeto.

A un certo si aveva la versione 0.99, livello di patch 15. Poi la versione 0.99, livello di patch 15B e così via. Si fece tutta la trafila fino al livello di patch 15Z. Il livello di patch 16 divenne finalmente la versione di Linux 1.0, il punto in cui il software diventava utilizzabile. Questa versione uscì nel marzo 1994 con grandi squilli di fanfare all’auditorium della facoltà di Informatica dell’Università di Helsinki.

Fonti

https://www.wired.com/2001/10/kernel/

http://zeniv.linux.org.uk/~telsa/index.html

https://bnnfeed.com/alan-cox/

Massimiliano Brolli
Responsabile del RED Team di TIM S.p.a. e dei laboratori di sicurezza informatica in ambito 4G/5G. Ha rivestito incarichi manageriali in Telecom Italia che vanno dal ICT Risk Management all’ingegneria del software alla docenza.