|
|
| << | < | > | >> |IndiceIntroduzione XI Capitolo 1 Open Source 1 1.1 Che cosa è l'Open Source? 1 Codice sorgente e compilato 3 Distribuzioni Linux 11 1.2 Definizione di Open Source 14 Ridistribuzione libera 15 Codice sorgente 15 Lavoro derivato 16 Lavoro originario 16 Non discriminazione contro persone 17 Non discriminazione contro usi 17 Licenza valida senza altri accordi 17 Non legata a un prodotto 18 Non proibisce altri software 18 Neutrale rispetto alla tecnologia o all'interfaccia 18 1.3 Licenze 19 GPL 19 LGPL 21 BSD Public License 22 Apache License 23 Mozilla Public License 23 Altre licenze 23 1.4 Caratteristiche dei progetti Open Source 24 Progetti comunitari 25 Supporto agli utenti 26 Tracciamento degli errori 27 Supporto agli sviluppatori 29 Modularità 34 Multi piattaforma 36 Capitolo 2 Storia 39 2.1 La situazione presente 39 L'hardware 40 Chi controlla il software dei PC 41 2.2 Storia dell'Open Source 43 Il progetto GNU 44 Linux 54 La cattedrale e il bazar 59 Il progetto Mozilla 60 L'Open Source 64 Il progetto OpenOffice.org 65 2.3 Riferimenti 66 Capitolo 3 Office 69 3.1 Open Source per l'ufficio 69 Software multi piattaforma 70 3.2 OpenOffice.org 72 Elaboratore di testi 75 Foglio elettronico 80 Presentazioni e grafica 84 Filtri di importazione 87 3.3 Gnome Office 89 Abiword 89 Gnumeric 92 Gimp 95 Dia 101 Altri programmi GNOME 104 3.4 Wine 104 3.5 Il problema dei formati 110 3.6 Riferimenti 114 Capitolo 4 Desktop 115 4.1 Ambienti desktop 115 4.2 KDE 120 Integrazione 121 Konqueror 124 Applicazioni 126 Koffice 127 4.3 Gnome 131 Applicazioni 133 Evolution 136 4.4 X11 139 Implementazioni 145 Cosa manca a X11 148 4.5 Considerazioni finali 152 4.6 Riferimenti 154 Capitolo 5 Linux 155 5.1 Importanza di Linux 155 5.2 Il kernel 156 Le versioni del kernel 157 Cosa c'è nel kernel? 161 5.3 Hardware 165 Architetture 165 I moduli 168 Input/Output 170 File system 172 Networking 176 Multimedia 179 5.4 Riferimenti 187 Capitolo 6 Database 189 6.1 Database relazionali 189 L'SQL 191 6.2 MySQL 196 SQL di MySQL 198 Tabelle MySQL 200 Replicazione 202 Amministrazione del database 203 Connettori 207 6.3 PostgreSQL 208 Ereditarietà 209 Viste, Foreign Key 211 Sotto Query, Trigger e Stored Procedure 214 6.4 Riferimenti 215 Capitolo 7 Internet 217 7.1 Gli standard Internet 217 I Protocolli 220 Stack di protocolli 222 Servizi di Internet 224 7.2 DNS 225 Bind 229 DjbDNS 230 7.3 Posta elettronica 232 7.4 Server SMTP 234 7.5 Client di E-mail 243 Evolution Mail 244 Mozilla Mail 246 7.6 Riferimenti 248 Capitolo 8 Web 249 8.1 Mozilla 249 Caratteristiche 252 Sviluppo Web 254 8.2 Apache 256 Moduli di Apache 257 8.3 Zope 262 L'interfaccia di gestione 263 I Database 265 8.4 Standard del Web 269 HTTP e HTML 269 XML 271 8.5 Riferimenti 281 Capitolo 9 Linguaggi 283 9.1 C/C++ 284 9.2 Java 287 9.3 Perl 289 Caratteristiche 292 Variabili e tipi di dato 293 Espressioni regolari 296 Libreria 298 9.4 PHP 300 Primi passi 301 Una calcolatrice 303 9.5 Python 306 Sequenze e dizionari 309 Controllo di flusso 313 Perché Python 316 9.6 Riferimenti 317 Indice analitico 319 |
| << | < | > | >> |Pagina 1Capitolo 1
Open Source
L'Open Source è un concetto nuovo e rivoluzionario venuto alla ribalta nel
mondo dell'informatica dopo l'avvento di Internet. Ma è rivoluzionario solo se
si considera lo stato corrente dell'informatica (descritto in dettaglio nel
Capitolo 2, la Storia dell'Open Source). Non è invece rivoluzionario se
confrontato con quanto avviene in altre discipline umane, più evolute, in cui
alla concorrenza commerciale si affiancano processi collaborativi che consentono
all'intero campo di evolvere e progredire.
1.1 Che cosa è l'Open Source? Per spiegare il concetto di Open Source, si può provare a paragonare il software alla conoscenza e l'informatica alla scienza in generale. Comunque, poiché il presente testo intende essere tecnico, si eviterà di approfondire questioni che sono di competenza dei filosofi. Pertanto si cercherà di capire cosa è il software solo per spiegare cosa sia l'Open Source e perché esso possa essere considerato un concetto pur rivoluzionario, ma per certi versi naturale. Un programma è solo una sequenza di istruzioni, informazione allo stato puro. Se si prendono queste informazioni, si memorizzano in un supporto magnetico e si danno in pasto a un computer, la macchina le eseguirà. Ovviamente queste informazioni devono essere scritte in un linguaggio che il computer comprende. Il computer, la "macchina generale dell'informazione" ne trarrà qualunque cosa sia generabile da queste istruzioni. Il software vi permetterà di scrivere la tesi di laurea, o di memorizzare l'agenda contatti, oppure vi terrà la contabilità o intratterrà vostro figlio con un gioco di azione. Se un programmatore scrive un programma, come un autore scrive un libro, o un musicista compone una musica, le leggi degli uomini riconoscono un diritto di autore di farci quello che vuole. Quindi potete decidere di vendere i vostri diritti di autore a un editore, e farvi stampare il libro, prendendovi una percentuale delle vendite; oppure incidere un disco e farlo arrivare sotto forma di oggetto ai vostri estimatori. In ogni caso il software è una forma di conoscenza, né più né meno della letteratura o la musica. Ma c'è un tipo di conoscenza che viene normalmente condiviso con tutti: la ricerca scientifica. Lo scienziato è una persona di talento che ha la capacità contemplativa di studiare i fenomeni della natura e di svelarli, tramite la formulazione di leggi e seguendo un metodo rigoroso noto come metodo scientifico. Ora, che uno scienziato di talento abbia la capacità di svelare i segreti della natura è una cosa che all'umanità fa molto comodo. Se si tratta di fisica, grazie alla conoscenza delle leggi dell'elettricità oggi abbiamo la luce in ogni casa, e molto altro. Se si tratta di matematica, i matematici hanno fornito il fondamento teorico rigoroso alla fisica; ancora sono le leggi della matematica che applicate all'economia governano molto spesso la vita quotidiana. Basti pensare alle addizioni e sottrazioni quando facciamo la spesa (cosa che ci sembra banale) o al calcolo degli interessi dei mutui che abbiamo acceso in banca (cosa che ci sembra meno banale - e che ci fa dubitare a volte del concetto di matematica come scienza esatta). Quindi, la ricerca scientifica è finanziata dall'umanità. Agli scienziati viene dato uno stipendio, viene loro consentito di insegnare, ma hanno un obbligo: fare ricerca e pubblicarla. Quindi esiste anche nella normale vita quotidiana la prassi di diffondere gratuitamente a tutti la conoscenza; e si tratta di conoscenza di cose importanti, come le leggi ultime di atomi e quark o i modi di curare le malattie. La ricerca scientifica viene considerata patrimonio dell'umanità e quindi diffusa a beneficio di tutti. Ma non è solo la scienza che trae giovamento da questa libera circolazione di idee e concetti. La prassi di diffondere informazioni è diffusa anche fuori dal mondo scientifico. Per esempio, è molto frequente anche nel mondo della tecnologia: lo fanno gli ingegneri e gli industriali. Basti pensare alle filettature delle viti: se si compra un bullone da un fornitore e un dado da un altro, esistono standard che garantiscono che la filettatura del dado sia compatibile con quella del bullone. Gli standard, che sono conoscenza condivisa, sono accessibili gratuitamente a tutti. Per la verità, l'acquisto del testo di uno standard costa, ma generalmente si tratta di una cifra molto bassa e accessibile, che serve a coprire i costi vivi del lavoro dei comitati di standardizzazione. Non si tratta in nessun caso di una royalty sull'uso dello standard, ovvero dell'acquistato della conoscenza. È invece un compenso per le spese vive di gestione della diffusione.
Quindi, in pratica, la conoscenza condivisa e diffusa gratuitamente non è
affatto una novità: ha le sue ragioni di essere, serve allo sviluppo dell'intera
industria. La novità è il fatto che questa conoscenza condivisa viene applicata
al mondo del software con l'Open Source.
Codice sorgente e compilato Prima di entrare in dettaglio sulle caratteristiche del software Open Source, occorre chiarire bene alcuni aspetti tecnici che sono di grande importanza nel discorso che seguirà. Sono concetti abbastanza tecnici e sono riferiti al modo con cui i programmi per computer vengono scritti. Poiché si tratta di software, e per di più di software che può essere modificato da altri programmatori (che non siano necessariamente quelli che lo hanno inizialmente realizzato) questi concetti sono importanti. Non ci si dilunga sull'architettura dei computer: è abbastanza noto che sono composti da una unità di elaborazione (nei personal computer il microprocessore), da una memoria di lavoro (la RAM) i cui contenuti persistono fintanto che il computer è acceso, e una memoria di massa, che mantiene le informazioni anche a computer spento. Per esempio i dischi rigidi e in generale le memorie di massa come nastri, dischi rimovibili ecc. Il software viene scritto specificamente per un certo tipo di unità di elaborazione: l'unica cosa che infatti il computer è in grado di eseguire è una sequenza di numeri che corrispondono a istruzioni, e che gli addetti (quelli che se lo ricordano ancora) definiscono "linguaggio macchina". Il linguaggio macchina non è cosa da uomini: comporre codice direttamente in linguaggio macchina (formato da codici numerici in sostanza) è semplicemente troppo dispendioso in termini di tempo perché gli attuali tecnici informatici possano dedicarvisi. Lo si faceva solo nei primi tempi dei computer, anche se ci sono ambiti in cui si scrive ancora oggi direttamente codice in linguaggio macchina. Normalmente il software viene invece scritto in uno dei cosiddetti linguaggi di programmazione ad alto livello. Uno dei linguaggi maggiormente utilizzati è il linguaggio C (o il suo derivato C++), ma ce ne sono molti altri. Il programmatore scrive il suo programma in questo linguaggio (o in un altro di sua scelta), producendo quello che viene detto codice sorgente, in inglese "source code". Ed è precisamente a questo "source" a cui si riferisce l' "Open Source" di cui stiamo trattando. Una volta che il programmatore ha scritto il codice, questo viene passato a un programma speciale, detto compilatore, il quale produce il linguaggio macchina per l'esecuzione del programma. Il compilatore generalmente opera molte trasformazioni su quello che il programmatore originariamente ha scritto. Non è semplice trasformare qualcosa che è stato scritto in un linguaggio comprensibile all'uomo in qualcosa di comprensibile a una macchina. Un'importante conseguenza di questa trasformazione è l'incomprensibilità (per l'uomo) del risultato. In pratica non è possibile risalire (o almeno non è una cosa semplice) al codice sorgente avendo solo il risultato finale, ossia il programma in linguaggio macchina. Generalmente si fa riferimento a questo risultato come binario o eseguibile. [...] La prassi di chi produce software con licenze proprietarie è non dare all'utente finale i sorgenti, ma solamente l'eseguibile, il sorgente compilato in codice binario. È molto importante rendersi conto che, non avendo i sorgenti, non è possibile generalmente capire e modificare un programma. Questo diventa un segreto di chi ha scritto il software. Uno dei capisaldi del movimento dell'Open Source è che vengano resi pubblici i codici sorgenti dei software. Non si tratta semplicemente di dare gli eseguibili gratuitamente perché facendo solo questo si consente all'utente di usare il programma, ma non se ne permette la modifica. Il punto è proprio diffondere la conoscenza e la comprensione del codice, di come cioè funziona il software. | << | < | > | >> |Pagina 141.2 Definizione di Open SourceAbbiamo chiarito alcuni degli aspetti più evidenti che caratterizzano il software Open Source. Adesso è il momento di cominciare a scendere in dettaglio, se vogliamo essere più precisi e formali, e vogliamo stabilire esattamente di cosa si tratta. Che cosa sia esattamente l'Open Source è stato formalizzato dalla OSI (Open Source Initiative), una società non a fini di lucro, il cui scopo sociale è accertare che alcune licenze del software siano conformi all'Open Source. Per definire che cosa sia l'Open Source, Bruce Perens, uno dei membri della OSI, e rinomato esperto nel campo dell'Open Source, ha scritto una serie di norme. Queste devono essere soddisfatte da una licenza perché il software possa essere definito "Open Source". In realtà Perens ha adattato, per esplicita ammissione, le linee guida del software libero del progetto Debian. Nota. Il progetto Debian ha realizzato una distribuzione Linux di grande diffusione, ma di tipo non commerciale, nello spirito degli stessi progetti Open Source. Si distingue dalle altre distribuzioni di maggior diffusione, che sono invece prodotte da aziende che le rivendono e sono quindi orientate a fornire ciò che i loro clienti si aspettano. Il progetto Debian è interamente gestito da volontari e ha come obiettivo quello di massimizzare l'uso del software libero senza imporre alcuna restrizione o orientamento nell'uso.
Le caratteristiche che sono state identificate per definire una licenza che
soddisfa il concetto di Open Source sono le seguenti.
Ridistribuzione libera Il primo criterio di una licenza Open Source è consentire una libera ridistribuzione del software. Se si riceve pertanto un software, questo deve poter essere ceduto a terzi senza che si debbano pagare royalty a chi ha fornito il software in primo luogo. Lo scopo di questo principio è fare sì che il software circoli, e venga condiviso dai suoi utenti. Da notare che le licenze Open Source non proibiscono di vendere il software, ma obbligano a consentire, a chi lo acquista, la ridistribuzione del software ad altri, per soldi o a titolo gratuito.
In mancanza di questo principio basilare, si tratterebbe di una
licenza commerciale come le altre. Limitando la circolazione del software,
prevarrebbe il principio di venderne più possibile invece di cercare di ottenere
benefici a lungo termine dalla libera circolazione del software stesso.
Codice sorgente Il secondo criterio di una licenza Open Source è che deve essere sempre fornito il codice sorgente non offuscato. In ogni caso, si deve consentire la ridistribuzione anche del codice sorgente. [...] Questo serve a consentire che il software possa essere modificato, migliorato, adattato ad altri usi (ovviamente dagli utenti che hanno sufficienti competenze per manipolarlo). Naturalmente il principio di ridistribuzione si deve applicare anche al codice sorgente. Ci sono casi in cui non è conveniente fornire obbligatoriamente il codice sorgente. Per esempio nel caso di distribuzione binari di consistente dimensione (come avviene quando si scaricano le immagini binarie di una distribuzione Linux da Internet). In questi casi si considera sufficiente che sia semplicemente accessibile anche il codice sorgente, via Internet, qualora l'utente lo voglia. | << | < | > | >> |Pagina 191.3 LicenzeVediamo adesso alcune delle licenze che sono state approvate dalla OSI. Nota. Il testo integrale delle licenze si può trovare nel sito della OSI: www.opensource.org. Non possiamo vederle tutte, pertanto ci limiteremo a vedere quelle maggiormente in uso. Faremo anche alcune osservazioni, perché non tutte le licenze sono esattamente uguali, in particolare per quanto riguarda l'uso commerciale di lavori derivati. Spesso succede che un prodotto distribuito sotto una licenza Open Source impedisca l'abbinamento a un prodotto commerciale. Per questo motivo, molti produttori di software Open Source offrono la possibilità di ottenere lo stesso software sotto un'altra licenza.
Per esempio, senza avere obblighi di pubblicare il lavoro derivato in Open
Source, dietro il pagamento di un compenso all'autore. Questa è una legittima e
diffusa fonte di guadagno per gli autori di software Open Source.
GPL La licenza più usata, la più radicale, la più complessa e dettagliata delle licenze Open Source è anche la prima a essere stata formulata: la licenza General Public License, con cui Richard Stallman rilascia tuttora il software del progetto GNU. Parleremo diffusamente di lui e del progetto GNU nel secondo capitolo. Lo scopo di questa licenza è, come recita testualmente, "garantire la libertà di condividere e modificare software libero, in modo che il software libero sia libero per tutti gli utenti". Da notare che non proibisce di vendere il software libero, o in generale il software coperto da questa licenza. Gli obblighi sono diversi. Il primo obbligo è dare i sorgenti completi del software a chiunque ne ottenga un lavoro derivato (per esempio un compilato); il secondo obbligo è rilasciare tutte le modifiche apportate a un lavoro coperto da GPL sotto licenza GPL. Tra gli altri obblighi previsti c'è dare il giusto riconoscimento all'autore, inserendo chiare indicazioni di chi ha realizzato il software; se si tratta di un lavoro derivato dal lavoro di un'altra persona, è necessario indicarlo. Bisogna anche tenere presente che la licenza prevede l'assoluta mancanza di garanzie. Il software viene fornito così come è, senza che ci siano garanzie implicite o esplicite, nemmeno di commerciabilità o di essere adatto a un particolare scopo. Nota. C'è da dire che simili restrizioni valgono comunemente anche per il software commerciale in circolazione. Il fatto è che il software non può essere in alcun modo garantito esente da errori. Questa è una restrizione dimostrata matematicamente. Non si possono fare teoremi sul comportamento del software e quindi non si può dimostrare alcunché. È stato dimostrato con il famoso "problema della fermata": non esiste un algoritmo in grado di dimostrare che un altro algoritmo avrà fine o no. Per corollario, non esistono algoritmi in grado di calcolare il comportamento di altri algoritmi (che non siano estremamente banali). Si dice a volte che la licenza GPL è come un virus legale. Infatti, se qualcuno usa software GPL per un suo prodotto, questo viene infettato dalla licenza stessa. Infatti non è possibile ridistribuire un software GPL se non si rilascia l'intero software sotto la licenza GPL. Un autore di software non è obbligato ad accettare le condizioni della GPL (poiché non ha firmato un accordo di licenza), ma in generale i software distribuiti sotto GPL non hanno altre autorizzazioni di uso che la licenza stessa e quindi, nell'atto di usare e di ridistribuire il software, si accettano implicitamente le condizioni di una licenza. Il meccanismo è abbastanza ingegnoso: in pratica, se qualcuno vuole trarre giovamento dal software rilasciato sotto GPL, che magari fa già molto di più di quello che serve, ma non tutto, è a un bivio. Può decidere di rifare tutto da capo (e tenersi i diritti del software), o di utilizzare modificato il software GPL. Ma per utilizzare il software GPL è obbligato a contribuire alla causa, rilasciando il lavoro derivato anche esso sotto GPL. Inizialmente il compilatore GNU C, e poi il sistema operativo Linux (entrambi rilasciati sotto GPL), hanno dimostrato l'efficacia di questo approccio. Nel caso del compilatore C, molti produttori di sistemi operativi anche proprietari si trovavano spesso nella necessità di dover dotare un nuovo sistema di un compilatore C. La scelta spesso era tra rifare tutto da capo, o estendere il compilatore GNU, già testato e notoriamente valido, aggiungendo un nuovo componente per soddisfare le necessità del nuovo sistema. Ed è stato così che, nel giro di pochi anni, il compilatore GNU è diventato di gran lunga tra i più ricchi di funzionalità, anche rispetto a quelli commerciali. Il compilatore GNU C è in grado di produrre codice per una grande quantità di sistemi e processori diversi.
Lo stesso circolo virtuoso si è innestato con Linux, con lo svi1uppo di
nuovi device driver e in generale di estensioni al sistema, che per poter essere
ridistribuite dovevano essere rilasciate in sorgente sotto GPL.
|