Monolitikus vs mikrokernel

Érdekes dolog ez a programozás, főleg ha az ember sok mindent maga talál ki, de aztán rájön, hogy mások már előtte ezt kitalálták. Tipikus dolog ez akkor, amikor valaki úgy mond nem tartja be a tanulási szabályokat. Én soha az életben nem tanultam fél évvel ezelőttig iskolában programozni, hanem mindent - és itt szó szerint kell érteni a mindent - internetről tanultam meg. Első programom, nem hello world vagy bármi volt, hanem egy Bash script, ami automatizálta a Wine forrásból való telepítését Ubuntu-ra. :)

A lényeg ebben az, hogy ugye most már egy ideje írom a LaSyS-Engine-t,, ami immár az 5. fő verziójánál tart. Anno, amikor elkezdtem úgymond megtervezni a PHP motorom alapjait, elgondolkoztam azon, hogyan kell(ene) megoldani a modularitást. Tudomon kívül a microkernel vs monolitikus kernel problémája jött fel a fejemben. Ez azért izgalmas, mert a Linux ugyebár monolitikus kernelt használ, a Minix pedig microkernelt. A kettő között burkoltan annyi különbség van (ami nekem úgymond PHP-ban számít), hogy a monolitikus esetén a kernel modulok egy úgynevezett kerneltérben futnak, ahol elérik a kernel globális változóit, míg a mikrokernel esetén van egy mag és a mag köré épülnek a modulok, amik megadott szabványokon keresztül cserélnek információt egymással.

Amikor elkezdtem írni a LaSyS-Engine 5-ös változatát, akkor a Linux kernel felépítése lebegett a szemem előtt, illetve a Microsoft féle megoldás, hogy ha összeomlik pl. a VGA driver, akkor a rendszer talpon marad, csak egy kis időre lebénul a GUI, aztán újraéled. Ebből kifolyólag, az én kis "kernelem", mikrokernel szerű felépítésűre sikerült, teljesen tudatlanul, ezelőtt sose tudtam, hogy ilyesmit csinál valaki (nem tartottam nagy durranásnak). A célom az volt, hogy a rendszer legyen moduláris, ugyanakkor ha az egyik modul felmondja a szolgálatot, akkor a többi zavartalanul tudjon működni utána. Azonban - nem meglepő módon - amit Linus ír, hogy miért nem céleszerű életszerű helyzetben mikrokernelt használni, az nálam is úgymond felütötte a fejét. A modulok kommunikációs protokollját folyamatosan karban kell tartani, ami még nekem is kissé nehézkes, főleg hogy szeretek sok dolgot kipróbálni, sok új dolgot lefejleszteni és ez időnként struktúrális módosításokkal is jár.

Most persze itt a kérdés, hogy legyek-e PHP-s Linux. Nem leszek. :) Habár nem ragaszkodok az elveimhez úgy, mint Tanenbaum mester, a PHP viszonylag rugalmas nyelv (és nem utolsó sorban nem is arra tervezték, amire én igazából használom), sok olyan eszközt ad a kezembe (amit a C nem) amivel talán el tudom tüntetni az éles határt a két gyökeresen különböző elgondolás között, ugyanis egy objektum változóit, lehet publikussá tenni, tehát onnantól kezdve, aki eléri, az írhatja / olvashatja őket közvetlenül, nem kell hozzá egy átjáró réteg.

Hogy ebből pontosan mi fog kisülni, még nem tudom, de ha eddig jól csináltam a dolgokat, nem szükséges struktúrális módosításokat végrehajtanom ahhoz, hogy működjön az elképzelésem, csak pár kulcsszót kellhet módosítani.