|
Il Progetto GNU - The GNU Project (English
version)
di Richard Stallman
originariamente pubblicato nel libro Open Sources
pdf (52 Kb)
La prima comunità di condivisione del software
Quando cominciai a lavorare nel laboratorio di Intelligenza Artificiale
del MIT [N.d.T. Massachusetts Institute of Technology] nel 1971,
entrai a far parte di una comunità in cui ci si scambiavano
i programmi, che esisteva già da molti anni. La condivisione
del software non si limitava alla nostra comunità; è
un cosa vecchia quanto i computer, proprio come condividere le
ricette è antico come il cucinare. Ma noi lo facevamo più
di quasi chiunque altro.
Il laboratorio di Intelligenza Artificiale usava un sistema operativo
a partizione di tempo (timesharing) chiamato ITS (Incompatible
Timesharing System) che il gruppo di hacker (1) del laboratorio
aveva progettato e scritto in linguaggio assembler per il Digital
PDP-10, uno dei grossi elaboratori di quel periodo. Come membro
di questa comunità, hacker di sistema nel gruppo laboratorio,
il mio compito era migliorare questo sistema.
Non chiamavamo il nostro software "software libero",
poiché questa espressione ancora non esisteva, ma si trattava
proprio di questo. Quando persone di altre università o
di qualche società volevano convertire il nostro programma
per il proprio sistema ed utilizzarlo, erano le benvenute. Se
si vedeva qualcuno usare un programma sconosciuto ed interessante,
si poteva sempre chiedere di vederne il codice sorgente, in modo
da poterlo leggere, modificare, o prenderne cannibalizzarne alcune
parti per creare un nuovo programma.
(1) L'uso del termine "hacker" nel senso di "pirata"
è una confusione di temini creata dai mezzi di informazione.
Noi hacker ci rifiutiamo di riconoscere questo significato, e
continuiamo ad utilizzare la parola nel senso di "uno che
ami programmare, e a cui piaccia essere bravo a farlo"
La comunità si dissolve
La situazione cambiò drasticamente all'inizio degli anni
'80 quando la Digital smise di produrre la serie PDP-10. La sua
architettura, elegante e potente negli anni '60, non poteva essere
estesa in modo naturale ai più grandi spazi di indirizzamento
che si stavano rendendo possibili negli anni '80. Questo significò
che quasi tutti i programmi che formavano ITS divennero obsoleti.
La comunità di hacker del laboratorio di Intelligenza Artificiale
si era già dissolta non molto tempo prima. Nel 1981 la
Symbolics, nata da una costola del laboratorio stesso, gli aveva
sottratto quasi tutti gli hacker; l'ormai esiguo gruppo rimasto
fu dunque incapace di sostenersi (il libro "Hackers"
di Steve Levy narra questi eventi, oltre a fornire una fedele
ricostruzione di questa comunità ai suoi inizi). Quando
il laboratorio di Intelligenza Artificiale nel 1982 acquistò
un nuovo PDP-10, i sistemisti decisero di utilizzare il sistema
timesharing non libero della Digital piuttosto che ITS.
I moderni elaboratori di quell'epoca, come il VAX o il 68020,
avevano il proprio sistema operativo, ma nessuno di questi era
libero: si doveva firmare un accordo di non-diffusione persino
per ottenerne una copia eseguibile.
Questo significava che il primo passo per usare un computer era
promettere di negare aiuto al proprio vicino. Una comunità
cooperante era vietata. La regola creata dai proprietari di software
proprietario era: «se condividi il software col tuo vicino
sei un pirata. Se vuoi modifiche, pregaci di farle».
L'idea che la concezione sociale di software proprietario -- cioè
il sistema che impone che il software non possa essere condiviso
o modificato -- sia antisociale, contraria all'etica, semplicemente
sbagliata, può apparire sorprendente a qualche lettore.
Ma che altro possiamo dire di un sistema che si basa sul dividere
utenti e lasciarli senza aiuto? Quei lettori che trovano sorprendente
l'idea possono aver data per scontata la concezione sociale di
software proprietario, o averla giudicata utilizzando lo stesso
metro suggerito dal mercato del software proprietario. I produttori
di software hanno lavorato a lungo e attivamente per diffondere
la convinzione che c'è un solo modo di vedere la cosa.
Quando i produttori di software parlano di "difendere"
i propri "diritti" o di "fermare la pirateria",
quello che dicono è in realtà secondario. Il vero
messaggio in quelle affermazioni sta nelle assunzioni inespresse,
che essi danno per scontate; vogliono che siano accettate acriticamente.
Esaminiamole, dunque.
Una prima assunzione è che le aziende produttrici di software
abbiano il diritto naturale indiscutibile di proprietà
sul software, e di conseguenza, abbiano controllo su tutti i suoi
utenti. Se questo fosse un diritto naturale, non potremmo sollevare
obiezioni, indipendentemente dal danno che possa recare ad altri.
È interessante notare che, negli Stati Uniti, sia la costituzione
che la giurisprudenza rifiutano questa posizione: il diritto d'autore
non è un diritto naturale, ma un monopolio imposto dal
governo che limita il diritto naturale degli utenti ad effettuare
delle copie.
Un'altra assunzione inespressa è che la sola cosa importante
del software sia il lavoro che consente di fare -- vale a dire
che noi utenti non dobbiamo preoccuparci del tipo di società
in cui ci è permesso vivere.
Una terza assunzione è che non avremmo software utilizzabile
(o meglio, che non potremmo mai avere un programma per fare questo
o quell'altro particolare lavoro) se non riconoscessimo ai produttori
il controllo sugli utenti di quel programmi. Questa assunzione
avrebbe potuto sembrare plausibile, prima che il movimento del
software libero dimostrasse che possiamo scrivere quantità
di programmi utili senza bisogno di metterci dei catenacci.
Se rifiutiamo di accettare queste assunzioni, giudicando queste
questioni con comuni criteri di moralità e di buon senso
dopo aver messo al primo posto gli interessi degli utenti, tenendo
conto che gli utenti vengono prima di tutto, arriviamo a conclusioni
del tutto differenti. Chi usa un calcolatore dovrebbe essere libero
di modificare i programmi per adattarli alle proprie necessità,
ed essere libero di condividere il software, poiché aiutare
gli altri è alla base della società.
Non c'e` modo in questa sede di trattare approfonditamente i ragionamenti
che portano a questa conclusione; il lettore interessato puo`
cercare le informazioni in rete a questo indirizzo: http://www.gnu.org/philosophy/why-free.html
.
Una difficile scelta morale
Una volta che il mio gruppo si fu sciolto, continuare come prima
fu impossible. Mi trovai di fronte ad una difficile scelta morale.
La scelta facile sarebbe stata quella di unirsi al mondo del software
proprietario, firmando accordi di non-diffusione e promettendo
di non aiutare i miei compagni hacker. Con ogni probabilità
avrei anche sviluppato software che sarebbe stato distribuito
secondo accordi di non-diffusione, contribuendo così alla
pressione su altri perché a loro volta tradissero i propri
compagni.
In questo modo avrei potuto guadagnare, e forse mi sarei divertito
a programmare. Ma sapevo che al termine della mia carriera mi
sarei voltato a guardare indietro, avrei visto anni spesi a costruire
muri per dividere le persone, e avrei compreso di aver contribuito
a rendere il mondo peggiore.
Avevo già sperimentato cosa significasse un accordo di
non diffusione per chi lo firmava, quando qualcuno rifiutò
a me e al laboratorio AI del MIT il codice sorgente del programma
di controllo della nostra stampante; l'assenza di alcune funzionalità
nel programma rendeva oltremodo frustrante l'uso della stampante.
Per cui non mi potevo dire che gli accordi di non-diffusione fossero
innocenti. Ero molto arrabbiato quando quella persone si rifiutò
di condividere il programma con noi; non potevo far finta di niente
e fare lo stesso con tutti gli altri.
Un'altra possibile scelta, semplice ma spiacevole, sarebbe stata
quella di abbandonare l'informatica. In tal modo le mie capacità
non sarebbero state mal utilizzate, tuttavia sarebbero state sprecate.
Non sarei mai stato colpevole di dividere o imporre restrizioni
agli utenti di calcolatori, ma queste cose sarebbero comunque
successe.
Allora cercai un modo in cui un programmatore potesse fare qualcosa
di buono. Mi chiesi dunque: c'erano un programma o dei programmi
che io potessi scrivere, per rendere nuovamente possibile l'esistenza
di una comunità?
La risposta era semplice: innanzitutto serviva un sistema operativo.
Questo è difatti il software fondamentale per iniziare
ad usare un computer. Con un sistema operativo si possono fare
molte cose; senza, non è proprio possibile far funzionare
il computer. Con un sistema operativo libero, avremmo potuto avere
nuovamente una comunità in cui hacker possono cooperare,
e invitare chiunque ad unirsi al gruppo. E chiunque sarebbe stato
in grado di usare un calcolatore, senza dover cospirare fin dall'inizio
per sottrarre qualcosa ai propri amici.
Essendo un programmatore di sistemi, possedevo le competenze adeguate
per questo lavoro. Così, anche se non davo il successo
per scontato, mi resi conto di essere la persona giusta per farlo.
Scelsi di rendere il sistema compatibile con Unix, in modo che
fosse portabile, e che gli utenti Unix potessero passare facilmente
ad esso. Il nome GNU fu scelto secondo una tradizione hacker,
come acronimo ricorsivo che significa "GNU's Not Unix"
[N.d.T. GNU non e ` Unix].
Un sistema operativo non si limita solo al suo nucleo, che è
proprio il minimo per eseguire altri programmi. Negli anni '70,
qualsiasi sistema operativo degno di questo nome includeva interpreti
di comandi, assemblatori, compilatori, interpreti di linguaggi,
debugger, editor di testo, programmi per la posta e molto altro.
ITS li aveva, Multics li aveva, VMS li aveva e Unix li aveva.
Anche il sistema operativo GNU li avrebbe avuti.
Tempo dopo venni a conoscenza di questa massima, attribuita a
Hillel(1):
Se non sono per me stesso, chi sarà per me?
E se sono solo per me stesso, che cosa sono?
E se non ora, quando?
La decisione di iniziare il progetto GNU si basò su uno
spirito simile.
(1) Essendo ateo, non seguo alcuna guida religiosa, ma a volte
mi trovo ad ammirare qualcosa che qualcuno di loro ha detto.
"Free" come libero
Il termine "free software" [N.d.T. il termine free in
inglese significa sia gratuito che libero] a volte è mal
interpretato: non ha niente a che vedere col prezzo del software;
si tratta di libertà. Ecco, dunque, la definizione di software
libero: un programma è software libero per un dato utente
se:
* l'utente ha la libertà di eseguire il programma per
qualsiasi scopo;
* l'utente ha la libertà di modificare il programma secondo
i propri bisogni (perché questa libertà abbia qualche
effetto in pratica, è necessario avere accesso al codice
sorgente del programma, poiché apportare modifiche ad un
programma senza disporre del codice sorgente è estremamente
difficile);
* l'utente ha la libertà di distribuire copie del programma,
gratuitamente o dietro compenso;
* l'utente ha la libertà di distribuire versioni modificate
del programma, così che la comunità possa fruire
dei miglioramenti apportati.
Poiché "free" si riferisce alla libertà
e non al prezzo, vendere copie di un programma non contraddice
il concetto di software libero. In effetti, la libertà
di vendere copie di programmi è essenziale: raccolte di
software libero vendute su CD-ROM sono importanti per la comunità,
e la loro vendita è un modo di raccogliere fondi importante
per lo sviluppo del software libero. Di conseguenza, un programma
che non può essere liberamente incluso in tali raccolte
non è software libero.
A causa dell'ambiguità del termine "free", si
è cercata a lungo un'alternativa, ma nessuno ne ha trovata
una valida. La lingua inglese ha, più termini e sfumature
di ogni altra, ma non ha una parola semplice e non ambigua che
significhi libero; "unfettered" è la parola più
vicina come significato [NdT: unfettered è una parola di
tono aulico o arcaico che significa libero da ceppi, vincoli
o inibizioni]. Alternative come "liberated", "freedom"
e "open" hanno altri significati o non sono adatte per
altri motivi [NdT: rispettivamente, liberato, libertà,
aperto].
Software GNU e il sistema GNU
Sviluppare un intero sistema è un progetto considerevole.
Per raggiungere l'obiettivo decisi di adattare e usare parti di
software libero tutte le volte che fosse possibile. Per esempio,
decisi fin dall'inizio di usare TeX come il principale programma
di formattazione di testo; qualche anno più tardi, decisi
di usare l'X Window System piuttosto che scrivere un altro sistema
a finestre per GNU.
A causa di questa decisione, il sistema GNU e la raccolta di tutto
il software GNU non sono la stessa cosa. Il sistema GNU comprende
programmi che non sono GNU, sviluppati da altre persone o gruppi
di progetto per i propri scopi, ma che possiamo usare in quanto
software libero.
L'inizio del progetto
Nel gennaio 1984 lasciai il mio posto al MIT e cominciai a scrivere
software GNU. Dovetti lasciare il MIT, per evitare che potesse
interferire con la distribuzione di GNU come software libero.
Se fossi rimasto, il MIT avrebbe potuto rivendicare la proprietà
del lavoro, ed avrebbe potuto imporre i propri termini di distribuzione,
o anche farne un pacchetto proprietario. Non avevo alcuna intenzione
di fare tanto lavoro solo per vederlo reso inutilizzabile per
il suo scopo originario: creare una nuova comunità di condivisione
di software. Ad ogni buon conto, il professor Winston -- allora
responsabile del laboratorio AI del MIT -- mi propose gentilmente
di continuare ad utilizzare le attrezzature del laboratorio stesso.
I primi passi
Poco dopo aver iniziato il progetto GNU, venni a sapere del Free
University Compiler Kit, noto anche come VUCK (la parola olandese
che sta per "free" inizia con la V). Era un compilatore
progettato per trattare più linguaggi, fra cui C e Pascal,
e per generare codice binario per diverse architetture. Scrissi
al suo autore chiedendo se GNU avesse potuto usarlo. Rispose in
modo canzonatorio, dicendo che l'università era sì
libera, ma non il compilatore. Decisi allora che il mio primo
programma per il progetto GNU sarebbe stato un compilatore multilinguaggio
e multipiattaforma.
Sperando di evitare di dover scrivere da me l'intero compilatore,
ottenni il codice sorgente del Pastel, un compilatore multipiattaforma
sviluppato ai Laboratori Lawrence Livermore. Il linguaggio supportato
da Pastel, in cui il Pastel stesso era scritto, era una versione
estesa del Pascal, pensata come linguaggio di programmazione di
sistemi. Io vi aggiunsi un frontend per il C, e cominciai il porting
per il processore Motorola 68000, ma fui costretto a rinunciare
quando scoprii che il compilatore richiedeva diversi megabyte
di memoria sullo stack, mentre il sistema Unix disponibile per
il processore 68000 ne permetteva solo 64K.
Mi resi conto allora che il compilatore Pastel interpretava tutto
il file di ingresso creandone un albero sintattico, convertiva
questo in una catena di "istruzioni", e quindi generava
l'intero file di uscita senza mai liberare memoria. A questo punto,
conclusi che avrei dovuto scrivere un nuovo compilatore da zero.
Quel nuovo compilatore è ora noto come Gcc; non utilizza
niente del compilatore Pastel, ma riuscii ad adattare e riutilizzare
il frontend per il C che avevo scritto. Questo però avvenne
qualche anno dopo; prima, lavorai su GNU Emacs.
GNU Emacs
Cominciai a lavorare su GNU Emacs nel settembre 1984, e all'inizio
del 1985 cominciava ad essere utilizzabile. Così potei
iniziare ad usare sistemi Unix per scrivere; fino ad allora, avevo
scritto sempre su altri tipi di macchine, non avendo nessun interesse
ad imparare vi né ed.
A questo punto alcuni cominciarono a voler usare GNU Emacs, il
che pose il problema di come distribuirlo. Naturalmente lo misi
sul server ftp anonimo del computer che usavo al MIT (questo computer,
prep.ai.mit.edu, divenne così il sito ftp primario di distribuzione
di GNU; quando alcuni anni dopo andò fuori servizio, trasferimmo
il nome sul nostro nuovo ftp server). Ma allora molte delle persone
interessate non erano su Internet e non potevano ottenere una
copia via ftp, così mi si pose il problema di cosa dir
loro.
Avrei potuto dire: «trova un amico che è in rete
disposto a farti una copia». Oppure avrei potuto fare quel
che feci con l'originario Emacs su PDP-10, e cioè dir loro:
«spediscimi una busta affrancata ed un nastro, ed io te
lo rispedisco con sopra Emacs». Ma ero senza lavoro, e cercavo
un modo di far soldi con il software libero. E così feci
sapere che avrei spedito un nastro a chi lo voleva per 150 dollari.
In questo modo, creai un'impresa di distribuzione di software
libero, che anticipava le compagnie che oggi distribuiscono interi
sistemi GNU basati su Linux.
Un programma è libero per tutti?
Se un programma è software libero quando esce dalle mani
del suo autore, non significa necessariamente che sarà
software libero per chiunque ne abbia una copia. Per esempio,
il software di pubblico dominio (software senza copyright) è
sofware libero, ma chiunque può farne una versione modificata
proprietaria. Analogamente, molti programmi liberi sono protetti
da diritto d'autore, ma vengono distribuiti con semplici licenze
permissive che permettono di farne versioni modificate proprietarie.
L'esempio emblematico della questione è l'X Window System.
Sviluppato al MIT, e pubblicato come software libero con una licenza
permissiva, fu rapidamente adottato da diverse società
informatiche. Queste aggiunsero X ai loro sistemi Unix proprietari,
solo in forma binaria, e coperto dello stesso accordo di non-diffusione.
Queste copie di X non erano software più libero di quanto
lo fosse Unix.
Gli autori dell'X Window System non ritenevano che questo fosse
un problema, anzi se lo aspettavano ed era loro intenzione che
accadesse. Il loro scopo non era la libertà, ma semplicemente
il "successo", definito come "avere tanti utenti".
Non erano interessati che questi utenti fossero liberi, ma solo
che fossero numerosi.
Questo sfociò in una situazione paradossale, in cui due
modi diversi di misurare la quantità di libertà
risultavano in risposte diverse alla domanda «questo programma
è libero»? Giudicando sulla base della libertà
offerta dai termini distributivi usati dal MIT, si sarebbe dovuto
dire che X era software libero. Ma misurando la libertà
dell'utente medio di X, si sarebbe dovuto dire che X era software
proprietario. La maggior parte degli utenti di X usavano le versioni
proprietarie fornite con i sistemi Unix, non la versione libera.
Il permesso d'autore (copyleft) e la GNU GPL
Lo scopo di GNU consisteva nell'offrire libertà agli utenti,
non solo nell'ottenere ampia diffusione. Avevamo quindi bisogno
di termini di distribuzione che evitassero che il software GNU
fosse trasformato in software proprietario. Il metodo che usammo
si chiama "permesso d'autore"(1).
Il permesso d'autore (copyleft)(2) usa le leggi sul diritto d'autore
(copyright), ma le capovolge per ottenere lo scopo opposto: invece
che un metodo per privatizzare il software, diventa infatti un
mezzo per mantenerlo libero.
Il succo dell'idea di permesso d'autore consiste nel dare a chiunque
il permesso di eseguire il programma, copiare il programma, modificare
il programma, e distribuirne versioni modificate, ma senza dare
il permesso di aggiungere restrizioni. In tal modo, le libertà
essenziali che definiscono il "free software" (software
libero) sono garantite a chiunque ne abbia una copia, e diventano
diritti inalienabili.
Perché un permesso d'autore sia efficace, anche le versioni
modificate devono essere libere. Ciò assicura che che ogni
lavoro basato sul nostro sia reso disponibile per la nostra comunità,
se pubblicato. Quando dei programmatori professionisti lavorano
su software GNU come volontari, è il permesso d'autore
che impedisce ai loro datori di lavoro di dire: «non puoi
distribuire quei cambiamenti, perché abbiamo intenzione
di usarli per creare la nostra versione proprietaria del programma».
La clausola che i cambiamenti debbano essere liberi è essenziale
se vogliamo garantire libertà a tutti gli utenti del programma.
Le aziende che privatizzarono l'X Window System di solito avevano
apportato qualche modifica per per portare il programma sui loro
sistemi e sulle loro macchine. Si trattava di modifiche piccole
rispetto alla mole di X, ma non banali. Se apportare modifiche
fosse una scusa per negare libertà agli utenti, sarebbe
facile per chiunque approfittare di questa scusa.
Una problematica correlata è quella della combinazione
di un programma libero con codice non libero. Una tale combinazione
sarebbe inevitabilmente non libera; ogni libertà che manchi
dalla parte non libera mancherebbe anche dall'intero programma.
Permettere tali combinazioni aprirebbe non uno spiraglio, ma un
buco grosso come una casa. Quindi un requisito essenziale per
il permesso d'autore è tappare il buco: tutto ciò
che venga aggiunto o combinato con un programma protetto da permesso
d'autore dev'essere tale che il programma risultante sia anch'esso
libero e protetto da permesso d'autore.
La specifica implementazione di permesso d'autore che utilizziamo
per la maggior parte del software GNU è la GNU General
Public License (licenza pubblica generica GNU), abbreviata in
GNU GPL. Abbiamo altri tipi di permesso d'autore che sono utilizzati
in circostanze specifiche. I manuali GNU sono anch'essi protetti
da permesso d'autore, ma ne usano una versione molto più
semplice, perché per i manuali non è necessaria
la complessità della GPL.
(1) Nel 1984 o 1985, Don Hopkins, persona molto creativa, mi mandò
una lettera. Sulla busta aveva scritto diverse frasi argute, fra
cui questa: "Permesso d'autore--tutti i diritti rovesciati".
Utilizzai l'espressione "permesso d'autore" per battezzare
il concetto di distribuzione che allora andavo elaborando.
(2) [NdT: si tratta di un gioco di parole, che qui viene reso
con "permesso di autore": copyright (diritto di autore)
è formato dalle parola "copy" (copia) e "right"
(diritto, ma anche destra), opposto di "left" (sinistra,
ma anche lasciato).]
La Free Software Foundation
Man mano che l'interesse per Emacs aumentava, altre persone parteciparono
al progetto GNU, e decidemmo che era di nuovo ora dicercare finanziamenti.
Così nel 1985 fondammo la Free Software Foundation (Fondazione
per il software libero), una organizzazione senza fini di lucro
per lo sviluppo di software libero. La FSF fra l'altro si prese
carico della distribuzione dei nastri di Emacs; più tardi
estese l'attività aggiungendo sul nastro altro software
libero (sia GNU che non GNU) e vendendo manuali liberi.
La FSF accetta donazioni, ma gran parte delle sue entrate è
sempre stata costituita dalle vendite: copie di software libero
e servizi correlati. Oggi vende CD-ROM di codice sorgente, CD-ROM
di programmi compilati, manuali stampati professionalmente (tutti
con libertà di ridistribuzione e modifica), e distribuzioni
Deluxe (nelle quali compiliamo l'intera scelta di software per
una piattaforma a richiesta).
I dipendenti della Free Software Foundation hanno scritto e curato
la manutenzione di diversi pacchetti GNU. Fra questi spiccano
la libreria C e la shell. La libreria C di GNU è utilizzata
da ogni programma che gira su sistemi GNU/Linux per comunicare
con Linux. È stata sviluppata da un membro della della
squadra della Free Software Foundation, Roland McGrath. La shell
usata sulla maggior parte dei sistemi GNU/Linux è Bash,
la Bourne Again Shell (1), che è stata sviluppata da Brian
Fox, dipendente della FSF.
Finanziammo lo sviluppo di questi programmi perché il progetto
GNU non riguardava solo strumenti di lavoro o un ambiente di sviluppo:
il nostro obiettivo era un sistema operativo completo, e questi
programmi erano necessari per raggiungere quell'obiettivo.
(1) "Bourne Again Shell" è un gioco di parole
sul nome "Bourne Shell", che era la normale shell di
Unix [NdT: "Bourne again" richiamal'espressione cristiana
"born again", "rinato" (in Cristo)].
Il supporto per il software libero
La filosofia del software libero rigetta una diffusa pratica commerciale
in particolare, ma non è contro il commercio. Quando un'impresa
rispetta la libertà dell'utente, c'è da augurarle
ogni successo.
La vendita di copie di Emacs esemplifica un modo di condurre affari
col software libero. Quando la FSF prese in carico quest'attività,
dovetti trovare un'altra fonte di sostentamento. La trovai nella
vendita di servizi relativi al software libero che avevo sviluppato,
come insegnare argomenti quali programmazione di Emacs e personalizzazione
di GCC, oppure sviluppare sofware, soprattutto adattamento di
GCC a nuove architetture.
Oggi tutte queste attività collegate al software libero
sono esercitate da svariate aziende. Alcune distribuiscono raccolte
di software libero su CD-ROM, altre offrono consulenza a diversi
livelli, dall'aiutare gli utenti in difficoltà, alla correzione
di errori, all'aggiunta di funzionalità non banali. Si
cominciano anche a vedere aziende di software che si fondano sul
lancio di nuovi programmi liberi.
Attenzione, però: diverse aziende che si fregiano del marchio
"open source" (software aperto) in realtà fondano
le loro attività su software non libero che funziona insieme
con software libero. Queste non sono aziende di software libero,
sono aziende di software proprietario i cui prodotti attirano
gli utenti lontano dalla libertà. Loro li chiamano "a
valore aggiunto", il che riflette i valori che a loro farebbe
comodo che adottassimo: la convenienza prima della libertà.
Se noi riteniamo che la libertà abbia più valore,
li dovremmo chiamare prodotti "a libertà sottratta".
Obiettivi tecnici
L'obiettivo principale di GNU era essere software libero. Anche
se GNU non avesse avuto alcun vantaggio tecnico su Unix, avrebbe
avuto sia un vantaggio sociale, permettendo agli utenti di cooperare,
sia un vantaggio etico, rispettando la loro libertà.
Tuttavia risultò naturale applicare al lavoro le regole
classiche di buona programmazione; per esempio, allocare le strutture
dati dinamicamente per evitare limitazioni arbitrarie sulla dimensione
dei dati, o gestire tutti i possibili codici a 8 bit in tutti
i casi ragionevoli.
Inoltre, al contrario di Unix che era pensato per piccole dimensioni
di memoria, decidemmo di non supportare le macchine a 16 bit (era
chiaro che le macchine a 32 bit sarebbero state la norma quando
il sistema GNU sarebbe stato completo), e di non preoccuparci
di ridurre l'occupazione di memoria a meno che eccedesse il megabyte.
In programmi per i quali non era essenziale la gestione di file
molto grandi, spingemmo i programmatori a leggere in memoria l'intero
file di ingresso per poi analizzare il file senza doversi preoccupare
delle operazioni di I/O.
Queste decisioni fecero sì che molti programmi GNU superassero
i loro equivalenti Unix sia in affidabilità che in velocità
di esecuzione.
Donazioni di computer
Man mano che la reputazione del progetto GNU andava crescendo,
alcune persone iniziarono a donare macchine su cui girava Unix.
Queste macchine erano molto utili, perché il modo più
semplice di sviluppare componenti per GNU era di farlo su di un
sistema Unix così da sostituire pezzo per pezzo i componenti
di quel sistema. Ma queste macchine sollevavano anche una questione
etica: se fosse giusto per noi anche solo possedere una copia
di Unix.
Unix era (ed è) software proprietario, e la filosofia del
progetto GNU diceva che non avremmo dovuto usare software proprietario.
Ma, applicando lo stesso ragionamento per cui la violenza è
ammessa per autodifesa, conclusi che fosse legittimo usare un
pacchetto proprietario, se ciò fosse stato importante nel
crearne un sostituto libero che permettesse ad altri di smettere
di usare quello proprietario.
Tuttavia, benchè fosse un male giustificabile, era pur
sempre un male. Oggi non abbiamo più alcuna copia di Unix,
perché le abbiamo sostituite con sistemi operativi liberi.
Quando non fu possibile sostituire il sistema operativo di una
macchina con uno libero, sostituimmo la macchina.
L'elenco dei compiti GNU
Mentre il progetto GNU avanzava, ed un numero sempre maggiore
di componenti di sistema venivano trovati o sviluppati, diventò
utile stilare un elenco delle parti ancora mancanti. Usammo questo
elenco per ingaggiare programmatori che scrivessero tali parti,
e l'elenco prese il nome di elenco dei compiti GNU. In aggiunta
ai componenti Unix mancanti inserimmo nell'elenco svariati progetti
utili di programmazione o di documentazione che a nostro parere
non dovrebbero mancare in un sistema operativo veramente completo.
Oggi non compare quasi nessun componente Unix nell'elenco dei
compiti GNU; tutti questi lavori, a parte qualcuno non essenziale,
sono già stati svolti. D'altro canto l'elenco è
pieno di quei progetti che qualcuno chiamerebbe "applicazioni":
ogni programma che interessi ad una fetta non trascurabile di
utenti sarebbe un'utile aggiunta ad un sistema operativo.
L'elenco comprende anche dei giochi, e così è stato
fin dall'inizio: Unix comprendeva dei giochi, perciò era
naturale che così fosse anche per GNU. Ma poiché
non c'erano esigenze di compatibilità per i giochi, non
ci attenemmo alla scelta di giochi presenti in Unix, preferendo
piuttosto fornire un elenco di diversi tipi di giochi potenzialmente
graditi agli utenti.
La licenza GNU per le librerie
La libreria C del sistema GNU utilizza un tipo speciale di permesso
d'autore, la "Licenza Pubblica GNU per le Librerie"
(1), che permette l'uso della libreria da parte di software proprietario.
Perché quest'eccezione?
Non si tratta di questioni di principio: non c'è nessun
principio che dica che i prodotti software proprietari abbiano
il diritto di includereil nostro codice (perché contribuire
ad un progetto fondato sul rifiuto di condividere con noi?). L'uso
della licenza LGPL per la libreria C, o per qualsiasi altra libreria,
è una questione di strategia.
La libreria C svolge una funzione generica: ogni sistema operativo
proprietario ed ogni compilatore includono una libreria C. Di
conseguenza, rendere disponibile la nostra libreria C solo per
i programmi liberi non avrebbe dato nessun vantaggio a tali programmi
liberi, avrebbe solo disincentivato l'uso della nostra libreria.
C'è un'eccezione a questa situazione: sul sistema GNU (termine
che include GNU/Linux) l'unica libreria C disponibile è
quella GNU. Quindi i termini di distribuzione della nostra libreria
C determinano se sia possibile o meno compilare un programma proprietario
per il sistema GNU. Non ci sono ragioni etiche per permettere
l'uso di applicazioni proprietarie sul sistema GNU, ma strategicamente
sembra che impedirne l'uso servirebbe più a scoraggiare
l'uso del sistema GNU che non a incoraggiare lo sviluppo di applicazioni
libere.
Ecco perché l'uso della licenza LGPL è una buona
scelta strategica per la libreria C, mentre per le altre librerie
la strategia va valutata caso per caso. Quando una libreria svolge
una funzione particolare che può aiutare a scrivere certi
tipi di programmi, distribuirla secondo la GPL, quindi limitandone
l'uso ai soli programmi liberi, è un modo per aiutare gli
altri autori di software libero, dando loro un vantaggio nei confronti
del software proprietario.
Prendiamo come esempio GNU-Readline, una libreria scritta per
fornire a Bash la modificabilità della linea di comando:
Readline è distribuita secondo la normale licenza GPL,
non la LGPL. Ciò probabilmente riduce l'uso di Readline,
ma questo non rappresenta una perdita per noi; d'altra parte almeno
una applicazione utile è stata resa software libero proprio
al fine di usare Readline, e questo è un guadagno tangibile
per la comunità.
Chi sviluppa software proprietario ha vantaggi economici, gli
autori di programmi liberi hanno bisogno di avvantaggiarsi a vicenda.
Spero che un giorno possiamo avere una grande raccolta di librerie
coperte dalla licenza GPL senza che esista una raccolta equivalente
per chi scrive software proprietario. Tale libreria fornirebbe
utili moduli da usare come i mattoni per costruire nuovi programmi
liberi, e costituendo un sostanziale vantaggio per la scrittura
di ulteriori programmi liberi.
(1) [NdT: nel 1999 la FSF ha cambiato nome alla licenza LGPL che
ora si chiama "Lesser GPL", GPL attenuata, per non suggerire
che si tratti della forma di licenza preferenziale per le librerie.]
Togliersi il prurito?
Eric Raymond afferma che «ogni buon programma nasce dall'iniziativa
di un programmatore che si vuole togliere un suo personale prurito».
É probabile che talvolta succeda così, ma molte
parti essenziali del software GNU sono state sviluppate al fine
di completare un sistema operativo libero. Derivano quindi da
una idea e da un progetto, non da una necessità contingente.
Per esempio, abbiamo sviluppato la libreria C di GNU perché
un sistema di tipo Unix ha bisogno di una libreria C, la Bourne-Again
Shell (bash) perché un sistema di tipo Unix ha bisogno
di una shell, e GNU tar perché un sistema di tipo Unix
ha bisogno un programma tar. Lo stesso vale per i miei programmi:
il compilatore GNU, GNU Emacs, GDB, GNU Make.
Alcuni programmi GNU sono stati sviluppati per fronteggiare specifiche
minacce alla nostra libertà: ecco perché abbiamo
sviluppato gzip come sostituto per il programma Compress, che
la comunità aveva perduto a causa dei brevetti sull'algoritmo
LZW. Abbiamo trovato persone che sviluppassero LessTif, e più
recentemente abbiamo dato vita ai progetti GNOME e Harmony per
affrontare i problemi causati da alcune librerie proprietarie
(come descritto più avanti). Stiamo sviluppando la GNU
Privacy Guard per sostituire i diffusi programmi di crittografia
non liberi, perché gli utenti non siano costretti a scegliere
tra riservatezza e libertà.
Naturalmente, i redattori di questi programmi sono coinvolti nel
loro lavoro, e varie persone vi hanno aggiunto diverse funzionalità
secondo le loro personali necessità ed i loro interessi.
Tuttavia non è questa la ragione dell'esistenza di tali
programmi.
Sviluppi inattesi
All'inizio del progetto GNU pensavo che avremmo sviluppato l'intero
sistema GNU e poi lo avremmo reso disponibile tutto insieme, ma
le cose non andarono così.
Poiché i componenti del sistema GNU sono stati implementati
su un sistema Unix, ognuno di essi poteva girare su sistemi Unix
molto prima che esistesse un sistema GNU completo. Alcuni di questi
programmi divennero diffusi e gli utenti iniziarono ad estenderli
e a renderli utilizzabili su nuovi sistemi: sulle varie versioni
di Unix, incompatibili tra loro, e talvolta anche su altri sistemi.
Questo processo rese tali programmi molto più potenti e
attirò finanziamenti e collaboratori al progetto GNU; tuttavia
probabilmente ritardò di alcuni anni la realizzazione di
un sistema minimo funzionante, perché il tempo degli autori
GNU veniva impiegato a curare la compatibilità di questi
programmi con altri sistemi e ad aggiungere nuove funzionalità
ai componenti esistenti, piuttosto che a proseguire nella scrittura
di nuovi componenti.
GNU-Hurd
Nel 1990 il sistema GNU era quasi completo, l'unica parte significativa
ancora mancante era il kernel. Avevamo deciso di implementare
il nostro kernel come un gruppo di processi server che girassero
sul sistema Mach. Mach è un microkernel sviluppato alla
Carnegie Mellon University e successivamente all'Università
dello Utah; GNU Hurd è un gruppo di server (o "herd
of gnus": mandria di gnu) che gira su Mach svolgendo le funzioni
del kernel Unix. L'inizio dello sviluppo fu ritardato nell'attesa
che Mach fosse reso disponibile come software libero, come era
stato promesso.
Una ragione di questa scelta progettuale fu di evitare quella
che sembrava la parte più complessa del lavoro: effettuare
il debugging delkernel senza un debugger a livello sorgente. Questo
lavoro era già stato fatto, appunto in Mach, e avevamo
previsto di effettuare il debugging dei server Hurd come programmi
utente, con GDB. Ma questa fase si rivelò molto lunga,
ed il debugging dei server multi-thread che si scambiano messaggi
si è rivelato estremamente complesso. Per rendere Hurd
robusto furono così necessari molti anni.
Alix
Originariamente il kernel GNU non avrebbe dovuto chiamarsi Hurd;
il suo nome originale era Alix, come la donna di cui ero innamorato
in quel periodo. Alix, che era amministratrice di sistemi Unix,
aveva sottolineato come il suo nome corrispondesse ad un comune
schema usato per battezzare le versioni del sistema Unix: scherzosamente
diceva ai suoi amici: «qualcuno dovrebbe chiamare un kernel
come me». Io non dissi nulla ma decisi di farle una sorpresa
scrivendo un kernel chiamato Alix.
Le cose non andarono così. Michael Bushnell (ora Thomas),
principale autore del kernel, preferì il nome Hurd, e chiamò
Alix una parte del kernel, quella che serviva a intercettare le
chiamate di sistema e a gestirle inviando messaggi ai server che
compongono HURD.
Infine io e Alix ci lasciammo e lei cambiò nome; contemporaneamente
la struttura di Hurd veniva cambiata in modo che la libreria C
mandasse messaggi direttamente ai server, e così il componente
Alix scomparve dal progetto. Prima che questo accadesse, però,
un amico di Alix si accorse della presenza del suo nome nel codice
sorgente di Hurd e glielo disse. Così il nome raggiunse
il suo scopo.
Linux e GNU/Linux
GNU Hurd non è pronto per un uso non sperimentale, ma per
fortuna è disponibile un altro kernel: nel 1991 Linus Torvalds
sviluppò un Kernel compatibile con Unix e lo chiamò
Linux. Attorno al 1992, la combinazione di Linux con il sistema
GNU ancora incompleto produsse un sistema operativo libero completo
(naturalmente combinarli fu un notevole lavoro di per sè).
È grazie a Linux che oggi possiamo utilizzare una versione
del sistema GNU.
Chiamiamo GNU/Linux questa versione del sistema, per indicare
la sua composizione come una combinazione del sistema GNU col
kernel Linux.
Le sfide che ci aspettano
Abbiamo dimostrato la nostra capacità di sviluppare un'ampia
gamma di software libero, ma questo non significa che siamo invincibili
e inarrestabili. Diverse sfide rendono incerto il futuro del software
libero, e affrontarle richiederà perseveranza e sforzi
costanti, talvolta per anni. Sarà necessaria quella determinazione
che le persone sanno dimostrare quando danno valore alla propria
libertà e non permettono a nessuno di sottrargliela. Le
quattro sezioni seguenti parlano di queste sfide.
Hardware segreto
Sempre più spesso, i costruttori di hardware tendono a
mantenere segrete le specifiche delle loro apparecchiature; questo
rende difficile la scrittura di driver liberi che permettano a
Linux e XFree86 di supportare nuove periferiche. Anche se oggi
abbiamo sistemi completamente liberi, potremmo non averli domani
se non saremo in grado di supportare i calcolatori di domani.
Esistono due modi per affrontare il problema. Un programmatore
può ricostruire le specifiche dell'hardware usando tecniche
di reverse engineering. Oppure si può scegliere hardware
supportato dai programmi liberi: man mano che il nostro numero
aumenta, la segretezza delle specifiche diventerà una pratica
controproducente.
Il reverse engineering è difficile: avremo programmatori
sufficientemente determinati da dedicarvisi? Sì, se avremo
costruito una forte consapevolezza che avere programmi liberi
sia una questione di principio e che i driver non liberi non sono
accettabili. E succederà che molti di noi accettino di
spendere un po' di più o perdere un po' più di tempo
per poter usare driver liberi? Si`, se il desiderio di libertà
e la determinazione ad ottenerla saranno diffusi.
Librerie non libere
Una libreria non libera che giri su sistemi operativi liberi funziona
come una trappola per i creatori di programmi liberi. Le funzionalità
attraenti della libreria fungono da esca; chi usa la libreria
cade nella trappola, perché il programma che crea è
inutile come parte di un sistema operativo libero (a rigore, il
programma potrebbe esservi incluso, ma non funzionerebbe, visto
che manca la libreria). Peggio ancora, se un programma che usa
la libreria proprietaria diventa diffuso, può attirare
altri ignari programmatori nella trappola.
Il problema si concretizzò per la prima volta con la libreria
Motif, negli anni '80. Sebbene non ci fossero ancora sistemi operativi
liberi, i problemi che Motif avrebbe causato loro erano già
chiari. Il progetto GNU reagì in due modi: interessandosi
presso diversi progetti di software libero perché supportassero
gli strumenti grafici X liberi in aggiunta a Motif, e cercando
qualcuno che scrivesse un sostituto libero di Motif. Il lavoro
richiese molti anni: solo nel 1997 LessTif, sviluppato dagli "Hungry
Programmers", divenne abbastanza potente da supportare la
maggior parte delle applicazioni Motif.
Tra il 1996 e il 1998 un'altra libreria non libera di strumenti
grafici, chiamata Qt, veniva usata in una significativa raccolta
di software libero: l'ambiente grafico KDE.
I sistemi liberi GNU/Linux non potevano usare KDE, perché
non potevamo usare la libreria; tuttavia, alcuni distributori
commerciali di sistemi GNU/Linux, non scrupolosi nell'attenersi
solo ai programmi liberi, aggiunsero KDE ai lori sistemi, ottenendo
così sistemi che offrivano più funzionalità,
ma meno libertà. Il gruppo che sviluppava KDE incoraggiava
esplicitamente altri programmatori ad usare Qt, e milioni di nuovi
"utenti Linux" non sospettavano minimamente che questo
potesse costituire un problema. La situazione si faceva pericolosa.
La comunità del software libero affrontò il problema
in due modi: GNOME e Harmony.
GNOME (GNU Network Object Model Environment, modello di ambiente
per oggetti di rete) è il progetto GNU per l'ambiente grafico
(desktop). Intrapreso nel 1997 da Miguel de Icaza e sviluppato
con il supporto di Red Hat Software, GNOME si ripromise di fornire
funzionalità grafiche simili a quelle di KDE, ma usando
esclusivamente software libero. GNOME offre anche dei vantaggi
tecnici, come il supporto per svariati linguaggi di programmazione,
non solo il C++. Ma il suo scopo principale era la libertà:
non richiedere l'uso di alcun programma che non fosse libero.
Harmony è una libreria compatibile con Qt, progettata per
rendere possibile l'uso del software KDE senza dover usare Qt.
Nel novembre 1998 gli autori di Qt annunciarono un cambiamento
di licenza che, una volta operativo, avrebbe reso Qt software
libero. Non c'è modo di esserne certi, ma credo che questo
fu in parte dovuto alla decisa risposta della comunità
al problema posto da Qt quando non era libero (la nuova licenza
è scomoda ed iniqua, per cui rimane comunque preferibile
evitare l'uso di Qt).
Come risponderemo alla prossima allettante libreria non libera?
Riuscirà la comunità in toto a comprendere l'importanza
di evitare la trappola? Oppure molti di noi preferiranno la convenienza
alla libertà, creando così ancora un grave problema?
Il nostro futuro dipende dalla nostra filosofia.
Brevetti sul software
Il maggior pericolo a cui ci troviamo di fronte è quello
dei brevetti sul software, che possono rendere inaccessibili al
software libero algoritmi e funzionalità per un tempo che
può estendersi fino a vent'anni. I brevetti sugli algoritmi
di compressione LZW furono depositati nel 1983, e ancor oggi non
possiamo distribuire programmi liberi che producano immagini GIF
compresse. Nel 1998 un programma libero per produrre audio compresso
MP3 venne ritirato sotto minaccia di una causa per violazione
di brevetto.
Ci sono modi per affrontare la questione brevetti: possiamo cercare
prove che un brevetto non sia valido oppure possiamo cercare modi
alternativi per ottenere lo stesso risultato. Ognuna di queste
tecniche, però, funziona solo in certe circostanze; quando
entrambe falliscono un brevetto può obbligare tutto il
software libero a rinunciare a qualche funzionalità che
gli utenti desiderano. Cosa dobbiamo fare quando ciò accade?
Chi fra noi apprezza il software libero per il valore della libertà
rimarrà comunque dalla parte dei programmi liberi; saremo
in grado di svolgere il nostro lavoro senza le funzionalità
coperte da brevetto. Ma coloro che apprezzano il software libero
perché si aspettano che sia tecnicamente superiore probabilmente
grideranno al fallimento quando un brevetto ne impedisce lo sviluppo.
Perciò, nonostante sia utile parlare dell'efficacia pratica
del modello di sviluppo "a cattedrale", e dell'affidabilità
e della potenza di un dato programma libero, non ci dobbiamo fermare
qui; dobbiamo parlare di libertà e di principi.
Documentazione libera
La più grande carenza nei nostri sistemi operativi liberi
non è nel software, quanto nella carenza di buoni manuali
liberi da includere nei nostri sistemi. La documentazione è
una parte essenziale di qualunque pacchetto software; quando un
importante pacchetto software libero non viene accompagnato da
un buon manuale libero si tratta di una grossa lacuna. E di queste
lacune attualmente ne abbiamo molte.
La documentazione libera, come il software libero, è una
questione di libertà, non di prezzo. Il criterio per definire
libero un manuale è fondamentalmente lo stesso che per
definire libero un programma: si tratta di offrire certe libertà
a tutti gli utenti. Deve essere permessa la redistribuzione (compresa
la vendita commerciale), sia in formato elettronico che cartaceo,
in modo che il manuale possa accompagnare ogni copia del programma.
Autorizzare la modifica è anch'esso un aspetto cruciale;
in generale, non credo sia essenziale permettere alle persone
di modificare articoli e libri di qualsiasi tipo. Per esempio,
non credo che voi o io dobbiamo sentirci in dovere di autorizzare
la modifica di articoli come questo, articoli che descrivono le
nostre azioni e il nostro punto di vista.
Ma c'è una ragione particolare per cui la libertà
di modifica è cruciale per la documentazione dei programmi
liberi. Quando qualcuno esercita il proprio diritto di modificare
il programma, aumentandone o alterandone le funzionalità,
se è coscienzioso modificherà anche il manuale,
in modo da poter fornire una documentazione utile e accurata insieme
al programma modificato. Un manuale che non permetta ai programmatori
di essere coscienziosi e completare il loro lavoro non soddisfa
i bisogni della nostra comunità.
Alcuni limiti sulla moficabilità non pongono alcun problema;
per esempio, le richieste di conservare la nota di copyright dell'autore
originale, i termini di distribuzione e la lista degli autori
vanno bene. Non ci sono problemi nemmeno nel richiedere che le
versioni modificate dichiarino esplicitamente di essere tali,
così pure che intere sezioni non possano essere rimosse
o modificate, finché queste sezioni vertono su questioni
non tecniche. Restrizioni di questo tipo non creano problemi perché
non impediscono al programmatore coscienzioso di adattare il manuale
perché rispecchi il programma modificato. In altre parole,
non impediscono alla comunità del software libero di beneficiare
appieno dal manuale.
D'altro canto, deve essere possibile modificare tutto il contenuto
tecnico del manuale e poter distribuire il risultato in tutti
i formati usuali, attraverso tutti i normali canali di distribuzione;
diversamente, le restrizioni creerebbero un ostacolo per la comunità,
il manuale non sarebbe libero e avremmo bisogno di un altro manuale.
Gli sviluppatori di software libero avranno la consapevolezza
e la determinazione necessarie a produrre un'intera gamma di manuali
liberi? Ancora una volta, il nostro futuro dipende dalla nostra
filosofia.
Dobbiamo parlare di libertà
Stime recenti valutano in dieci milioni il numero di utenti di
sistemi GNU/Linux quali Debian GNU/Linux e Red Hat Linux. Il software
libero ha creato tali vantaggi pratici che gli utenti stanno approdando
ad esso per pure ragioni pratiche.
Gli effetti positivi di questa situazione sono evidenti: maggior
interesse a sviluppare software libero, più clienti per
le imprese di software libero e una migliore capacità di
incoraggiare le aziende a sviluppare software commerciale libero
invece che prodotti software proprietari.
L'interesse per il software, però, sta crescendo più
in fretta della coscienza della filosofia su cui è basato,
e questa disparità causa problemi. La nostra capacità
di fronteggiare le sfide e le minacce descritte in precedenza
dipende dalla determinazione nell'essere impegnati per la libertà.
Per essere sicuri che la nostra comunità abbia tale determinazione,
dobbiamo diffondere l'idea presso i nuovi utenti man mano che
entrano a far parte della comunità.
Ma in questo stiamo fallendo: gli sforzi per attrarre nuovi utenti
nella comunità sono di gran lunga maggiori degli sforzi
per l'educazione civica della comunità stessa. Dobbiamo
fare entrambe le cose, e dobbiamo mantenere un equilibrio fra
i due impegni.
"Open Source"
Parlare di libertà ai nuovi utenti è diventato più
difficile dal 1998, quando una parte della comunità decise
di smettere di usare il termine "free software" e usare
al suo posto "open source".
Alcune delle persone che suggerirono questo termine intendevano
evitare che si confondesse "free" con "gratis",
un valido obiettivo. D'altra parte, altre persone intendevano
mettere da parte lo spirito del principio che aveva dato la spinta
al movimento del software libero e al progetto GNU, puntando invece
ad attrarre i dirigenti e gli utenti commerciali, molti dei quali
afferiscono ad una ideologia che pone il profitto al di sopra
della libertà, della comunità, dei principi. Perciò
la retorica di "open source" si focalizza sul possibilità
dicreare software di buona qualità e potente ma evita deliberatamente
le idee di libertà, comunità, principio.
Le riviste che si chiamano "Linux..." sono un chiaro
esempio di ciò: sono piene di pubblicità di software
proprietario che gira sotto GNU/Linux; quando ci sarà il
prossimo Motif o Qt, queste riviste avvertiranno i programmatori
di starne lontano o accetteranno la suapubblicità?
L'appoggio delle aziende può contribuire alla comunità
in molti modi; a parità di tutto il resto è una
cosa utile. Ma ottenere questo appoggio parlando ancor meno di
libertà e principi può essere disastroso; rende
ancora peggiore lo sbilanciamento descritto tra diffusione ed
educazione civica.
"Software libero" (free software) e "sorgente aperto"
(open source) descrivono più o meno la stessa categoria
di software, ma dicono cose differenti sul software e sui valori.
Il progetto GNU continua ad usare il termine "software libero"
per esprimere l'idea che la libertà sia importante, non
solo la tecnologia.
Prova!
La filosofia di Yoda ("Non c'è provare") suona
bene, ma per me non funziona. Ho fatto la maggior parte del mio
lavoro angustiato dal timore di non essere in grado di svolgere
il mio compito e nel dubbio, se fossi riuscito, che non fosse
sufficiente per raggiungere l'obiettivo. Ma ci ho provato in ogni
caso perché nessuno tranne me si poneva tra il nemico e
la mia città. Sorprendendo me stesso, qualche volta sono
riuscito.
A volte ho fallito, alcune delle mie città sono cadute;
poi ho trovato un'altra città minacciata e mi sono preparato
ad un'altra battaglia. Con l'andar del tempo ho imparato a cercare
le possibili minacce e a mettermi tra loro e la mia città,
facendo appello ad altri hacker perché venissero e si unissero
a me.
Oggigiorno spesso non sono da solo. E' un sollievo ed una gioia
quando vedo un reggimento di hacker che scavano trincee per difendere
il confine e quando mi rendo conto che questa città può
sopravvivere; per ora. Ma i pericoli diventano più grandi
ogni anno, ed ora Microsoft ha esplicitamente preso di mira la
nostra comunità. Non possiamo dare per scontato il futuro
della libertà; non diamolo per scontato! Se volete mantenere
la vostra libertà dovete essere pronti a difenderla.
Per informazioni e domande su GNU e la FSF rivolgersi (in inglese)
a gnu@gnu.org. Ci sono anche
altri
modi di contattare la FSF (inglese). Copyright (C) 1998 Richard
Stallman
La copia letterale e la distribuzione di questo articolo nella
sua integrità sono permesse con ogni mezzo, a patto che
questa nota sia riprodotta.
Ultimo aggiornamento: 12 Sep 2000 chsong
Finita di tradurre mercoledì 7 luglio 1999
The GNU Project
(Italian version)
by Richard Stallman
originally
published in the book Open Sources
pdf (44 Kb)
The first software-sharing community
When I started working at the MIT Artificial Intelligence Lab
in 1971, I became part of a software-sharing community that had
existed for many years. Sharing of software was not limited to
our particular community; it is as old as computers, just as sharing
of recipes is as old as cooking. But we did it more than most.
The AI Lab used a timesharing operating system called ITS (the
Incompatible Timesharing System) that the lab's staff hackers
(1) had designed and written in assembler language for the Digital
PDP-10, one of the large computers of the era. As a member of
this community, an AI lab staff system hacker, my job was to improve
this system.
We did not call our software "free software", because
that term did not yet exist; but that is what it was. Whenever
people from another university or a company wanted to port and
use a program, we gladly let them. If you saw someone using an
unfamiliar and interesting program, you could always ask to see
the source code, so that you could read it, change it, or cannibalize
parts of it to make a new program.
(1) The use of "hacker" to mean "security breaker"
is a confusion on the part of the mass media. We hackers refuse
to recognize that meaning, and continue using the word to mean,
"Someone who loves to program and enjoys being clever about
it."
The collapse of the community
The situation changed drastically in the early 1980s when Digital
discontinued the PDP-10 series. Its architecture, elegant and
powerful in the 60s, could not extend naturally to the larger
address spaces that were becoming feasible in the 80s. This meant
that nearly all of the programs composing ITS were obsolete.
The AI lab hacker community had already collapsed, not long before.
In 1981, the spin-off company Symbolics had hired away nearly
all of the hackers from the AI lab, and the depopulated community
was unable to maintain itself. (The book Hackers, by Steve Levy,
describes these events, as well as giving a clear picture of this
community in its prime.) When the AI lab bought a new PDP-10 in
1982, its administrators decided to use Digital's non-free timesharing
system instead of ITS.
The modern computers of the era, such as the VAX or the 68020,
had their own operating systems, but none of them were free software:
you had to sign a nondisclosure agreement even to get an executable
copy.
This meant that the first step in using a computer was to promise
not to help your neighbor. A cooperating community was forbidden.
The rule made by the owners of proprietary software was, "If
you share with your neighbor, you are a pirate. If you want any
changes, beg us to make them."
The idea that the proprietary software social system--the system
that says you are not allowed to share or change software--is
antisocial, that it is unethical, that it is simply wrong, may
come as a surprise to some readers. But what else could we say
about a system based on dividing the public and keeping users
helpless? Readers who find the idea surprising may have taken
proprietary social system as given, or judged it on the terms
suggested by proprietary software businesses. Software publishers
have worked long and hard to convince people that there is only
one way to look at the issue.
When software publishers talk about "enforcing" their
"rights" or "stopping piracy", what they actually
*say* is secondary. The real message of these statements is in
the unstated assumptions they take for granted; the public is
supposed to accept them uncritically. So let's examine them.
One assumption is that software companies have an unquestionable
natural right to own software and thus have power over all its
users. (If this were a natural right, then no matter how much
harm it does to the public, we could not object.) Interestingly,
the US Constitution and legal tradition reject this view; copyright
is not a natural right, but an artificial government-imposed monopoly
that limits the users' natural right to copy.
Another unstated assumption is that the only important thing about
software is what jobs it allows you to do--that we computer users
should not care what kind of society we are allowed to have.
A third assumption is that we would have no usable software (or,
would never have a program to do this or that particular job)
if we did not offer a company power over the users of the program.
This assumption may have seemed plausible, before the free software
movement demonstrated that we can make plenty of useful software
without putting chains on it.
If we decline to accept these assumptions, and judge these issues
based on ordinary common-sense morality while placing the users
first, we arrive at very different conclusions. Computer users
should be free to modify programs to fit their needs, and free
to share software, because helping other people is the basis of
society.
There is no room here for an extensive statement of the reasoning
behind this conclusion, so I refer the reader to the web page,
http://www.gnu.org/philosophy/why-free.html.
A stark moral choice
With my community gone, to continue as before was impossible.
Instead, I faced a stark moral choice.
The easy choice was to join the proprietary software world, signing
nondisclosure agreements and promising not to help my fellow hacker.
Most likely I would also be developing software that was released
under nondisclosure agreements, thus adding to the pressure on
other people to betray their fellows too.
I could have made money this way, and perhaps amused myself writing
code. But I knew that at the end of my career, I would look back
on years of building walls to divide people, and feel I had spent
my life making the world a worse place.
I had already experienced being on the receiving end of a nondisclosure
agreement, when someone refused to give me and the MIT AI lab
the source code for the control program for our printer. (The
lack of certain features in this program made use of the printer
extremely frustrating.) So I could not tell myself that nondisclosure
agreements were innocent. I was very angry when he refused to
share with us; I could not turn around and do the same thing to
everyone else.
Another choice, straightforward but unpleasant, was to leave the
computer field. That way my skills would not be misused, but they
would still be wasted. I would not be culpable for dividing and
restricting computer users, but it would happen nonetheless.
So I looked for a way that a programmer could do something for
the good. I asked myself, was there a program or programs that
I could write, so as to make a community possible once again?
The answer was clear: what was needed first was an operating system.
That is the crucial software for starting to use a computer. With
an operating system, you can do many things; without one, you
cannot run the computer at all. With a free operating system,
we could again have a community of cooperating hackers--and invite
anyone to join. And anyone would be able to use a computer without
starting out by conspiring to deprive his or her friends.
As an operating system developer, I had the right skills for this
job. So even though I could not take success for granted, I realized
that I was elected to do the job. I chose to make the system compatible
with Unix so that it would be portable, and so that Unix users
could easily switch to it. The name GNU was chosen following a
hacker tradition, as a recursive acronym for "GNU's Not Unix."
An operating system does not mean just a kernel, barely enough
to run other programs. In the 1970s, every operating system worthy
of the name included command processors, assemblers, compilers,
interpreters, debuggers, text editors, mailers, and much more.
ITS had them, Multics had them, VMS had them, and Unix had them.
The GNU operating system would include them too.
Later I heard these words, attributed to Hillel (1):
If I am not for myself, who will be for me?
If I am only for myself, what am I?
If not now, when?
The decision to start the GNU project was based on a similar spirit.
(1) As an Atheist, I don't follow any religious leaders, but I
sometimes find I admire something one of them has said.
Free as in freedom
The term "free software" is sometimes misunderstood--it
has nothing to do with price. It is about freedom. Here, therefore,
is the definition of free software: a program is free software,
for you, a particular user, if: * You have the freedom to run
the program, for any purpose.
* You have the freedom to modify the program to suit your needs.
(To make this freedom effective in practice, you must have access
to the source code, since making changes in a program without
having the source code is exceedingly difficult.)
* You have the freedom to redistribute copies, either gratis or
for a fee.
* You have the freedom to distribute modified versions of the
program, so that the community can benefit from your improvements.
Since "free" refers to freedom, not to price, there
is no contradiction between selling copies and free software.
In fact, the freedom to sell copies is crucial: collections of
free software sold on CD-ROMs are important for the community,
and selling them is an important way to raise funds for free software
development. Therefore, a program which people are not free to
include on these collections is not free software.
Because of the ambiguity of "free", people have long
looked for alternatives, but no one has found a suitable alternative.
The English Language has more words and nuances than any other,
but it lacks a simple, unambiguous, word that means "free,"
as in freedom--"unfettered," being the word that comes
closest in meaning. Such alternatives as "liberated",
"freedom" and "open" have either the wrong
meaning or some other disadvantage.
GNU software and the GNU system
Developing a whole system is a very large project. To bring it
into reach, I decided to adapt and use existing pieces of free
software wherever that was possible. For example, I decided at
the very beginning to use TeX as the principal text formatter;
a few years later, I decided to use the X Window System rather
than writing another window system for GNU.
Because of this decision, the GNU system is not the same as the
collection of all GNU software. The GNU system includes programs
that are not GNU software, programs that were developed by other
people and projects for their own purposes, but which we can use
because they are free software.
Commencing the project
In January 1984 I quit my job at MIT and began writing GNU software.
Leaving MIT was necessary so that MIT would not be able to interfere
with distributing GNU as free software. If I had remained on the
staff, MIT could have claimed to own the work, and could have
imposed their own distribution terms, or even turned the work
into a proprietary software package. I had no intention of doing
a large amount of work only to see it become useless for its intended
purpose: creating a new software-sharing community.
However, Professor Winston, then the head of the MIT AI Lab, kindly
invited me to keep using the lab's facilities.
The first steps
Shortly before beginning the GNU project, I heard about the Free
University Compiler Kit, also known as VUCK. (The Dutch word for
"free" is written with a V.) This was a compiler designed
to handle multiple languages, including C and Pascal, and to support
multiple target machines. I wrote to its author asking if GNU
could use it.
He responded derisively, stating that the university was free
but the compiler was not. I therefore decided that my first program
for the GNU project would be a multi-language, multi-platform
compiler.
Hoping to avoid the need to write the whole compiler myself, I
obtained the source code for the Pastel compiler, which was a
multi-platform compiler developed at Lawrence Livermore Lab. It
supported, and was written in, an extended version of Pascal,
designed to be a system-programming language. I added a C front
end, and began porting it to the Motorola 68000 computer. But
I had to give that up when I discovered that the compiler needed
many megabytes of stack space, and the available 68000 Unix system
would only allow 64k.
I then realized that the Pastel compiler functioned by parsing
the entire input file into a syntax tree, converting the whole
syntax tree into a chain of "instructions", and then
generating the whole output file, without ever freeing any storage.
At this point, I concluded I would have to write a new compiler
from scratch. That new compiler is now known as GCC; none of the
Pastel compiler is used in it, but I managed to adapt and use
the C front end that I had written. But that was some years later;
first, I worked on GNU Emacs.
GNU Emacs
I began work on GNU Emacs in September 1984, and in early 1985
it was beginning to be usable. This enabled me to begin using
Unix systems to do editing; having no interest in learning to
use vi or ed, I had done my editing on other kinds of machines
until then.
At this point, people began wanting to use GNU Emacs, which raised
the question of how to distribute it. Of course, I put it on the
anonymous ftp server on the MIT computer that I used. (This computer,
prep.ai.mit.edu, thus became the principal GNU ftp distribution
site; when it was decommissioned a few years later, we transferred
the name to our new ftp server.) But at that time, many of the
interested people were not on the Internet and could not get a
copy by ftp. So the question was, what would I say to them?
I could have said, "Find a friend who is on the net and who
will make a copy for you." Or I could have done what I did
with the original PDP-10 Emacs: tell them, "Mail me a tape
and a SASE, and I will mail it back with Emacs on it." But
I had no job, and I was looking for ways to make money from free
software. So I announced that I would mail a tape to whoever wanted
one, for a fee of $150. In this way, I started a free software
distribution business, the precursor of the companies that today
distribute entire Linux-based GNU systems.
Is a program free for every user?
If a program is free software when it leaves the hands of its
author, this does not necessarily mean it will be free software
for everyone who has a copy of it. For example, public domain
software (software that is not copyrighted) is free software;
but anyone can make a proprietary modified version of it. Likewise,
many free programs are copyrighted but distributed under simple
permissive licenses which allow proprietary modified versions.
The paradigmatic example of this problem is the X Window System.
Developed at MIT, and released as free software with a permissive
license, it was soon adopted by various computer companies. They
added X to their proprietary Unix systems, in binary form only,
and covered by the same nondisclosure agreement. These copies
of X were no more free software than Unix was.
The developers of the X Window System did not consider this a
problem--they expected and intended this to happen. Their goal
was not freedom, just "success", defined as "having
many users." They did not care whether these users had freedom,
only that they should be numerous.
This lead to a paradoxical situation where two different ways
of counting the amount of freedom gave different answers to the
question, "Is this program free?" If you judged based
on the freedom provided by the distribution terms of the MIT release,
you would say that X was free software. But if you measured the
freedom of the average user of X, you would have to say it was
proprietary software. Most X users were running the proprietary
versions that came with Unix systems, not the free version.
Copyleft and the GNU GPL
The goal of GNU was to give users freedom, not just to be popular.
So we needed to use distribution terms that would prevent GNU
software from being turned into proprietary software. The method
we use is called "copyleft".(1)
Copyleft uses copyright law, but flips it over to serve the opposite
of its usual purpose: instead of a means of privatizing software,
it becomes a means of keeping software free.
The central idea of copyleft is that we give everyone permission
to run the program, copy the program, modify the program, and
distribute modified versions--but not permission to add restrictions
of their own. Thus, the crucial freedoms that define "free
software" are guaranteed to everyone who has a copy; they
become inalienable rights.
For an effective copyleft, modified versions must also be free.
This ensures that work based on ours becomes available to our
community if it is published. When programmers who have jobs as
programmers volunteer to improve GNU software, it is copyleft
that prevents their employers from saying, "You can't share
those changes, because we are going to use them to make our proprietary
version of the program."
The requirement that changes must be free is essential if we want
to ensure freedom for every user of the program. The companies
that privatized the X Window System usually made some changes
to port it to their systems and hardware. These changes were small
compared with the great extent of X, but they were not trivial.
If making changes were an excuse to deny the users freedom, it
would be easy for anyone to take advantage of the excuse.
A related issue concerns combining a free program with non-free
code. Such a combination would inevitably be non-free; whichever
freedoms are lacking for the non-free part would be lacking for
the whole as well. To permit such combinations would open a hole
big enough to sink a ship. Therefore, a crucial requirement for
copyleft is to plug this hole: anything added to or combined with
a copylefted program must be such that the larger combined version
is also free and copylefted.
The specific implementation of copyleft that we use for most GNU
software is the GNU General Public License, or GNU GPL for short.
We have other kinds of copyleft that are used in specific circumstances.
GNU manuals are copylefted also, but use a much simpler kind of
copyleft, because the complexity of the GNU GPL is not necessary
for manuals.
(1) In 1984 or 1985, Don Hopkins (a very imaginative fellow) mailed
me a letter. On the envelope he had written several amusing sayings,
including this one: "Copyleft--all rights reversed."
I used the word "copyleft" to name the distribution
concept I was developing at the time.
The Free Software Foundation
As interest in using Emacs was growing, other people became involved
in the GNU project, and we decided that it was time to seek funding
once again. So in 1985 we created the Free Software Foundation,
a tax-exempt charity for free software development. The FSF also
took over the Emacs tape distribution business; later it extended
this by adding other free software (both GNU and non-GNU) to the
tape, and by selling free manuals as well.
The FSF accepts donations, but most of its income has always come
from sales--of copies of free software, and of other related services.
Today it sells CD-ROMs of source code, CD-ROMs with binaries,
nicely printed manuals (all with freedom to redistribute and modify),
and Deluxe Distributions (where we build the whole collection
of software for your choice of platform).
Free Software Foundation employees have written and maintained
a number of GNU software packages. Two notable ones are the C
library and the shell. The GNU C library is what every program
running on a GNU/Linux system uses to communicate with Linux.
It was developed by a member of the Free Software Foundation staff,
Roland McGrath. The shell used on most GNU/Linux systems is BASH,
the Bourne Again Shell (1), which was developed by FSF employee
Brian Fox.
We funded development of these programs because the GNU project
was not just about tools or a development environment. Our goal
was a complete operating system, and these programs were needed
for that goal.
(1) "Bourne again Shell" is a joke on the name "Bourne
Shell'', which was the usual shell on Unix.
Free software support
The free software philosophy rejects a specific widespread business
practice, but it is not against business. When businesses respect
the users' freedom, we wish them success.
Selling copies of Emacs demonstrates one kind of free software
business. When the FSF took over that business, I needed another
way to make a living. I found it in selling services relating
to the free software I had developed. This included teaching,
for subjects such as how to program GNU Emacs and how to customize
GCC, and software development, mostly porting GCC to new platforms.
Today each of these kinds of free software business is practiced
by a number of corporations. Some distribute free software collections
on CD-ROM; others sell support at levels ranging from answering
user questions, to fixing bugs, to adding major new features.
We are even beginning to see free software companies based on
launching new free software products.
Watch out, though--a number of companies that associate themselves
with the term "open source" actually base their business
on non-free software that works with free software. These are
not free software companies, they are proprietary software companies
whose products tempt users away from freedom. They call these
"value added", which reflects the values they would
like us to adopt: convenience above freedom. If we value freedom
more, we should call them "freedom subtracted" products.
Technical goals
The principal goal of GNU was to be free software. Even if GNU
had no technical advantage over Unix, it would have a social advantage,
allowing users to cooperate, and an ethical advantage, respecting
the user's freedom.
But it was natural to apply the known standards of good practice
to the work--for example, dynamically allocating data structures
to avoid arbitrary fixed size limits, and handling all the possible
8-bit codes wherever that made sense.
In addition, we rejected the Unix focus on small memory size,
by deciding not to support 16-bit machines (it was clear that
32-bit machines would be the norm by the time the GNU system was
finished), and to make no effort to reduce memory usage unless
it exceeded a megabyte. In programs for which handling very large
files was not crucial, we encouraged programmers to read an entire
input file into core, then scan its contents without having to
worry about I/O.
These decisions enabled many GNU programs to surpass their Unix
counterparts in reliability and speed.
Donated computers
As the GNU project's reputation grew, people began offering to
donate machines running UNIX to the project. These were very useful,
because the easiest way to develop components of GNU was to do
it on a UNIX system, and replace the components of that system
one by one. But they raised an ethical issue: whether it was right
for us to have a copy of UNIX at all.
UNIX was (and is) proprietary software, and the GNU project's
philosophy said that we should not use proprietary software. But,
applying the same reasoning that leads to the conclusion that
violence in self defense is justified, I concluded that it was
legitimate to use a proprietary package when that was crucial
for developing free replacement that would help others stop using
the proprietary package.
But, even if this was a justifiable evil, it was still an evil.
Today we no longer have any copies of Unix, because we have replaced
them with free operating systems. If we could not replace a machine's
operating system with a free one, we replaced the machine instead.
The GNU Task List
As the GNU project proceeded, and increasing numbers of system
components were found or developed, eventually it became useful
to make a list of the remaining gaps. We used it to recruit developers
to write the missing pieces. This list became known as the GNU
task list. In addition to missing Unix components, we listed added
various other useful software and documentation projects that,
we thought, a truly complete system ought to have.
Today, hardly any Unix components are left in the GNU task list--those
jobs have been done, aside from a few inessential ones. But the
list is full of projects that some might call "applications".
Any program that appeals to more than a narrow class of users
would be a useful thing to add to an operating system.
Even games are included in the task list--and have been since
the beginning. Unix included games, so naturally GNU should too.
But compatibility was not an issue for games, so we did not follow
the list of games that Unix had. Instead, we listed a spectrum
of different kinds of games that users might like.
The GNU Library GPL
The GNU C library uses a special kind of copyleft called the GNU
Library General Public License, which gives permission to linkproprietary
software with the library. Why make this exception?
It is not a matter of principle; there is no principle that says
proprietary software products are entitled to include our code.
(Why contribute to a project predicated on refusing to share with
us?) Using the LGPL for the C library, or for any library, is
a matter ofstrategy.
The C library does a generic job; every proprietary system or
compiler comes with a C library. Therefore, to make our C library
available only to free software would not have given free software
any advantage--it would only have discouraged use of our library.
One system is an exception to this: on the GNU system (and this
includes GNU/Linux), the GNU C library is the only C library.
So the distribution terms of the GNU C library determine whether
it is possible to compile a proprietary program for the GNU system.
There is no ethical reason to allow proprietary applications on
the GNU system, but strategically it seems that disallowing them
would do more to discourage use of the GNU system than to encourage
development of free applications.
That is why using the Library GPL is a good strategy for the C
library. For other libraries, the strategic decision needs to
be considered on a case-by-case basis. When a library does a special
job that can help write certain kinds of programs, then releasing
it under the GPL, limiting it to free programs only, is a way
of helping other free software developers, giving them an advantage
against proprietary software.
Consider GNU Readline, a library that was developed to provide
command-line editing for BASH. Readline is released under the
ordinary GNU GPL, not the Library GPL. This probably does reduce
the amount Readline is used, but that is no loss for us. Meanwhile,
at least one useful application has been made free software specifically
so it could use Readline, and that is a real gain for the community.
Proprietary software developers have the advantages money provides;
free software developers need to make advantages for each other.
I hope some day we will have a large collection of GPL-covered
libraries that have no parallel available to proprietary software,
providing useful modules to serve as building blocks in new free
software, and adding up to a major advantage for further free
software development.
Scratching an itch?
Eric Raymond says that "Every good work of software starts
by scratching a developer's personal itch." Maybe that happens
sometimes, but many essential pieces of GNU software were developed
in order to have a complete free operating system. They come from
a vision and a plan, not from impulse.
For example, we developed the GNU C library because a Unix-like
system needs a C library, the Bourne-Again Shell (bash) because
a Unix-like system needs a shell, and GNU tar because a Unix-like
system needs a tar program. The same is true for my own programs--the
GNU C compiler, GNU Emacs, GDB and GNU Make.
Some GNU programs were developed to cope with specific threats
to our freedom. Thus, we developed gzip to replace the Compress
program, which had been lost to the community because of the LZW
patents. We found people to develop LessTif, and more recently
started GNOME and Harmony, to address the problems caused by certain
proprietary libraries (see below). We are developing the GNU Privacy
Guard to replace popular non-free encryption software, because
users should not have to choose between privacy and freedom.
Of course, the people writing these programs became interested
in the work, and many features were added to them by various people
for the sake of their own needs and interests. But that is not
why the programs exist.
Unexpected developments
At the beginning of the GNU project, I imagined that we would
develop the whole GNU system, then release it as a whole. That
is not how it happened.
Since each component of the GNU system was implemented on a Unix
system, each component could run on Unix systems, long before
a complete GNU system existed. Some of these programs became popular,
and users began extending them and porting them---to the various
incompatible versions of Unix, and sometimes to other systems
as well.
The process made these programs much more powerful, and attracted
both funds and contributors to the GNU project. But it probably
also delayed completion of a minimal working system by several
years, as GNU developers' time was put into maintaining these
ports and adding features to the existing components, rather than
moving on to write one missing component after another.
The GNU Hurd
By 1990, the GNU system was almost complete; the only major missing
component was the kernel. We had decided to implement our kernel
as a collection of server processes running on top of Mach. Mach
is a microkernel developed at Carnegie Mellon University and then
at the University of Utah; the GNU HURD is a collection of servers
(or "herd of gnus'') that run on top of Mach, and do the
various jobs of the Unix kernel. The start of development was
delayed as we waited for Mach to be released as free software,
as had been promised.
One reason for choosing this design was to avoid what seemed to
be the hardest part of the job: debugging a kernel program without
a source-level debugger to do it with. This part of the job had
been done already, in Mach, and we expected to debug the HURD
servers as user programs, with GDB. But it took a long time to
make that possible, and the multi-threaded servers that send messages
to each other have turned out to be very hard to debug. Making
the HURD work solidly has stretched on for many years.
Alix
The GNU kernel was not originally supposed to be called the HURD.
Its original name was Alix--named after the woman who was my sweetheart
at the time. She, a Unix system administrator, had pointed out
how her name would fit a common naming pattern for Unix system
versions; as a joke, she told her friends, "Someone should
name a kernel after me." I said nothing, but decided to surprise
her with a kernel named Alix.
It did not stay that way. Michael Bushnell (now Thomas), the main
developer of the kernel, preferred the name HURD, and redefined
Alix to refer to a certain part of the kernel--the part that would
trap system calls and handle them by sending messages to HURD
servers.
Ultimately, Alix and I broke up, and she changed her name; independently,
the HURD design was changed so that the C library would send messages
directly to servers, and this made the Alix component disappear
from the design.
But before these things happened, a friend of hers came across
the name Alix in the HURD source code, and mentioned the name
to her. So the name did its job.
Linux and GNU/Linux
The GNU Hurd is not ready for production use. Fortunately, another
kernel is available. In 1991, Linus Torvalds developed a Unix-compatible
kernel and called it Linux. Around 1992, combining Linux with
the not-quite-complete GNU system resulted in a complete free
operating system. (Combining them was a substantial job in itself,
of course.) It is due to Linux that we can actually run a version
of the GNU system today.
We call this system version GNU/Linux, to express its composition
as a combination of the GNU system with Linux as the kernel.
Challenges in our future
We have proved our ability to develop a broad spectrum of free
software. This does not mean we are invincible and unstoppable.
Several challenges make the future of free software uncertain;
meeting them will require steadfast effort and endurance, sometimes
lasting for years. It will require the kind of determination that
people display when they value their freedom and will not let
anyone take it away.
The following four sections discuss these challenges.
Secret hardware
Hardware manufactures increasingly tend to keep hardware specifications
secret. This makes it difficult to write free drivers so that
Linux and XFree86 can support new hardware. We have complete free
systems today, but we will not have them tomorrow if we cannot
support tomorrow's computers.
There are two ways to cope with this problem. Programmers can
do reverse engineering to figure out how to support the hardware.
The rest of us can choose the hardware that is supported by free
software; as our numbers increase, secrecy of specifications will
become a self-defeating policy.
Reverse engineering is a big job; will we have programmers with
sufficient determination to undertake it? Yes--if we have built
up a strong feeling that free software is a matter of principle,
and non-free drivers are intolerable. And will large numbers of
us spend extra money, or even a little extra time, so we can use
free drivers? Yes, if the determination to have freedom is widespread.
Non-free libraries
A non-free library that runs on free operating systems acts as
a trap for free software developers. The library's attractive
features are the bait; if you use the library, you fall into the
trap, because your program cannot usefully be part of a free operating
system. (Strictly speaking, we could include your program, but
it won't run with the library missing.) Even worse, if a program
that uses the proprietary library becomes popular, it can lure
other unsuspecting programmers into the trap.
The first instance of this problem was the Motif toolkit, back
in the 80s. Although there were as yet no free operating systems,
it was clear what problem Motif would cause for them later on.
The GNU Project responded in two ways: by asking individual free
software projects to support the free X toolkit widgets as well
as Motif, and by asking for someone to write a free replacement
for Motif. The job took many years; LessTif, developed by the
Hungry Programmers, became powerful enough to support most Motif
applications only in 1997.
Between 1996 and 1998, another non-free GUI toolkit library, called
Qt, was used in a substantial collection of free software, the
desktop KDE.
Free GNU/Linux systems were unable to use KDE, because we could
not use the library. However, some commercial distributors of
GNU/Linux systems who were not strict about sticking with free
software added KDE to their systems--producing a system with more
capabilities, but less freedom. The KDE group was actively encouraging
more programmers to use Qt, and millions of new "Linux users"
had never been exposed to the idea that there was a problem in
this. The situation appeared grim.
The free software community responded to the problem in two ways:
GNOME and Harmony.
GNOME, the GNU Network Object Model Environment, is GNU's desktop
project. Started in 1997 by Miguel de Icaza, and developed with
the support of Red Hat Software, GNOME set out to provide similar
desktop facilities, but using free software exclusively. It has
technical advantages as well, such as supporting a variety of
languages, not just C++. But its main purpose was freedom: not
to require the use of any non-free software.
Harmony is a compatible replacement library, designed to make
it possible to run KDE software without using Qt.
In November 1998, the developers of Qt announced a change of license
which, when carried out, should make Qt free software. There is
no way to be sure, but I think that this was partly due to the
community's firm response to the problem that Qt posed when it
was non-free. (The new license is inconvenient and inequitable,
so it remains desirable to avoid using Qt.)
[Subsequent note: in September 2000, Qt was rereleased under the
GNU GPL, which essentially solved this problem.]
How will we respond to the next tempting non-free library? Will
the whole community understand the need to stay out of the trap?
Or will many of us give up freedom for convenience, and produce
a major problem? Our future depends on our philosophy.
Software patents
The worst threat we face comes from software patents, which can
put algorithms and features off limits to free software for up
to twenty years. The LZW compression algorithm patents were applied
for in 1983, and we still cannot release free software to produce
proper compressed GIFs. In 1998, a free program to produce MP3
compressed audio was removed from distribution under threat of
a patent suit.
There are ways to cope with patents: we can search for evidence
that a patent is invalid, and we can look for alternative ways
to do a job. But each of these methods works only sometimes; when
both fail, a patent may force all free software to lack some feature
that users want. What will we do when this happens?
Those of us who value free software for freedom's sake will stay
with free software anyway. We will manage to get work done without
the patented features. But those who value free software because
they expect it to be techically superior are likely to call it
a failure when a patent holds it back. Thus, while it is useful
to talk about the practical effectiveness of the "cathedral"
model of development, and the reliability and power of some free
software, we must not stop there. We must talk about freedom and
principle.
Free documentation
The biggest deficiency in our free operating systems is not in
the software--it is the lack of good free manuals that we can
include in our systems. Documentation is an essential part of
any software package; when an important free software package
does not come with a good free manual, that is a major gap. We
have many such gaps today.
Free documentation, like free software, is a matter of freedom,
not price. The criterion for a free manual is pretty much the
same as for free software: it is a matter of giving all users
certain freedoms. Redistribution (including commercial sale) must
be permitted, on-line and on paper, so that the manual can accompany
every copy of the program.
Permission for modification is crucial too. As a general rule,
I don't believe that it is essential for people to have permission
to modify all sorts of articles and books. For example, I don't
think you or I are obliged to give permission to modify articles
like thisone, which describe our actions and our views.
But there is a particular reason why the freedom to modify is
crucial for documentation for free software. When people exercise
their right to modify the software, and add or change its features,
if they are conscientious they will change the manual too--so
they can provide accurate and usable documentation with the modified
program. A manual which does not allow programmers to be conscientious
and finish the job, does not fill our community's needs.
Some kinds of limits on how modifications are done pose no problem.
For example, requirements to preserve the original author's copyright
notice, the distribution terms, or the list of authors, are ok.
It is also no problem to require modified versions to include
notice that they were modified, even to have entire sections that
may not be deleted or changed, as long as these sections deal
with nontechnical topics. These kinds of restrictions are not
|