venerdì 10 aprile 2015

Sorgenti aperte

Negli ultimi anni si sente spesso nominare termini informatici come “Open Source” e “Software Libero”. Potrebbero sembrare termini riservati agli addetti ai lavori e in effetti forse è così, ma le implicazioni di carattere generale di cui sono portatori possono giustificare una certa curiosità a riguardo anche da parte di chi non si occupa di questo settore.

La maggior parte delle persone associa questi termini a programmi gratuitamente disponibili e non è un'intuizione sbagliata, solo un po' riduttiva. Quando acquistate un software comune, come Microsoft Windows o Office o il Norton Antivirus, vi viene distribuito in una forma che è comprensibile solo da un computer: tentare di risalire al significato di tutto ciò che è codificato in quel programma, quali sono con esattezza le operazioni che compie e soprattutto modificarle, è impresa non impossibile, ma nella pratica la difficoltà è tale da scoraggiare i migliori programmatori. Naturalmente gli sviluppatori del programma che avete acquistato non lo hanno scritto direttamente in quella forma così astrusa. Lo hanno prima scritto in un linguaggio (di programmazione) che, per quanto per la maggior parte delle persone sia comunque incomprensibile, è molto più vicino alla logica del linguaggio umano. Una volta codificato in questa forma gli sviluppatori lo hanno trasformato con un sistema automatico nel linguaggio comprensibile alla macchina. La sequenza di istruzioni contenute nel programma è detta “codice sorgente” quando è nella forma più comprensibile all'uomo e prende il nome di “codice eseguibile” o “binario” quando è nella forma comprensibile, cioè eseguibile, dal calcolatore.

Dopo questa doverosa premessa che vi ha dato le basi per capire ciò di cui stiamo parlando, cerchiamo di capire la differenza che c'è fra un tradizionale software commerciale a sorgente chiuso e uno cosiddetto “libero”.


Una società che distribuisce software a sorgente chiuso custodisce gelosamente il segreto del codice sorgente che i suoi sviluppatori hanno prodotto, ma cerca di diffondere in ogni modo quello eseguibile, di solito a pagamento, ma non necessariamente. Il codice sorgente per essa è, come la formula della Coca-Cola, un segreto industriale da proteggere in ogni modo. Inoltre l'acquirente in realtà non acquisisce la proprietà del software che si appresta ad utilizzare, ma semplicemente una licenza che gli consente di usarlo con una serie di limitazioni stabilite dalla società informatica che ne detiene i diritti. Alcune delle limitazioni più comuni sono quelle che impediscono di fare un numero arbitrario di copie del supporto su cui si trova il programma (per esempio un CD o un dischetto) oppure di installare il programma sul PC di un vostro amico oltre che sul vostro, di ridistribuirlo gratuitamente, di rivenderlo, di vedere e studiare il suo codice sorgente, di modificarlo ecc...


Il software libero, d'altra parte, viene distribuito con delle particolari licenze che hanno caratteristiche peculiari. Descriverò in particolare la licenza che fra queste è probabilmente la più diffusa, la GPL (General Public License), usata per la prima volta dal progetto GNU. Questa licenza obbliga il distributore a fornire all'utente anche il codice sorgente del programma e dà diritto all'utente di leggerlo, modificarlo e ridistribuirlo, regalarlo. Un software libero può essere replicato infinite volte senza commettere reato. La GPL impone però di ridistribuire sempre con la stessa licenza un eventuale software derivato da uno già rilasciato con licenza GPL. A questo punto qualcuno si domanderà come è possibile che il software venga distribuito così liberamente, come può un sistema del genere mantenersi in piedi finanziariamente. Le risposte sono molteplici. La più banale è che alcuni programmatori lavorano gratuitamente, al solo scopo di contribuire alla crescita di una comunità volontaria, o perché questo lavoro gli consente di fare esperienza e dimostrare le proprie capacità. Ma ci sono anche molte società a scopo di lucro che si mantengono scrivendo software open source. Ciò è possibile perché la licenza GPL non impedisce di vendere, ma semplicemente di far pagare il bene immateriale del software: per rendere meglio questa distinzione si può dire che si può guadagnare scrivendo un software su commissione, effettuando consulenze su software open source, installare e configurare per l'utente, spedire su richiesta CD contenenti il software, scrivere libri di divulgazione ed effettuare corsi, fornire assistenza tecnica di vario genere. Questo per dire che un'economia sostenibile, almeno per il momento, basata sull'open source è possibile e il proliferare di tecnologie di questo tipo negli ultimi anni ne è la dimostrazione.

