Uporabniška programska oprema omogoča računalniku, da stori kaj koristnega za uporabnika. Sistemska programska oprema pa omogoča računalniku, da sploh živi. Glavni del sistemske programske opreme je sam operacijski sistem oz. njegovo jedro (kernel). Poleg tega pa spada v skupino sistemske programske opreme še kup drugih programov, brez katerih bi računalnik le životaril.

Ukvarjali se bomo s sistemskim programiranjem na sistemu Linux (v jeziku C). Pri tem bomo obravnavali delo z datotekami, procese, semaforje, signale, različne oblike medprocesne komunikacije in vtičnice (sockets), ki nam omogočajo, da napišemo preprost TCP strežnik in odjemalca. Ukvarjali se bomo tudi s praktičnimi znanji, kot so uporaba orodij make, gcc, ipd. Videli bomo tudi, kako prevajamo kodo v vgrajenih (embedded) sistemih, ki so danes najštevilčnejši računalniki.

Spoznali bomo tudi, kako komunicirata strojna in programska oprema. Za povprečnega uporabnika računalnika sicer ni pomembno, kdo ali kaj skrbi za to, da naprave, ki so priključene na računalnik (monitor, disk, miška, tipkovnica, tiskalnik, omrežna povezava, USB disk itd.), lahko nemoteno delujejo. Ker pa vi niste oz. ne nameravate biti povprečen uporabnik, boste spoznali, kako za to skrbijo programi, ki jih imenujemo gonilniki. Brez teh bi bili računalniki popolnoma neuporabne škatle. Sistemska programska oprema omogoča programerju, da izdeluje aplikacije, ne da bi poznal vse "umazane" podrobnosti konkretnega računalnika, še posebno njegovih zunanjih naprav. Že vse različne strojne opreme je toliko, da je operacijski sistem računalnika ne more poznati. Gonilnik je npr. neke vrste prevajalec, ki govori tako jezik naprave kot jezik računalnika. Spoznali bomo, kako pišemo, prevajamo in nalagamo preproste primere gonilnikov (na PC in na Raspberry Pi).

Predmetno delo vključuje tedenske naloge in končni izpit (programerska naloga + vprašanja iz teorije).