Arvutid on masinad, mis töötavad miljonitel koodiridadel. Programmeerijad kirjutavad koodi erinevates keeltes, kuid kogu sellel koodil on mõned põhifunktsioonid, olenemata kasutatavast keelest. Programmil on alati kaks koodikomplekti, lähtekood ja objektikood. Lähtekood on see, mis on eelnevalt loodud, keel, mida programmeerija kasutab arvuti kompilaatorile juhiste andmiseks, et programm käivitada. Tulemust, kui kompilaator kompileerib need lähtekoodi juhised, nimetatakse objektkoodiks.
Terminid on intuitiivsed, kuna lähtekood on operatsiooni algus ehk allikas ja objektikood on kogu harjutuse soovitud tulemus või objekt. See salvestatakse failidesse, mille on loonud arvuti kompilaator ja millest võib seejärel saada programmeerija kavandatud ülim eesmärk.
Kui lähtekood on failideks kompileeritud, saab see jätkata arvuti protsessoriga, mis täidab viimased juhised. Tavaliselt saadaolevad tarkvararakendused on tohutud objektikoodikogud, mida ei saa põhimõtteliselt muuta, kuna lähtekoodi pole kaasas. See on nagu probleemile lahendus, kuid mitte kõik selleni jõudmiseks kasutatud sammud. Selle koodi muutmine ilma lähtekoodi omamata võib olla pettumus.
See mitmeastmeline protsess on vajalik, kuna arvutid saavad täita ainult neid käske, mis on kirjutatud masinkeeles. See on lõpptulemus, mis on objektikoodi käivitatud versioonid. Seega, kui tarbija saab tarkvararakenduse, saab see tarbija käivitatud versiooni lähtekoodist, millest sai masinkeel, mis muudeti lõplikuks projektiks.
Arvestades praegust rõhuasetust avatud lähtekoodile, avaldatakse üha rohkem rakendusi, mis on seotud lähtekoodiga. Usinad programmeerijad ja kodeerijad saavad sellele lähtekoodile juurde pääseda, seda vastavalt oma vajadustele muuta ja seejärel luua uue objektkoodi, mis täidab eesmärki, mis võib erineda algsete programmeerijate kavandatust.