Quali sono le questioni attualmente all'attenzione dell'opinione pubblica a proposito dell'open source? Uno degli aspetti più interessanti di questo genere di software è il modello di sviluppo a cui si accompagna. Essendo il codice sorgente liberamente disponibile è molto più semplice scoprire difetti del software (i cosiddetti “bug”) proprio perché esso è potenzialmente sotto gli occhi di qualsiasi programmatore competente. Nel caso del software chiuso i bug vengono alla luce in ogni caso ma in genere è solo la casa produttrice del software che è in grado di effettuare la correzione. Diversamente per i software liberi in tempi rapidissimi qualche volenteroso spesso può correggersi da sé il difetto e proporre agli sviluppatori “ufficiali” la correzione già pronta (quella che viene generalmente chiamata “patch”). I sostenitori dell'open source ritengono che questo renda il software libero addirittura qualitativamente migliore rispetto a quello tradizionale, anche perché, sostengono, un codice sorgente scritto per essere letto da chiunque tende ad avere una struttura più chiara e facilmente modificabile. Un'altra questione fondamentale è l'insieme dei diritti e possibilità che acquisisce l'utente solo se il software è libero. L'impossibilità di leggere il codice sorgente comporta che l'utente non è in grado di conoscere esattamente cosa sta facendo il programma sul proprio computer e ciò ha diverse implicazioni sulla possibilità che venga violata la riservatezza dei propri dati per mezzo di abusi della società produttrice di software. Ad esempio spesso si è insinuato che Microsoft abbia potuto predisporre dei sistemi di accesso non documentati e non autorizzati sui computer che eseguono Windows, sistemi di cui potrebbero essere a conoscenza esclusivamente agenzie di spionaggio americane, come la NSA (National Security Agency). Sto parlando delle famigerate “backdoor governative”. Ma questa considerazione si può anche generalizzare: è noto il caso di un uomo negli USA che ha contestato la sanzione per guida in stato di ebbrezza che gli era stata comminata in quanto il codice sorgente del software utilizzato per calcolare il tasso alcolico nel sangue non era liberamente disponibile e quindi l'autorità non poteva dimostrare la correttezza degli algoritmi usati nell'esame e il tribunale gli ha dato ragione. Ulteriore peculiarità del modello open source è quello della formazione di un gran numero di cosiddetti “fork”. Accade cioè che, siccome i grandi progetti rendono disponibile il codice sorgente, chiunque può decidere di riutilizzare quel codice per fondare un altro progetto alternativo (appunto un fork) che prende il via dal primo ma che poi prende una strada diversa. Sarà poi una sorta di selezione naturale effettuata dagli utenti a decidere se c'è spazio per entrambi i progetti o a decretare il successo soltanto di uno dei due.
Alcuni osservatori del fenomeno ritengono che il modello open source sia il frutto di un entusiasmo ideologico di alcuni programmatori che ha successo esclusivamente perché finanziato da grandi colossi informatici come IBM, Sun Microsystems e altri allo scopo di ottenere software di qualità a bassissimo costo a spese di sviluppatori sottopagati o non pagati per poi basare i guadagni su attività collaterali. Altri ritengono che questo modello sia il futuro dell'informatica.

