Se ha introducido el puerto del kernel. Linux para WebAssembly, ejecutándose en el navegador

En la lista de correo de desarrolladores del kernel Linux Se han publicado parches que implementan la arquitectura Wasm para el kernel. Linux, lo que permite compilar el kernel en código intermedio WebAssembly para su posterior ejecución directa en un navegador web sin necesidad de emuladores. Además, para el kernel Linux проектом реализована возможность запускать исполняемые файлы в формате «.wasm» и подготовлен драйвер «web console» для симуляции работы с консолью в браузере. Также подготовлен инструментарий для упрощения сборки запускаемых в браузере системных окружений.

Como ejemplo, se creó un entorno utilizando el conjunto de utilidades BusyBox y la biblioteca del sistema musl compilada en WebAssembly. Se utiliza Xterm.js como emulador de terminal para trabajar con este entorno. Se lanzó un sitio de demostración independiente que permite a los usuarios evaluar la adaptación sin necesidad de compilarla. Se declara compatibilidad total con navegadores basados ​​en Chromium y compatibilidad parcial con Firefox, que tiene capacidades de depuración limitadas. En ordenadores modernos, cargar la compilación del kernel Wasm en un navegador tarda menos de un segundo.

El proyecto lleva en desarrollo aproximadamente dos años y actualmente permite cargar el kernel en navegadores y ejecutar programas estándar. El trabajo aún no está completo y la adaptación presenta algunos problemas y limitaciones. Por ejemplo, aún no se ha implementado la compatibilidad con las llamadas a `vfork` y `longjmp` (BusyBox se ha modificado para funcionar sin ellas), no es posible interrumpir tareas, la MMU no está disponible (el kernel y los procesos se ejecutan en el mismo espacio de direcciones), no es posible modificar el código ya cargado y la consola se bloquea tras unos 5 minutos debido a problemas con el temporizador. Cabe destacar que las limitaciones existentes son superables, pero algunas requieren la implementación de extensiones adicionales a WebAssembly en los navegadores. Se han propuesto extensiones similares para la MMU y la suspensión de hilos.

La imposibilidad de pausar la ejecución de hilos en WebAssembly entra en conflicto con el planificador de tareas del kernel, pero se implementó la multitarea mediante una solución alternativa: asignar cada hilo/tarea a su propia CPU virtual, ejecutada en un Web Worker independiente. Este enfoque permitió la ejecución paralela de procesos utilizando el motor del navegador y el kernel del sistema operativo anfitrión, sin recurrir a la multitarea preventiva ni al cambio de tareas en el kernel del navegador. Las interrupciones y señales no son totalmente funcionales en esta configuración, y se utiliza una CPU virtual independiente para gestionar las interrupciones de temporizador e IPI (Interrupción entre Procesadores).

Область применения проекта выходит за рамки простого запуска Linux-окружений в браузерах. Например, порт может применяться для создания многоплатформенных WebAssembly программ, использующих специфичные для Linux системные вызовы. Реализация подобных системных вызовов может быть отдельно преобразована в WebAssembly и прикреплена к приложению, что позволит использовать его без привязки к системному ядру. Порт также будет полезен для организации изолированного выполнения приложений при помощи WASI (WebAssembly System Interface).

Los planes incluyen experimentos para implementar soporte gráfico en entornos con un núcleo basado en WebAssembly. Se prevé implementar EGL y dar soporte a OpenGL ES mediante la API WebGL del navegador. También se planea implementar soporte para el formato de depuración Dwarf para la depuración de código línea por línea.

Fuente: opennet.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster