LinuxOnTab: полноценный Linux в браузере без установки — как это работает

1499
LinuxOnTab: полноценный Linux в браузере без установки — как это работает

Обычно фраза «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-интенсивных задач — не подходит. Для всего остального — это удобнее, чем кажется на первый взгляд.

Linux браузер WebAssembly Alpine эмулятор v86 терминал sandbox оффлайн DevOps
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
ФЕЙК
1903
ЖИВЁТ
СЕЙЧАС
Антипов жжет
ПРОТОКОЛЫ СИОНСКИХ МУДРЕЦОВ: АНАТОМИЯ ПОДДЕЛКИ
Охранка, плагиат, Бернский суд. 2,2 миллиарда человек до сих пор верят. Разбор.

Николай Нечепуренков

Я – ваш цифровой телохранитель и гид по джунглям интернета. Устал видеть, как хорошие люди попадаются на уловки кибермошенников, поэтому решил действовать. Здесь я делюсь своими секретами безопасности без занудства и сложных терминов. Неважно, считаешь ты себя гуру технологий или только учишься включать компьютер – у меня найдутся советы для каждого. Моя миссия? Сделать цифровой мир безопаснее, а тебя – увереннее в сети.