Windows Latestは2026年10月19日(現地時間)、「Why Windows 11 still ships with Windows 95’s memory manager hidden inside it」において、Windows 11バージョン26H2にWindows 95時代のメモリ管理コードが組み込まれている理由を解説した。これは古いアプリとの互換性を保つための仕組みで、EmulateHeapと呼ばれる。アプリがWindows 95時代のメモリ管理方式に依存している場合、当時の挙動を再現し、動作を支える役割を担う。
発端は初代SimCityの不具合、MicrosoftがOS側で対応
この歴史を理解するうえで重要なのが、Windows 3.x向けに作られた初代SimCityだ。アプリは実行中にWindowsからメモリを確保し、不要になれば解放する。解放後のメモリを再び読み取る行為は「解放後使用(UAF: use-after-free)」と呼ばれる不具合だが、SimCityにはこの問題が存在した。
Stack Overflowの共同創設者で、Microsoftの元エンジニアでもあるJoel Spolsky氏は、2000年5月に掲載したエッセーでSimCity開発者Jon Ross氏の説明を紹介した。この説明によると、初代SimCityには解放後使用の不具合が存在したが、Windows 3.xでは解放後もメモリの内容が残っていたため、問題が表面化しなかった。
ところが、Windows 95のベータ版ではSimCityが正常に動かなくなった。Microsoftは原因を突き止め、SimCityの実行を検出してメモリ管理機能を特別なモードで動かし、解放したメモリをすぐに再利用しない処理を追加した。アプリの修正を待つのではなく、OS側を変更してアプリの不具合を補う対応を行った。
Windows 95のコードを再利用、互換性機能「EmulateHeap」とは
SimCityだけでなく、Windows 95のメモリ管理の癖を前提に作られたアプリはほかにも存在した。MicrosoftのエンジニアRaymond Chen氏は2010年のコラム「Windows Confidential」で、解放済みメモリに以前の値が残っていることを前提に動くプログラムがあったと説明している。後のWindowsではメモリの扱いが変わり、こうしたアプリは動作しなくなった。
これら互換性問題に対応する仕組みがEmulateHeapだ。ヒープ関連のAPI呼び出しを置き換え、Windows 95に似た挙動を再現する。Chen氏はこの方法を単純でありながら常識外れなものと評した。新たに互換性機能を開発したのではなく、Windows 95のヒープ管理コードのソースを複製して再コンパイルし、互換性機能として組み込んだという。
このため、Windowsのアプリ互換性フレームワークには、Windows 95のカーネルコードの相当部分が残った。一部アプリのためにEmulateHeapが有効になると、Windows 95の古いコードがストレージから読み込まれて動作を開始する。
なお、EmulateHeapは、前述のSimCityの不具合に対応するために追加された処理とは別の仕組みだ。Microsoftはこうした互換性対策を積み重ねることで、古いアプリの動作を支えてきた。
Windows 11 26H2でも確認できる「EmulateHeap」
EmulateHeapは、IT管理者向けの無償ツール「Compatibility Administrator」で存在を確認できる。同ツールは「Windows Assessment and Deployment Kit(ADK)」に含まれており、2026年9月版の「ADK 10.1.26100.9457」はWindows 11バージョン26H2を正式にサポートしている。
Windows Latestによると、ADKの「Application Compatibility Tools」をインストールし、「Compatibility Administrator(32-bit)」で新しい互換性モードを作成すると、利用可能な互換性修正の一覧に「EmulateHeap」が表示されるという。
ただし、一覧にEmulateHeapが存在することは、すべての旧式アプリが正常に動作することを意味しない。Windows 11 22H2の更新後には、互換性機能を有効にした環境で「GTA Vice City」の音声が失われたり、「Need for Speed: Most Wanted」がクラッシュしたりする問題も報告されている。