Presentato il porting del kernel Linux per WebAssembly, eseguibile nel browser

Nella mailing list degli sviluppatori del kernel Linux sono stati pubblicati patch con l'implementazione dell'architettura «Wasm» per il kernel Linux, che consente di compilare il kernel in codice intermedio WebAssembly per l'esecuzione diretta nel browser senza utilizzare emulatori. Inoltre, per il kernel Linux il progetto ha implementato la possibilità di eseguire file eseguibili nel formato «.wasm» ed è stato preparato un driver «web console» per simulare l'interazione con la console nel browser. È stato anche creato un toolkit per semplificare la costruzione di ambienti di sistema eseguibili nel browser.

Come esempio è stato creato un ambiente basato su un insieme di utility BusyBox compilato in WebAssembly e sulla libreria di sistema musl. Per l'interazione con tale ambiente è stato utilizzato Xterm.js come emulatore di terminale. È stato avviato un sito dimostrativo che consente di valutare il funzionamento del porting senza la necessità di compilarlo autonomamente. È stata dichiarata la piena compatibilità con i browser basati su Chromium e una compatibilità parziale con Firefox, dove le capacità di debug sono limitate. Su computer moderni, il caricamento della build Wasm del kernel nel browser richiede meno di un secondo.

Il progetto è in sviluppo da circa due anni e attualmente consente di caricare il kernel nei browser e di eseguire programmi tipici. Il lavoro non è ancora completato e il port presenta alcune problematiche e limitazioni. Ad esempio, il supporto per le chiamate vfork e longjmp non è ancora stato implementato (sono stati applicati patch a BusyBox per funzionare senza di esse), manca la possibilità di interrompere i task, l'MMU non è disponibile (il kernel e i processi operano nello stesso spazio indirizzi), non è possibile modificare codice già caricato e si verifica un blocco della console dopo circa 5 minuti a causa di problemi con il timer. Si sottolinea che le limitazioni esistenti sono superabili, ma per alcune di esse è necessaria l'implementazione di estensioni aggiuntive a WebAssembly nei browser. Tali estensioni sono state proposte per l'MMU e la sospensione dei thread.

L'impossibilità di sospendere l'esecuzione dei thread in WebAssembly non si sposa con il funzionamento del pianificatore di attività nel kernel, ma è stato possibile implementare il multitasking in modo indiretto, legando ogni thread/compito al proprio CPU virtuale, gestito in un Web Worker separato. In questo modo si è riusciti a ottenere l'esecuzione parallela dei processi grazie al motore del browser e al kernel del sistema operativo ospite senza utilizzare il multitasking preemptive e senza il cambio di contesti nel kernel eseguito nel browser. Le interruzioni e i segnali in questo schema non funzionano completamente, e per la consegna delle interruzioni del timer e dell'IPI (Inter-Processor Interrupt) è stato utilizzato un CPU virtuale separato.

L'ambito di applicazione del progetto va oltre il semplice avvio di ambienti Linux nei browser. Ad esempio, il porting può essere utilizzato per creare programmi WebAssembly multipiattaforma che utilizzano chiamate di sistema specifiche di Linux. L'implementazione di tali chiamate di sistema può essere convertita separatamente in WebAssembly e allegata all'applicazione, consentendo di utilizzarla senza legarla al kernel di sistema. Il porting sarà anche utile per organizzare l'esecuzione isolata delle applicazioni tramite WASI (WebAssembly System Interface).

Tra i piani ci sono esperimenti per implementare il supporto grafico negli ambienti con kernel assemblato in WebAssembly - sulla base dell'API WebGL del browser, si prevede di implementare EGL e garantire il funzionamento di OpenGL ES. È inoltre prevista l'implementazione del supporto per il formato di debug Dwarf per il debugging a livello di codice.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster