Comments 19
Мда… а я тут пол дня менюшку сверстать не могу, чтобы работала так, как я хочу...
Проблема в том, что Linux kernel мы любим за то, что оно умеет запускать бинарники. То есть всё равно упираемся в эмуляцию процессора. Или вы имеете в виду, чтобы в бинарниках для этой архитектуры тоже лежал JavaScript? Хотя, если к получившемуся ядру прикрутить Qemu в user-mode (или как оно называется) — эмуляцию процессора в пределах одного процесса… :) Да и с возможностью собрать Linux не с помощью gcc могут быть проблемы.
Невероятно интересно. Попробуйте в WebAssembly скомпилить. Должно быть гораздо лучше в плане скорости. Ну и применимости.
Можно поподробнее?
Если я правильно понял, то я у себя дома не смогу повторить эксперимент, потому что мне нужен патченный вашими патчами Emscripten?
Другими словами, было бы очень не плохо увидеть инструкцию по повторению всей сборки.
P.S. Я могу взяться помочь с проталкиванием и ревью патчей в Emscripten. (Уже делал это ранее).
Ещё раз спасибо. На самом деле, кое-какая инструкция есть, просто придётся подцепить изменения из моего форка репозитория Emscripten.
К тому же, например, у меня есть некая реализация системного вызова pipe2
, которой, вроде, хватило, чтобы заработали всякие wakeup-ы. Но я видел обсуждение того, как правильно это реализовать — когда они это доделают "по науке", мой костыль будет не нужен, а пока пользуюсь своей реализацией.
Теоретически, она должна была закончиться второй статьёй и финальной (точнее, стабильной и замороженной) версией, но она ещё не готова — вечно находится что-нибудь более интересное и перспективное. На данный момент многие мелкие доделки запуллреквесчены в Emscripten и есть прототип с трансляцией уже в WASM (и честным TCG-бекендом) — он, вроде, существенно отзывчивее и весит поменьше, но есть один маленький нюанс: отсутствует поддержка блочных устройств. Дело в том, что они в QEMU традиционно делаются через корутины, а корутины поддержать в JS или WASM проблематично (нет низкоуровневых манипуляций стеком и с потоками некоторые проблемы), поэтому они делаются через предоставленный Emscripten-ом интерпретатор (Emterpreter). Заставить компилятор разделить код на интерпретируемую и "нативно" запускаемую часть в этот раз, увы, не получилось. Нужно ещё попробовать.
Если интересно, вот здесь есть обсуждение реализации Binaryen TCG Backend. Здесь — прототип, но в Хроме от него быстро падает вкладка (не готовы они к тому, что будет больше ~1000 WASM-модулей), ну и с лицензией у него есть некие шероховатости — QEMU как целое распространяется под GPLv2, а Binaryen — под Apache 2.0. Они говорят, что есть надежда это как-то "починить".
Qemu.js с поддержкой JIT: фарш всё же можно провернуть назад