Ядро Linux адаптировали для работы в браузере через WebAssembly Обложка: Skyread

Ядро Linux адаптировали для работы в браузере через WebAssembly

Новости
Главное:

  • Разработан порт ядра Linux для WebAssembly, позволяющий запускать Linux непосредственно в браузере без эмуляторов.
  • Создано окружение с BusyBox и musl, демонстрирующее работу Linux в WebAssembly с использованием эмулятора терминала Xterm.js.
  • Проект находится в активной разработке, поддерживает многопоточное выполнение через Web Workers, но пока имеет ограничения, связанные с отсутствием MMU и ограничениями WebAssembly.

В рамках усилий по расширению возможностей WebAssembly (Wasm) для запуска операционных систем в браузерах была представлена первая тестовая версия порта ядра Linux под эту архитектуру. Новая реализация позволяет компилировать ядро Linux в WebAssembly и выполнять его напрямую в браузерных средах без необходимости использования традиционных эмуляторов.

Важной особенностью проекта является возможность запуска файлов формата «.wasm» внутри Linux, а также наличие драйвера web console, который эмулирует работу консоли прямо в браузере. Для упрощения сборки системных окружений в формате Wasm разработчики представили набор скриптов на GitHub в проекте Scripts for Building a Linux/Wasm Operating System.

Как демонстрация, сформировано окружение на базе популярных утилит BusyBox и системной библиотеки musl, с терминалом, реализованным посредством Xterm.js. Для оценки работоспособности порта доступен публичный демонстрационный портал, который поддерживает браузеры на движке Chromium практически полностью и частично — Firefox (с ограничениями для отладки). Загрузка ядра в современном браузере занимает менее секунды, что свидетельствует о высокой оптимизации сборки.

Несмотря на значительный прогресс, проект всё ещё находится в стадии активного развития и испытывает некоторые технические ограничения. Так, отсутствует поддержка системных вызовов vfork и longjmp, невозможна остановка задач, отсутствует MMU, что приводит к работе ядра и процессов в едином адресном пространстве. Также наблюдаются проблемы с таймерами, вызывающие зависания консоли через несколько минут работы.

Интересной технической особенностью стала реализация многозадачности через привязку каждого потока к виртуальному CPU, обрабатываемому своим Web Worker. Это позволяет выполнять параллельно несколько процессов без вытесняющей многозадачности и переключения контекста внутри браузерного ядра, что компенсирует ограничения WebAssembly по приостановке потоков и планировщику ядра Linux. Однако прерывания и сигналы пока работают не в полном объёме.

Перспективы использования порта выходят далеко за рамки простого запуска Linux в браузере. Разработчики видят потенциал в создании многоплатформенных приложений WebAssembly с системными вызовами Linux, а также для безопасного и изолированного исполнения программ с помощью WASI (WebAssembly System Interface). Среди планов на будущее — поддержка графических интерфейсов на базе WebGL, включая реализацию EGL и работу с OpenGL ES, а также внедрение отладочного формата Dwarf для улучшения процесса отладки кода.

Таким образом, проект порта ядра Linux для WebAssembly представляет собой значительный шаг в развитии веб-технологий и виртуализации ОС, открывая новые возможности для разработчиков и пользователей, заинтересованных в работе Linux-сред в браузерах без традиционных ограничений.

Tagged