Независимый разработчик успешно портировал классический шутер от первого лица DOOM на собственную виртуальную машину WebAssembly, сочетая ретро‑инженерию игр с достижениями в области формальной верификации. Проект, представленный на этой неделе, демонстрирует, что настраиваемая, математически обоснованная среда выполнения может исполнять сложное, реальное приложение, сохраняя показатели производительности и гарантии безопасности.
Виртуальная машина реализует базовые возможности WebAssembly вместе с WASI для переносимых системных интерфейсов, позволяя DOOM загружать оригинальные ресурсы WAD, выводить графику и обрабатывать ввод и звук без платформо‑зависимого кода. Порт справился с давними особенностями кодовой базы — арифметикой с фиксированной запятой, таймингом на тиках, файловым вводом‑выводом и выравниванием памяти — в изолированной «песочнице», ограничивающей доступ игры только теми возможностями, которые выданы при запуске.
Чтобы обеспечить корректность, разработчик формально специфицировал и машинно проверил семантику инструкций и модель памяти, используемые интерпретатором, нацелившись на такие свойства, как безопасность работы с памятью и целостность потока управления. Среда выполнения была валидирована с помощью дифференциального тестирования по сравнению с признанными движками и фаззинга, основанного на свойствах, по путям исполнения ВМ для выявления граничных случаев. Ранние бенчмарки показывают конкурентоспособную производительность и детерминированное поведение на разных платформах, что позволяет предположить: формальные методы вовсе не обязательно влекут за собой высокие издержки времени выполнения.
Этот результат указывает на практический путь запуска унаследованного ПО в проверяемых песочницах, что имеет значение для образования, исследований и безопасного распространения классических игр. В дальнейших планах — расширить покрытие инструкций, усовершенствовать JIT‑компиляцию и опробовать дополнительные игры, позиционируя виртуальную машину одновременно как учебный инструмент по формальным методам и как испытательный полигон для исполнения WebAssembly следующего поколения.