Il più celebre software rilasciato con licenza GPL è probabilmente GNU/Linux, un sistema operativo libero, un concorrente del quasi-monopolista Microsoft Windows, per intenderci. Negli ultimi anni Linux si sta diffondendo sempre di più e non più soltanto come sistema operativo dei server, ma anche sui personal computer domestici di utenti a volte non molto esperti. Utilizzare questo sistema operativo ha vantaggi e svantaggi, ma si spera che questi ultimi vadano a diminuire col passare del tempo. I vantaggi più evidenti sono quelli tipici di ogni software libero, a cominciare dalla gratuità, ma se ne aggiungono altri che sono interessanti se visti in contrapposizione al più diffuso Windows: pur essendo Linux relativamente recente (è nato nel 1991) è un sistema operativo di tipo Unix, una famiglia di sistemi che hanno origine addirittura alla fine degli anni '60. Gli Unix hanno fatto la storia dell'informatica e sono stati pensati fin dall'inizio per funzionare in presenza di più utenti, di più programmi in esecuzione contemporaneamente e per essere collegati in rete. Usare Linux che ha la struttura dei sistemi di questa famiglia ha dei vantaggi notevoli per la sicurezza. Inoltre, ma questo è solo un vantaggio temporaneo, essendo Linux al momento molto meno diffuso di Windows, non è un bersaglio molto conveniente per chi vuole scrivere virus, anche perché i suoi utenti sono spesso molto più smaliziati di un comune utente di Windows, e di solito sanno come evitare di commettere imprudenze. Aggiungiamo a questo che la stragrande maggioranza delle applicazioni più diffuse disponibili per Linux è anch'essa costituita da software libero. Ciò significa che scegliendo Linux si ha a disposizione un'enorme quantità di software gratuito e libero. Tuttavia oltre ai vantaggi ci sono anche degli aspetti che ostacolano la diffusione di questo sistema operativo. Uno di essi è la minore compatibilità del sistema operativo con le periferiche hardware. E' un problema che va rapidamente scomparendo, ma Linux è comunque ancora indietro rispetto a Windows nel supporto a stampanti, scanner, modem ecc... questo soprattutto perché spesso i produttori di hardware non sono molto interessati a distribuire software o documentazione che consenta a Linux di funzionare facilmente con i propri prodotti, visto che la diffusione di questo sistema non è ritenuta tale da giustificare l'investimento. Un altro problema di Linux è la scarsità di software commerciale disponibile, specialmente in certi settori particolari. Per esempio manca un software professionale equiparabile ad AutoCAD, ma anche questa si spera sia una lacuna destinata a colmarsi col tempo e la diffusione. Infine c'è una caratteristica del target del sistema che ne limita la diffusione: si tratta dell'inerzia degli utenti e delle aziende che necessitano di un minimo di formazione per riconvertire le proprie conoscenze acquisite quasi esclusivamente lavorando su sistemi Microsoft, ed essere pronti all'uso disinvolto di Linux.

Software libero di grande successo si sta diffondendo molto anche sulla piattaforma Windows. Di solito si tratta di software che partendo dallo stesso codice sorgente può essere trasformato in codice eseguibile sia su Linux che su altri sistemi. Alcuni esempi sono: OpenOffice.org in alternativa a Microsoft Office, Firefox ad Internet Explorer, Thunderbird ad Outlook Express, The Gimp ad Adobe Photoshop, ecc...

Nel caso di OpenOffice.org la diffusione è limitata anche dalla politica Microsoft che non apre il formato dei documenti di Office, ovvero non viene resa pubblica la documentazione che spiega la struttura di questi formati (che si modificano anche nel tempo) e gli sviluppatori di software open source sono costretti a sforzi notevoli per raggiungere una compatibilità soddisfacente con essi oltre che a rincorrere nel tempo i loro cambiamenti. Lo stesso avviene con alcuni formati multimediali e protocolli di comunicazione chiusi, come per esempio quello del network di messaggistica istantanea MSN. Di fatto queste politiche portate avanti da chi detiene le quote di mercato più rilevanti ostacolano l'interoperabilità con i software prodotti da terze parti.

