Per primera vegada, el nucli de Linux es pot executar directament dins d'un navegador web, sense emuladors ni màquines virtuals. Això ha estat possible gràcies a una sèrie de pegats que implementen la arquitectura Wasm (WebAssembly) dins del kernel, cosa que permet compilar-lo en codi intermedi executable en entorns web. Encara es tracta d'una prova de concepte experimental, marca un abans i un després en la convergència entre sistemes operatius i tecnologies web.
El projecte, que fa més de dos anys que està en desenvolupament, permet arrencar Linux dins d'un navegador i executar programes estàndard mitjançant un entorn basat en BusyBox i musl, tot compilat a WebAssembly. Per a la interacció, s'utilitza Xterm.js com a emulador de terminal, proporcionant una consola funcional al navegador.
A més, hi ha una demostració pública compatible amb navegadors Chromium i parcialment amb Firefox, capaç de carregar el nucli Wasm en menys d'un segon en equips moderns.
Com funciona Linux a Wasm?
A diferència de les arquitectures convencionals, WebAssembly no permet pausar fils ni modificar el codi en temps d'execució, cosa que suposa un desafiament per al planificador de tasques del nucli. Per superar aquestes limitacions, els desenvolupadors van adoptar una solució enginyosa: cada tasca o fil s'executa en una CPU virtual independent gestionada mitjançant Web Workers del navegador. D'aquesta manera, la multitasca s'implementa a través del motor del navegador mateix, que actua com un sistema operatiu amfitrió.
El resultat és un model on el nucli Linux corre dins d'un entorn web aïllat, amb multitasca real i comunicació entre processos mitjançant canals de missatges (postMessage() i SharedArrayBuffer). No obstant això, les interrupcions i senyals encara no funcionen plenament, i algunes funcions crítiques, com vfork() i longjmp(), segueixen sense suport.
Entre les principals limitacions actuals hi ha l'absència d'una MMU (Unitat de Gestió de Memòria), la impossibilitat de modificar codi carregat i bloquejos esporàdics a la consola després d'uns minuts d'ús. Tot i això, les proves demostren que el sistema pot executar ordres bàsiques de BusyBox i mantenir processos actius en segon pla, cosa que confirma el potencial d'aquest enfocament.
Més enllà de la demostració: un nou horitzó per a Wasm
L'abast del projecte transcendeix la simple execució de Linux a navegadors. La arquitectura Wasm per a Linux podria servir com a base per crear aplicacions WebAssembly multiplataforma amb trucades al sistema Linux integrades, sense dependre d'un nucli complet. Això obre la porta a executar aplicacions aïllades mitjançant WASI (WebAssembly System Interface) ia desenvolupar sistemes de sandboxing extremadament portàtils.
els desenvolupadors també planegen estendre el suport cap a l'entorn gràfic, implementant EGL i OpenGL ES sobre WebGL, cosa que permetria executar interfícies visuals dins del navegador. A més, es preveu afegir compatibilitat amb el format de depuració DWARF per depurar el codi C línia per línia, directament des de les eines del navegador.
Desafiaments tècnics i propers passos
El projecte encara enfronta problemes d'estabilitat, com bloquejos aleatoris o errors de corrupció de memòria. Aquests inconvenients, documentats detalladament, reflecteixen les dificultats inherents a adaptar un sistema operatiu complet a un entorn pensat originalment per a aplicacions web. Tot i així, els responsables del desenvolupament confien que futures extensions de l'estàndard WebAssembly com la suspensió de fils, el canvi de pila o una MMU funcional permetran superar les limitacions actuals.
Pel que fa al rendiment, la versió actual prioritza la depuració sobre la velocitat. Tot i això, s'anticipa que futures optimitzacions, com la hibernació del sistema Wasm prearrencat, podrien permetre que un kernel carregui instantàniament. L'ús d'Atomics.waitAsync() i la comunicació directa entre workers també promet reduir la sobrecàrrega entre el codi JavaScript i WebAssembly.
Una invitació a experimentar
el repositori wasm-linux ofereix scripts i entorns de compilació perquè qualsevol pugui provar aquesta adaptació, ja sigui en un entorn local o mitjançant Docker. En pocs passos és possible compilar LLVM, el kernel, BusyBox i musl, generant un entorn Linux completament funcional al navegador.
Tot i que encara està lluny de ser estable o segur, aquest experiment obre un debat sobre el futur dels sistemes operatius a la web. Podria Wasm convertir-se en la plataforma universal per executar Linux a qualsevol dispositiu o entorn aïllat? Els propers anys ho diran.
Lloc web de demostració: https://joelseverin.github.io