I computer sono macchine che girano su milioni di righe di codice. I programmatori scrivono codice in varie lingue, ma tutto questo codice ha alcune funzionalità di base, indipendentemente dalla lingua utilizzata. Un programma ha sempre due serie di codice, codice sorgente e codice oggetto. Il codice sorgente è ciò che viene creato in anticipo, il linguaggio che il programmatore usa per dare istruzioni al compilatore del computer per far funzionare il programma. Il risultato del compilatore che ha compilato queste istruzioni del codice sorgente è chiamato codice oggetto.
I termini sono intuitivi, in quanto il codice sorgente è l’inizio, o sorgente, dell’operazione, e il codice oggetto è il risultato desiderato, o oggetto, dell’intero esercizio. È memorizzato in file creati dal compilatore del computer e può quindi diventare il fine ultimo previsto dal programmatore.
Una volta che il codice sorgente è stato compilato in file, può quindi continuare al processore del computer, che esegue le istruzioni finali. Le applicazioni software comunemente disponibili sono enormi raccolte di codice oggetto che non possono essere modificate fondamentalmente poiché il codice sorgente non è incluso. È come avere la soluzione al problema ma non tutti i passaggi utilizzati per arrivarci. Cambiare questo codice senza avere il codice sorgente può essere un esercizio di frustrazione.
Questo processo a più fasi è necessario perché i computer possono eseguire solo le istruzioni scritte in linguaggio macchina. Questo è il risultato finale, ovvero le versioni eseguite del codice oggetto. Quindi, quando un consumatore ottiene un’applicazione software, quel consumatore riceve una versione eseguita del codice sorgente che è diventato un linguaggio macchina che è stato trasformato nel progetto finale.
Data l’attuale enfasi sul codice open source, vengono rilasciate sempre più applicazioni con vie nel codice sorgente. Programmatori e programmatori diligenti possono accedere a quel codice sorgente, modificarlo per soddisfare le proprie esigenze e quindi creare un nuovo codice oggetto, che soddisfa uno scopo che può essere diverso da quello previsto dai programmatori originali.