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