|
|
|
| << | < | > | >> |Indice
Introduzione 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.
|