Windows XP обманывала старые программы, чтобы они продолжали работать
Система могла притвориться другой Windows - и только для определенной верии программы.
Ветеран Microsoft Рэймонд Чен рассказал, как Microsoft обеспечивала совместимость Windows XP с приложениями, выпущенными задолго до релиза операционной системы. Оказалось, Windows XP использовала специальную базу проблемных приложений.
Благодаря этому Windows XP могла менять собственное поведение отдельно для каждой программы — вплоть до подмены версии Windows и запуска старого диспетчера памяти, позаимствованного у Windows 95.
Microsoft хранила базу проблемных приложений в Application Compatibility Database — файл назывался Sysmain.sdb. При запуске приложения ОС могла проверять не только имя исполняемого файла, но и его размер, контрольную сумму, версию, дату и содержимое папки. Это позволяло применять исправление к конкретной версии программы.
После обнаружения совпадения Windows подключала программные прослойки между приложением и системными API. Они могли менять параметры вызовов, корректировать ответы Windows или выполнять дополнительный код: например, Win98VersionLie сообщал старому приложению, что оно работает в Windows 98.
Еще одна прослойка, EmulateHeap, заменяла стандартный механизм управления памяти копией диспетчера кучи Windows 95. Это помогало запускать старые программы, зависевшие от особенностей распределения памяти в предыдущих версиях ОС.
Реализовать такую систему решили по коммерческим причинам — как объясняет Чен, одно несовместимое приложение могло сорвать переход целой компании на новую версию Windows. Особенно серьезной проблемой оказались программы, созданные на Visual Basic для конкретных компаний и оставшиеся без поддержки после ухода их разработчиков.

