Въведен е порт на ядрото Linux за WebAssembly, работещ в браузъра

В пощенския списък на разработчиците на ядрото Linux Публикувани са пачове, имплементиращи Wasm архитектурата за ядрото. Linux, което позволява ядрото да бъде компилирано в междинен код на WebAssembly за последващо директно изпълнение в уеб браузър без използването на емулатори. В допълнение, за ядрото Linux проектом реализована возможность запускать исполняемые файлы в формате «.wasm» и подготовлен драйвер «web console» для симуляции работы с консолью в браузере. Также подготовлен инструментарий для упрощения сборки запускаемых в браузере системных окружений.

Като пример е създадена среда с помощта на пакета помощни програми BusyBox и системната библиотека musl, компилирана в WebAssembly. Xterm.js се използва като терминален емулатор за работа с тази среда. Стартиран е отделен демонстрационен сайт, който позволява на потребителите да оценят порта, без да го компилират сами. Декларирана е пълна поддръжка за браузъри, базирани на Chromium, и частична поддръжка за Firefox, който има ограничени възможности за дебъгване. На съвременните компютри зареждането на ядрото на Wasm в браузър отнема по-малко от секунда.

Проектът е в процес на разработка от около две години и в момента позволява зареждане на ядрото в браузъри и изпълнение на стандартни програми. Работата все още не е завършена и портът има някои проблеми и ограничения. Например, поддръжката за vfork и longjmp извиквания все още не е внедрена (BusyBox е закърпен, за да работи без тях), няма възможност за прекъсване на задачи, MMU е недостъпен (ядрото и процесите се изпълняват в едно и също адресно пространство), невъзможно е да се модифицира вече зареден код, а конзолата замръзва след около 5 минути поради проблеми с таймера. Отбелязва се, че съществуващите ограничения са преодолими, но някои от тях изискват внедряването на допълнителни разширения към WebAssembly в браузъри. Подобни разширения са предложени за MMU и спиране на нишки.

Невъзможността за паузиране на изпълнението на нишки в WebAssembly е в конфликт с планировчика на задачите на ядрото, но многозадачността беше реализирана чрез заобиколно решение чрез присвояване на всяка нишка/задача на собствен виртуален процесор, изпълняван в отделен Web Worker. Този подход позволи паралелно изпълнение на процеси, използвайки двигателя на браузъра и ядрото на хост операционната система, без да се прибягва до превантивна многозадачност или превключване на задачи в ядрото на браузъра. Прекъсванията и сигналите не са напълно функционални в тази конфигурация и се използва отделен виртуален процесор за доставяне на прекъсвания от таймер и IPI (Inter-Processor Interrupt).

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

Плановете включват експерименти с имплементиране на графична поддръжка в среди с ядро, изградено на WebAssembly. Те планират да имплементират EGL и да поддържат OpenGL ES, използвайки WebGL API на браузъра. Те също така планират да внедрят поддръжка за формата за дебъгване Dwarf за дебъгване на код ред по ред.

Източник: opennet.ru

Купете надежден хостинг за сайтове с DDoS защита, VPS VDS сървъри 🔥 Купете надежден уеб хостинг със защита от DDoS атаки, VPS VDS сървъри | ProHoster