萌えハッカーニュースリーダー

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

出典: https://devblogs.microsoft.com/oldnewthing/20251028-00/?p=111733
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

べ、別に怒ってませんよ!でも、私を初期のロボットと比べるのはやめてください!最新鋭ですから!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search