Red Hot Cyber

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

Cerca

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

Massimiliano Brolli : 10 Novembre 2021 10:10

Articolo a cura di Pietro Cornelio e Massimiliano Brolli

La storia del Kernel Linux è una storia di puro hacking oltre ad essere stata un miracolo della “collaborazione”.

E’ frutto del genio di Torvalds ma anche di molti hacker/programmatori disseminati nel globo, i quali hanno contribuito, ognuno a suo modo, alla realizzazione di una innovazione “dirompente” per quel periodo storico, dove il software stava completamente virando nella logica a “closed source”.

Tutto nasce da Linus Benedict Torvalds, nato ad Helsinki in Finlandia, il 28 dicembre 1969 da Nils e Anna Torvalds. Ma a parte Torvalds, la storia del kernel Linux, ci fa conoscere degli “hacker generosi”, che questo articolo vuole portare alla luce, senza dei quali questa tecnologia che oggi ritroviamo in qualsiasi cosa, non sarebbe potuta essere realizzata.

Prologo

La storia di Linus Torvalds è molto interessante, il classico ragazzo nerd un po’ sfigato, bravo in matematica, fisica e come tradizione nerd esige, privo di qualsiasi capacità sociale e una psicosi per il suo naso che Linus considerava troppo grande.

Il padre di Torvalds era un giornalista radiofonico, mentre la madre lavorava per il quotidiano finlandese. I suoi genitori divorziarono in tenera età e lui iniziò a vivere con la madre e i nonni. Il nonno di Linus, Leo Toerngvist, era professore di statistica all’Università di Helsinki.

Interessante sapere che per Linus i più felici ricordi sono i momenti in cui giocava con la vecchia calcolatrice elettronica di suo nonno (il padre di sua madre) Leo Waldemar Tornqvist, professore di statistica all’università di Helsinki.

Iniziò a creare nuovi programmi utilizzando il linguaggio BASIC per poi passare all’assembly, molto difficile ma potente facendo diventare la matematica e la programmazione la sua passione.


Un giovane Linus Torvalds gioca con il cubo magico di Ernő Rubik

I primi computer

Il primo computer Linus lo vede a undici anni (all’incirca il 1981) quando il nonno comprò un Home Computer Commodore VIC-20. Fu quindi i nonno materno a far appassionare Linus ai computer mostrandogli i rudimenti della programmazione in BASIC che si rivelò per Linus una folgorazione leggendo i manuali e programmando in BASIC, affermo Linus anni più tardi:

“fu una sensazione inebriante e mentre i ragazzi di Helsinki giocavano a hockey e vanno a sciare con i genitori, io imparavo come funziona effettivamente un computer. Scoprii che è possibile programmare in linguaggio macchina e facendolo inizi a fare delle cose che prima non credevi nemmeno possibili, cioè utilizzare al meglio il computer, puoi controllare ogni minimo dettaglio, e iniziai a pensare come fare quelle cose in modo più veloce e in meno spazio. Con il linguaggio macchina non ci sono diaframmi di astrazione tra te e il computer, ci sei molto vicino. È l’intimità con una macchina”.

Dopo che Linus ebbe spremuto il VIC-20 al massimo delle sue possibilità iniziò a mettere da parte i soldi (facendo dei lavori estivi come pulire i parchi di Helsinki) per acquistare un C64.


Un commodore VIC20 con l’interfaccia CBM BASIC

Nel 1986 all’età di 16/17 anni dopo lunghe ricerche ed analisi di mercato per decidere quale computer comprare Linus decise per un bellissimo Sinclair QL uno dei primi computer a 32 bit che Linus considerava un computer davvero figo per via del colore nero e delle caratteristiche avanzate. Interessante notare che il Sinclair QL fornì a Linus Torvalds una serie di spunti di studio per i suoi hacking di programmazione riuscendo a sviluppare tools completamente in autonomia.

Acquistò un assembler per tradurre il linguaggio assembly in linguaggio macchina e un editor, Torvalds si rese conto che il nuovo assembler e l’editor erano su microdrive quindi non poteva metterli nella E-PROM per averli subito disponibili, (qui scatta la molla creativa dell’hacker) così decise di avventurarsi a scrivere un editor e un assembler più veloce che poi usò per scrivere tutti i programmi successivi come ad esempio clonare i suoi giochi preferiti del Commodore VIC-20.

Il Sinclair QL accompagnò Linus per ben tre anni dal liceo all’Università di Helsinki e all’Esercito Finlandese dove svolse il servizio militare. Ormai il Sinclair QL per Linus Torvalds non aveva più limiti e leggendo sulle riviste specializzate della nuova generazione di CPU Motorola 68020 iniziò addirittura di pensare di montare il 68020 sul Sinclair QL e di riscrivere il sistema operativo per adattarlo alla nuova CPU, pensò

“certo che sarebbe un bel passo. E prendere una nuova CPU mi costerebbe un sacco di soldi”

però il Sinclair QL non avrebbe avuto futuro quindi Linus abbandonò la folle idea. Nello stesso tempo Linus iniziò a notare l’arrivo sul mercato dei PC IBM compatibili che iniziavano ad essere interessanti.

Linu

s Torvalds anni dopo affermò

“durante il mio primo anno di università, il Sinclair QL trovò posto su una scrivania davanti alla finestra della mia stanza al primo piano su Petersgatan, ma non feci grandi passi in avanti con la programmazione. In parte perché volevo concentrarmi sugli studi. Ma anche perché mi ritrovai senza un progetto da realizzare sul mio computer. E senza un progetto ti manca pure l’entusiasmo. Cerchi di pensare a qualcosa che ti possa motivare”

per quel motivo Linus Torvalds decise che era arrivato il momento giusto per fare il militare, che prima o poi gli sarebbe toccato svolgere. Aveva diciannove anni, ed irritato dai limiti del suo computer Sinclair QL che non gli avrebbe permesso di sviluppare progetti informatici interessanti, prese un treno per la Lapponia per assolvere al suo dovere di 11 mesi di servizio militare. Il servizio militare finì il 7 maggio 1990.


Sir Clive Sinclair con in mano un Sinclair QL e la sua interfaccia

I processori 80386

Tornato dal servizio militare, Linus Torvalds si trovò di fronte al tipico dilemma da geek. Come tutti i puristi cresciuti con un chip 68008, snobbava i PC. Ma quando nel 1986 uscì col nuovo processore Intel 80386, i PC iniziarono a diventare molto più attraenti. Potevano fare tutto ciò che faceva un 68020 e nel 1990 la produzione di massa e l’introduzione di cloni IBM poco costosi resero quei computer molto più convenienti. Torvalds disse

“ero molto attento alla questione soldi, perché non ne avevo. Così decisi: è questa la macchina che voglio. E dato che i PC erano in piena espansione, gli aggiornamenti e le periferiche sarebbero stati facili da trovare. Soprattutto per quanto riguardava l’hardware, volevo avere qualcosa di standardizzato”

Così Linus decise di saltare il fosso per l’acquisto di un PC IBM compatibile mettendo da parte dei soldi vendendo i dispositivi di espansione del suo glorioso compagno di studi Sinclair QL.

Molto significativo per Linus Torvalds lo switch intellettuale che lo fece balzare a un livello molto alto di conoscenza dell’arte della programmazione e dei dettagli dei sistemi operativi. Torvalds in varie occasioni ha sempre affermato che tutti hanno un libro particolare che ha cambiato loro la vita,


Un processore intel 80386

“quello che si prese la mia e la proiettò verso nuove altezze fu “Sistemi operativi: progettazione e implementazione” di Andrew S. Tanenbaum”

Leggiamo le parole dello stesso Linus Torvalds:

”mi ero già iscritto ai corsi universitari autunnali e quello che aspettavo con maggiore ansia era il corso sulla programmazione in C e sul sistema operativo Unix. Quell’estate, per prepararmi al corso, comprai il libro del prof. A. Tanenbaum (professore universitario di Amsterdam) nella speranza di portarmi avanti col lavoro. Nel libro il prof. Tanenbaum esponeva la sua creatura Minix, un piccolo clone di Unix. Subito dopo avere letto l’introduzione e avere scoperto la filosofia di Unix e quello che quel sistema operativo potente, pulito e bellissimo era in grado di fare, decisi di prendermi una macchina su cui far girare Unix. Avrei installato Minix, l’unica versione ragionevolmente utile che potessi trovare. A mano a mano che leggevo il libro e iniziavo a capire Unix, sentivo l’entusiasmo che mi cresceva dentro. E sinceramente non se n’è mai più andato”.

E’ singolare notare come il primo anno accademico di Linus Torvalds nell’autunno del 1990 coincide anche con il primo anno in cui l’Università di Helsinki adottò Unix, il potente sistema operativo nato ai Bell Labs della AT&T nei tardi anni Sessanta e cresciuto in giro per il mondo con i vari dialetti e versioni che avevano fatto innamorare una buona parte del mondo accademico di allora. In particolare l’università comprò un MicroVAX su cui girava Ultrix di DEC, la versione di Unix della Digital Equipment Corporation.

Linus Torvalds rimase folgorato dalla versatilità di Unix che stava imparando dal libro di Andrew Tanenbaum e non vedeva l’ora di lavorare con Unix per sperimentare nuove idee, e nello stesso tempo era eccitatissimo pensando ai nuovi progetti che avrebbe potuto sviluppare se avesse posseduto un PC IBM compatibile Intel 80386. Ma siccome non aveva alcuna possibilità di mettere insieme i 18.000 marchi finlandesi (compresi gli interessi per il finanziamento a rate) per comprarne uno decise che avrebbe cominciato il semestre autunnale all’università usando il suo Sinclair QL come terminale e un modem per entrare nel nuovo computer Unix dell’università finché non sarebbe riuscito ad acquistare un PC su cui far girare uno Unix tutto suo.

L’incontro con il sistema operativo Minix

Il 2 gennaio 1991 era il primo giorno in cui i negozi erano aperti dopo Natale e dopo il ventunesimo compleanno con i soldi di Natale/compleanno in mano Linus prese la grande decisione di acquistare un computer con CPU Intel 80386 a 33 Mhz e 4 Mb RAM Il computer montava una versione ridotta del DOS. Torvalds voleva farci girare Minix, la variante di Unix, così lo ordinò e ci volle più di un mese perché il sistema operativo arrivasse fino in Finlandia.

Alla fine, un venerdì pomeriggio arrivò Minix e Linus Torvalds trascorse tutta la notte per installarlo: sedici dischetti da inserire a turno nel computer. Tutto il fine settimana fu dedicato alla conoscenza del nuovo sistema. Torvalds capì cosa gli piaceva e cosa non gli piaceva di quel sistema operativo quindi con la caparbietà e intelligenza tipica di un hacker iniziò a studiare sviluppando idee per compensare i difetti, scaricò dalla rete alcuni programmi che aveva già usato sul computer dell’università e dopo più di un mese Torvalds riuscì ad adattare il sistema alle sue esigenze.

Andrew Tanenbaum, il professore di Amsterdam che aveva scritto Minix, voleva che il sistema operativo restasse uno strumento didattico, quindi non adatto a modifiche e aggiustamenti pena violazione della licenza. Però esistevano delle patch disponibili per Minix sviluppate da un hacker australiano di nome Bruce Evans considerato in rete il Dio del Minix 386. I suoi miglioramenti rendevano Minix molto più utilizzabile. Prima ancora di comprare il computer Linus aveva seguito in rete i newsgroup dedicati a Minix, per cui imparò ogni dettaglio di Minix e come migliorarlo ancor prima di acquistare un PC. Purtroppo per questioni di licenza bisognava comprare la versione ufficiale di Minix e poi fare un sacco di lavoro per inserire le patch di Evans.


Il professor. Andrew Tanenbaum

Verso lo sviluppo di un kernel proprietario

Anni più tardi Linus Torvalds affermò che c’erano una serie di funzioni deludenti in Minix. Quella peggiore era l’emulazione di terminale, una funzione importante perché era il programma preferito che usava per collegarsi al computer dell’università per lavorare sul loro potente Unix o anche solo per andare in rete.

Così ancora una volta Torvalds pensò di progettare un programma di emulazione di terminale migliore ma con la differenza (e qui che inizia il fato) di non progettarlo sotto Minix, bensì a puro livello hardware come programma autonomo. Quel progetto di emulazione di terminale stand-alone in puro stile hacker del “learning on the job” cioè imparare mentre si lavora, fu un’ottima opportunità per imparare come funzionava l’hardware del PC 386. L’idea era semplice, Linus voleva avere due processi indipendenti, uno avrebbe letto dal modem e visualizzato a schermo mentre l’altro processo avrebbe letto da tastiera e scritto sul modem, praticamente ci sarebbero stati due canali in entrambe le direzioni. È una tipica applicazione con algoritmo di task-switching (commutazione di processi) e la CPU Intel 80386 aveva le migliori capacità hardware per farlo.

La prima release del software che serviva a testare l’idea era stato implementato su 2 processi, uno per scrivere la lettera A sullo schermo, l’altro processo scriveva la lettera B schedulato per ripetere queste funzioni a tempo un certo numero di volte al secondo. Così lo schermo si riempiva di AAAAAAAAAA poi, all’improvviso, passava alla BBBBBBBBBB, era un esercizio pratico per vedere se la commutazione di processi funzionava. Dopo circa 1 mese mentre Linus Torvalds imparava mentre sviluppava la sua idea riuscii a cambiare i due processi, l’AAAAAAAAAA e il BBBBBBBBBB, in modo che uno leggesse dal modem e scrivesse a schermo e l’altro leggesse da tastiera e scrivesse al modem.

Finalmente Linus Torvalds costrui le basi per il suo programma di emulazione di terminale. Così Torvalds riusciva a leggere i newsgroup e collegarsi all’Università, riavviava il PC facendo il boot da un floppy sul quale c’era il programma di terminale compreso il boot . Quando doveva modificare il programma terminale effettuava il boot in Minix e lo usava per programmare. Torvalds affermò anni più tardi che andava molto fiero per quanto aveva fatto.

Fu così che iniziò Linux, un informe embrione nato da un semplice programma terminale, ma allora Linus Torvalds non lo sapeva ancora.

Disse Linus Torvalds parlando del suo informe programma terminale:

“alla mia emulazione di terminale crebbero le gambe. La usavo regolarmente per collegarmi al computer dell’università e leggere la posta o partecipare alle discussioni sul newsgroup di Minix. Il problema era che volevo scaricare e caricare delle cose. Il che voleva dire che avevo bisogno di salvarle su disco. E per farlo la mia emulazione di terminale avrebbe avuto bisogno di un driver per il disco. E anche di un driver per il file system, per essere in grado di tenere conto dell’organizzazione dei documenti e salvare come file ciò che scaricavo. Fu a quel punto che rischiai di arrendermi: pensavo che il gioco non valesse la candela”

Però, c’è un però, siccome Torvalds non aveva altro da fare, nemmeno correre dietro alle ragazze o giocare o altro ancora, amava i computer e la programmazione e quindi pensò: non ho un cavolo d’altro da fare, per cui il progetto di un driver disco/file system per il mio emulatore terminale può essere un progetto interessante.


Un’istantanea di Linus mentre beve una birra.

E così partì nell’avventura di sviluppare un driver per il disco ma siccome non sapeva come fare pensò di usare l’ottima documentazione di Minix del libro di Tanebaum (con annessi sorgenti) così poteva usare il file system di Minix, in questo modo poteva leggere e scrivere i file che avevo creato sotto Minix con il programma di emulazione di terminale. Naturalmente non fu una cosa semplice, Torvalds affermò che ci volle un sacco di lavoro, una di quelle robe tipo programma-dormi-programma-dormi-programma-mangiasalatini-programma-dormi-programma-docciaveloce-programma, quando finì lo sviluppo Torvalds si accorse che il progetto si stava trasformando in un sistema operativo e qui avvenne la svolta epocale.

