Verwijderd schreef op 26 augustus 2004 @ 16:45:
[...]
Even buiten de algemene lompheid van deze opmerking wil ik nog even opmerken dat het
zo ongelofelijk veel bloat zou toevoegen aan de kernel als er een aparte sandbox space voor drivers zou komen, dat niemand Linux meer zou willen gebruiken. Ken je feiten.
Een driver hoort nou eenmaal niet als doel te hebben de kernel te crashen. Als je computer al zo ver gekraakt was, dan ligt dat
echt niet aan de kernel; je security lek ligt dan ergens anders.
Voor alle mensen die wél de hele draad hebben gelezen moet het inmiddels wel duidelijk zijn dan ik níet voorstel de linux kernel aan te passen, aangezien ik me heel goed realiseer dat het huidige design zich daar niet voor leent.
We hebben het helemaal niet over security, we hebben het over stabiliteit. Ik las laatst dat de linux kernel voor 50% uit driver code bestaat, en dat daar 85% van de bugs in wordt gevonden. Een driver heeft óók niet als doel bij alle kritieke resources van je systeem te kunnen. Een driver heeft tot doel een generieke interface naar een onderliggend stuk hardware aan te bieden. Aangezien daar slechts een beetje geheugen, wat processor tijd en een
dunne interface naar wat kritieke system-resources en -calls voor nodig is zie ik het als een stabiliteits risico als een OS een hoop ongerelateerde processen bij elkaar in het priviliged geheugen flikkert en zegt: "doe maar wat je wilt.". En tenzij je nu beweert dat de linux aanpak zaligmakend is vind ik dat ik dat kan zeggen zonder daarmee blijk te geven van een gebrek aan respect voor de ontwerpers van linux.
Feit blijft gewoon dat veel drivers geschreven worden door b.v. hardware designers of de toch iets minder goden onder de kernel hackers. Ook nog steeds veel respect voor hoor, maar dat is toch geen code die ik graag naast een scheduler, virtual memory manager of filesystem zie staan in priveliged geheugen. Bovendien zijn drivers ook stukken code die je haast alleen door vallen en opstaan stabiel krijgt omdat er vaak vrijwel geen algoritmiek in zit, maar alleen het op de juiste momenten schrijven van de juiste magic numbers naar de juiste poorten; een verificatie nachtmerrie.
Een micro kernel lost in theorie dat soort problemen op door afgezien van een hele dunne abstractielaag alles in user space te doen. Natuurlijk krijg je daar een ander stel problemen voor terug en één ervan is een performance penalty. In research omgevingen wordt er nog steeds vrij veel aandacht aan microkernels gegeven en dat heeft erin geresulteerd dat er best heel wat vooruitgang is geboekt sinds de legendarische discussie tussen Torvalds en Tannenbaum. Er is nog steeds wel een een verschil in performance, maar als je b.v. naar L4 kijkt, dan is daar toch een knap staaltje werk geleverd.
Zo'n microkernel is eigenlijk puur overhead, omdat alle echte functionaliteit gestript en naar userspace verbannen is. Je moet dus zorgen dat die dunne abstractie laag erg efficient is, want daarnaast verlies je ook nog het één en ander op de interface tussen kernel en user space. Aan de ander kant, hoeveel tijd spendeert een gemiddeld systeem nou in systemcalls, een paar procent hooguit. Als een GUI ineens 5 keer zoveel resources vereist zonder significante functionaliteit toe te voegen zie je iedereen kwijlen over de eyecandy, maar een fundamenteel stabieler systeem dat niet een paar maar b.v 10% processor tijd gebruikt wordt als niet realistisch gezien. En dat terwijl die 10% over een paar jaar ook weer een paar procent is.
Helaas maakt zo'n inspanning in de huidige OS markt vrijwel geen kans omdat het al moeilijk genoeg is om één alternatief voor Windows een beetje aan de man te krijgen. Maar ik geloof persoonlijk niet dat over nog eens 10 - 15 jaar kernels nog steeds geschreven worden met dit soort, toch gehoorlijk grote, inherente stabiliteits risico's.
Anyway, deze monolitic vs micro discussie is al zó vaak gevoerd en wij gaan daar net als onze illustere voorgangers niet uitkomen. Maar dat geeft niks.
He who knows only his own side of the case knows little of that.