Начало поисков
Меня давно занимал один несерьёзный вопрос: какая самая старая программа с графическим интерфейсом до сих пор запускается на Windows 11 без доработок и без эмуляции?
Обратная совместимость у Windows отличная, так что я ожидал найти что-нибудь впечатляюще древнее.
Увы, 16-битные программы для Windows сама Windows 11 запускать не умеет: в 64-битной Windows нет NTVDM. Значит, искать придётся среди программ ранней эпохи NT.
Когда-то я задал этот вопрос на анонимном форуме, и мне посоветовали посмотреть на Win32s: найти одну из первых его версий, в комплекте с которой шёл FREECELL.exe.
Так я и сделал. И правда: FREECELL.EXE с датой изменения 22-Feb-93 запускается на последней версии Windows 11 без каких-либо правок, и в него можно полноценно играть:

На момент написания поста этой программе 33 года и 8 месяцев. Она почти моя ровесница, и это впечатляет.
Я подумал «прикольно», счёл загадку разгаданной и вскоре о ней забыл. Но недавно вопрос почему-то снова всплыл в голове, и на этот раз я решил копнуть глубже: вдруг найдётся что-нибудь старше.
Копаем дальше
Я перебирал старые версии Windows в Internet Archive и нашёл несколько ранних предрелизных сборок NT 3.1, которые выглядели многообещающе. Но основная проблема, по-видимому, заключалась либо в несовместимости с нынешним форматом исполняемых файлов, либо в изменениях API, сделанных позже в ходе разработки.
Самые ранние версии 1991 года использовали черновой вариант формата PE, несовместимый с современной Windows. А сборки до середины 1992 года при вызовах Windows API рассчитывали на соглашение о вызовах cdecl, а не stdcall. Из-за этого аргументы снимались со стека дважды:
push hwnd ; 4 bytes of args call [ShowWindow] ; Win11 ShowWindow is stdcall, ends with "ret 4" and removes them add esp, 4 ; the 1992 caller removes them again
Прим. пер.: в комментариях к коду сказано, что вызывающий код кладёт на стек 4 байта аргументов, ShowWindow в Windows 11 следует stdcall и сама убирает их инструкцией ret 4, а код 1992 года после возврата снимает те же байты ещё раз. Пример у автора упрощён: на самом деле ShowWindow принимает два аргумента, то есть 8 байт на 32-битном x86, и заканчивается ret 8. Суть от этого не меняется: аргументы со стека снимаются дважды, и указатель стека после вызова оказывается не там, где его ждёт программа.
Понятно, что программа от такого падает.
Одно приложение всё же привлекло моё внимание. Это CDPLAYER.EXE из сборки 347, собранный (слинкованный) 16-Nov-1992. К тому времени соглашение о вызовах уже исправили, но остальные программы из этой сборки падают внутри своей встроенной библиотеки времени выполнения C. CDPLAYER.EXE этой участи избегает: он пользуется системной crtdll.dll, а Windows 11 до сих пор поставляет crtdll.dll в SysWOW64.
Если запустить программу, вы увидите примерно такое:

Ну да, конечно: в моём компьютере нет привода CD-ROM. Но его можно сэмулировать небольшой DLL (cdemu.dll), которая подсовывает поддельные аудиоданные, и тогда программа действительно играет звук:

Неплохо для программы, которой почти 34 года!
А если схитрить?
Выше я говорил, что 16-битные программы выбывают из игры, потому что их больше не поддерживают.
Но при желании старые программы для Windows можно запустить через что-нибудь вроде otvdm.
Вот, полюбуйтесь: на Windows 11 работает полностью играбельный REVERSI.EXE с датой 15-Nov-1985, взятый из Windows 1.01:

Использовать otvdm — это, конечно, немного жульничество, но результат показался мне слишком классным, чтобы не включить его в пост.
Комментарии (15)

MountainGoat
27.10.2026 06:17Игры 93-го нормально запускаются, при этом поиграть в игры 2003-го гораздо сложнее, до невозможности.

unreal_undead2
27.10.2026 06:17Игры 93-го нормально запускаются
Просто в Windows 11 без dosbox и т.п.?

BiTL
27.10.2026 06:17какие?

MountainGoat
27.10.2026 06:17Nox. Knights of the old Republic. Про обе игры есть истории где уже сторонние люди разбирали их и делали врапперы, чтобы просто поиграть игру.

BiTL
27.10.2026 06:17вы уверены, что это игры 93-го года? :)

MountainGoat
27.10.2026 06:17Нет, это игры из 2003-го.

BiTL
27.10.2026 06:17так вопрос был про вашу реплику "Игры 93-го нормально запускаются" :)
То что куча программ и игр из начала 2000-х уже не работают в современной винде это вообще не секрет. И не удивляет особо.
MountainGoat
27.10.2026 06:17А вы статью почитайте.
Так я и сделал. И правда:
FREECELL.EXEс датой изменения22-Feb-93запускается на последней версии Windows 11 без каких-либо правок, и в него можно полноценно играть:
unreal_undead2
27.10.2026 06:17Угу, одна нашлась. Вопрос только какой процент игр, вышедших под PC в 93ем, запустится на Windows 11 без сторонних средств.
Но соглашусь, что для большей части достаточно просто поставить dosbox, в то время как для игр конца 90х-начала нулевых нужны специфические танцы с бубном (где то есть новый open-source движок, где то правят старые бинарники, плюс подкладывание файликов, правка реестра...). Но чаще всего гугл, чтение форума old-games.ru и т.п. помогает.
zgwerby
У меня для автора исходной статьи плохие новости...
А если поиграть с определениями и специально для статьи подогнать дефиниции, то и NTVDM формально не будет VM, а точно таким же транслятором, который эмулирует систему DOS.
BiTL
и в чем плохие новости? NTVDM-то в современных виндовсах нет. Это, конечно, плохо, но не для автора статьи.
zgwerby
В том, что он все равно запускает софт в эмуляторе, пусть и урезанном до транслятора, а не напрямую, хотя и в заголовке, и в статье утверждается обратное, см. WoW64
BiTL
Ну, если без духоты, то видимо речь о том - какие старые программы запускаются в Windows 11 в базовой поставке, без помощи сторонних эмуляторов, враперов, хуяперов и танцев с бубенцами.