Quando si parla di software in realtà si sta parlando di qualcosa di astratto, un prodotto della mente umana concretizzato nella sequenza di istruzioni che lo costituisce. In genere, per qualunque opera, si identifica un proprietario, ovvero l’entità che ne detiene i diritti di autore o copyright (indicato dal simbolo ©), che può essere colui che ha effettivamente realizzato l’opera o altri che magari ha acquisito tali diritti tramite la sottoscrizione di un apposito contratto. Le leggi sul diritto di autore stabiliscono quali sono i diritti del detentore del copyright (il proprietario) e di chi utilizza il prodotto (utente).
Per il software è stato inoltre introdotto un contratto, non sottoscritto direttamente dall’utente, che generalmente limita ulteriormente i diritti dell’utente stesso. A tale contratto si fa riferimento in genere con il termine licenza. Pertanto, prima di utilizzare un software è opportuno leggere la relativa licenza per conoscere i termini di utilizzo del software stesso. Il software, acquisito gratuitamente o a pagamento, è utilizzabile dall’utente soltanto secondo quanto previsto dalle indicazioni contenute nella relativa licenza.
Poiché il software una volta in linguaggio macchina1 è direttamente comprensibile all’elaboratore, ma non è intellegibile dagli esseri umani, in vari Paesi del mondo le leggi che tutelano il diritto di autore relativo al software consentono la distribuzione del software soltanto in linguaggio macchina, cioè il codice eseguibile, e considerano illecito qualunque tentativo di ricondursi al codice sorgente dall’analisi del codice eseguibile.
Molti Paesi, come gli Stati Uniti, prevedono anche la possibilità di brevettare gli algoritmi, rendendo così illecito l’uso di uno stesso algoritmo da parte di altri programmatori, a meno che non sia esplicitamente autorizzato dal detentore del brevetto. Immaginiamoci cosa succederebbe se qualcuno decidesse di brevettare un algoritmo di ordinamento come il bubble sort, merge sort, quick sort o l’ordinamento “accademico”. Nessun programmatore potrebbe più ordinare gli elementi di un vettore, se non dietro il pagamento di una royalty a chi detiene i diritti del brevetto.
Poiché da tempo i computer sono utilizzati quasi ovunque nella vita quotidiana (industria, uffici, scuola, casa, ...) ed il loro funzionamento è regolato dal software, il software stesso viene ad evere anche una funzione sociale. Infatti, più agevole rende l’interazione degli utenti con l’hardware, più migliora la qualità della vita degli utenti stessi. Inoltre, sempre più innovazioni vengono introdotte nel campo dell’informatica, come in qualunque altro campo in cui la ricerca è molto. Per permettere un più veloce ed agevole sviluppo scientifico-tecnologico è opportuna la condivisione della conoscenza, in maniera tale che gli addetti ai lavori possano trarre vantaggi dall’esperienza di tutti gli altri. L’umanità intera avrebbe potuto giovare delle innovazioni tecnologiche odierne se, ad esempio, la teoria della relatività fosse stata tenuta segreta tra un ridottissimo numero di persone?