Представлен порт ядра Linux для WebAssembly, запускаемый в браузере
Дата публикации:Sun, 02 Nov 2025 11:47:01 +0300
В списке рассылки разработчиков ядра Linux опубликованы патчи с реализацией архитектуры "Wasm" для ядра Linux, позволяющей компилировать ядро в промежуточный код WebAssembly для последующего прямого выполнения в web-браузере без задействования эмуляторов. Кроме того, для ядра Linux проектом реализована возможность запускать исполняемые файлы в формате ".wasm" и подготовлен драйвер "web console" для симуляции работы с консолью в браузере. Также подготовлен инструментарий для упрощения сборки запускаемых в браузере системных окружений.
В качестве примера сформировано окружение на базе скомпилированных в WebAssembly набора утилит BusyBox и системной библиотеки musl. В качестве эмулятора терминала для работы с подобным окружением задействован Xterm.js. Отдельно запущен демонстрационный сайт, позволяющий оценить работу порта без самостоятельно компиляции. Заявлена полная поддержка браузеров на движке Chromium и частичная поддержка Firefox, в котором ограничены возможности отладки. На современных компьютерах загрузка Wasm-сборки ядра в браузере занимает менее секунды.
Проект развивается уже около двух лет и на текущем этапе позволяет загружать ядро в браузерах и выполнять типовые программы. Работа ещё не завершена и порт имеет отдельные проблемы и ограничения. Например, ещё не реализована поддержка вызовов vfork и longjmp (к BusyBox применены патчи для работы без них), отсутствует возможность прерывания задач, недоступен MMU (ядро и процессы работают в одном адресном пространстве), невозможно изменение уже загруженного кода, наблюдается зависание консоли примерно через 5 минут из-за проблем с таймером. Отмечается, что имеющиеся ограничения преодолимы, но для некоторых из них требуется реализация в браузерах дополнительных расширений к WebAssembly. Подобные расширения предложено реализовать для MMU и приостановки потоков.
Невозможность приостановки выполнения потоков в WebAssembly не сочетается с работой планировщика задач в ядре, но многозадачность удалось реализовать обходным путём, через привязку каждого потока/задачи к своему виртуальному CPU, обрабатываемому в отдельном Web Worker. Таким способом удалось добиться параллельного выполнения процессов за счёт браузерного движка и ядра хостовой ОС без использования вытесняющей многозадачности и переключения задач в запускаемом в браузере ядре. Прерывания и сигналы при такой схеме полноценно не работают, а для доставки прерываний таймера и IPI (Inter-Processor Interrupt) задействован отдельный виртуальный CPU.
Область применения проекта выходит за рамки простого запуска Linux-окружений в браузерах. Например, порт может применяться для создания многоплатформенных WebAssembly программ, использующих специфичные для Linux системные вызовы. Реализация подобных системных вызовов может быть отдельно преобразована в WebAssembly и прикреплена к приложению, что позволит использовать его без привязки к системному ядру. Порт также будет полезен для организации изолированного выполнения приложений при помощи WASI (WebAssembly System Interface).
Из планов упоминаются эксперименты с реализацией поддержки графики в окружениях c ядром, собранным в WebAssembly - на базе браузерного API WebGL планируют реализовать EGL и обеспечить работу OpenGL ES. Также планируется реализовать поддержку отладочного формата Dwarf для построчной отладки кода.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=64163