Byl představen port jádra Linux pro WebAssembly, spuštěný v prohlížeči.

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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster