Windows - Određena količina Asemblera za x86, odnedavno i za ARM platformu (u formi Windows 8 RT), a u prošlosti za Itanium, DEC Alpha, MIPS i PowerPC. Programski jezik pored klasičnog assembly jezika koji je korišćen za većinu koda u Windowsu je
C i C++.
Linux - Asembler za mnoooge procesorske platforme, i naravno
C, u kome je Linux kernel napisan. Linus i dalje smatra da je C jedini dobar kandidat za Linux kernel. Ostatak GNU alata što čini Linux je pisan u raznoraznim jezicima.
MAC - MacOS classic je pisan u (naravno) Asembleru za Motorola 68000 procesore i PowerPC, a navodno su verzije do System 7 bile pisane u
Pascalu. Kasnije se ubacio u priču
C. OSX je u biti Unix ispod haube ("Darwin", tačnije), a on je takođe (kao i Linux) pisan u
C, dok je ostatak OSX-a što ide preko njega pisan u
C, C++ i Objective C.
Android - U pitanju je običan Linux, samo sa Google-ovim izmenama u kernelu i sopstvenim grafičkim okruženjem koje je pisano u
C/C++ i javi (što nije teoretski deo samog OS-a).
Dakle, kao što se može primetiti, uvek se počinje od Asemblera. Asembler jeste, tako reći, neka vrsta programskog jezika, ali on se razlikuje od platforme do platforme. On je najtanja stvar što te razdvaja od procesora, a da ga možeš pročitati. Nećeš isti ASM kod pisati za smartphone koji radi sa ARM procesorom, i za klasičan kućni PC koji radi na x86 platformi. Sa asemblerskim komandama se direktno kontroliše procesor, i tu nema laganih metoda za jednostavan i brz rad, ali je potreban kako bi se podesio da procesor radi u režimu koji treba, da se (ako je dostupno) uključi memorijski kontroler, da se pokrenu neke hardverske komponente i sl. Sve se to može uraditi iz C-a, jer - bilo mi pisali u ASM ili u C, sve se svakako pretvara u mašinski kod, u gomilu nula i jedinica koji srljaju ka procesoru, ali opet će se morati pisati asemblerske komande u okviru C koda, tako da je na kraju sve isto, ili čak komplikovanije. Zbog toga se uglavnom počne sa ASM, pa tek kada se pokrene sistem onako kako ga mi želimo, možemo nastaviti i dalje da pišemo u asembleru, ili da nastavimo na nekom višem programskom jeziku kao što je to C. Razlog? U višim programskim jezicima se ne možemo izgubiti u našem kodu tako lako, možemo lakše implementirati ideje i algoritme, a kompajler koji pretvara naš kod u mašinski kod će lepo da optimizuje ono što smo napisali za procesor na kojem radimo.
Zašto baš C, C++, Pascal, i sl.? Pa, dotični jezici imaju mogućnost direktnog pisanja u memoriju, izvršavanja ASM komadi unutar sebe, korišćenja pokazivača, i kompajliraju se u mašinski kod, a ne u neki bytecode ili pseudokod, niti se interpretiraju. Ima još par jezika koji imaju slične mogućnosti, ali mogu sebi dati slobodu da kažem da nema OS developmenta danas ako ne znaš C (a ako znaš C dovoljno da napišeš OS, uglavnom ćeš znati i C++). Basic, Fortran, Cobol, C#, D, Python, Ruby, PHP, Java, itd. nemaju te mogućnosti, već služe za pravljenje aplikacija koje rade na samom OSu.
Koliko ljudi učestvuje na pravljenju OS-a?
Mnogo.
Pre je bilo dovoljno da Bill Gates, Paul Allen i jedan mali računarčić na stolu imaju seansu par nedelja, ili da Steve Wozniak malo pusti bradu da raste još više sa svojim drugarima dok Jobs gleda iza i češe lobanju, ili da jedan mali geek iz Seattle-a ima malo više vremena u svojoj firmici... Sada je malo drugačija priča. Tu je mnogo više različitog hardvera, različitih platformi, dokumentacije, zahteva za optimizacijom. Potreban je API. Potrebni su drajveri. Potrebna je kompatibilnost. Linus je slučajno uhvatio poslednji voz i poprilično je rmbao da bi napravio svoj klon Minixa, i nije ni mislio da će se koristiti u ovolikoj količini, ali je moralo mnogo njih da se uključi u priču da bi bio upotrebljavan danas i moralo je mnogo vode Dunavom proteći da bi ljudi primetili da Linux postoji kako bi pisali programe i drajvere za njega. Plus u njegovoj priči je što je u pitanju *nix sistem, pa je bilo mnogo lakše portovati programe, i njegov OS je bio za dž.
Ako želiš da napraviš samo mali OS sa par funkcija, dovoljan si samo ti... u suprotnom, ako želiš sam da napraviš novi Windows, zaboravi. Nije problem napisati kernel i pokrenuti računar, problem je sve ostalo. Windows, Linux i ostali nisu samo operativni sistemi, u pitanju su
ekosistemi.
A man is smart. People are stupid.