В списъка на разработчиците на 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 на базата на браузърния API WebGL и предоставяне на OpenGL ES. Планира се също така да се реализира поддръжка на формата за отстраняване на грешки Dwarf за отстраняване на грешки в кода ред по ред.
Всичко важно от света на технологиите, директно в пощата ти.
С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.
Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!