Sokszor álmodozom arról, milyen lenne egy teljes értékű asztali környezetet elindítani csak úgy, a böngészőm egyik lapján, anélkül, hogy bonyolult virtuális gépekkel vagy nehézkes szoftverekkel kellene bajlódnom. A Virtuális valóság a szilícium alatt: Így futtass teljes értékű x86-os operációs rendszert böngészőből, hardveres emulációval és saját fejlesztésű kernel-tweakkel elnevezésű projekt pont ezt a szabadságot adja meg. Nem varázslatról, hanem a modern webes technológiák és az emuláció okos ötvözéséről van szó, amit egy kis kernel-szintű csiszolással tettem igazán használhatóvá.
A legtöbben csak streamelt felületeket látunk, ha a felhőalapú számítástechnikáról beszélünk, de a kliensoldali futtatás egészen más élmény. Amikor a böngésző motorja végzi a hardveres emulációt, a latencia drasztikusan csökken, ráadásul nem függünk folyamatos internetkapcsolattól a számítási feladatokhoz. A WebAssembly és a fejlett JavaScript-motorok fejlődése elhozta azt a kort, ahol egy x86-os architektúra szimulálása már nem csak egyetemi laboratóriumi kísérlet, hanem mindennapi valóság lehet.
A technológia sava-borsát a hardveres erőforrások közvetlen elérése adja, amit a böngésző sandbox környezete próbál elzárni előlünk. A WebAssembly (Wasm) használata lehetővé teszi, hogy szinte natív sebességgel futtassunk C vagy Rust nyelven írt emulációs kódokat.
A projekt szíve a V8-as motorra épülő emulációs réteg. A cél az, hogy a böngésző ne csak rajzolja a képet, hanem ténylegesen dekódolja az x86-os utasításkészletet. Ez a folyamat embert próbáló feladat a processzor számára, de a modern böngészők JIT (Just-In-Time) fordítója sokat segít az utasítások gyors végrehajtásában.
A hatékony működéshez ezekre a komponensekre van szükség:
A gyári emulátorok gyakran túl általánosak. A saját fejlesztésű kernel-tweak lényege nem a rendszer teljes újraírása, hanem az interrupt-kezelés és a memóriahozzáférés finomhangolása. Az emulált környezetben minden egyes processzor-ciklus számít, ezért a felesleges driverek és háttérszolgáltatások eltávolítása a kernelből látványos gyorsulást eredményez.
A módosítások során ezekre a területekre koncentráltam:
Nem tagadom, az első próbálkozásoknál gyakran összeomlott a böngésző lapja. A legnagyobb kihívást a virtuális gép és a gazdagép közötti szinkronizáció jelentette. Amikor a rendszer megpróbálja elérni a grafikus kártyát vagy a hálózati kártyát, a böngésző védelmi rendszerei közbelépnek. Itt jön képbe a kernel-tweak, amely elhiteti a rendszerrel, hogy a virtuális hardverekhez való hozzáférés szabályos és biztonságos.
A fejlesztés során tapasztalt leggyakoribb akadályok a következők voltak:
Ha kedvet kaptál hozzá, ne bonyolult projektekkel indíts. Kezdj egy egyszerű, parancssoros Linux rendszerrel. A cél az, hogy a böngésző konzolján keresztül figyeld a kernel indulási folyamatát, a boot logot. Amikor látod a kernel inicializációját a böngészőablakban, az már önmagában is sikeres élmény.
A sikerhez ezekre érdemes figyelni:
Ez a technológia nemcsak technikai érdekesség. A jövőben a böngésző alapú operációs rendszerek segíthetnek a régi szoftverek archiválásában, vagy biztonságos, elszigetelt környezetet adhatnak online tranzakciókhoz. Amikor a hardvert szoftveresen, a böngésző szigorú falain belül szimuláljuk, a biztonság és a hordozhatóság egy új szintre lép.
A kernel-szintű finomhangolás és az emuláció kombinációja megmutatja, hogy mennyi tartalék van a meglévő webes technológiákban. Nem kell mindig új hardvert venni, ha a meglévőt okos szoftveres megoldásokkal hatékonyabbá tudjuk tenni. A folyamatos kísérletezés, a kódok optimalizálása és a rendszer működésének megértése az, ami igazán élvezetessé teszi ezt a területet. Legközelebb talán már nem is lesz különbség a natív és a böngészőben futó operációs rendszerek sebessége között.