The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Представлен порт ядра Linux для WebAssembly, запускаемый в браузере

02.11.2025 11:47

В списке рассылки разработчиков ядра Linux опубликованы патчи с реализацией архитектуры "Wasm" для ядра Linux, позволяющей компилировать ядро в промежуточный код WebAssembly для последующего прямого выполнения в web-браузере без задействования эмуляторов. Кроме того, для ядра 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).

Из планов упоминаются эксперименты с реализацией поддержки графики в окружениях c ядром, собранным в WebAssembly - на базе браузерного API WebGL планируют реализовать EGL и обеспечить работу OpenGL ES. Также планируется реализовать поддержку отладочного формата Dwarf для построчной отладки кода.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Опубликован стандарт WebAssembly 3.0
  3. OpenNews: Доступен Emscripten 4.0, компилятор из C/C++ в WebAssembly
  4. OpenNews: Доступен Wasmer 5.0, инструментарий для создания приложений на базе WebAssembly
  5. OpenNews: Анонсирован язык программирования Moonbit, оптимизированный для WebAssembly
  6. OpenNews: Разработчики ядра Linux на пути к удалению поддержки процессоров i486
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64163-kernel
Ключевые слова: kernel, linux, webassembly
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (59) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 12:00, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Chrome 109.0.5414.120 (32 бит), uBlock Origin 1.67.0 - консоль не работает.
     
     
  • 2.8, Аноним (8), 12:24, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Мобильный Firefox Fennec 144.0.0 (aarch64), uBlock Origin 1.67.0 — работает, ядро грузится секунды за две.
     
  • 2.9, Аноним (9), 12:27, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Ваш браузер устарел.
     
  • 2.11, AleksK (ok), 12:52, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Ты там на семерочке что ли сидишь? 109 хром кажется был последней версией хромого под семёрку.
     
     
  • 3.22, RM (ok), 13:52, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • –5 +/
    и васьмёрку, всего что до дисяточки
     
     
  • 4.56, aanon (?), 22:24, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    на дискетах
     
  • 2.20, RM (ok), 13:51, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    "я узнаю её из тысячи...." - версию
    А вот нечего пробовать запускать всякое баловство на [old] old old stable оффтопике.
    Хотя он и хороший ;)
    p.s. руками надо было ставить 109.0.5414.165
    хромиум ваапще есть .169 в исходниках.
     
  • 2.50, Пожилая лысая женщина (?), 18:24, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    На 7-ку есть Supermium, порт современного хромиума.
     
     
  • 3.51, Пожилая лысая женщина (?), 18:26, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А под линукс, увы, пока без подобного
     
  • 2.68, Аноним (68), 06:38, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Теперь то Linux, можно запустить на микроволновке.
     

  • 1.2, Аноним (2), 12:01, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сначала WSL, теперь это.
     
  • 1.3, nebularia (ok), 12:01, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    По описанию выглядит как едва работающий набор костылей с невнятной целью.
     
     
  • 2.24, hrmhmmhtbdr (?), 14:27, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну, есть какая-то готовая линуксовая софтина. Нужно её запустить в веб интерфейсе, а переписывать на яваскрипт - долго. Что делать?

    Можно, конечно, нагородить RDP + Guacamole. Но это нужен мощный сервер + будeт некоторые проблемы с задержкой сигнала. А можно запустить линукс (и эту линуксовую софтину) через WASM прямо в браузере.

     
     
  • 3.25, nebularia (ok), 14:28, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Есть же Emscripten, нафиг для этого ядро?
     
  • 3.60, Ангним (?), 00:47, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Даже интересно, что это может быть за уникальная софтина, которая работает только в консоли, и которую кровь из носа надо запускать у клиента.
    Если у них через два года работы консоль не может прожить больше пяти минут, сложно представить, когда дела дойдёт до.
     
  • 2.28, hrmhmmhtbdr (?), 14:48, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Emscripten позволяет компилировать сишный код под WASM. Лично я этим не пользовался, но судя по инструкциям, там куча "мелких нюансов". И потом: что, если сишного кода нет, а есть только исполняемый файл закрытой коммерческой софтины? А тут запускаешь ядро, запускаешь бинарник и работаешь.
     
     
  • 3.39, nebularia (ok), 16:28, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >  а есть только исполняемый файл закрытой коммерческой софтины? А тут запускаешь ядро, запускаешь бинарник и работаешь.

    Бинарник в какой архитектуре, боюсь спросить? Это же не эмулятор x86, тут как я понял нужно тоже скомпиленный в wasm софт.

     
  • 2.32, penetrator (?), 14:59, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    там чтобы зумммеры запустить докер и кубер, юный падаван
     
  • 2.48, Бертолетова соль (?), 18:18, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Как это с невнятной, что бы юзверю не пришлось корячится ставить Линукс что бы его потом обматерить и проклянуть
     
  • 2.55, Аноним (55), 20:19, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да как раз вполне понятный, но чтобы понять надо немного в современных технологиях разбираться. И это явно не про местную публику.
     

  • 1.5, kravich (ok), 12:04, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Вряд ли нужно
     
     
  • 2.27, Аноним (27), 14:48, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Если это избавить от браузера с его стуками, то почему нет? Для кроссплатфоменных и кроссархитектурных сборок пакетов.
     

  • 1.12, Аноним (12), 12:56, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    хоть где-то 'rm -rf /' попробую
     
  • 1.15, Аноним (15), 13:33, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Эта гадость требует сервисворкеров и имеет какую-то неполадку, связанную с CSP, от которой ломается в файрфоксе при наличи аддонов. При этом совершенно не понятно, нахрена там сервис воркеры, для оных вообще не существует легитимных применений в принципе
     
     
  • 2.18, Аноним (18), 13:47, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    чукча не читатель, чукча - писатель?
    в тексте самой новости указано зачем оно их юзает
     
     
  • 3.37, Аноним (37), 16:18, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не читатель это ты. Web Workers - это фоновые потоки, которые работают пока вкладка открыта, и без доступа к IO, чисто посчитать. А Service Workers - это способ сайту закинуть тебе на комп поток, который будет домой звонить, даже когда ты сайт закроешь и об его существовании забудешь, именно благодаря им тебе вылезают всплывающие уведомления с рекламой после того, как на одном из сайтов ты их разрешил, потому что если бы не разрешил - то прошёл бы в пешее.
     
     
  • 4.82, Аноним (82), 19:13, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    То есть погоди-ка... Если уведомления пришли, потому что ты разрешил уведомления... То может быть просто не стоило разреш-... Хм... Погоди-погоди, пытаюсь мысль сформулировать. Вот смотри: есть уведомления. Ты их разрешил. Потом они предсказуемо пришли... Следовательно... ... Все, я устал. Слишком сложная логика получается...
     

  • 1.16, Аноним (15), 13:35, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >недоступен MMU

    Ядро же дропнуло все системы без MMU...

     
  • 1.17, Аноним (15), 13:37, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >Порт также будет полезен для организации изолированного выполнения приложений при помощи WASI (WebAssembly System Interface).

    Да там потоков нет (типа есть, но что-то абсолютно ни в одном рантайме не работают), что ставит полный крест на сколько-нибудь полезных приложениях.

     
     
  • 2.26, hrmhmmhtbdr (?), 14:32, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    "сколько-нибудь полезный" != "требующий мощного процессора и многопоточности"
     
     
  • 3.38, Аноним (37), 16:19, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Сколько-нибудь полезное любое приложение завязано на потоки. А игрушку можно и без васма на яваскрипте написать.
     

  • 1.19, Аноним (19), 13:51, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Крутяк, скоро можно будет майнер в браузере реализовать. Жаль сеть пока не поддерживается.
     
     
  • 2.34, penetrator (?), 15:09, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    а какая проблема JS дернуть и fetch/XHR?
     
  • 2.70, DeepDick (-), 07:40, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Давным-давно на некоторых страницах существуют встроенные майнеры. Странно, что вы об этом не слышали. Сейчас, правда, лавочку вроде прикрыли какими-то обновлениями безопасности, но лет 5–6 назад это было повсеместно.
     

  • 1.21, Аноним (21), 13:52, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    Где-то инновации свернули куда-то не туда.
     
  • 1.33, Аноним (27), 15:02, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > наблюдается зависание консоли примерно через 5 минут из-за проблем с таймером

    Т.е. в браузере нужно улучшить таймер. А для чего его ухудшили? А Spectre не спят ;)

     
  • 1.35, penetrator (?), 15:13, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Например, порт может применяться для создания многоплатформенных WebAssembly программ, использующих специфичные для Linux системные вызовы.

    какой же бред написан )))

     
     
  • 2.43, Аноним (43), 17:31, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Сама идея ядра Linux, запускаемого в браузере уже клинически бредовая.
    Сдается мне, что обсуждение этой идиотской идеи нужно исключительно для убеждения инвесторов в стартап.
     
     
  • 3.46, Аноним (46), 17:53, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    WASM и без браузера бывает, но откуда тебе об этом знать?
     

  • 1.36, Шизгорин (?), 15:27, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Я конечно ожидал, что браузер будет PID 1, но не ожидал что это будет в другую сторону.
     
     
  • 2.41, Аноним (41), 16:35, 02/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А если запустить в браузере ядро и там запустить браузер и ещё одно ядро кто с какой стороны будет?
     

  • 1.42, L10N (ok), 16:42, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Ну, пусть будет и это. Больше - не меньше. Ubuntu 25.10, Firefox 145.0b9 полёт нормальный :)
     
  • 1.54, Аноним (54), 19:00, 02/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А будут ли вертуальные машины работать?
     
  • 1.61, Джон Титор (ok), 01:25, 03/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Эх, а если на компьютере будет только браузер, то и ОС можно продавать по подписке.
     
  • 1.62, ъ (?), 01:38, 03/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Run Linux or other Operating Systems in your browser!

    https://www.bellard.org/jslinux/

    JSLinux - Technical Notes https://bellard.org/jslinux/tech.html
    History
    This emulator has a long history. The current version is based on TinyEMU and compiled to Javascript or WASM with emscripten.

    In 2011 I wrote the initial version of JSLinux, the first PC/x86 emulator in Javascript running Linux. I reused parts of another of my emulators (QEMU) for the x86 helpers and the devices.

    After some time (2015), I modified it to use the asm.js Javascript subset so that it is faster with the browsers supporting it.

    In 2016, after having written TinyEMU, initially a RISC-V emulator, I decided to make a Javascript version from its C code by using emscripten. I added a VirtIO 9P filesystem inspired by the one in jor1k by Sebastian Macke so that it is easier to use remote filesystems and to import or export files.

     
  • 1.64, mumu (ok), 02:33, 03/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    На этом фоне даже ReactOS выглядит уже чем-то адекватным.
     
  • 1.65, Аноним (65), 04:15, 03/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сделал примитивный математический бенчмарк на AWK.
    --
    awk 'BEGIN { i=0; while(i < 10000000) { i++; x = i * i / 3.14159; } }'
    --
    нативно 0.781 ms
    Firefox ~10 s
    Chromium ~9 s

    Т.е. примерно в 12 раз медленнее.

     
     
  • 2.75, Аноним (75), 12:36, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Учти, что в этом демо awk из busybox, а не из GNU Coreutils. Сравнил у себя на пк твой бенчмарк: 0.28s в GNU awk, 5.43s в busybox awk. В демо нет утилиты time, так что замерял секундомером, и у меня вышло 5.22s в Firefox, 5.79s в Chrome.
     

  • 1.67, DeepDick (-), 05:10, 03/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Отдельно запущен демонстрационный сайт

    Забавно. Вкладка сразу съела 1 гигабайт. Теперь вопрос! Как так выходит, что в мой роутер с 8 мегабайтами умещаются не только ядро и busybox, но и полноценный Linux в виде OpenWrt?

     
     
  • 2.77, Аноним (77), 13:24, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Врешь ведь. 8 мегабайт - это флешка была, а памяти там было 32. И OpenWRT дропнул все 8/32, потому что эти блоатварщики не осилили даже просто ядро туда втиснуть. А на стоке к эти 32 втискивалось всё, и ядро, и веб-интерфейс, и торрент-клиент, и DLNA-сервер, и udpxy, и WPA2-клиент, и точка доступа. А на издыхании OpenWRT на последних версиях даже ядро не работало - памяти не хватало чтобы свитч инициализировать. А на одной из предыдущих к последней версии влезал только самый кастрированный вариант wpa supplicant, без WPS и WPA3, и больше не влезало ничего. Это OpenWRT всё изгадил. Я не знаю, как именно конкретно они изгадили, но подозреваю, что это может быть связано с ASLR, PIC и прочими митигациями уязвимостей через добавление лишнего кода.
     
     
  • 3.81, DeepDick (-), 18:23, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > 8 мегабайт - это флешка была, а памяти там было 32.

    О да, разница невероятная. Это не какой-то там гигабайт с одним busybox.

     

  • 1.74, beck (??), 11:40, 03/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не очень понимаю, как это практически применить.

    Кто-то может описать реальный, мнэ, юзкейс, для чего это? А не "ну вот допустим есть одна программа..."

     
     
  • 2.76, Аноним (75), 12:41, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну может для пользователей iOS (и Android когда окончательно станет помойкой) будет полезно чтобы иметь такой вот линух в виде отдельного приложения через Progressive Web App.
    Если кто-нибудь сделает реально полноценный линух с Wayland на wasm, то получится удобная запаска на критичные случаи когда срочно нужно что-нибудь десктопное, а сам десктоп временно достать не получится.
    Но это всё игрушки.
     
     
  • 3.83, beck (??), 19:54, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну может для пользователей iOS (и Android когда окончательно станет помойкой) будет полезно чтобы иметь такой вот линух в виде отдельного приложения через Progressive Web App

    Вот я и хочу понять,  доя чего это может быть нужно?

     

  • 1.78, анондр (?), 13:29, 03/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    CheerpX давно это умеет. copy/v86 запускает любые ОС в браузере. Wasm.
     
     
  • 2.79, Аноним (75), 13:43, 03/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    CheerpX и copy/v86 это эмуляторы архитектуры x86 на JavaScript. Этот порт напрямую запускается на WebAssembly, без эмуляторов
     

  • 1.80, Stanislavvv (ok), 16:51, 03/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно, а гуй у этого линукса запустить можно?
    Не то чтобы мне нехватило обычного гуя, но вот посмотреть на браузер в браузере не отказался бы :-)
     
  • 1.84, Александр (??), 05:56, 04/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хммм. Берём WASI, собираем под UEFI (ароде даже где-то было). Запускаем этот линукс под WASI. Итог: имеем истинно кроссплатформенный линукс!
     
  • 1.85, Аноним (85), 06:45, 04/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ждем запуска браузера внутри ядра линукс)))
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру