Обычно фраза «Linux в браузере» означает либо удалённый сервер с веб-SSH, либо какой-нибудь облачный шелл с авторизацией через Google и ограничением в час. LinuxOnTab — другое. Это буквально x86-процессор, эмулированный через WebAssembly прямо в вашей вкладке, с настоящим ядром Linux 6.12.13 и Alpine Linux поверх. Сервер не участвует. Docker-демон не нужен. Если загрузился — можно работать офлайн.
Проект опенсорсный, живёт на GitHub и уже работает в продакшене по адресу linuxontab.com. Под капотом — эмулятор v86 от copy.sh (BSD 2-Clause), терминал xterm.js от Microsoft, сетевой стек на базе WISP и опциональный социальный слой через протокол Nostr. Звучит как экзотика, но работает неожиданно стабильно.
Как LinuxOnTab запускает реальное ядро Linux в браузере
v86 — это эмулятор x86-архитектуры на JavaScript и WebAssembly. Он честно эмулирует процессор, BIOS, диск, сеть — всё что нужно, чтобы загрузить ISO-образ. LinuxOnTab упаковывает в это ядро Linux плюс Alpine Linux userland и при открытии вкладки просто «включает компьютер» в браузере.
Загрузка занимает несколько секунд на нормальном железе: браузер скачивает ISO (несколько десятков мегабайт), WASM-бинарь эмулятора, BIOS-файлы (SeaBIOS + VGABios) и запускает всё это в WebWorker. После этого в xterm.js появляется знакомый логин-промпт Alpine. Можно набрать apk add python3 — и это реально работает, потому что сеть внутри VM пробрасывается через WISP-прокси.
Состояние машины сохраняется через IndexedDB: можно сделать снапшот, закрыть вкладку, открыть — и продолжить работу с того же места. Это не сессия на сервере, данные лежат в браузере пользователя.
Что входит в проект помимо терминала
LinuxOnTab — не просто веб-терминал. Там три независимых компонента:
- Shell — сам v86 + xterm UI с поддержкой Cmd/Ctrl+C, вставки, выделения. Файловый менеджер в боковой панели с drag-and-drop разделителем и полноэкранным режимом.
- Port tunnels — механизм, позволяющий пробросить TCP-порт из VM наружу. Запускаете
wget -qO- https://linuxontab.com/local/tunnel-up.sh | shвнутри Alpine, получаете код. С хост-машины подключаетесь по SSH:sh <(curl -sS https://linuxontab.com/local/tunnel-listen.sh) CODE. Это реально работающий SSH-доступ к вашей браузерной машине. - Social layer — публичные папки через протокол Nostr. Спорная фича: по задумке это что-то вроде «расшарить файлы без сервера», но Nostr-инфраструктура всё равно нужна, так что полной децентрализации тут нет.
LinuxOnTab vs Docker vs облачный шелл: где что уместно
| Сценарий | LinuxOnTab | Docker | Cloud shell |
|---|---|---|---|
| Быстрый disposable-шелл без установки | Отлично | Нужен демон | Нужна учётка |
| Работа офлайн после загрузки | Да | Да | Нет |
| Воспроизводимые сборки | Слабо | Сильно | Умеренно |
| Обучение и демонстрации | Отлично | Избыточно | Умеренно |
| Производительность CPU-задач | Плохо (эмуляция) | Нативная | Нативная |
| Стоимость | Браузерная RAM | Overhead демона | $/час |
Честные ограничения: за что LinuxOnTab платит ценой эмуляции
Главная честная претензия к проекту — производительность. v86 эмулирует x86 через WASM, и это интерпретация, а не JIT в полном смысле. Компиляция даже простых C-программ будет заметно медленнее нативной. Про какие-то вычислительные задачи или нагрузочное тестирование — забудьте. Это инструмент для обучения, экспериментов, быстрых проверок, изолированных скриптов.
Второй момент — сеть внутри VM идёт через WISP-прокси на Fly.io, а тоннели — через Cloudflare Workers. Значит, для части функций (networking, tunnels) нужны работающие внешние сервисы. Если вы деплоите LinuxOnTab у себя — придётся поднять весь стек: CF Workers для relay и tunnel, Fly.io для WISP и туннельного фолбека. Это несложно, но не «просто скопировал папку».
Третий момент: большие бинари (ISO, WASM, BIOS-файлы) хранятся в Git LFS. После клонирования репозитория нужно дополнительно запустить git lfs pull, иначе файлы окажутся заглушками. Новичков это регулярно путает.
LinuxOnTab — это не замена Docker для продакшена и не конкурент WSL. Это disposable Linux-окружение для людей, у которых нет прав устанавливать софт, или которым нужен изолированный шелл здесь и сейчас без какой-либо подготовки.
Быстрый старт: запустить LinuxOnTab локально за две минуты
Если хочется потрогать без деплоя — просто клонируйте репозиторий и поднимите локальный HTTP-сервер:
git clone https://github.com/kilian-ai/linuxontab
cd linuxontab
git lfs pull
cd shell
python3 -m http.server 8000
Открываете http://localhost:8000/?autoboot=1&iso=alpine.iso — через несколько секунд видите Alpine. Файлы file:// тоже работают напрямую через shell/index.html, но HTTP лучше из-за CORS.
Для деплоя на своём домене: GitHub Pages для фронта, два Cloudflare Workers для relay и tunnel, опционально Fly.io для WISP. Инструкция в README на GitHub подробная и рабочая — авторы явно проходили этот путь сами.
Социальный слой на Nostr — зачем и работает ли
Это, пожалуй, самая спорная часть проекта. Идея: у каждого пользователя есть «публичная папка» внутри VM, которая публикуется через Nostr-протокол и доступна другим по коду. Что-то вроде децентрализованного file sharing без центрального сервера.
На практике Nostr-signing всё равно требует либо собственного REST-эндпоинта (linuxontab-api.fly.dev), либо внешнего клиентского инструмента вроде nak или nostril. Полной автономности нет. Для большинства пользователей эта фича, скорее всего, останется невостребованной — шелл и туннели интереснее.
FAQ: частые вопросы про Linux в браузере
Нужен ли интернет для работы после загрузки? Нет. После того как ISO и WASM загружены, сам Linux работает офлайн. Но apk add и сетевые команды внутри VM — через WISP-прокси, то есть требуют интернета. Можно ли запустить на Android/iOS? Технически — да, если браузер поддерживает SharedArrayBuffer и WebAssembly (Chrome и Safari поддерживают). Но мобильные браузеры ограничивают RAM, так что тяжёлые задачи упрутся в OOM. Насколько это безопасно — запускать Linux-код в браузере? Код работает внутри WASM-sandbox браузера. Прямого доступа к файловой системе хоста у VM нет. Риски те же, что у любой WASM-нагрузки в браузере — то есть умеренные. Это поднятый сервер или действительно всё в браузере? Сам Linux — в браузере. Сетевой прокси (WISP) и туннельный сервис — внешние. Если деплоите сами, контролируете всю инфраструктуру. Можно ли форкнуть и заменить Alpine на другой дистрибутив? Да. В проекте уже есть поддержка нескольких ISO-файлов (linux.iso, linux3.iso, linux4.iso). Любой x86-дистрибутив, влезающий в разумный размер и не требующий слишком много RAM, теоретически загрузится.Итог: кому реально нужен LinuxOnTab
Преподавателям, которые хотят дать студентам Linux-шелл без боли с настройкой окружения. Разработчикам, которые пишут скрипты на чужом компьютере или корпоративном ноутбуке без прав администратора. Тем, кто хочет быстро протестировать bash-скрипт в чистой Alpine без поднятия VM или контейнера. И просто людям, которым интересно, как WebAssembly справляется с запуском реального ядра — потому что это само по себе технически впечатляет.
Для продакшена, воспроизводимых сборок и CPU-интенсивных задач — не подходит. Для всего остального — это удобнее, чем кажется на первый взгляд.