Начало поисков

Меня давно занимал один несерьёзный вопрос: какая самая старая программа с графическим интерфейсом до сих пор запускается на Windows 11 без доработок и без эмуляции?

Обратная совместимость у Windows отличная, так что я ожидал найти что-нибудь впечатляюще древнее.

Увы, 16-битные программы для Windows сама Windows 11 запускать не умеет: в 64-битной Windows нет NTVDM. Значит, искать придётся среди программ ранней эпохи NT.

Когда-то я задал этот вопрос на анонимном форуме, и мне посоветовали посмотреть на Win32s: найти одну из первых его версий, в комплекте с которой шёл FREECELL.exe.

Так я и сделал. И правда: FREECELL.EXE с датой изменения 22-Feb-93 запускается на последней версии Windows 11 без каких-либо правок, и в него можно полноценно играть:

FREECELL.EXE 1993 года
FREECELL.EXE 1993 года

На момент написания поста этой программе 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.

Если запустить программу, вы увидите примерно такое:

CDPLAYER.EXE: привод CD-ROM не найден
CDPLAYER.EXE: привод CD-ROM не найден

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

CDPLAYER.EXE с эмулированным CD-ROM
CDPLAYER.EXE с эмулированным CD-ROM

Неплохо для программы, которой почти 34 года!

А если схитрить?

Выше я говорил, что 16-битные программы выбывают из игры, потому что их больше не поддерживают.

Но при желании старые программы для Windows можно запустить через что-нибудь вроде otvdm.

Вот, полюбуйтесь: на Windows 11 работает полностью играбельный REVERSI.EXE с датой 15-Nov-1985, взятый из Windows 1.01:

REVERSI.EXE из Windows 1.01 на Windows 11
REVERSI.EXE из Windows 1.01 на Windows 11

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

Комментарии (15)


  1. zgwerby
    27.10.2026 06:17

    WoW64 (Windows-on-Windows 64-bit) - подсистема операционной системы Windows, позволяющая запускать 32-битные приложения на всех 64-битных версиях. Подсистема Wow64 эмулирует 32-битное окружение, за счет дополнительной прослойки между 32-битным приложением и 64-битным Windows API.

    У меня для автора исходной статьи плохие новости...
    А если поиграть с определениями и специально для статьи подогнать дефиниции, то и NTVDM формально не будет VM, а точно таким же транслятором, который эмулирует систему DOS.


    1. BiTL
      27.10.2026 06:17

      и в чем плохие новости? NTVDM-то в современных виндовсах нет. Это, конечно, плохо, но не для автора статьи.


      1. zgwerby
        27.10.2026 06:17

        В том, что он все равно запускает софт в эмуляторе, пусть и урезанном до транслятора, а не напрямую, хотя и в заголовке, и в статье утверждается обратное, см. WoW64


        1. BiTL
          27.10.2026 06:17

          Ну, если без духоты, то видимо речь о том - какие старые программы запускаются в Windows 11 в базовой поставке, без помощи сторонних эмуляторов, враперов, хуяперов и танцев с бубенцами.


  1. MountainGoat
    27.10.2026 06:17

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


    1. unreal_undead2
      27.10.2026 06:17

      Игры 93-го нормально запускаются

      Просто в Windows 11 без dosbox и т.п.?


    1. BiTL
      27.10.2026 06:17

      какие?


      1. MountainGoat
        27.10.2026 06:17

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


        1. BiTL
          27.10.2026 06:17

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


          1. MountainGoat
            27.10.2026 06:17

            Нет, это игры из 2003-го.


            1. BiTL
              27.10.2026 06:17

              так вопрос был про вашу реплику "Игры 93-го нормально запускаются" :)

              То что куча программ и игр из начала 2000-х уже не работают в современной винде это вообще не секрет. И не удивляет особо.


              1. MountainGoat
                27.10.2026 06:17

                А вы статью почитайте.

                Так я и сделал. И правда: FREECELL.EXE с датой изменения 22-Feb-93 запускается на последней версии Windows 11 без каких-либо правок, и в него можно полноценно играть:


                1. BiTL
                  27.10.2026 06:17

                  Понятно. Freecel запускается. Игры...


                  1. MountainGoat
                    27.10.2026 06:17

                    Какой 93-й, такие и игры.


                1. unreal_undead2
                  27.10.2026 06:17

                  Угу, одна нашлась. Вопрос только какой процент игр, вышедших под PC в 93ем, запустится на Windows 11 без сторонних средств.

                  Но соглашусь, что для большей части достаточно просто поставить dosbox, в то время как для игр конца 90х-начала нулевых нужны специфические танцы с бубном (где то есть новый open-source движок, где то правят старые бинарники, плюс подкладывание файликов, правка реестра...). Но чаще всего гугл, чтение форума old-games.ru и т.п. помогает.