Windows Latestは2026年10月2日(現地時間)、「Microsoft explains why Windows XP ran almost everything, and it lied to apps」において、Windows XPが多くの旧作ソフトを実行できた理由を解説した。

これはMicrosoftのRaymond Chen氏が2003年から2017年までに公開した3件のブログ記事を紹介する内容だ。2001年に発売されたWindows XP(以下、XP)では、古いゲームや業務用ソフトも正常に動作させることができた。しかしその実態は問題のあるアプリのデータベースを保持し、特別な処理に切り替えることで実現していたという。

Windows XPの互換性を支えたApplication Compatibility Database

Chen氏は2003年の記事において、データベースファイルがC:\WINDOWS\AppPatchフォルダーにあり、バイナリ形式で保存されていたと説明した。Microsoftはこれを「Application Compatibility Database」と呼び、XP発売日には約200の互換性データが主要データベースの「Sysmain.sdb」に格納された。

対象アプリの特定は、実行ファイル名だけでなく、ファイルサイズ、チェックサム、バージョン、日付なども照合して行われた。これにより、同一アプリでもバージョンごとにきめ細かな対応が可能になったとされる。

XPは対象を見つけると、「シム(shim)』と呼ばれる互換性修正を適用し、API呼び出しの挙動を変更した。差し替え先ではシステム情報の詐称や、専用のコードを実行するなどの対応が行われた。

シムの代表例はWin98VersionLieで、特定のWindowsバージョンを要求するアプリにWindows 98のバージョン情報を返した。Chen氏は2010年の記事で、VersionLieに依存するアプリの開発者はバージョン確認処理を修正すべきだと説明した。

互換性機能はメモリ管理にも及んだ。Windows Latestは興味深い例として、ゲーム「SimCity」の不具合対応を挙げた。SimCityには解放後使用(UAF: use-after-free)の不具合が存在していたことから、この問題への対処として解放したメモリをすぐには再利用しない特別なモードを組み込んだという。

互換性を維持することで生じるセキュリティリスク

Windowsの互換性機能はWindows 11にも搭載されている。過去の資産を有効活用できるというメリットがユーザーに提供され続ける一方、このメリットの背後にはセキュリティリスクというデメリットも存在する。

Chen氏は2017年の記事で、Windows 2000互換モードのセキュリティリスクを伝えた。Windows 2000互換モードではDLLの検索順序も当時の仕様に戻り、SafeDllSearchModeが無効になる。

互換性機能には同様のリスクを伴うものも存在する。それでもMicrosoftが互換性機能を提供した背景には、古いアプリを動作させる必要性があった。

Microsoftが古いアプリを切り捨てられなかった理由

Microsoftが個別修正を用意した背景には、互換性問題がWindowsのアップグレードを妨げるという事情があった。Chen氏は「互換性のないプログラムが一つあるだけで、アップグレードが台無しになる」と述べ、システム側で対応せざるを得ない現実があったと説明した。

背景には、企業が簡単には捨てられない古い業務アプリの存在があった。XP発売当時、MicrosoftのSetupチームが実施した調査では、ほぼすべての企業に業務上欠かせないアプリがあり、その多くはすでに退職した開発者がVisual Basicで作成した社内アプリだったという。

Windows XPは2026年10月で25周年を迎える。旧作ソフトの多くが動作した背景には、こうした互換性データベースと個別の対応があった。