Linuxi tuumade arendajate meililistis on avaldatud patšid, mis sisaldavad «Wasm» arhitektuuri rakendust Linuxi tuumas. See võimaldab tuuma kompileerida WebAssembly vahekaoodiks, mis võimaldab selle otse brauseris käitada ilma emulaatorite kasutamiseta. Lisaks on Linuxi tuum projektiga loodud võimalus käivitada «.wasm» formaadis käivitatavaid faile ning valmistatud on «web console» draiver brauseris konsooliga töötamise simuleerimiseks. Samuti on valmistatud tööriistakomplekt brauseris käitatavate süsteemsete keskkondade koostamise lihtsustamiseks.
Näidisena on loodud keskkond, mis põhineb BusyBoxi ja süsteembiblioteegi musl'i WebAssembly'sse kompileeritud utiliitide komplektil. Sarnase keskkonna jaoks kasutatakse terminali emulaatorina Xterm.js. Eraldi on käivitatud demo leht, mis võimaldab hinnata porti tööd ilma iseseisva kompileerimiseta. Kõikide Chromiumi põhiliste brauserite tugi on täielik ning Firefoxi tugi on osaline, kus debugging'u võimalused on piiratud. Kaasaegsetel arvutitel laadib Wasm versiooni tuum brauseris alla vähem kui sekundiga.
Projekt on arenenud juba umbes kaks aastat ja sel etapil võimaldab see tuuma laadimist brauseritesse ja tavaliste programmide täitmist. Töö ei ole veel lõpetatud ja port on silmitsi teatavate probleemide ja piirangutega. Näiteks ei ole veel rakendatud vfork ja longjmp kutsungite toetust (BusyBoxile on rakendatud plaastrid, et töötada ilma nendeta), ülesannete katkestamine ei ole võimalik, MMU on puudu (tuum ja protsessid töötavad ühes aadressiruumi), juba laaditud koodi ei saa muuta, konsool hangub umbes viie minuti pärast ajastamise probleemide tõttu. On märgitud, et olemasolevad piirangud on ületatavad, kuid mõned neist nõuavad brauserites täiendavate WebAssembly laienduste rakendamist. Selliste laienduste rakendamine on ette nähtud MMU ja lõimede peatamiseks.
WebAssembly-sisene lõime peatamise võimatus ei ühildu tuumaylesannete planeerija tööga, kuid mitmeülesandelisus on saavutatud ringtee kaudu, sidudes iga lõime/ülesande oma virtuaalse CPU-ga, mida töötleb eraldi Web Worker. Sellise lähenemisega on saavutatud protsesside paralleelne teostamine brauseri mootori ja host-operatsioonisüsteemi tuuma arvelt ilma hävitava mitmeülesandelisuse ning ülesannete vahetamiseta brauseris käituvates tuumades. Sellise skeemi puhul katkestused ja signaalid ei toimi korralikult, ning katkestuste, sealhulgas taimeri ja IPI (Inter-Processor Interrupt) edastamiseks kasutatakse eraldi virtuaalset CPU-d.
Projekti kasutusala ulatub kaugemale lihtsalt Linuxi keskkondade käivitamisest brauserites. Näiteks võib port olla kasulik mitme platvormiga WebAssembly programmide loomisel, mis kasutavad Linuxile spetsiifilisi süsteemikõnesid. Selliste süsteemikõnede teostamine saab eraldi konverteerida WebAssembly-sse ja rakendusega siduda, mis võimaldab selle kasutamist ilma süsteemi tuumaga seondumiseta. Port on samuti kasulik rakenduste isoleeritud täitmise korraldamiseks WASI (WebAssembly System Interface) abil.
Plaanitakse eksperimente, mis hõlmavad graafika toetuse rakendamist keskkondades, mille tuum on kokku pandud WebAssembly's — kavatsetakse rakendada EGL brauseri API WebGL alusel ja tagada OpenGL ES töö. Samuti plaanitakse rakendada Dwarf'i tõrkeotsingu formaati, et võimaldada koodi ridade kaupa tõrkeotsingut.
Allikas: opennet.ru
