Open Source vs Free Software | ALTRI capitoli | |||
La locuzione “free software” è spesso applicata a programmi i cui file eseguibili vengono rilasciati senza compenso alcuno, ma il cui codice sorgente non è liberamente disponibile: l'utente non ha la possibilità di leggerlo, di modificarlo, tantomeno di distribuirlo. La locuzione “open source”, invece, è spesso usata (o abusata) per indicare software il cui codice sorgente è disponibile, ma il cui utilizzo è in qualche modo limitato, impedendo all'utente di apportarvi delle modifiche oppure di redistribuirlo. La locuzione “open source”, in realtà, dovrebbe indicare tutto quel software il cui codice sorgente è liberamente disponibile e il cui utilizzo non prevede restrizione alcuna: all'utente è permesso di leggerlo, modificarlo e redistribuirlo. La Free Software Foundation (FSF), fondata nel 1985 da Richard Stallman, fornisce una chiara definizione di Software Libero: il software libero è il software che lascia all'utente la libertà di condividerlo, studiarlo e modificarlo. Nel 1984, Richard Stallman lanciò il progetto GNU (GNU is Not UNIX), il cui fine era la creazione di una versione free del sistema operativo Unix. La FSF creò un gran numero di componenti software utili al nuovo sistema operativo, inclusi un compilatore C (gcc), un impressionante editor di testo (emacs) e molti altri software di base. Ma non fu in grado di sviluppare un kernel del nuovo sistema operativo. Il kernel è il cuore di un sistema operativo, la parte software che si occupa di tutto l'hardware presente nel sistema. Senza un kernel, quindi, il sogno di un sistema operativo completamente libero non avrebbe mai potuto concretizzarsi. Nel 1991, Linus Torvalds iniziò a sviluppare un kernel, che chiamò “Linux”. Questo kernel poteva essere integrato con il materiale software prodotto dalla FSF, diventando un vero e proprio sistema operativo, liberamente modificabile. Normalmente, si utilizza la locuzione “Linux kernel” per indicare il solo kernel, ed il termine “Linux” per indicare l'intero pacchetto, composto dal kernel e dai vari programmi prodotti dalla FSF. Open Source / Closed Source Software L'espressione Open Source indica il codice sorgente di un programma. Il codice sorgente di un programma è il testo del codice, che verrà eseguito dal sistema operativo, scritto direttamente dal programmatore, in un linguaggio di programmazione facilmente comprensibile agli esseri umani, ma completamente inconprensibile per un processore. Quel codice sorgente, prima di poter essere inviato ad un processore, deve essere compilato. La compilazione è compito di uno speciale programma, chiamato compilatore, che trasforma le direttive contenute nel codice sorgente in direttive espresse in linguaggio macchina, le sole comprensibili per un processore, ma completamente incomprensibili per un essere umano. Quindi, il codice sorgente di un programma non può essere eseguito, ma può essere solo compilato. Però, può essere modificato. Il software il cui codice sorgente viene modificato dovrà essere ricompilato, per produrre il file eseguibile di un nuovo programma. Il software chiuso (Closed Source Software), invece, è tutto quel software di cui è possibile ottenere la sola versione già compilata, cioè il file eseguibile. Ma il file eseguibile è scritto in linguaggio macchina, difficilmente comprensibile agli esseri umani. Un utente può solo eseguire un software chiuso, senza essere in grado di leggerlo, né tantomento di modificarlo. Il solo che possa essere in grado di modificare un software chiuso è il programmatore che lo ha scritto, poichè lui ne detiene il codice sorgente. Il prototipo di un Closed Source Software è il sistema operativo Microsoft, con tutti i programmi in esso installati, mentre il prototipo di un software Open Source è Linux. È possibile risalire al codice sorgente di un Closed Source Software? Si dice che un sistema senza codice sorgente (Closed Source Software) sia molto più sicuro di un software Open Source, visto che un hacker non sarebbe in grado di leggerne il codice sorgente e di scovarne le vulnerabilità. Ma tutto ciò è vero solo in parte. Per il Closed Source Software, infatti, è possibile cercare il codice macchina (normalmente, in linguaggio assembly) in modo da poter cercare, all'interno di esso, eventuali pattern (sequenze di caratteri) che indichino la presenza di problemi relativi alla sicurezza. Inoltre, grazie ai decompilatori, è possibile ricostruire il codice sorgente a partire dal codice macchina. Ma allora, perchè tutta questa enfasi sul software open source, se è sufficiente un decompilatore per rendere aperto (leggibile) anche il software proprietario (Closed Source Software)? Questa piccola incomprensione deriva dal fatto che molti intendono il software Open Source come il software il cui codice sorgente è pubblico, mentre, in realtà, il software Open Source si differenzia dal software Closed Source per la sua assoluta disponibilità ad essere manipolato e modificato a piacimento dell'utente. Questa disponibilità è totalmente assente nel Closed Source Software, sia per volontà del proprietario del software, che, solitamente, ne vieta esplicitamente la manipolazione, sia per l'incapacità dei decompilatori di restituire il codice sorgente nella sua integrità. Durante la decompilazione, molti nomi vengono persi, per cui al posto di una variable chiamata:
il decompilatore ci restituirà un valore del tipo:
oppure, al posto di un metodo chiamato:
il decompilatore ci restituirà un valore del tipo:
Inoltre, i commenti e le informazioni di progettazione vengono perse: se tutto questo non è un problema per un hacker in cerca di vulnerabilità, può rivelarsi addirittura ostativo per chi desideri manipolare o aggiornare quel software. I decompilatori e i programmi di scansione dei codici binari possono essere utili per trovare delle falle da sfruttare per attaccare un programma, ma non mettono il programmatore nelle condizioni di operare sul programma, per aggiornarlo o modificarlo.
|
||||
Open Source vs Free Software | Le guide di .bit: contenuto originale |