Введение: Цифровая археология и вызов времени

Помните этот звук? Скрежет дисковода, легендарный аккорд запуска Windows 95 или писк встроенного спикера в DOS. Сегодня вся эта цифровая эстетика рискует исчезнуть: старое железо умирает, а дискеты размагничиваются. Но что, если вернуть те самые ощущения можно в один клик, прямо во вкладке браузера, пока вы пьете утренний кофе? Без установки тяжелых виртуалок и поиска чистых ISO-образов.

Софт умирает тихо и незаметно. Когда ломается последний накопитель на гибких магнитных дисках или выходит из строя старый кремниевый процессор, целая эпоха цифровой культуры превращается в мертвый код. Мы можем читать статьи о Windows 95, изучать скриншоты NeXTSTEP или смотреть ролики на YouTube, но это не заменяет главного — тактильного, интерактивного опыта взаимодействия с системой.

Да, есть классические эмуляторы вроде VirtualBox, QEMU или PCem. Но порог входа для обычного пользователя слишком высок: нужно найти чистый образ диска, правильно настроить параметры виртуального железа, выделить оперативную память, разобраться с прерываниями IRQ и решить проблемы с совместимостью драйверов (в общем, развлечение на уровне ручной настройки Kubernetes-кластера в пятницу вечером). Мало кто захочет тратить два часа на настройку эмулятора только для того, чтобы пять минут поностальгировать по интерфейсу Windows 3.11 или посмотреть на легендарный рабочий стол BeOS.

Так родилась идея создать виртуальный интерактивный музей операционных систем, работающий непосредственно в браузере. Идея проста: пользователь заходит на сайт, выбирает любую систему из списка, нажимает кнопку «Запустить» и через несколько секунд получает полностью рабочую ОС в окне своего браузера — без плагинов, без установки стороннего ПО, с поддержкой сети, звука и возможностью сохранять состояние. В этой статье я подробно расскажу, как спроектировал архитектуру этого проекта, с какими техническими трудностями столкнулся и как заставил работать десятки операционных систем на базе WebAssembly.

Архитектура проекта: как запустить x86 в браузере

Главный вопрос, который встает при проектировании подобного музея: как перенести чуждую для веба архитектуру x86 (и других процессоров) в песочницу браузера? Нам нужен эмулятор, скомпилированный в WebAssembly, который сможет транслировать инструкции гостевой ОС в инструкции хост-системы с минимальными потерями производительности. Как заставить браузер поверить, что он — это старый добрый ПК с процессором Pentium? (И сделать это так, чтобы Chrome не сожрал всю оперативную память хоста, как он обычно делает при трех открытых вкладках Stack Overflow).

Для реализации проекта я проанализировал несколько существующих решений:

  • PCjs: Отличный эмулятор на чистом JavaScript, идеально подходящий для ранних PC (IBM PC XT, старые терминалы). Однако для тяжелых систем вроде Windows 98 или Linux с графической оболочкой его производительности катастрофически не хватает.
  • JS-DOS (на базе DOSBox): Великолепное решение для DOS-игр и самой DOS. Он оптимизирован для работы с DOS-окружением, но запустить на нем полноценную многозадачную ОС вроде Windows NT или BeOS крайне проблематично.
  • v86: Это шедевр инженерной мысли. Эмулятор аппаратного обеспечения x86, написанный на Rust и скомпилированный в WebAssembly. Он эмулирует процессор Pentium-совместимого уровня, VGA-видеокарту, сетевой адаптер NE2000, звуковую карту SoundBlaster 16, IDE-контроллеры, клавиатуру, мышь и системный таймер. Именно v86 стал основным движком моего музея.

Для систем, отличных от архитектуры x86 (например, классических Macintosh на процессорах Motorola 68k или PowerPC), пришлось интегрировать специализированные WASM-порты эмуляторов Basilisk II и SheepShaver. Архитектура нашего музея в итоге приобрела модульный вид:

Пользовательский интерфейс (React) ➔ Оркестратор эмуляторов (JS API) ➔ WASM-ядро (v86 / JS-DOS / Basilisk) ➔ Отрисовка на Canvas + Звук через Web Audio API + Сеть через WebSocket-прокси.

Каждая операционная система запус