I utvecklarna av Linux-kÀrnan publicerades patchar med implementeringen av "Wasm"-arkitekturen för Linux-kÀrnan, vilket gör det möjligt att kompilera kÀrnan till WebAssembly-mellanliggande kod för direkt exekvering i webblÀsaren utan att anvÀnda emulatorer. Dessutom har projektet för Linux-kÀrnan gjort det möjligt att köra körbara filer i ".wasm"-format och förberett en "web console"-drivrutin för att simulera arbete med konsolen i webblÀsaren. Verktyg har ocksÄ förberetts för att förenkla byggandet av systemmiljöer som körs i webblÀsaren.
Som exempel har en miljö skapats baserad pÄ en uppsÀttning verktyg frÄn BusyBox och systembiblioteket musl som kompilerats i WebAssembly. Xterm.js anvÀnds som terminalemulator för att arbeta med en sÄdan miljö. En demonstrationswebbplats har startats separat, vilket gör det möjligt att utvÀrdera portens arbete utan att behöva kompilera sjÀlv. FullstÀndig stöd för webblÀsare baserade pÄ Chromium-motorn har meddelats och delvis stöd för Firefox, dÀr debuggningsmöjligheterna Àr begrÀnsade. PÄ moderna datorer tar det mindre Àn en sekund att ladda Wasm-versionen av kÀrnan i webblÀsaren.
Projektet har varit under utveckling i nÀstan tvÄ Är och tillÄter för nÀrvarande att ladda kÀrnan i webblÀsare och köra typiska program. Arbetet Àr fortfarande inte slutfört och porten har vissa problem och begrÀnsningar. Till exempel har stöd för vfork- och longjmp-anrop Ànnu inte implementerats (patchar har tillÀmpats pÄ BusyBox för att fungera utan dem), det finns ingen möjlighet att avbryta uppgifter, MMU Àr inte tillgÀnglig (kÀrnan och processerna arbetar i ett och samma adressutrymme), det gÄr inte att Àndra redan laddad kod, och konsolen fryser cirka fem minuter in pÄ grund av problem med tidtagning. Det har noterats att de existerande begrÀnsningarna Àr överkomliga, men för vissa av dem krÀvs implementering av ytterligare tillÀgg till WebAssembly i webblÀsarna. SÄdana tillÀgg har föreslagits att implementeras för MMU och trÄdpaus.
OförmÄgan att pausa trÄdarnas exekvering i WebAssembly förenar sig inte med arbetet hos schemalÀggaren i kÀrnan, men flervalsbearbetning har lyckats implementeras pÄ ett omvÀg genom att binda varje trÄd/uppgift till sin egen virtuella CPU, hanterad i en separat Web Worker. PÄ sÄ sÀtt har det blivit möjligt att uppnÄ parallell exekvering av processer tack vare webblÀsarens motor och vÀrd-OS:ets kÀrna utan att anvÀnda fördrivande flervalsbearbetning och uppgiftsswitching i den körda kÀrnan i webblÀsaren. Avbrott och signaler fungerar inte fullt ut i detta system, och för att leverera avbrott av timer och IPI (Inter-Processor Interrupt) anvÀnds en separat virtuell CPU.
Projektets tillÀmpningsomrÄde gÄr bortom enkel körning av Linux-miljöer i webblÀsare. Till exempel kan porten anvÀndas för att skapa plattformsoberoende WebAssembly-program som anvÀnder Linux-specifika systemanrop. Implementeringen av sÄdana systemanrop kan omvandlas separat till WebAssembly och kopplas till applikationen, vilket gör att den kan anvÀndas utan bindning till systemkÀrnan. Porten kommer ocksÄ att vara anvÀndbar för att organisera isolerad exekvering av applikationer med hjÀlp av WASI (WebAssembly System Interface).
Bland planerna nĂ€mns experiment med att implementera stöd för grafik i miljöer med en kĂ€rna kompilerad i WebAssembly â baserat pĂ„ webblĂ€sarens API WebGL planerar man att implementera EGL och sĂ€kerstĂ€lla funktionen av OpenGL ES. Det planeras ocksĂ„ att implementera stöd för debugformatet Dwarf för rad-för-rad avkodning.
KĂ€lla: opennet.ru