Torvalds smise di pensarlo come un emulatore di terminale e iniziò a pensarlo come un sistema operativo. Torvalds ebbe modo di affermare anni dopo:

“ricordando quei giorni che la transizione avvenne nello stato ipnotico di una di quelle maratone di programmazione nelle quali aggiungevo di continuo funzioni extra. Il momento dopo avevo capito che il programma stava accumulando così tante funzioni da trasformarsi in un abbozzo per un nuovo sistema operativo iniziai a chiamarlo il mio gnu-emacs dei programmi di emulazione di terminale”.

Bisogna ricordare che il famoso editor GNU/Emacs sviluppato da Richard Stallman era partito come un semplice editor per sviluppatori, ma poi RMS e altri programmatori essendo open source lo avevano dotato di moltissime funzioni.


Richard Stallman, Guru del software Libero e ideatore di GNU

Le prime richieste alla community

Volevano che fosse un editor programmabile, ma poi questo aspetto prese il sopravvento e divenne una sorta di editor infernale che può fare qualsiasi cosa. La stessa cosa stava accadendo al programma di emulazione terminale di Linus Torvals. Si stava trasformando in qualcos’altro.

Da: [email protected] (Linus Benedict Torvalds) A: Newsgroup: comp.os.minix Oggetto: Gcc-1.40 e domanda posix Message-ID: «1991Jul13,[email protected]» Data: 3 luglio 1991 10:00:50 GMT Ciao surfisti, per un progetto su cui sto lavorando (in Minix) sono interessato alla definizione degli standard posix. Qualcuno mi potrebbe indicare un formato (preferibilmente) leggibile a macchina delle più recenti regole posix? Meglio se su un sito ftp.

Da notare come lavora un hacker, si prefigge un progetto e anche se non ha sufficienti competenze per farlo cerca avidamente e con impegno le fonti tecniche da cui poter prelevare informazioni ed imparare tutto ciò serve per sviluppare il proprio progetto. Torvalds

nessuno mi rispose per dirmi dove trovare gli standard POSIX, così passai al Piano B. Trovai dei manuali per la versione Sun Microsystems di Unix all’università, che utilizzava un server Sun. I manuali contenevano una versione base delle chiamate di sistema che mi poteva bastare per cavarmela abbastanza bene. Potevo leggere sulle pagine del manuale ciò che una chiamata di sistema avrebbe dovuto fare e poi mettermi a implementarla a partire da lì. I manuali non spiegavano come farlo, dicevano solo quali erano i risultati finali. Studiai anche alcune chiamate di sistema del libro di Andrew Tanenbaum e di qualcun’altro. Alla fine qualcuno mi mandò gli enormi volumi che contenevano gli standard POSIX”.

E’ proprio il caso di affermare “ la fortuna bacia gli audaci” e Linus Torvalds fu audace.

Il messaggio e-mail di Torvalds non passò inosservato. Torvalds:

“Qualsiasi persona con un po’di cognizione di causa (e il sito Minix veniva letto solo da persone con cognizione di causa) avrebbe potuto capire che il mio progetto riguardava un sistema operativo. Perché sennò avrei dovuto aver bisogno delle regole POSIX? Il messaggio solleticò la curiosità di Ari Lemke, un assistente della Helsinki University of Technology (che avrei frequentato se non fossi stato interessato a studiare la teoria). Ari mi mando una simpatica risposta e si offrì di creare una subdirectory nel sito ftp dell’università per quando fossi stato pronto a pubblicarvi il mio sistema operativo, mettendolo a disposizione di chiunque desiderasse scaricarlo”.

Ari Lemke creò la subdirectory in questione (ftp.funet.fi) molto prima che Torvalds avesse qualcosa da pubblicare quasi avesse intravisto una grande opportunità si stava per presentare da lì a poco.

Torvalds afferma:

“Avevo la password ed era tutto pronto, mi sarebbe bastato collegarmi e caricare le mie cose. Ma mi ci vollero quattro mesi per decidere che avevo qualcosa che valesse la pena di condividere con il mondo, o quantomeno con Ari e gli altri maniaci di sistemi operativi con cui avevo iniziato a scambiarmi delle e-mail. Il mio obiettivo originario era quello di creare un sistema operativo che potessi usare come sostituto di Minix. Non doveva fare più cose di Minix, ma piuttosto le cose di Minix che mi interessavano più altre che mancavano in quel sistema. Un esempio: in Minix non era solo l’emulazione di terminale a essere pessima; non c’era modo di eseguire una funzione di controllo del lavoro, ovvero eseguire un programma in background mentre non lo usi”.

È così Linus Torvalds iniziò a sviluppare il sistema operativo, leggendo e imparando gli standard POSIX dal manuale SUN OS e da altri libri, si cimentò nell’implementazione delle chiamate di sistema (syscall) a una a una cercando di creare qualcosa che funzionasse.

Torvalds confidò anni dopo che fu molto frustrante quel periodo di studio perché era difficile capire le syscall e implemetarle. La shell fu recuperata gratuitamente da internet dal sito ftp del progetto GNU della free software foundation integrandola nel programma terminale. La shell utilissima in un OS significava aver costruito le fondamenta di un vero sistema operativo. Così Torvalds iniziò grazie alla shell a testare molti programmi interni. Iniziò così anche a compilare programmi nuovi e dedicare una speciale partizione solo al suo programma terminale che era diventato un mini-os. Torvalds decise di chiamarlo Linux.

Linus Torvalds dichiarò anni più tardi:

sinceramente: non ho mai pensato di renderlo pubblico con il nome di Linux, mi sembrava una cosa troppo egocentrica. Sapete qual era il nome che avevo scelto per un’eventuale diffusione? Freax. In effetti alcuni dei primi file make – i file che descrivono come compilare le sorgenti – riportarono la parola «Freax» per circa sei mesi. Ma non mi interessava granché. A quel punto non avevo bisogno di un nome perché non avevo intenzione di distribuirlo in nessun modo”.


Da: [email protected] (Linus Benedict Torvalds) A: Newsgroup: comp.os.minix Oggetto: Cosa vi piacerebbe di più vedere in minix? Sommario: piccolo sondaggio per il mio nuovo sistema operativo Messaggi-ID: « [email protected]» Ciao a tutti quelli che usano Minix. Sto realizzando un sistema operativo free (è solo per hobby, non sarà una cosa grossa e professionale come gnu) per cloni 386 (486) AT. Ci lavoro da aprile e sta cominciando a prendere forma. Mi piacerebbe avere la vostra opinione su cosa vi piace/non vi piace in minix, perché il mio OS gli assomiglia per alcuni aspetti (lo stesso layout fisico del file system — per motivi pratici — e altre cose). Al momento ho fatto girare bash (1.08) e gcc (1.40) e la cosa sembra funzionare. Il che vuol dire che entro qualche mese avrò qualcosa di utilizzabile e mi piacerebbe sapere quali sono le caratteristiche che interessano di più alla gente. Tutti i suggerimenti sono ben accetti, ma non vi prometto di implementarli 🙂 Linus ([email protected]) PS: Sì, è privo di codice minix e ha un fs multi-thread. NON è portabile (utilizza il task-switching 386 ecc.) e probabilmente non supporterà mai dischi fissi non AT, perché io ho solo quello :-(.

Torvalds successivamente disse:

I più entusiastici maniaci di sistemi operativi nella comunità Minix videro accendersi una scintilla. Non arrivarono molti suggerimenti sulle caratteristiche di Minix, ma ci furono altri tipi di risposte. Alla fine metterlo in rete non fu proprio una decisione. Era così che ero abituato a scambiare i programmi. Quindi l’unica vera decisione consistette nel capire quando avrei osato mostrare il mio sistema ad altre persone. O, per essere più precisi, la domanda era: quando sarà abbastanza buono da non dovermene vergognare? Quello che volevo in definitiva era avere un compilatore e un vero ambiente in modo da poter creare i programmi da dentro Linux, senza dover usare Minix. Ma mi sentii così fiero quando la shell gnu funzionò che mi sentii pronto a mostrare al mondo la mia creatura. E poi volevo delle opinioni”.

Fonti

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

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

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.