I nyhedsbrevet for Linux-kerneludviklere er der offentliggjort patches med implementeringen af arkitekturen "Wasm" til Linux-kernen, hvilket gør det muligt at kompilere kernen til WebAssembly-mellem kode for direkte udførelse i webbrowseren uden brug af emulatorer. Derudover er der for Linux-kernen blevet udviklet muligheden for at køre eksekverbare filer i " .wasm " format og et "web console" driver, der simulerer arbejdet med konsollen i browseren. Der er også udarbejdet værktøjer til at forenkle opbygningen af systemmiljøer, der kan køre i browseren.
Som eksempel er der dannet et miljø baseret på de kompilere BusyBox-nyttige værktøjer og systemsbiblioteket musl i WebAssembly. Xterm.js er blevet anvendt som terminalemulator til at arbejde med dette miljø. En demonstrationsside er blevet startet separat, hvilket gør det muligt at vurdere arbejdet med porten uden selv at kompilere. Der er fuld support for browsere baseret på Chromium-motoren og delvis support for Firefox, hvor debugging-mulighederne er begrænsede. På moderne computere tager indlæsningen af Wasm-kernens samling i browseren mindre end et sekund.
Projektet har været under udvikling i omkring to år og tillader i sin nuværende fase indlæsning af kernen i browsere og udførelse af typiske programmer. Arbejdet er endnu ikke afsluttet, og porten har separate problemer og begrænsninger. For eksempel er understøttelsen af vfork og longjmp endnu ikke implementeret (BusyBox er blevet anvendt patches for at fungere uden dem), der er ingen mulighed for at afbryde opgaver, MMU er utilgængelig (kernen og processerne arbejder i det samme adresseområde), og det er umuligt at ændre allerede indlæst kode; konsollen hænger efter cirka 5 minutter på grund af problemer med timeren. Der bemærkes, at de eksisterende begrænsninger er overvindelige, men nogle af dem kræver implementering af yderligere udvidelser til WebAssembly i browsere. Sådanne udvidelser er foreslået at blive implementeret til MMU og pausering af tråde.
Umuligheden ved at suspendere tråds udførelse i WebAssembly stemmer ikke overens med opgaven til opgaveplanlæggeren i kernen, men multitasking er blevet realiseret via at knytte hver tråd/opgave til sin egen virtuelle CPU, som behandles i en separat Web Worker. På denne måde er det lykkedes at opnå parallel udførelse af processer via browserens motor og værts-OS-kernen uden at benytte fortrængende multitasking og opgaveskift i den kørende kern i browseren. Interrupts og signaler fungerer ikke fuldt ud i denne skema, og for at levere timer- og IPI (Inter-Processor Interrupt) interrupts anvendes en separat virtuel CPU.
Projektets anvendelsesområde går ud over blot at køre Linux-miljøer i browsere. For eksempel kan porten bruges til at skabe multiplatforms WebAssembly-programmer, der benytter systemopkald specifikke for Linux. Implementeringen af sådanne systemopkald kan omdannes separat til WebAssembly og vedhæftes applikationen, hvilket gør det muligt at bruge den uden binding til systemkernen. Porten vil også være nyttig til at organisere isoleret udførelse af applikationer ved hjælp af WASI (WebAssembly System Interface).
Blandt planerne nævnes eksperimenter med implementeringen af grafiksupport i miljøer med en kerne, der er samlet i WebAssembly — baseret på browserens WebGL API planlægger de at realisere EGL og muliggøre OpenGL ES-arbejde. Det er også planlagt at implementere støtte til debug-formatet Dwarf til linje-for-linje debugging af koden.
Kilde: opennet.ru
