Uroš Mesojedec: Srž je v jedru
Dnevi po težko pričakovani nadgradnji najbolj priljubljenega operacijskega sistema niso prinesli kakšne hude novosti. Nekaj programja je z namestitvijo XP SP2 prenehalo delovati, Okna so postala nekoliko bolj škripajoča, varnost pa se, vsaj sodeč po zadnjih odkritih ranljivostih, verjetno ni povečala dovolj, da bi bili uporabniki zadovoljni s ceno nezdružljivosti, ki so jo morali plačati. Ali pa jo bodo šele morali. Microsoft je namreč najavil, da bo nepokrpana Okna dopuščal le še nekaj mesecev, potem pa bodo vsi uporabniki Oken XP prisiljeni namestiti SP2 ali pa za zmeraj ostati brez popravkov.
Razlog za prisiljeno namestitev SP2 je v naravi paketov popravkov, kot smo jih vajeni nekaj zadnjih let. Včasih se je nova, pokrpana različica programa preprosto označila "inženirsko", z desetinko ali dvema več v oznaki različice (pika v njej namreč ne pomeni nič drugega kot ameriško decimalno ločilo; no vsaj nekoč je bilo tako, danes je krpanja že toliko, da imamo pik v zapisu različice že cel kup). Potem je po Microsoftovem zgledu postalo modno popravljeno različico označiti kot "service pack". Sama Okna XP, ki so tako ali tako v resnici Okna NT 5.1, so z SP2 tako postala Okna NT 5.1.2. Torej imamo opravka z novo različico programa, še eno izdajo že tako obsežne družine. Vzdrževati popravke za tako veliko število različic Oken pa je prezahtevno celo za Microsoft. Aprila prihodnje leto bo tako uradno podprta le ena različica Oken XP, XPSP2.
Ne glede na naše (ne)navdušenje nad stalnim nameščanjem popravkov, bi bilo zanimivo ugotoviti, kje se pravzaprav skrivajo vzroki takšne ranljivosti operacijskih sistemov in kaj je pravzaprav mogoče storiti, da bo boljše. Oziroma, ali je z nameščanjem popravkov sploh mogoče zagotoviti varno in zanesljivo delovanje, če so vzroki težav mnogo globlji?
Kadar se pogovarjamo o učinkovitosti in zanesljivosti operacijskih sistemov, ne moremo mimo desetletja starega spora med zagovorniki monolitnih in mikro jeder. Najbolj razvpit tovrsten konflikt je znana debata profesorja Andreasa Tanenbauma in "učenca" Linusa Torvaldsa, ki sta v začetku devetdesetih let soočila svoje poglede na bodoči razvoj operacijskih sistemov. Tedaj se je zdelo gotovo, da je monolitnim jedrom odklenkalo in je prihodnost na strani mikro jeder. Danes lahko ugotovimo, da so prevladala hibridna jedra, ki jih najdemo tako v Oknih NT, Mac OS X in navsezadnje tudi v Linuxu, čeprav je ta še najbolj monoliten od vseh.
V srži se monolitna jedra razlikujejo od mikro jeder po tem, da vse svoje module in gonilnike izvajajo v enotnem pomnilniškem prostoru. Na drugi strani so mikro jedra sestavljena iz medsebojno povezanih, a neodvisnih strežnikov, ki skrbijo za temeljne storitve računalnika. Glavna prednost monolitnih jeder je hitrost, saj ni zamudnega izmenjevanja sporočil med neodvisnimi enotami, ampak se za komunikacijo med enotami jedra uporabljajo preprosti podprogramski klici. Iz tega posredno sledi tudi dejstvo, da je monolitna jedra laže načrtovati in po potrebah nadgrajevati. Ravno to je bil razlog, da se je Torvalds odločil za monolitno jedro Linuxa. Resnici na ljubo na začetku celo sam ni verjel v večji uspeh monolitnega jedra, saj je namigoval, da bo "igračkasti" Linux tako ali tako kasneje zamenjal "resni" HURD. Bistvena slabost monolitnih jeder je namreč potencialna nezanesljivost. Napaka v gonilniku tiskalnika, na primer, ki se izvaja v istem pomnilniškem prostoru kakor najbolj občutljiva koda operacijskega sistema, lahko sesuje celoten računalnik ali kako drugače ogrozi njegovo varnost.
Kar nas pripelje do Oken NT. Microsoft je za njihov razvoj najel skupino razvijalcev podjetja Digital, ki so imeli bogate izkušnje v razvoju zanesljivih operacijskih sistemov. Seveda so se odločili za mikro jedro in NT 3.5 je bil svojevrsten triumf modularne zasnove. Strojna oprema je bila modelirana z vmesnim slojem, nad njim je kraljevalo mikro jedro, ki je lahko gostilo številne podsisteme - win32 je bil le eden izmed njih -, ki so izvajali uporabniške programe. Prva Okna NT so prenesli na najrazličnejše strojne podlage, BillG pa je celo najavil, da bodo postali najbolj priljubljena različica Unixa.
Svet pa se vrti po svoje. Okna NT 4 so prinesla izvirni greh: obsežni del izoliranega podsistema win32, v glavnem njegov grafični del, se je preselil v samo jedro. Takšno ni bilo nič več mikro, hkrati pa je bilo veliko bolj izpostavljeno različnim zlorabam. Vse za ceno učinkovitosti. BillG je večkrat izjavil, da strank ne zanimajo hrošči, temveč zmožnosti. Danes verjetno misli drugače.
A v tej zgodbi manjka pomemben del. Zakaj že od vsega začetka monolitni Linux slovi po svoji varnosti, ko pa je "monolitizacija" Oken prinesla toliko težav? Del odgovora se skriva v gonilnikih. V monolitnih in večini hibridnih jeder se gonilniki izvajajo v skupnem prostoru z jedrom. Težava v gonilniku lahko pomeni katastrofo za sistem. Številna sesutja Oken so bila zmotno pripisana Microsoftu, velikokrat so bili krivi slabo napisani gonilniki (seveda posredna krivda leti tudi na tvorca operacijskega sistema, ki takšne grožnje dopušča). In zdravilo? Žal tipično Microsoftovo ranocelstvo namesto odprave vzrokov. Okna zdaj protestirajo, če gonilniki niso preverjeni (digitalno podpisani) in ustvarjajo obnovitvene točke, da je mogoče sistem povrniti v delujoče stanje. Linux na drugi strani zahteva za svoje jedro gonilnike v obliki izvirne kode. Le tako je mogoče ugotoviti njihovo skladnost in z ustreznim prevajanjem zagotoviti delovanje gonilnika v različnih jedrih, saj se ta znotraj še precej spreminjajo, da o različnih strojnih podlagah niti ne govorimo. Seveda so nekateri ponudniki strojne opreme vse prej kot navdušeni. Gonilniki nemalokrat skrivajo poslovne skrivnosti. Število gonilnikov, ki so na voljo le v prevedeni obliki, tako vztrajno narašča in vprašanje je, kako bo mogoče ohranjati zanesljivost delovanja pri sedanji, monolitni naravi jedra.
Drugi del odgovora pa je precej pomembnejši. Microsoft, zaradi želje po ohranjanju monopola, na jedro veže vedno večje število programskih storitev ("spletni brskalnik/branje e-pošte/predvajalnik videa/ je neločljivi del operacijskega sistema"), kar sicer samo po sebi s stališča zanesljivosti ne bi bilo velik problem. Večja težava je v tem, da morajo ti programi, ker pač izkoriščajo privilegirane storitve operacijskega sistema, najpogosteje teči pod računom, ki ima visoke, običajno administrativne pravice na sistemu. Zalega virusov, črvov in trojancev je tu našla izjemno gojišče. Linux, BSD, Mac OS X..., bolj ali manj monolitni, pa so ostali le jedra. Nad njimi je cel kup slojev, ki ne morejo ogroziti njihove zanesljivosti. Tudi uporabniški programi ne potrebujejo administrativnih pravic, da bi lahko služili svojemu namenu. Napaka v OpenOffice.org, na primer, tako še zdaleč ne more povzročiti takšnega razdejanja, kot ga lahko preprosta, zlonamerna skripta v Wordu.
Vprašanje je, kako bo mogoče ohranjati zanesljivost delovanja pri sedanji, monolitni naravi jedra.