Il termine “software” è oggi universalmente utilizzato per indicare la componente immateriale che governa moltitudini di apparecchiature elettroniche, che vanno dai più semplici apparati di comunicazione quali telefoni e fax, agli elettrodomestici, per arrivare a quelli che rappresentano i principali responsabili, di ciò che comunemente viene indicata come la più grande rivoluzione tecnologica degli ultimi decenni: i “personal computer”, principali protagonisti della diffusione di massa delle tecnologie digitali.
Ma quale è il reale significato di tale parola e come mai interi Governi nazionali, Istituzioni pubbliche, aziende private e semplici cittadini, pongono tanta attenzione su questo argomento che a prima vista sembrerebbe una semplice questione di circuiti ed apparati elettronici? Ed ancora, come è possibile che a tale tecnologia venga associato o meno il concetto di libertà ?
Per cercare di dare una risposta a tali quesiti, dobbiamo fare un passo indietro nel tempo e raccontarvi di una storia fatta di linguaggi e difficoltose comunicazioni tra uomo e macchina. Una storia nella quale l’umanità sembra apparentemente uscirne vincente, ma che in realtà si dimostra piena di insidie e allo stesso tempo presenta grandi opportunità di sviluppo sociale, che naturalmente una società civile ha l’obbligo di cercare di non farsi sfuggire.
Il linguaggio umano è caratterizzato dalla moltitudine di concetti e di simboli che li rappresentano; ma ad un certo punto della storia alcuni filosofi, matematici e teorici, compresero che l’universo di queste comunicazioni poteva essere riassunto in sole due informazioni, che dal punto di vista teorico potremmo chiamare: l’esistenza e la non esistenza di qualcosa.
Per fare un esempio pratico di comunicazione con queste due semplici informazioni, pensate ad un intesa (in termine tecnico chiamata “protocollo”) tra voi ed un vostro conoscente, per la quale stabilite che se avete una luce accesa comunicate che siete in casa, mentre se la luce è spenta significa che siete altrove. Allo stesso modo il “protocollo” potrebbe complicarsi e coinvolgere due luci, stabilendo per esempio che se una luce è accesa e l’altra spenta, il messaggio è che siete in casa, mentre se entrambe sono accese significherà che siete in casa ma che siete occupati; entrambe le lampade spente potrebbero comunicare che non siete in casa.
Con questa logica e con due semplici informazioni di base (acceso/spento) una volta stabilito il protocollo, sarete in grado di comunicare molte informazioni, tante quante sono le combinazioni dello stato di acceso/spento del numero di lampade che il vostro “protocollo” prevede (a voi il compito di immaginare quale tipo di informazione potrebbe aggiungere una terza lampada, es: sono in casa, sono occupato perchè stò mangiando, oppure perchè sono al telefono etc.)
Nel corso della storia e con l’evoluzione tecnologica, fu naturale poi per qualcuno individuare il fatto che questa logica potesse essere facilmente applicata ai congegni elettronici, per loro natura in grado di recepire solo due due tipi di informazioni: presenza o assenza di energia elettrica. Sostanzialmente, un certo numero di lampade che con la loro combinazione di stato acceso/spento, comunichino informazioni.
L’ elettronica ha l’enorme vantaggio di essere estremamente veloce e di occupare pochissimo spazio; pensate a migliaia di microlampade in grado di accendersi o spegnersi in una frazione di secondo e in questo modo trasportare milioni di informazioni ad una velocità incredibile. Una forma qualsiasi di comunicazione elettronica, per queste ragioni, è destinata a sopravanzare qualsiasi altro mezzo di comunicazione e così è stato.
Tuttavia ci si rese subito conto che il dialogo tra uomo e macchina elettronica sarebbe stata cosa complessa; il primo in grado di comunicare un’ infinità di concetti e in grado di sviluppare altrettanti simboli per rappresentarli, sull’altro versante macchine in grado di recepire solo due stati fisici: presenza o assenza di energia, che per convenzione e per utilità , furono rappresentati dai numeri 0 e 1.
Due mondi distanti e due linguaggi completamente diversi. Per comunicare, fornire informazioni, istruire macchine dal linguaggio così limitato, era necessario gettare un ponte tra i due mondi, creare il traduttore universale capace di trasformare il pensiero umano in informazioni per la macchina. In pratica si rese necessario creare una sorta di sottoinsieme del linguaggio umano, una specie di dialetto, trasformabile dal traduttore in un qualcosa di comprensibile ed eseguibile dalla macchina cioè, un insieme di istruzioni fatte di zero e di uno.
Fu così che questa comunicazione uomo/macchina cominciò a strutturarsi a livelli in ognuno dei quali l’essere umano e la macchina ricoprono ruoli e funzioni ben precise, dai confini spesso invalicabili.
I programmatori sono le persone che conoscono la logica dei computer, le operazioni che sono in grado di compiere e i dialetti utilizzabili per fornire la serie di istruzioni comprensibile ed eseguibile dal calcolatore, vale a dire il programma.
Il primo stadio del software è quindi quello scritto dai programmatori nel linguaggio di programmazione prescelto. A questo livello il software prende il nome di codice sorgente, in tale forma il programma risulta comprensibile, studiabile e modificabile dai programmatori, ma non è eseguibile sui computer. Per ottenere un programma in grado di fare eseguire ai calcolatori qualche tipo di operazione, è necessario tradurre il codice sorgente nel corrispondente codice eseguibile, che viene anche denominato codice binario.
L’ operazione di conversione da codice sorgente a codice binario viene effettuata da un particolare programma appositamente creato e che prende il nome di compilatore. Esistono specifici compilatori per ogni linguaggio di programmazione.
Solo dopo la fase di compilazione il software prende la forma di programma eseguibile; l’aspetto negativo è che in questa fase del suo ciclo di vita, il programma risulta comprensibile ai computer ma non lo è più per i programmatori i quali, per capire o modificare il programma, devono fare sempre riferimento al corrispondente codice sorgente. Inutile dire che se per qualsiasi motivo il codice sorgente dovesse andare perso, il programmatore non sarebbe più in grado di modificare il programma, di controllarne il funzionamento e di correggerne i potenziali errori.
Facciamo un esempio pratico. Quello che segue è il codice sorgente di un banale programma di esempio scritto nel linguaggio di programmazione denominato “Câ€:
#include
main()
{
printf ("Hello World"n);
}
Il banale scopo del programma di esempio, è quello di fare apparire sul monitor la scritta “Hello Worldâ€. Dopo la fase di compilazione lo stesso programma, in forma di codice eseguibile, apparirà al programmatore più o meno nel seguente modo:
éÃÿÿÿ1Ã^‰áƒäðPTRhðƒ##hÆ’##QVhlÆ’##è¿ÿÿÿô��U‰
Ã¥Sètë#ƒÀ#£â€â€##ÿÒ¡â€â€##‹#…ÒuëÆ#Υ###ÉÉöU‰
Ã¥QQ‹#p•#ƒÀ#ƒÀ#Ãè#Ãà #)ăìhx„##è#ÿÿÿƒÄ#ÉÃ������U‰
Ã¥WVSƒìè¾þÿÿ�ƒ#ÿÿÿ�“#ÿÿÿ‰Eð)Ã1öÃø#9Æs#‰×ÿ#²‹Mð)
GCC: (GNU) 3.4.1 ÿÿÿÿ˜â€##
Si tratta del codice binario del programma. Come vedete, qualcosa di assolutamente incomprensibile anche per i programmatori.
Ora, se ci venisse in mente di effettuare una versione Brasiliana del programma di esempio, dovremmo procedere alla sostituzione nel codice sorgente, della stringa “Hello World†con la corrispondente in portoghese “Oi Mundo†ed effettuare di nuovo la fase di compilazione. Se per qualche motivo non avessimo accesso al codice sorgente, l’operazione non sarebbe possibile. In pratica non avremmo la libertà di tradurre o di modificare il programma come vorremmo.
Chiunque fosse in possesso della versione binaria potrebbe eseguire il programma e fare apparire la scritta “Hello World” sullo schermo, ma solo chi fosse in possesso del relativo codice sorgente potrebbe modificarlo, per esempio, per tradurlo in altra lingua, oppure per estenderne le funzionalità .
Il software è sempre più coinvolto in moltissimi aspetti della nostra vita quotidiana. I computer vengono usati per elaborare i conti e le transazioni bancarie, gestiscono le amministrazioni pubbliche, i voli aerei, le strutture sanitarie. Il software controlla il modo in cui comunichiamo, lavoriamo e studiamo; è difficile individuare un qualsiasi settore della società moderna, nel quale le tecnologie digitali non vengano in qualche modo utilizzate.
Tutto ciò è sotto il controllo di codici che, nel momento in cui si riesca in qualche modo a legittimarne o giustificarne la mancanza di accessibilità al corrispondente codice sorgente, possono risultare incomprensibili e segreti.
Questo tipo di evoluzione nella gestione dei programmi per elaboratori, è esattamente quella a cui si è assistito con l’avvento del Software Proprietario. Una modalità di sviluppo del software proposto principalmente dalle Software House, cioè da aziende (sopratutto Multinazionali) che grazie all’applicazione di rigide leggi sul copyright e tramite brevetti, impostano il loro business sulla realizzazione e commercializzazione di software in formato binario, quindi eseguibile dai calcolatori ma senza il relativo codice sorgente. Il risultato è quello che viene comunemente chiamato pacchetto software, che viene commercializzato alla stregua di un qualsiasi prodotto materiale ma il cui uso, è spesso vincolato e limitato da severe licenze di utilizzo. Inutile dire che essendo tali pacchetti non corredati dal corrispondente codice sorgente, non solo ogni modifica o adattamento di tali programmi acquistati risulta impossibile, ma anche la semplice conoscenza di ciò che è scritto nel codice e il controllo delle operazioni che il computer esegue, risulta complicato se non addirittura impossibile. A questo punto l’accostamento tra le parole “software” e “libertà di utilizzo” cominciano ad avere un senso.
Naturalmente la maggior parte degli utilizzatori di computer e di altri congegni elettronici, trova del tutto naturale avere a che a fare solo con la parte eseguibile del software e normalmente poche persone si preoccupano della disponibilità o meno del codice sorgente, dopotutto chi non è programmatore non saprebbe nemmeno che farsene; ma probabilmente, dopo questo nostro breve viaggio nel tempo tra codici e linguaggi, qualcuno avrà intuito l’importanza della posta in gioco e forse si starà domandando per la prima volta se una tecnologia di tale importanza, possa essere chiusa e tenuta al segreto nelle mani di chi ne controlla il codice sorgente; se questo tipo di business che basa la sua giustificazione filosofica ed etica sulla difesa della “proprietà intellettualeâ€, non possa risultare pericoloso e dannoso nei confronti della libera circolazione della conoscenza, del progresso tecnologico, delle opportunità di sviluppo e crescita sociale per l’umanità intera.
La distribuzione e la commercializzazione di software a sorgente chiuso è ormai divenuta una consuetudine e in molte realtà è adirittura concepita come l’unica metodologia di sviluppo dei programmi possibile, ma la storia della tecnologia digitale non è iniziata in questo modo e quello a cui assistiamo oggi assomiglia all’espressione di una logica di mercato distorta, dove la filosofia del massimo profitto con il minimo sforzo, si sostituisce alle esigenze di progresso tecnologico, culturale e sviluppo sociale, che una moderna società democratica e civile dovrebbe perseguire.
Il nostro viaggio tra le foreste simboliche dei linguaggi e dei codici, continuerà nella seconda parte di questo articolo, dove cercheremo di parlarvi di una storia parallela e strettamente legata a quella degli zero e degli uno macinati dai microprocessori. Una storia affascinante iniziata e portata avanti da persone esperte, abili giocolieri dei codici, che dal buio delle loro stanze illuminate solo dalla debole luce dei display, hanno saputo mostrare al mondo intero l’aspetto più umano della tecnologia. Richiedendo a gran voce la libera circolazione del pensiero, dell’ informazione e la condivisione della conoscenza, hanno trascinato con se migliaia di collaboratori, creato una comunità internazionale, risvegliato l’interesse e le coscienze di programmatori, tecnici, politici, sociologi e di decine di Governi e di pubbliche amministrazioni di tutto il mondo: il movimento del Software Libero.