La disponibilità del codice sorgente è una delle caratteristiche peculiari del software libero.
Ma perché è così importante? e soprattutto cosa è il codice sorgente?
Partiamo dal software, cercando di spiegare cosa sia in modo comprensibile anche a coloro che utilizzano il computer sporadicamente o semplicemente senza farsi troppe domande.
La prima cosa che mi vien da dire è che un Computer senza il software può essere usato al più come come un ingombrante soprammobile.
Del resto questo è un concetto che possiamo dare come acquisito praticamente da tutti ("ho installato un programma che..., ho scaricato un''app che..., si è rovinato il sistema operativo ed il pc non parte..."), ma cosa è esattamente il software?
Beh, semplificando possiamo dire che Il software è costituito dai programmi, ossia da sequenze di istruzioni che la C.P.U . (processore) di un computer è capace di eseguire per elaborare dei dati al fine (si spera) di risolvere un problema, un po' come fa un essere umano quando intraprende una serie di "azioni" per raggiungere un obiettivo.
Questa sequenza di azioni per un uomo può essere descritta attraverso il linguaggio naturale (es. "per fare un aereoplanino di carta piega il foglio così, poi ripiegalo cosà, etc.").
Un computer invece è molto (fortunatamente) più stupido: capisce ed elabora solo numeri (es. "prendi il numero 3, sommagli 1, salva il risultato qui, poi prendi un altro numero. etc.").
Come fa dunque il computer ad effettuare operazioni complesse come "scarica una fotografia dal cellulare, aumentane il contrasto, inviala per email, etc."? beh, lo fa nell'unico modo in cui è capace di farlo, tratta la fotografia come un insieme di numeri, effettua dei calcoli matematico/logici ottenendo un nuovo insieme di numeri che poi trasmette via Internet, etc. come mai sul monitor mi appare una fotografia se nel pc è "composta" di numeri? perché c'è un insieme di chip e circuiti che trasformano quei numeri in segnali luminosi! e la fotocamera? fa esattamente il contrario, cattura la luce e, grazie ad alcuni sensori, la trasforma in un insieme di numeri!
Bene... complichiamo le cose... anche i programmi sono costituiti da sequenze di numeri che codificano le operazioni elementari che la C.P.U. è in grado di eseguire. Questo sequenze numeriche sono in codice macchina, un "linguaggio" che definiamo di "basso livello", nel senso che è "nativo" della C.P.U. ma di difficile comprensione per l'uomo.
Un programmatore potrebbe teoricamente "scrivere" un programma anche usando direttamente il codice macchina ma è un'operazione complessa ed estremamente laboriosa. Nella quasi totalità dei casi si preferisce utilizzare un linguaggio di "alto livello", ossia molto vicino all'uomo (in un certo senso più simile al linguaggio parlato) ma incomprensibile alla C.P.U. di un computer.
Speciali programmi, detti compilatori, trasformano un file "di testo" contenente istruzioni di alto livello, che finalmente possiamo definire il CODICE SORGENTE, in un file "eseguibile" in codice macchina che la C.P.U. può finalmente interpretare.
Se scrivere un programma in codice macchina è complesso modificarne uno scritto (o compilato) da altri lo è ancora di più!
L'accesso al codice sorgente di un programma è dunque una condizione necessaria affinché possa essere studiato, modificato e migliorato!
Per chiarire meglio la cosa niente è più illuminante di un esempio, che tenterò di rendere anche un po' divertente:
Supponiamo dunque che un programmatore voglia scrivere un programma che "stampi" a video i numeri da 0 a 9 e che scelga di utilizzare il linguaggio "C" (esistono diversi linguaggi di alto/medio livello, il "C" è uno di questi), la prima cosa che farà è scrivere il codice sorgente del programma con un programma di elaborazione testi che salverà in un file di testo (es. somma.c):
Codice: Seleziona tutto
#include <stdio.h>
int main(int argc, char **argv) {
int i;
for(i=0;i<10;i++)
printf("%d\n", i);
}
(mi rendo conto che per chi non ha mai programmato può sembrare arabo, ma aspettate di vedere il codice macchina!)
A questo punto dovrà compilarlo (tralasciamo i dettagli) per ottenere un file eseguibile (che il compilatore chiamerà "somma" in Linux o "somma.exe/somma.com" in Windows).
Infine potrà verificare che il programma "somma" funzioni correttamente, avviandolo ad esempio con un doppio click e verificando che effettivamente appaiano a video i numeri da 0 a 9 .
Usando opportuni strumenti possiamo visualizzare il contenuto del file somma:
Codice: Seleziona tutto
0002020 255 37 2 12 32 0 104 0 0 0 0 233 224 255 255 255
0002040 255 37 250 11 32 0 104 1 0 0 0 233 208 255 255 255
0002060 255 37 242 11 32 0 104 2 0 0 0 233 192 255 255 255
0002100 49 237 73 137 209 94 72 137 226 72 131 228 240 80 84 73
0002120 199 192 224 5 64 0 72 199 193 112 5 64 0 72 199 199
0002140 45 5 64 0 232 183 255 255 255 244 102 15 31 68 0 0
0002160 184 71 16 96 0 85 72 45 64 16 96 0 72 131 248 14
0002200 72 137 229 119 2 93 195 184 0 0 0 0 72 133 192 116
0002220 244 93 191 64 16 96 0 255 224 15 31 128 0 0 0 0
0002240 184 64 16 96 0 85 72 45 64 16 96 0 72 193 248 3
0002260 72 137 229 72 137 194 72 193 234 63 72 1 208 72 209 248
0002300 117 2 93 195 186 0 0 0 0 72 133 210 116 244 93 72
0002320 137 198 191 64 16 96 0 255 226 15 31 128 0 0 0 0
0002340 128 61 89 11 32 0 0 117 17 85 72 137 229 232 126 255
0002360 255 255 93 198 5 70 11 32 0 1 243 195 15 31 64 0
0002400 72 131 61 24 9 32 0 0 116 30 184 0 0 0 0 72
0002420 133 192 116 20 85 191 32 14 96 0 72 137 229 255 208 93
0002440 233 123 255 255 255 15 31 0 233 115 255 255 255 85 72 137
0002460 229 72 131 236 32 137 125 236 72 137 117 224 199 69 252 0
0002500 0 0 0 235 24 139 69 252 137 198 191 244 5 64 0 184
...
E' evidente che "mettere mano al binario" è un'impresa ardua!
Ed ora divertiamoci un pò:
il nostro programmatore ci chiama: "sai ho scritto un programma bellissimo, stampa i numeri da 0 a 9!, se mi dai un euro te ne invio una copia", ci manda dunque il file "somma" per email assieme ad un file con un contratto (che noi ovviamente cestiniamo immediatamente senza leggere

Passiamo due tre giorni a lanciare il programma somma, a scattare "selfie" con i numeri da 0 a 9, clickiamo su "mi piace", twittiamo per farlo vedere agli amici, etc. insomma siamo felici!
(a dire il vero lo abbiamo anche passato il file sottobanco all'amico ed al "cuggino" dell'amico, dopo aver avuto solenne promessa e rassicurazione che lo avrebbero tenuto solo per se! abbiamo risparmiato ben due euro! siamo furbi!)
Passano diverse settimane e dopo aver lanciato il programma somma circa 8347 volte ci viene un'idea brillante!: "ho perso tutti i tombolini, quasi quasi uso il programma somma per stamparli, li ritaglio e risolvo il problema, umh... però mi servono i numeri da 1 a 90, come faccio?", dovrei modificare il programma... e qua... so NUMERI

In realtà (semplificando), non posso modificare il file eseguibile (purtroppo ho solo quello), è in codice macchina, è troppo difficile, complesso e soprattutto uno spreco eccessivo di tempo, se avessi il sorgente invece, mi basterebbe modificarlo e ricompilarlo!, tristi e sconsolati prendiamo il telefono...
->"Programmatore! come stai? senti mi modifichi il programma, ho bisogno che stampi i numeri da 1 a 90"
<-"No, non è tra le mie priorità, mi dispiace"
->"Ma io ti pago"
<-"Ho pianificato il rilascio di somma 2.0 per aprile 2018, lo venderò a 200 euro, puoi solo aspettare, forse stamperà quello che ti serve, forse no, funzionerà solo con Windows 12, se vuoi ti prenoto come primo della lista, sai cosa vuol dire che puoi essere il primo su facebook a dire - ho somma 2.0 !- ?"
->"Mi dai il sorgente?"
<-"Ma sei matto!"
->"Ho provato a disassemblarlo per vedere il codice macchi...."
<-"Non ti permettere manco di dirlo che ti denuncio... tutto ciò che non ti ho consentito esplicitamente di fare con il programma, quando te l'ho venduto, è implicitamente vietato, hai letto il contratto o l'hai cestinato senza nemmeno dargli uno sguardo?"
Questo più o meno è il mondo del software proprietario, distribuito tipicamente nel solo formato "eseguibile". Solo il produttore ha il CODICE SORGENTE e può dunque di fatto modificare e migliorare il programma, vantaggio che viene ovviamente sfruttato per monopolizzare il mercato ed imporre in modo unilaterale condizioni e limiti di utilizzo alll'utente finale.
Nel software libero, al contrario, il codice sorgente è sempre disponibile e possiamo studiarlo, migliorarlo e ridistribuirlo.
In molti casi è disponibile seguire addirittura lo sviluppo "passo-passo" in quanto i programmatori pubblicano sul proprio sito internet il nuovo codice sorgente quotidianamente!
Modifiche e miglioramenti non sono osteggiati, al contrario sono fortemente incentivati, spesso gli utenti finali e gli sviluppatori finiscono per fondersi in una "community" di supporto ove ognuno collabora, nei limiti del proprio tempo e delle proprie competenze, a migliorare sempre di più il progetto in un atmosfera gentile e disponibile a risolvere i problemi dei nuovi arrivati!
Se il programma "somma" fosse stato libero le cose sarebbero andate più o meno così:
->"Hi! Programmatore! come stai?"
<-"Spetta che metto giù il telefono, stavo chiacchierando con RMS"
->"Volevo dirti che ho modificato il programma somma, ora è parametrizzato, alla partenza ti chiede quanti numeri vuoi stampare e da quale vuoi partire, ti mando tutto x email!"
<-"Grazie! appena ho 10 minuti me lo guardo e lo pubblico subito sul sito web così chi vuole se lo compila e lo può già usare da subito, senza dover aspettare per forza la nuova release, se ci riesco metto in linea anche la correzione di un bug che mi ha segnalato Rudolf1357 e la traduzione in napoletano della documentazione che mi ha mandato Gennarino198!"