Na lista de correo dos desenvolvedores do núcleo Linux Publicáronse parches que implementan a arquitectura Wasm para o núcleo. Linux, o que permite compilar o núcleo en código intermedio WebAssembly para a súa posterior execución directa nun navegador web sen o uso de emuladores. Ademais, para o núcleo Linux O proxecto implementou a capacidade de executar ficheiros executábeis no formato ".wasm" e desenvolveu un controlador de "consola web" para simular as operacións da consola do navegador. Tamén se desenvolveron ferramentas para simplificar a construción de entornos de sistemas baseados en navegador.
Como exemplo, creouse un entorno usando o conxunto de utilidades BusyBox e a biblioteca do sistema musl compilouse en WebAssembly. Xterm.js úsase como emulador de terminal para traballar con este entorno. Lanzouse un sitio de demostración separado que permite aos usuarios avaliar o porto sen compilalo eles mesmos. Declárase compatibilidade total con navegadores baseados en Chromium e compatibilidade parcial con Firefox, que ten capacidades de depuración limitadas. Nos ordenadores modernos, cargar a compilación do núcleo de Wasm nun navegador leva menos dun segundo.
O proxecto leva en desenvolvemento uns dous anos e actualmente permite cargar o kernel nos navegadores e executar programas estándar. O traballo aínda non está completo e a portación ten algúns problemas e limitacións. Por exemplo, a compatibilidade coas chamadas vfork e longjmp aínda non se implementou (BusyBox foi parcheada para funcionar sen elas), non hai capacidade para interromper tarefas, a MMU non está dispoñible (o kernel e os procesos execútanse no mesmo espazo de enderezos), é imposible modificar o código xa cargado e a consola conxélase despois duns 5 minutos debido a problemas de temporizador. Cómpre sinalar que as limitacións existentes son superables, pero algunhas delas requiren a implementación de extensións adicionais para WebAssembly nos navegadores. Propuxéronse extensións similares para a MMU e a suspensión de fíos.
A incapacidade de pausar a execución de fíos en WebAssembly entra en conflito co programador de tarefas do kernel, pero a multitarefa implementouse mediante unha solución alternativa asignando cada fío/tarefa á súa propia CPU virtual, executada nun Web Worker separado. Esta estratexia permitiu a execución paralela de procesos usando o motor do navegador e o kernel do sistema operativo anfitrión, sen recorrer á multitarefa preventiva nin ao cambio de tarefas no kernel do navegador. As interrupcións e os sinais non son totalmente funcionais nesta configuración e utilízase unha CPU virtual separada para entregar interrupcións de temporizador e IPI (interrupción entre procesadores).
O alcance do proxecto vai máis alá dun simple lanzamento Linux-ambientes en navegadores. Por exemplo, o porto pódese usar para crear programas WebAssembly multiplataforma que usen específicos Linux Chamadas ao sistema. A implementación destas chamadas ao sistema pódese converter por separado a WebAssembly e asociar á aplicación, o que permite usala sen estar vinculada ao kernel do sistema. O porto tamén será útil para organizar a execución de aplicacións illadas mediante WASI (WebAssembly System Interface).
Os plans inclúen experimentos coa implementación de soporte gráfico en entornos cun núcleo integrado en WebAssembly. Planean implementar EGL e soportar OpenGL ES usando a API WebGL do navegador. Tamén planean implementar soporte para o formato de depuración Dwarf para a depuración de código liña por liña.
Fonte: opennet.ru
