Računala su strojevi koji rade na milijunima linija koda. Programeri pišu kod na raznim jezicima, ali sav taj kod ima neke osnovne značajke, bez obzira koji jezik se koristi. Program uvijek ima dva skupa koda, izvorni kod i objektni kod. Izvorni kod je ono što je stvoreno unaprijed, jezik koji programer koristi za davanje uputa kompajleru računala kako bi se program pokrenuo. Rezultat kompajlera koji kompajlira ove upute izvornog koda naziva se objektni kod.
Pojmovi su intuitivni, jer je izvorni kod početak ili izvor operacije, a objektni kod je željeni rezultat ili objekt cijele vježbe. Pohranjuje se u datoteke koje stvara kompajler računala i onda može postati krajnji cilj koji je programer zamislio.
Nakon što je izvorni kod preveden u datoteke, može se nastaviti do procesora računala, koji izvršava završne upute. Uobičajeno dostupne softverske aplikacije ogromne su zbirke objektnog koda koji se ne može iz temelja mijenjati jer izvorni kod nije uključen. To je kao da imate rješenje problema, ali ne koriste se svi koraci da se dođe do njega. Promjena ovog koda bez izvornog koda može biti frustrativna.
Ovaj proces u više koraka je potreban jer računala mogu izvršiti samo one instrukcije koje su napisane u strojnom jeziku. To je konačni rezultat, koji se izvršavaju verzije objektnog koda. Dakle, kada potrošač dobije softversku aplikaciju, taj potrošač dobiva izvršenu verziju izvornog koda koji je postao strojni jezik koji je transformiran u konačni projekt.
S obzirom na trenutni naglasak na otvorenom izvornom kodu, sve više i više aplikacija se objavljuje s pristupima izvornom kodu. Marljivi programeri i koderi mogu pristupiti tom izvornom kodu, promijeniti ga kako bi zadovoljili svoje potrebe, a zatim stvoriti novi objektni kod, koji ispunjava svrhu koja može biti drugačija od one koju su namjeravali izvorni programeri.