В списъка с новините за разработчиците на ядрото на Linux са публикувани пачове с реализация на архитектурата «Wasm» за ядрото, която позволява компилирането на ядрото в междинен код WebAssembly за последващо директно изпълнение в уеб браузър, без да е необходимо използването на емулатори. Освен това, проектът е осигурил възможност за стартиране на изпълними файлове във формата «.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).
От плановете се споменават експерименти с реализиране на поддръжка на графика в среди с ядро, компилирано в WebAssembly — на базата на браузърния API WebGL планират да реализират EGL и да осигурят работа на OpenGL ES. Също така е планирано реализирането на поддръжка на дебъгинг формат Dwarf за стъпка по стъпка отстраняване на грешки в кода.
Източник: opennet.ru
