
2026/10/20 9:14
Windows 11 に内蔵されたままの、Windows 95 のメモリマネージャについて:なぜまだ搭載されているのか
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Windows 11 バージョン 26H2 では、レトロなソフトウェアでのクラッシュを解決するため、Windows 95 のメモリエンジンを復元する重要な互換性修正「EmulateHeap」が導入されます。この機能は当初、「SimCity」の use-after-free ボグで修正されたことで注目されましたが、実際には現代的なオペレーティングシステム上でクラッシュを引き起こす欠陥をより広く持つ旧来のヘッップ管理システムに由来するクイックを利用した古いアプリケーション向けの広範な問題に対処しています。技術的には、EmulateHeap は元の Windows 95 ヘッップマネージャーのソースコードをコピーし、現代的な API コール(例:HeapCreate)をその動作を模倣するように再方向付けすることで機能します。このコードは互換性フレームワーク内に存在しますが、特定のアプリに対して有効化されるまでディスクから読み込まれません。同様の機能はバージョン 22H2 では「GTA Vice City」での音声喪失などの問題を引き起こしましたが、今回の実装ではレトロサポートとシステム安定性のバランスを追求しており、Microsoft が推進する包括的なモダニゼーション活動(例:プロパティダイアログの置き換えによる WinUI 3)とも連携しています。ユーザーは 2026 年 9 月に、バージョン 26H2 向けに調整された Compatibility Administrator の公式サポート更新を期待できます。ただし、この修正は特定の古いソフトウェアのサブセットにのみ適用され、「3D Pinball」アプリのような基本的な 64 ビットアーキテクチャとの衝突により削除された機能の復元は行いません。このターゲット指向のアプローチにより、旧プログラムへの安定性を確保しつつ、コアパフォーマンスを損なうことなく、陳腐化したアーキテクチャ基準に戻ることも回避されます。これは Windows XP に見られた隠れた互換性修正の伝統を引き継いでいます。
本文
Windows 11 に潜む「Windows 95 コード」の実態
Windows 11 の内部には、現在でも動作している Windows 95 コアの一部 が残っています。これは、「EmulateHeap」という互換性情報(シム)機能を通じて実現されており、特定の古いアプリケーションが Windows 95 特有のメモリマネージャーを必要とする場合、この機能により寛容な環境を提供します。
現在、Windows 11 バージョン 26H2 を搭載する PC でも、この機能を確認することが可能です。
起源:SimCity と Microsoft の決断
なぜ追加されたのか
この事例の起源はゲーム SimCity にあります。当初、このゲームは Windows 95 上でしか動作せず、マイクロソフトが専用のコードを開発したことで可能になりました。
問題の背景:Use-After-Free バグ
- アプリケーションはメモリの確保・解放を繰り返しますが、解放後のメモリ領域を読み取ると 「use-after-free」 というバグが発生します。
- Windows 3.x 向けの最初の SimCity では、このバグが存在していました。
- Windows 3.x で問題が起きなかった理由は、**「解放されたメモリのデータがどこにも移動しないため」**です。
ジョエル・スポルスキー氏(Stack Overflow 共同創業者、元マイクロソフトエンジニア)の分析
- SimCity の開発者ジョン・ロスは、「意図せず解放直前のメモリ領域を読み取ってしまうバグ」を認めています。
- Microsoft はこのバグが目立たなかった理由として、当時のメモリ特性を挙げました。
Windows 95 向け特別版 SimCity 2000
Windows 95 ベータ版において SimCity が動作不良を起こした際、Microsoft は以下の対策をとりました。
- 修正ゲームの待機ではなく、OS の改変を選択
- ゲームが実行中を検知したらのみ、「解放直後のメモリの値を読み取る」ような振る舞いをさせる特別なモードでヒープアロケーターを実行させるコードを Windows 95 に組み込みました。
- スポルスキー氏の記述
「もし SimCity が動いていると検知したら、即座にメモリを解放しないように設定された特別モードのメモリアロケーターを実行します」
つまり、Microsoft は OS を改変することで、単一のゲームのバグを隠す措置をとったのです。
解決策:EmulateHeap の仕組みと現状
問題の再発と解決
SimCity の事例は一過性のものでした。しかし、他のプログラムも Windows 95 のヒープの癖(クイック)を利用しており、解放されたメモリ領域に古い値が残ったまま読み取ろうとするケースがありました。これらは新しい Windows 世代では動作が不安定になりクラッシュしてしまいました。
これを解決するために導入されたのが EmulateHeap です。
仕組みと特徴
- アプリケーションからのヒープ関連の呼び出し(
,HeapCreate
,LocalLock
など)を、Windows 95 の動作を模倣する代替処理へリダイレクトします。GlobalReAlloc - レイモンド・チェン氏(Microsoft エンジニア)の評価:
- 「極めてシンプルでありながら、完全に狂っている」。
- 構築方法は:**「単に Windows 95 のヒープマネージャーのソースコードをコピーし、再コンパイルして互換性情報システムに追加した」**こと。
重要な注意点
- Windows 11 の PC が静かに Windows 95 の背景プロセスとして稼働しているわけではありません。
- 特定のアプリケーションに対してのみ、ハードドライブから古いコード(EmulateHeap)が読み込まれます。
- EmulateHeap は SimCity 用のコードとは異なり、Windows XP 以降に導入された「互換性情報への執着」から派生した独立した修正です。
Windows 11 で EmulateHeap を確認・探す方法
Microsoft の公式ツールである 「互換性情報管理者(Compatibility Administrator)」 を使用して確認可能です。これは IT 管理職向けに無料で提供されており、Windows 標準搭載の互換性情報修正の一覧を表示します。
インストールと手順 (Windows 11 26H2)
「互換性情報管理者」は Windows アセスメントおよびデプロイメントキット (ADK) に付帯しています。以下の手順で確認できます:
- Microsoft から Windows ADK をダウンロードし、インストーラーを実行します。
- 機能一覧の中から、「Application Compatibility Tools(アプリケーション互換性情報ツール)」のみを選択してインストールを完了させます。
- スタート画面で「Compatibility Administrator」を検索します。
- Windows 95 時代のアプリの多くが 32 ビットであることを踏まえ、32 ビット版を開きます。
- 「Custom Databases(カスタムデータベース)」セクションで右クリックし、以下の操作を行います。
- 「New Database(新しいデータベース)」を選択
- 「Create New > Compatibility Mode(新規作成 > 互換性情報モード)」を選びます。
- 利用可能な互性情報修正の一覧をスクロールして、EmulateHeap を探します。
留意点と現在の状況
動作保証の限界
リストされている修正が即座に機能するとは限りません。以下のような報告事例があります:
- Windows 11 22H2 アップデート以降の挙動変化
- 「GTA Vice City」などで音声出力が失われる。
- 「Need for Speed: Most Wanted」でシムを有効にした際にクラッシュする。
悲劇的な現状:3D Pinball の場合
Microsoft は Windows 95 時代の名残であるプロパティダイアログを現代的な WinUI 3 に置き換えつつも、少数の古いアプリケーションのために Windows 95 のヒープマネージャーを維持し続けています。
- しかし、チームが数日かけて解決できない 64 ビットバグ のせいで、この取り組みを「3D Pinball(3D ピンボール)」に適用できませんでした。
- その結果、同ゲームに対するサポートは 終了 してしまいました。