Benché distrutto da un raffreddore fulminante, mi accingo a completare la serie di post introduttivi sul Free Software – assolutamente fondamentale per capire tutto ciò di cui parlerò dopo!
Prima, però, è necessario fare un pochino di glossario perchè questa è di sicuro la parte più complessa della nostra storia. Bisogna che abbiamo ben chiari tre concetti: quello di shell, quello di kernel e quello di compilatore.
Cominciamo dal compilatore, il concetto più complesso per i “profani” dell’informatica. Si tratta di un programma che trasforma un testo scritto in un certo linguaggio di programmazione in codice macchina eseguibile dal computer. In pratica, trasforma una serie di istruzioni in un linguaggio comprensibile dall’uomo del tipo “se questo è vero, fai quello” in una serie di zero e uno (0101000110111010110…) che il computer capisce ed esegue.
Il kernel (letteralmente “nocciolo”) è invece il programma fondamentale del sistema operativo: dà l’avvio a tutti gli altri programmi, li controlla, li chiude se necessario, spesso contiene il codice driver di base necessario per fare funzionare le periferiche come la tastiera o lo schermo.
Infine, la shell (letteralmente “conchiglia”) è il programma che riceve tramite tastiera comandi dall’utente, poi passa il controllo al programma richiamato, e quando il programma è finito riprende il controllo e stampa il risultato (output). La shell che è più facile vedere è quella detta “Prompt di MS-DOS” o “Prompt dei Comandi” in Windows (tecnicamente, la shell sarebbe l’intero ambiente mentre il prompt è la scritta che appare chiedendo di inserire un comando, ad esempio C:\>).
Torniamo a noi: eravamo arrivati alla fondazione del progetto GNU per creare un sistema operativo libero. In pochi anni, questo progetto cresce e crea una serie di programmi importantissimi e diffusissimi, tra cui una suite di compilatori per diversi linguaggi di programmazione (C,C++,Fortran…) di nome GCC (GNU Compiler Compilation), che funziona particolarmente bene su di una shell di nome bash (Bourne Again Shell), nota per essere una delle più potenti e complete. I programmi creati dal progetto GNU formano, nel ‘90 – ‘91, un sistema operativo completo e moderno – ma senza kernel. Infatti, i lavori di creazione del kernel procedono mooolto a rilento e ci si deve quindi accontentare di testare i programmi GNU su sistemi commerciali come il vero Unix.
Contemporaneamente, in quel di Helsinki (Finlandia), uno dei più importanti insegnanti universitari di Sistemi Operativi (tale professor Tanenbaum, cioè albero di Natale
) crea, come esempio per i suoi studenti, un intero sistema operativo simile a Unix che chiama Minix. Uno degli studenti di Tanenbaum, un certo Linus Torvalds, crea per divertimento un kernel che replica Minix, in grado di far girare sia la shell bash che il compilatore GCC.
Nasce così il kernel Linux che, dopo le prime versioni senza licenza, viene pubblicato sotto licenza GNU/GPL e, nella sua crescita, si unisce sempre più stabilmente a GNU (di cui diventa il kernel semi-ufficiale). Stallman non è tanto contento (in effetti molti si riferiscono a Linux dimenticandosi del tutto di GNU), ma in generale comincia l’era più positiva per il Free Software.
In effetti l’unica seria minaccia al monopolio di Windows nel settore PC si viene a formare proprio negli stessi anni in cui Windows fagocita tutti gli altri ambienti PC, tra cui il suo “fratellino” OS/2 sviluppato da IBM (di cui prima o poi parlerò, perchè la sua è una gran bella storia). Naturalmente ci sono anche i Mac, ma non sono esattamente PC e sono troppo costosi, almeno negli anni ‘90, per fare una seria concorrenza a Microsoft.
Per completare la nostra breve (ma intensa) storia del Free Software, occorre ricordare che in questi stessi anni il movimento si spezza in due tronconi fondamentali: Free Software, il movimento idealistico che vuole tutto il software libero e non commerciale, e Open Source, che è molto simile nei fatti ma diverso nei principi (in quanto non richiede che il software non abbia fini commerciali, ma solo che il suo codice sia liberamente visibile e modificabile).