Na seznamu mailingové listiny vývojářů jádra Linux byly zveřejněny opravy pro implementaci architektury „Wasm“ pro jádro Linux, která umožňuje kompilaci jádra do mezipaměti WebAssembly pro následné přímé spuštění v webovém prohlížeči bez používání emulátorů. Dále byl pro jádro Linux projektem uvedena možnost spouštění spustitelných souborů ve formátu „.wasm“ a byl připraven ovladač „web console“ pro simulaci práce s konzolí v prohlížeči. Také byl vyvinut nástroj pro usnadnění sestavení spustitelných systémových prostředí v prohlížeči.
Jako příklad bylo vytvořeno prostředí na základě přeloženého v WebAssembly balíčku nástrojů BusyBox a systémové knihovny musl. Jako emulátor terminálu pro práci s tímto prostředím byl použit Xterm.js. Samostatně byl spuštěn demoverze webu, která umožňuje posoudit fungování portu bez vlastní kompilace. Byla oznámena plná podpora prohlížečů na jádru Chromium a částečná podpora pro Firefox, u něhož jsou omezeny možnosti ladění. Na moderních počítačích načítání Wasm sestavení jádra v prohlížeči trvá méně než sekundu.
Projekt se vyvíjí již přibližně dva roky a v současné fázi umožňuje načítat jádro v prohlížečích a spouštět standardní programy. Práce ještě není dokončena a port má určité problémy a omezení. Například podpora volání vfork a longjmp ještě není zavedena (pro BusyBox byly aplikovány opravy pro fungování bez nich), není možné přerušit úlohy, MMU není dostupný (jádro a procesy pracují v jednom adresním prostoru), není možné změnit již načtený kód, konzole zamrzne přibližně po 5 minutách kvůli problémům s časovačem. Bylo poznamenáno, že existující omezení jsou překonatelná, ale pro některá z nich je vyžadována implementace dalších rozšíření pro WebAssembly v prohlížečích. Bylo navrženo realizovat taková rozšíření pro MMU a pozastavení vláken.
Nemožnost pozastavení provádění vláken ve WebAssembly není slučitelná s funkcí plánovače úloh jádra, avšak multitasking se podařilo realizovat obejitím, prostřednictvím přiřazení každého vlákna/úkolu k vlastnímu virtuálnímu CPU, které je zpracováváno v samostatném Web Workeru. Tímto způsobem se podařilo dosáhnout paralelního provádění procesů díky prohlížečovému enginu a jádru hostitelského operačního systému bez použití preemptivního multitaskingu a přepínání úloh v jádru spuštěném v prohlížeči. Přerušení a signály v takovém schématu plně nefungují, a pro dodání přerušení časovače a IPI (Inter-Processor Interrupt) je zapojen samostatný virtuální CPU.
Oblast aplikace projektu přesahuje rámec jednoduchého spouštění Linuxových prostředí v prohlížečích. Například port může být využit k vytváření multiplatformních WebAssembly programů využívajících specifické pro Linux systémové volání. Implementace těchto systémových volání může být samostatně převedena do WebAssembly a připojena k aplikaci, což umožní její použití bez vazby na systémové jádro. Port bude také užitečný pro organizaci izolovaného provádění aplikací pomocí WASI (WebAssembly System Interface).
Z plánů se zmiňují experimenty s realizací podpory grafiky v prostředích s jádrem sestaveným ve WebAssembly — na základě prohlížečového API WebGL plánují realizovat EGL a zajistit funkčnost OpenGL ES. Také se plánuje implementace podpory ladicího formátu Dwarf pro řádkové ladění kódu.
Zdroj: opennet.ru
