Vývojáři tvoří počítačové programy tak, že píší tzv. zdrojový kód v některém z programovacích jazyků. Je to jakýsi předpis, recept, kterým programátor říká počítači, co má dělat.
Zde je ukázka zdrojového kódu velmi jednoduchého programu v jazyce C++:
# include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
cout << "Chcete slyšet vtip?" << endl;
char odpoved = cin.get();
cin.get();
if (odpoved == 'a') {
cout
<< "Lidé se dělí do 10 skupin." << endl
<< "Na ty, kteří rozumějí binárnímu kódu, "
<< "a na ty ostatní." << endl;
return 0;
} else if (odpoved == 'n') {
cout << "Dobře, tak ne." << endl;
return 0;
} else {
cout
<< "Nerozumím odpovědi "
<< "– očekávám „ano“ nebo „ne“." << endl;
return 1;
}
}
Tento program položí uživateli otázku a zareaguje na jeho odpověď.
Zdrojovému kódu rozumí člověk a může ho upravovat a vylepšovat, ale program v tomto tvaru není možné přímo vykonat procesorem – spustit. Před spuštěním je program potřeba tzv. zkompilovat – přeložit tak, aby mu rozuměl počítač. Tentýž program bude ve zkompilovaném – binárním – tvaru vypadat takto:
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| 00000010 02 00 3e 00 01 00 00 00 80 07 40 00 00 00 00 00 |..>.......@.....| 00000020 40 00 00 00 00 00 00 00 a8 11 00 00 00 00 00 00 |@...............| 00000030 00 00 00 00 40 00 38 00 09 00 40 00 1e 00 1b 00 |....@.8...@.....| 00000040 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00 |........@.......| 00000050 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00 |@.@.....@.@.....| 00000060 f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00 |................| 00000070 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 |................| 00000080 38 02 00 00 00 00 00 00 38 02 40 00 00 00 00 00 |8.......8.@.....| 00000090 38 02 40 00 00 00 00 00 1c 00 00 00 00 00 00 00 |8.@.............| … zkráceno … 00002330 73 5f 73 74 61 72 74 00 5f 65 6e 64 00 5f 5a 4e |s_start._end._ZN| 00002340 53 6f 6c 73 45 50 46 52 53 6f 53 5f 45 40 40 47 |SolsEPFRSoS_E@@G| 00002350 4c 49 42 43 58 58 5f 33 2e 34 00 5f 5a 53 74 34 |LIBCXX_3.4._ZSt4| 00002360 65 6e 64 6c 49 63 53 74 31 31 63 68 61 72 5f 74 |endlIcSt11char_t| 00002370 72 61 69 74 73 49 63 45 45 52 53 74 31 33 62 61 |raitsIcEERSt13ba| 00002380 73 69 63 5f 6f 73 74 72 65 61 6d 49 54 5f 54 30 |sic_ostreamIT_T0| 00002390 5f 45 53 36 5f 40 40 47 4c 49 42 43 58 58 5f 33 |_ES6_@@GLIBCXX_3| 000023a0 2e 34 00 5f 65 64 61 74 61 00 6d 61 69 6e 00 5f |.4._edata.main._| 000023b0 69 6e 69 74 00 |init.|
Zkompilované programy je velmi obtížné (až nemožné) upravovat. Pokud tedy budete chtít v programu opravit nějakou chybu nebo přidat novou funkci, potřebujete jeho zdrojový kód.
Kromě toho má binární tvar programů ještě další nevýhodu: v tom „rozsypaném čaji“ se může snadno skrývat záměrně chybný kód, který škodí uživateli – např. smaže jeho data nebo ukradne důvěrné informace.
Rada na závěr: vždy požadujte zdrojové kódy od programů, které používáte!