È stato presentato il porting del kernel Linux per WebAssembly, eseguibile nel browser

Nella mailing list degli sviluppatori del kernel Linux sono stati pubblicati patch che implementano l'architettura "Wasm" per il kernel Linux, consentendo di compilare il kernel in codice intermedio WebAssembly per successivo esecuzione diretta nel browser web senza ricorrere a emulatori. Inoltre, per il kernel Linux, il progetto ha realizzato la possibilità di eseguire file eseguibili in formato ".wasm" e ha preparato un driver "web console" per simulare il funzionamento con la console nel browser. È stato anche preparato un toolkit per semplificare la costruzione di ambienti di sistema eseguibili nel browser.

A titolo di esempio, è stato creato un ambiente basato su un insieme di strumenti BusyBox compilati in WebAssembly e sulla libreria di sistema musl. Per interagire con un ambiente di questo tipo è stato utilizzato Xterm.js come emulatore di terminale. È stata avviata anche una demo che consente di valutare il funzionamento del porting senza necessità di compilazione autonoma. È stata dichiarata un'implementazione completa sui browser basati su Chromium e un supporto parziale su Firefox, quest’ultimo con funzionalità di debug limitate. Su computer moderni, il caricamento dell'assemblaggio 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 ed eseguire programmi standard. Il lavoro non è ancora completato e il port presenta problemi e limitazioni specifiche. Ad esempio, il supporto per le chiamate vfork e longjmp non è ancora implementato (sono stati applicati patch a BusyBox per funzionare senza di esse), non è possibile interrompere i task, l'MMU non è disponibile (il kernel e i processi operano nello stesso spazio indirizzi), non è possibile modificare il codice già caricato e si riscontra un blocco della console dopo circa 5 minuti a causa di problemi con il timer. Si segnala che le limitazioni attuali sono superabili, ma per alcune di esse è necessaria l'implementazione di estensioni aggiuntive a WebAssembly nei browser. Queste estensioni sono state proposte per l'MMU e la sospensione dei thread.

L'impossibilità di sospendere l'esecuzione dei thread in WebAssembly non si concilia con il funzionamento dello scheduler nel kernel; tuttavia, è stato possibile implementare la multithreading in modo indiretto, attraverso l'assegnazione di ogni thread/compito a un 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 host, senza utilizzare la multithreading con preemption e il cambio di compiti nell'ambiente in esecuzione nel browser. Le interruzioni e i segnali non funzionano correttamente in questo schema, e un CPU virtuale separato è utilizzato per la consegna delle interruzioni del timer e dell'IPI (Inter-Processor Interrupt).

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

Tra i piani figurano esperimenti per implementare il supporto grafico in ambienti con un nucleo compilato in WebAssembly: intendono realizzare EGL basata sull'API browser WebGL e garantire il funzionamento di OpenGL ES. È prevista anche l'implementazione del formato di debug Dwarf per il debugging riga per riga del 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