Porta do kernel introduzida Linux para WebAssembly, executado no navegador

Na lista de discussão dos desenvolvedores do kernel Linux Foram publicadas correções que implementam a arquitetura Wasm para o kernel. Linux, o que permite que o kernel seja compilado em código intermediário WebAssembly para posterior execução direta em um navegador da web sem o uso de emuladores. Além disso, para o kernel Linux проектом реализована возможность запускать исполняемые файлы в формате «.wasm» и подготовлен драйвер «web console» для симуляции работы с консолью в браузере. Также подготовлен инструментарий для упрощения сборки запускаемых в браузере системных окружений.

Como exemplo, foi criado um ambiente utilizando o conjunto de utilitários BusyBox e a biblioteca de sistema musl compilada em WebAssembly. O Xterm.js é utilizado como emulador de terminal para trabalhar com este ambiente. Um site de demonstração separado foi lançado, permitindo que os usuários avaliem a adaptação sem precisar compilá-la. Há suporte completo para navegadores baseados no Chromium e suporte parcial para o Firefox, que possui recursos de depuração limitados. Em computadores modernos, carregar a versão do kernel Wasm em um navegador leva menos de um segundo.

O projeto está em desenvolvimento há cerca de dois anos e atualmente permite carregar o kernel em navegadores e executar programas padrão. O trabalho ainda não está concluído e a adaptação apresenta alguns problemas e limitações. Por exemplo, o suporte para chamadas vfork e longjmp ainda não foi implementado (o BusyBox foi modificado para funcionar sem elas), não há possibilidade de interromper tarefas, a MMU está indisponível (o kernel e os processos são executados no mesmo espaço de endereçamento), é impossível modificar o código já carregado e o console congela após cerca de 5 minutos devido a problemas com o temporizador. Observa-se que as limitações existentes são superáveis, mas algumas delas exigem a implementação de extensões adicionais ao WebAssembly nos navegadores. Extensões semelhantes foram propostas para a MMU e a suspensão de threads.

A impossibilidade de pausar a execução de threads no WebAssembly entra em conflito com o agendador de tarefas do kernel, mas a multitarefa foi implementada por meio de uma solução alternativa, atribuindo cada thread/tarefa à sua própria CPU virtual, executada em um Web Worker separado. Essa abordagem permitiu a execução paralela de processos usando o mecanismo do navegador e o kernel do sistema operacional hospedeiro, sem recorrer à multitarefa preemptiva ou à troca de tarefas no kernel do navegador. Interrupções e sinais não são totalmente funcionais nessa configuração, e uma CPU virtual separada é usada para fornecer interrupções de temporizador e IPI (Interrupção entre Processadores).

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

Os planos incluem experimentos com a implementação de suporte gráfico em ambientes com um núcleo construído em WebAssembly. Eles planejam implementar EGL e oferecer suporte a OpenGL ES usando a API WebGL do navegador. Também planejam implementar suporte ao formato de depuração Dwarf para depuração de código linha por linha.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster