Windows 95のコードが今もWindows 11内部で生き続けている理由

Windows 11には、現在もWindows 95カーネルの一部が機能する形で含まれています。EmulateHeapと呼ばれる互換性修正プログラムにより、一部の古いアプリケーションでは、より寛容だったWindows 95のメモリマネージャーと同様の動作が提供されます。この修正プログラムは、Windows 11 26H2システムにも引き続き掲載されています。
こうした後方互換性への取り組みは、MSが専用のOSコードを作成したことで初めてWindows 95上で正常に動作するようになったSimCityにまでさかのぼります。

MSはSimCityのためにWindows 95のメモリ管理を変更した
アプリケーションは実行中にWindowsへメモリを要求し、そのメモリが不要になると解放します。解放後のメモリを読み取る行為はuse-after-freeと呼ばれるバグであり、Windows 3.x向けの初代SimCityにはこの不具合が存在していました。
Stack Overflowの共同創設者で元MSエンジニアのJoel Spolsky氏は、2000年のエッセイでこの問題について説明し、そのバージョンのSimCityを開発したJon Ross氏の話を引用しています。Ross氏は、ゲームが誤ってメモリを解放した直後に、そのメモリを読み取っていたことを認めました。Windows 3.xでは、そのメモリの内容が引き続き利用可能だったため、この問題は表面化しませんでした。

Windows 95のベータビルドでは、SimCityが正常に動作しなくなりました。MSはゲーム側の修正を待つのではなく、SimCityの実行を検出すると、メモリをすぐには解放しない特別なモードへメモリアロケーターを切り替えるコードを追加しました。
事実上、MSは1本のゲームに存在するバグを補うためにWindowsを変更したのです。
MSは古いアプリケーション向けにWindows 95のヒープマネージャーを再コンパイルした
SimCity向けの回避策は1つのプログラムのために設計されたものでしたが、ほかのアプリケーションも同様の動作に依存していました。MSのエンジニアであるRaymond Chen氏は、2010年のWindows Confidentialコラムで、一部のソフトウェアが、解放済みメモリを読み取って以前の値が変わらず残っていることを確認できるなど、Windows 95のヒープ特有の挙動に依存していたと説明しています。
新しいバージョンのWindowsではメモリの処理方法が異なるため、こうしたアプリケーションは後のWindowsリリースでクラッシュする可能性がありました。

MSは、EmulateHeapによってこの問題に対処しました。この互換性修正プログラムは、HeapCreateからLocalLock、GlobalReAllocまでの各種関数を含む、アプリケーションのヒープ関連呼び出しを、Windows 95の動作を再現する代替実装へリダイレクトします。
Chen氏は、この解決策を極めて単純であると同時に非常に異例なものだと表現しています。MSはWindows 95のヒープマネージャーのソースコードを取り出して再コンパイルし、アプリケーション互換性基盤へ組み込んだのです。
その結果、Windows 95カーネルのかなりの部分がWindowsのアプリケーション互換性フレームワーク内に存在しています。ただし、このレガシーコードがストレージから読み込まれるのは、特定のアプリケーションに対してEmulateHeapが有効になっている場合のみです。Windows 11がバックグラウンドでWindows 95のコードを常時実行しているわけではありません。
EmulateHeapは、SimCity向けに用意された当初の回避策とは別のものです。どちらもMSが後方互換性を非常に重視してきたことを示しており、その姿勢は後にWindows XPの非公開アプリケーション修正データベースでも実証されましたが、両者は異なる解決策です。
Windows 11でEmulateHeapを確認する方法
EmulateHeapは、Windowsに含まれる互換性修正プログラムを一覧表示する、IT管理者向けのMS製無料ツールCompatibility Administratorで確認できます。MSは、shimとも呼ばれる互換性修正プログラムを、アプリケーションによるAPI呼び出しをインターセプトする小規模なコードと定義しています。
Compatibility Administratorは、Windows Assessment and Deployment Kit(ADK)に含まれています。2026年9月リリースはWindows 11 26H2を正式にサポートしており、次の手順でEmulateHeapを確認できます。
Windows ADKをインストールし、Application Compatibility Toolsを選択します。

スタートメニューから32ビット版Compatibility Administratorを開きます。

新しい互換性データベースを作成します。

利用可能な互換性修正プログラムを確認し、EmulateHeapを探します。

EmulateHeapには現代的な制約がある
互換性修正プログラムが存在していても、あらゆる状況で正常に動作するとは限りません。Windows 11 22H2アップデート以降、このshimを有効にするとGTA: Vice Cityなどのゲームで音声が出なくなり、Need for Speed: Most Wantedではクラッシュする可能性があるとユーザーから報告されました。
MSはWindows 95時代のプロパティダイアログをWinUI 3へ置き換えつつありますが、少数のレガシーアプリケーション向けにWindows 95のヒープマネージャーを現在も維持しています。しかし、その水準の互換性対応は3D Pinballには適用されませんでした。同作は64ビット環境のバグを抱えており、開発チームが数日を費やして修正するだけの妥当性を見いだせなかったため削除されました。

