Il Codice Sorgente

Avatar utente
Niko
Amministratore
Messaggi: 105
Iscritto il: domenica 10 maggio 2015, 20:03

Il Codice Sorgente

Messaggioda Niko » mercoledì 20 maggio 2015, 8:13

Articolo di approfondimento per i "disinformatici", l'autore non assume alcuna responsabilità su dubbi, perplessità, incertezze, nausea, attacchi di panico e stati paranoici che potrebbero essere provocati durante la lettura e nelle successive 48 ore!!!

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 :mrgreen: ).

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 :mrgreen: !

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!"
Firma

Torna a “Cosa è e perchè vi invitiamo ad usarlo!”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite