2026年10月、テック系メディアのWindows Latestが驚くべき技術的真実を報じた。最新のWindows 11 26H2の内部に、1995年当時に書かれたWindows 95のメモリ管理コードが今もなおそのまま眠っているというのだ。この骨董品のようなコードは削除されるどころか、マイクロソフトによって再コンパイルされ、互換性レイヤーの中に組み込まれている。その唯一の任務は、30年前にメモリ制御ロジックを書き誤ったレガシープログラムをもてなすことにある。
マイクロソフトにおいて、後方互換性とは過去のソースコードを永久保存したレプリカと同義だ。古いモジュールをそのまま最新システムの中に封印し、当時のプログラムが抱えていた脆弱性を永久のシステム契約へと格上げする。現在Windows 11を動かしているすべてのPCは、30年前に行われた商業的妥協のツケを今も払い続けている。
Windows 11のツールを開くと現れる、生きたWin95コード
最新のWindows 11 26H2でこの生きた化石を見つけ出すのに、高度なハッキング技術は必要ない。マイクロソフト公式のWindows ADKツールキットを導入し、「Application Compatibility Tools」にチェックを入れ、32ビット版のCompatibility Administratorを立ち上げるだけでよい。膨大なシステム修正リストの中に、EmulateHeapという名称の項目がはっきりと記載されている。
図:Windows 11の互換性管理ツールに表示されるEmulateHeap修正項目。出典:Windows Latest
EmulateHeapの仕組みは極めて直接的かつ強引だ。古いソフトウェアに対してこのオプションを有効にすると、システムはアプリによるヒープメモリの呼び出しを強制的に掌握する。メモリ確保関数であるHeapCreateから、メモリロックのLocalLock、再割り当てを行うGlobalReAllocに至るまで、すべての命令が特殊な実装へとリダイレクトされる。この実装の振る舞いは、1995年にリリースされたWindows 95と完全に一致する。
マイクロソフトは現代のアルゴリズムを用いて旧システムの挙動をエミュレートする道を選ばなかった。長年マイクロソフトの開発現場に携わってきたRaymond Chen氏の記録によれば、チームはWindows 95のヒープマネージャのオリジナルソースコードを直接引っ張り出し、再コンパイルして互換モジュールへと組み込んだという。マイクロソフトは挙動の模倣を諦め、純正の旧コードをそのまま使うことで、予期せぬ非互換リスクを根絶する判断を下したのだ。 こうして31年前のマシン語命令は、現代のシステムにおいても恒久的な市民権を獲得することになった。
「シムシティ」救済のために、OSがゲームのバグを肩代わりした歴史
この一見不条理なパッチは、30年前のビジネス上の危機に端を発している。1995年、Windows 95のリリースを控えていたマイクロソフトのテスト現場で、当時空前の大ヒットとなっていたPCゲーム『シムシティ』(SimCity)が頻繁にクラッシュするという事態が発生した。もし新しいOSで定番の看板ゲームが動かなければ、ユーザーはゲームではなくOSの側に不具合があると見なすのは火を見るより明らかだった。
図:当時世界中でブームを巻き起こした都市経営シミュレーション『シムシティ2000』。出典:Nap’n’Retrogaming
マイクロソフトのエンジニアが調査した結果、クラッシュの原因は完全にゲーム側の不備にあることが判明した。『シムシティ』の開発者であるJon Ross氏は後に、プログラム内に典型的な「解放後メモリ読み取り(use-after-free)」のバグが存在していたことを認めている。ゲームはOSに特定のメモリ領域を返却した後も、その解放済み領域に残った古いデータを平然と読み取ろうとしていたのだ。
Windows 3.xの時代には、未成熟なメモリ管理アーキテクチャがこの危険な欠陥を覆い隠していた。当時の16ビットシステムは協調的マルチタスクを採用しており、アプリケーションがメモリを解放しても、システムは直ちに物理アドレスを初期化したり回収したりしなかった。古いデータがそのまま元の位置に留まり続けたため、ゲームは幸運にもクラッシュせずに動作していた。しかし、Windows 95でプリエンプティブ・マルチタスクと32ビットヒープマネージャが導入されると、解放されたメモリは即座に上書きされるか無効化され、ゲームは瞬時にクラッシュするようになった。
元マイクロソフトのプログラムマネージャであるJoel Spolsky氏は、2000年の論考でこの内幕を明かしている。マイクロソフトは開発元のMaxisに緊急パッチの作成を要求するのではなく、Windows 95カーネルのメモリアロケータ内に専用の判定ロジックを組み込んだ。実行中のプログラムが『シムシティ』であると検知されると、メモリアロケータは即座にメモリを回収しない特殊モードへと切り替わる。OSは商業ソフトウェアのスムーズな移行を実現するため、第三者のコードの不具合を自ら引き受けたのだ。
深刻な脆弱性をシステム契約へ:パッチから恒久モジュールへの昇格
似たような問題は当時、枚挙にいとまがなかった。1990年代半ば、PCソフトウェア市場は急激な拡大期を迎えていた。突貫工事で開発された32ビットアプリケーションが、無数の奇妙な不具合を抱えたまま市場に押し寄せた。多くのプログラマはWindows 95の緩やかな実行環境に甘え、「メモリ解放後も古いデータを読み取れる」ことをOSの基本機能だと錯覚していた。
Windows NTアーキテクチャが旧来の9xラインを完全に置き換えるにつれ、マイクロソフトはより厳格なエンタープライズ基準のセキュアヒープを導入した。その結果、数百数千に及ぶ古いゲームや業務専用ツールが、新しいシステム上で一斉に息の根を止められた。マイクロソフトにとって、すべての古いソフトウェア向けにカーネル内で個別の条件分岐を書くことはもはや不可能だった。膨大なソフトウェアエコシステムの維持と、アーキテクチャの純粋性の保持——その狭間で、開発チームは一つの妥妥策を見出した。
図:現代の互換レイヤーの中で生き延びるWindows 95ヒープ管理コードの軌跡。出典:Windows Latest
彼らはWindows 95のソースコードツリーからヒープ管理コンポーネントを丸ごと切り離し、独立した互換性修正プラグインであるEmulateHeapとして仕立て上げた。セキュリティの観点から見れば、use-after-freeは任意コード実行につながる極めて危険な脆弱性だ。しかし、デスクトップOSという巨大なビジネスの現実を前に、後方互換性はシステム設計の規律を圧倒した。 かつて放置されたバグは、長期にわたるシステムの正式な契約として固定化されたのである。
現代のWinUI 3で見た目を刷新しつつ、1995年のモジュールを抱え続ける矛盾
互換性に対するこの尋常ならざるこだわりは、強烈なエンジニアリングのコントラストを生み出している。マイクロソフトは現在、システムのGUI刷新に全力を注いでいる。長年親しまれてきたファイルのプロパティダイアログでさえ、モダンなWinUI 3フレームワークへの置き換えが進んでいる。メモリ安全性を根本から高めるため、WindowsカーネルへのRust言語の導入も積極的に進められている。
しかし、洗練されたモダンな外見の裏で、基盤部分の歴史的負債は何ひとつ変わらない姿のまま温存されている。2026年のWindows 11 26H2においてすら、マイクロソフトは現代のビルドパイプラインを用いて31年前のWindows 95ヒープコードをコンパイルし、公式ISOに含めて世界中へ配布している。その一方で、かつて世界中のユーザーに愛されたWindows標準搭載の『3Dピンボール』は、あっさりと歴史の闇に葬り去られた。
64ビット移行時に3Dピンボールが打ち切られた理由は極めて即物的なものだった。ピンボールの衝突判定コードはすべて32ビットのアセンブリ言語で書かれており、浮動小数点演算に関する仕様書が残っていなかった。64ビット版に移植すると、ボールがフリッパーをすり抜けてしまう不具合が発生したのだ。原因究明に数日以上の工数を要すると判断したマイクロソフトは、即座にゲームの廃止を決めた。古いコードに対するマイクロソフトの寛容さには明確な境界線がある。娯楽アプリはいつでも捨てられるが、下層の互換性の足場には絶対に手を触れてはならないのだ。
31年間に及ぶ妥協の蓄積:現代のハードウェアが支払う代償
マイクロソフトが数十年守り続けてきた骨董品コードも、現代のハードウェア環境においてはその神通力を失いつつある。Windows 11 22H2以降のバージョンでは、レトロゲームのファンからEmulateHeapが正常に機能しないという報告が相次いでいる。『グランド・セフト・オート:バイスシティ』や『ニード・フォー・スピード:モスト・ウォンテッド』などの名作をこのオプションで動かそうとしても、BGMが消失したり、起動直後にエラー落ちしたりするトラブルが頻発している。
その理由は、現代のPCアーキテクチャが1995年当時の物理的前提から完全に乖離してしまった点にある。現在のコンピュータはマルチコアCPUが当たり前であり、高度な命令の並べ替え(アウトオブオーダー実行)やハードウェアレベルのメモリ分離機構を備えている。Windows 95のヒープマネージャは、シングルコアかつフラットメモリの時代に設計されたものであり、現代の最新グラフィックスドライバや複雑なマルチスレッド環境と正常に手を取り合うことなど不可能なのだ。
無制限の後方互換性はWindowsという巨大な帝国の参入障壁を築き上げたが、同時に計り知れない技術的負債をもたらした。アーキテクチャが一歩進化するたびに、マイクロソフトは過去の重荷をすべて背負い直さなければならない。30年前に書かれた場当たり的なパッチは、今や動かすことのできないコードの化石となった。時代が遠くへ進みすぎた今、過去への無限の配慮は、現代のすべてのユーザーにとって避けがたい重荷となりつつある。
参考文献:
- Windows Latest 記事:Why Windows 11 still ships with Windows 95’s memory manager hidden inside it
- Joel on Software コラム:Strategy Letter II: Chicken and Egg Problems
- マイクロソフト技術文書:Windows Compatibility column on EmulateHeap mechanics