A fost prezentat portul nucleului Linux pentru WebAssembly, care rulează în browser.

În lista de distribuție a dezvoltatorilor kernelului Linux au fost publicate patch-uri pentru implementarea arhitecturii „Wasm” în kernelul Linux, care permit compilarea kernelului în cod intermediar WebAssembly pentru execuția directă în browser fără a utiliza emulatoare. În plus, pentru kernelul Linux a fost implementată capacitatea de a rula fișiere executabile în format „.wasm” și a fost pregătit un driver „web console” pentru simularea lucrului cu consola în browser. De asemenea, a fost pregătit un set de instrumente pentru simplificarea construirii mediilor de sistem care pot fi lansate în browser.

Ca exemplu, a fost creat un mediu bazat pe un set de utilitare BusyBox compilate în WebAssembly și biblioteca de sistem musl. Ca emulator de terminal pentru lucrul cu un astfel de mediu a fost utilizat Xterm.js. A fost lansat un site de demonstrație care permite evaluarea funcționării portului fără compilarea individuală. Se declară suport complet pentru browserele bazate pe motorul Chromium și suport parțial pentru Firefox, în care funcționalitatea de depanare este limitată. Pe computerele moderne, încărcarea compilării Wasm a kernelului în browser durează mai puțin de o secundă.

Proiectul este în dezvoltare de aproximativ doi ani și în prezent permite încărcarea kernelului în browsere și executarea programelor standard. Munca nu s-a încheiat și portul are probleme și limitări specifice. De exemplu, suportul pentru apelurile vfork și longjmp nu a fost încă realizat (pentru BusyBox au fost aplicate patch-uri pentru a funcționa fără ele), nu există posibilitatea de a întrerupe sarcini, MMU (kernelul și procesele funcționează în același spațiu de adrese) nu este disponibil, nu este posibilă modificarea codului deja încărcat, iar consola prezintă blocaje după aproximativ 5 minute din cauza problemelor cu cronometrele. Se menționează că restricțiile existente sunt depășibile, dar pentru unele dintre ele este necesară implementarea de extensii suplimentare pentru WebAssembly în browsere. Aceste extensii au fost propuse pentru MMU și suspendarea thread-urilor.

Imposibilitatea de a suspenda execuția firelor în WebAssembly nu se împacă cu funcționarea planificatorului de sarcini din kernel, dar multitasking-ul a fost realizat printr-o metodă alternativă, prin legarea fiecărui fir/sarcină la propriul său CPU virtual, prelucrat într-un Web Worker separat. În acest mod, s-a reușit obținerea execuției paralele a proceselor datorită motorului de browser și kernel-ului sistemului de operare gazdă, fără a utiliza multitasking-ul preemptiv și comutarea sarcinilor în kernel-ul care rulează în browser. Interrupțiile și semnalele în cadrul acestei scheme nu funcționează pe deplin, iar pentru livrarea întreruperilor temporizatorului și IPI (Inter-Processor Interrupt) este implicat un CPU virtual separat.

Domeniul de aplicare al proiectului depășește simpla lansare a mediilor Linux în browsere. De exemplu, portul poate fi utilizat pentru crearea de programe WebAssembly multi-platformă care utilizează apeluri de sistem specifice Linux. Implementarea unor astfel de apeluri de sistem poate fi transformată separat în WebAssembly și atașată aplicației, permițând utilizarea acesteia fără legare la kernel-ul sistemului. Portul va fi, de asemenea, util pentru organizarea execuției izolate a aplicațiilor prin intermediul WASI (Interfața de sistem WebAssembly).

Între planuri sunt menționate experimentele cu implementarea suportului pentru grafică în medii cu kernel compilat în WebAssembly - pe baza API-ului browser-ului WebGL, se plănuiește implementarea EGL și asigurarea funcționării OpenGL ES. De asemenea, se intenționează implementarea suportului pentru formatul de depanare Dwarf pentru depanarea linie cu linie a codului.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster