Datorer är maskiner som körs på miljontals rader kod. Programmerare skriver kod på olika språk, men all denna kod har några grundläggande funktioner, oavsett vilket språk som används. Ett program har alltid två uppsättningar kod, källkod och objektkod. Källkod är det som skapas i förväg, det språk som programmeraren använder för att ge instruktioner till datorns kompilator för att få programmet att köra. Resultatet av att kompilatorn har kompilerat dessa källkodsinstruktioner kallas objektkod.
Termerna är intuitiva, eftersom källkoden är början eller källan till operationen, och objektkoden är det önskade resultatet, eller objektet, av hela övningen. Det lagras i filer som skapas av datorns kompilator och kan sedan bli det ultimata syftet som programmeraren avser.
När källkoden väl har kompilerats till filer kan den fortsätta till datorns processor, som utför de sista instruktionerna. Allmänt tillgängliga mjukvaruapplikationer är enorma samlingar av objektkod som inte kan ändras i grunden eftersom källkoden inte ingår. Det är som att ha lösningen på problemet men inte alla steg som används för att komma fram till det. Att ändra den här koden utan att ha källkoden kan vara en övning i frustration.
Denna flerstegsprocess behövs eftersom datorer endast kan utföra de instruktioner som är skrivna på maskinspråk. Det är det ultimata resultatet, som är exekverade versioner av objektkod. Så när en konsument får en mjukvaruapplikation får den konsumenten en exekverad version av källkoden som blev maskinspråk som omvandlades till det slutliga projektet.
Med tanke på den nuvarande tonvikten på öppen källkod släpps fler och fler applikationer med vägar in i källkoden. Flitiga programmerare och kodare kan komma åt den källkoden, ändra den för att möta deras behov och sedan skapa ny objektkod, som uppfyller ett syfte som kan vara annorlunda än det som de ursprungliga programmerarna avsåg.