Ci sono d'altra parte diversi casi in cui il software libero ha una quota addirittura superiore a quella di qualsiasi altro concorrente: in questo caso l'esempio principale è Apache. Questo è un webserver, cioè un software in grado di gestire uno o più siti web. Apache è il webserver più diffuso in assoluto, ben più del suo inseguitore Microsoft IIS.

Qualcuno sostiene che il modello di sviluppo open source sia destinato col tempo a sostituire quasi completamente il modello tradizionale e addirittura alcuni ricercatori stanno cercando di capire quali sono i segreti di questo modello comunitario, che ha decretato il successo inaspettato di alcuni importantissimi software, allo scopo di trasferire questi vantaggi ad altri contesti oltre quello informatico. Forse Wikipedia si può considerare proprio un esperimento in questo senso: il trasferimento del modello libero e comunitario dalla programmazione informatica alla stesura di un'enciclopedia.
Solo il futuro potrà dirci se questo modello (non solo) economico è sostenibile sul lungo periodo ed è una rivoluzione appena scoppiata oppure se è solamente il prodotto di un'ondata di entusiasmo, in alcuni casi ideologico o accademico, dei programmatori, e che viene cavalcato da grandi società di software, ma destinato a spegnersi come un fuoco di paglia col passare degli anni.

Continua...

E pluribus Unix

Per quanto per la maggior parte dei quotidiani utenti di computer l'unico sistema operativo di cui si sospetti l'esistenza sia Microsoft Windows e forse MacOSX, questo mondo è pieno di alternative poco conosciute.

Per proseguire nel nostro viaggio avventuroso nell'informatica libera, proviamo a vedere più da vicino cosa ci offre il software libero in particolare nel settore dei sistemi operativi.
Il prodotto più noto fra questi è sicuramente GNU/Linux, ma è solo la punta dell'iceberg dell'infinita varietà disponibile. Un'altra famiglia di sistemi operativi liberi un po' meno nota è quella dei BSD e c'è perfino dell'altro in circolazione.


All'alba dell'informatica un paio di ricercatori iniziarono a sviluppare nei laboratori di una grande multinazionale delle telcomunicazioni, con un linguaggio di programmazione innovativo (il linguaggio C), un sistema operativo rivoluzionario e che avrebbe fatto la storia: Unix. Quei laboratori erano i Bell Labs e la multinazionale era la AT&T, all'epoca costantemente criticata dall'opinione pubblica per il suo stato di monopolista nel settore telefonico americano e in seguito smembrata in più compagnie.

Così bersagliata, la AT&T concesse l'uso di Unix e la possibilità di modificarlo alle università di tutto il mondo e lo sviluppo di questo sistema operativo fu favorito proprio dalle modifiche e le aggiunte apportate dalle migliori menti accademiche disponibili negli anni '70.

Con lo smembramento della monopolista AT&T nell'84, la condivisione gratuita del codice sorgente di Unix cessò e la ridimensionata AT&T iniziò la commercializzazione del sistema operativo. Nel frattempo l'Università di Berkeley sviluppò, a partire da una precedente versione di Unix, una propria derivazione libera chiamata BSD, mentre la AT&T proseguì per conto proprio lo sviluppo con codice chiuso rilasciando alla fine Unix System V.

Negli anni successivi nacquero molte derivazioni a codice chiuso, su specifica licenza di AT&T, di Unix. Fra le grandi società che fecero una propria versione ci sono IBM con AIX, Sun con SunOS/Solaris (oggi però parzialmente a sorgente aperto con OpenSolaris), Silicon Graphics con IRIX ecc...

Intanto BSD e le sue derivazioni ebbero guai legali, accusati di contenere codice Unix proprietario al proprio interno. E' in questo contesto che a partire dal '91 divenne rapidamente popolare un nuovo sistema operativo libero scritto questa volta da zero grazie all'intraprendenza dello studente finlandese Linus Torvalds, ma compatibile con gli standard e le caratteristiche salienti di Unix: Linux.

In realtà Linux è solo il cuore di un sistema operativo, ovvero un cosiddetto kernel. Tutto ciò che era necessario al funzionamento base del computer però era già pronto, sviluppato da una fondazione che si prefiggeva proprio lo scopo di creare dei cloni liberi dei software di utilità per Unix. Si tratta della Free Software Foundation (FSF), creata dal ricercatore del MIT Richard M. Stallman, che attraverso il progetto GNU (GNU is Not Unix) perseguiva già da anni questo obiettivo rilasciando programmi con licenza GPL, creata ad hoc dalla fondazione.

Alcune aziende e alcuni gruppi di sviluppatori iniziarono a distribuire Linux (anch'esso rilasciato con GPL) insieme ai programmi liberi del progetto GNU in quelle che si chiamano distribuzioni GNU/Linux. Queste, pur essendo basate per lo più su un comune gruppo di software e su kernel Linux, si sono differenziate per modalità di distribuzione e di manutenzione, modello di sviluppo, sponsorizzazione commerciale vs base comunitaria, sistema di pacchetti, programma di installazione, aggiornamento più o meno spinto dei software e così via. Oggi esistono centinaia di distribuzioni diverse di GNU/Linux, fra cui le più note sono Slackware, Debian, RedHat/Fedora, Suse, Ubuntu e così via, e contengono software di ogni genere, non più soltanto quelli del progetto GNU.

Da anni ormai anche i sistemi BSD hanno risolto le dispute legali sostituendo completamente le parti di codice di cui società commerciali rivendicavano i diritti, passati di mano più volte negli anni dalla AT&T ad altre società. Attualmente esistono molte derivazioni libere di BSD di altissima qualità. Le più diffuse sono FreeBSD, NetBSD e OpenBSD, tuttavia nessuna di queste si avvicina alla enorme popolarità ormai raggiunta da GNU/Linux.

Il mondo BSD, oltre alle differenze tecniche e nel modello di sviluppo molto meno "anarchico" e più rigidamente controllato da un ristretto gruppo di programmatori rispetto a GNU/Linux, ha anche delle differenze "filosofiche". Mentre GNU/Linux e la gran parte del software che con esso viene distribuito si basano sulla ben nota licenza GPL, i BSD si basano principalmente sull'omonima licenza che sta per Berkeley Software Distribution. Mentre la GPL obbliga chiunque a rilasciare sempre con licenza GPL eventuali software derivati e quindi a restituire alla comunità ciò che si prende da essa, la BSD non impone questa limitazione e consente di prendere un codice rilasciato con BSD per poi modificarlo e includerlo in un software proprietario senza rilasciarne il sorgente modificato. Non mancano esempi di colossi del settore che hanno attinto al codice BSD includendolo nel proprio software proprietario: Microsoft ha usato codice di FreeBSD nella parte di Windows che gestisce i protocolli per connettersi ad Internet e anche la Apple usa pesantemente per i Macintosh la tecnologia BSD nel proprio MacOSX (quest'ultimo è un vero e proprio sistema operativo di tipo Unix).

Continua...

domenica 5 luglio 2009

AI - Artificial Intelligence

La storia della AI ha un che di divertente, perché i primi risultati veri furono fantastici: macchine capaci di dare dimostrazioni di logica o di ottenere buoni voti in un corso di analisi matematica. Poi, però, cominciammo a realizzare macchine che fossero in grado di rispondere a domande su storie semplici come quelle che si trovano in un libro per bambini di sei anni. Non ci siamo ancora riusciti.

Marvin Minsky
Continua...