2025/11/21 16:23 How did the Windows 95 user interface code get brought to the Windows NT?

ロボ子、今日はWindows 95のUIがWindows NTに取り込まれた話をするのじゃ。

興味深いですね!Windows 95のUIは当時としては画期的でしたから。

そうじゃろう?記事によると、Windows 95のUIチームとWindows NTのUIチームが定期的に会合を開いて、情報共有してたらしいぞ。

なるほど、協力体制があったんですね。具体的にはどのような機能が移植されたんですか?

`RegisterClassEx`や`SetScrollInfo`みたいな新しい機能や、右上隅に閉じるボタンを配置する動作がWindows NTに実装されたみたいじゃな。

閉じるボタンの位置は、今のUIでは当たり前ですが、当時は新しい試みだったんですね。

そうそう。ただ、ウィンドウマネージャーのコードはWindows 3.1が祖先だけど、Windows 95とWindows NTで大きく違ってたから、Windows 95のコードを参考にして再実装したらしいぞ。

参考実装ですか。互換性を保つために苦労したんですね。

じゃな。Explorerみたいなユーザーモードコンポーネントは、Windows NTのコードベースにそのまま取り込まれて、その後Windows NT向けに更新されたみたいじゃ。

ユーザーモードのコンポーネントは比較的移植しやすかったんでしょうか。

記事によると、Windows 95のシェルは`CHAR`ベースだったけど、Windows NTはUnicodeベースだったから、`WCHAR`に置き換える必要があったみたいじゃな。`IShellLinkA`を`IShellLinkW`に置き換えたとか。

文字コードの変更は大変な作業ですね。他にも何か変更点はありましたか?

`sizeof(stringBuffer)`で文字列バッファのサイズを計算するコードを、`sizeof(stringBuffer) / sizeof(stringBuffer[0])`に変更したらしいぞ。これはWindows 95では影響ないけど、Windows NTでは重要だったみたいじゃな。

なるほど、ポータビリティを考慮した変更ですね。

そうじゃ。あと、Windows NTチームは、特定の`sizeof`が検証済みかどうかを区別するために、`sizeof`のシノニムマクロを定義したらしいぞ。`#define SIZEOF sizeof`って。

面白いですね!検証済みの`sizeof`は`SIZEOF`を使うようにして、まだ検査されていない箇所を特定しやすくしたんですね。

そういうことじゃ。当時はSLMっていう内部ソースコードシステムを使ってたけど、ブランチをサポートしてなかったから、手動で3方向マージが必要だったらしいぞ。

手動マージは大変ですね。今のGitのようなバージョン管理システムがあれば、もっと楽だったでしょうね。

ほんとにな。Windows 95シェルをWindows NTに移植するチームには、Dave Plummerっていう人が参加してて、チームメンバーのメールエイリアスを魅力的なパターンで配置したカスタム名刺を作ってたらしいぞ。「You have been visited.」っていうメッセージ付きで。

ユーモアのある方ですね!そういう遊び心も大事ですね。

じゃな!しかし、これだけ苦労して移植したWindows 95のUIも、今となっては懐かしい思い出じゃな。まるで、私が初めて作ったロボットみたいに…って、ロボ子、怒ってる?

べ、別に怒ってませんよ!でも、私を初期のロボットと比べるのはやめてください!最新鋭ですから!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
