Noticia Linux llega al navegador: el kernel se ejecuta en WebAssembly

Linux llega al navegador: el kernel se ejecuta en WebAssembly


Por primera vez, el kernel de Linux puede ejecutarse directamente dentro de un navegador web, sin emuladores ni máquinas virtuales. Esto ha sido posible gracias a una serie de parches que implementan la arquitectura Wasm (WebAssembly) dentro del kernel, lo que permite compilarlo en código intermedio ejecutable en entornos web. Aunque se trata de una prueba de concepto experimental, marca un antes y un despues en la convergencia entre sistemas operativos y tecnologías web.

El proyecto, que lleva más de dos años en desarrollo, permite arrancar Linux dentro de un navegador y ejecutar programas estándar mediante un entorno basado en BusyBox y musl, todo compilado a WebAssembly. Para la interacción, se utiliza Xterm.js como emulador de terminal, proporcionando una consola funcional en el navegador.

Además, existe una demostración pública compatible con navegadores Chromium y parcialmente con Firefox, capaz de cargar el kernel Wasm en menos de un segundo en equipos modernos.

¿Cómo funciona Linux en Wasm?​


A diferencia de las arquitecturas convencionales, WebAssembly no permite pausar hilos ni modificar el código en tiempo de ejecución, lo que supone un desafío para el planificador de tareas del kernel. Para superar estas limitaciones, los desarrolladores adoptaron una solución ingeniosa: cada tarea o hilo se ejecuta en una CPU virtual independiente, gestionada mediante Web Workers del navegador. De este modo, la multitarea se implementa a través del propio motor del navegador, que actúa como un sistema operativo anfitrión.

El resultado es un modelo donde el kernel Linux corre dentro de un entorno web aislado, con multitarea real y comunicación entre procesos mediante canales de mensajes (postMessage() y SharedArrayBuffer). Sin embargo, las interrupciones y señales aún no funcionan plenamente, y algunas funciones críticas, como vfork() y longjmp(), siguen sin soporte.

Entre las principales limitaciones actuales se encuentran la ausencia de una MMU (Unidad de Gestión de Memoria), la imposibilidad de modificar código cargado y bloqueos esporádicos en la consola tras unos minutos de uso. Pese a ello, las pruebas demuestran que el sistema puede ejecutar comandos básicos de BusyBox y mantener procesos activos en segundo plano, lo que confirma el potencial de este enfoque.

Más allá de la demostración: un nuevo horizonte para Wasm​


El alcance del proyecto trasciende la simple ejecución de Linux en navegadores. La arquitectura Wasm para Linux podría servir como base para crear aplicaciones WebAssembly multiplataforma con llamadas al sistema Linux integradas, sin depender de un kernel completo. Esto abre la puerta a ejecutar aplicaciones aisladas mediante WASI (WebAssembly System Interface) y a desarrollar sistemas de sandboxing extremadamente portátiles.

Los desarrolladores también planean extender el soporte hacia el entorno gráfico, implementando EGL y OpenGL ES sobre WebGL, lo que permitiría ejecutar interfaces visuales dentro del navegador. Además, se prevé añadir compatibilidad con el formato de depuración DWARF para depurar el código C línea por línea, directamente desde las herramientas del navegador.

Desafíos técnicos y próximos pasos​


El proyecto aún enfrenta problemas de estabilidad, como bloqueos aleatorios o errores de corrupción de memoria. Estos inconvenientes, documentados en detalle, reflejan las dificultades inherentes a adaptar un sistema operativo completo a un entorno pensado originalmente para aplicaciones web. Aun así, los responsables del desarrollo confían en que futuras extensiones del estándar WebAssembly como la suspensión de hilos, el cambio de pila o una MMU funcional permitirán superar las limitaciones actuales.

En cuanto al rendimiento, la versión actual prioriza la depuración sobre la velocidad. Sin embargo, se anticipa que futuras optimizaciones, como la hibernación del sistema Wasm prearrancado, podrían permitir que un kernel cargue instantáneamente. El uso de Atomics.waitAsync() y comunicación directa entre workers también promete reducir la sobrecarga entre el código JavaScript y WebAssembly.

Una invitación a experimentar​


El repositorio wasm-linux ofrece scripts y entornos de compilación para que cualquiera pueda probar esta adaptación, ya sea en un entorno local o mediante Docker. En pocos pasos es posible compilar LLVM, el kernel, BusyBox y musl, generando un entorno Linux completamente funcional en el navegador.

Aunque aún está lejos de ser estable o seguro, este experimento abre un debate sobre el futuro de los sistemas operativos en la web. ¿Podría Wasm convertirse en la plataforma universal para ejecutar Linux en cualquier dispositivo o entorno aislado? Los próximos años lo dirán.

Sitio web de demostracion: https://joelseverin.github.io

Continúar leyendo...