Windows NTの「Format Dialog」機能
(twitter.com/davepl1968)- 1994年末、MicrosoftでWindows95のUIコードをWindows NTへ移植していた際、NTとWindows95の違いにより、ディスクフォーマット用の別UIが必要になった
- ファイルシステム、ラベル、クラスタサイズ、圧縮、暗号化といったフォーマットオプションを紙に整理したあと、VC++ 2.0 Resource Editorで縦型の選択リストを構成した
- より良いUIが来るまで使うつもりだった暫定ダイアログが、約30年後の今も当時の形のまま残っている
- 同じ作業過程で、cluster slackの許容範囲を任意に決めた判断が、FATボリュームのフォーマットサイズにおける32GB制限につながった
- 一時的にチェックインした実装も、長期的な製品の挙動や制約になり得るため、「temporary」な解決策を入れるときは慎重であるべき
木曜日の朝に作られたWindows NT Format Dialog
- 1994年末、MicrosoftではWindows95のユーザーインターフェースコードのかなりの部分をWindows NTへ移植していた
- Format機能はNTとWindows95の違いが大きく、別途カスタムUIが必要な領域だった
- ディスクフォーマットで選ぶ項目は、まず紙に整理された
- ファイルシステム
- ラベル
- クラスタサイズ
- 圧縮
- 暗号化
- その後、VC++ 2.0とResource Editorで、選択項目を必要な順序に近い縦積みの形に配置した
- このUIは完成された設計というより、より良いUIが来るまで使うための暫定実装だった
暫定実装が残した長期的な影響
- 約30年が経ったあとも、そのダイアログは木曜日の朝に作られた形のまま残っている
- FATボリュームのフォーマットサイズが32GBに制限されていることも、同じ時点での任意の判断に由来する
- 当時、cluster slackをどの程度まで許容するかを判断する必要があった
- その判断がFATボリュームのフォーマットサイズ制限につながった
- 「temporary」なチェックインは、意図に反して製品の長期的な挙動や制約として固定化されることがある
1件のコメント
Hacker Newsの意見
Windows NT4のソースコードを見ると、1995年2月13日に彼がフォーマットダイアログのコードの一部を最初に書いたことは確認できるので、1994年末〜1995年初めという話はだいたい合っている。
ただし、NT4はFAT32をサポートしておらず、FATボリュームも64Kクラスタを許可していたため、当時の多くのシステムより大きい4GBまで扱えた。NT4のFATフォーマットにはクラスタ検査やオプションはなく、ボリュームサイズに応じてクラスタサイズが決まっていた。
しかも、FAT32ボリュームの32GB制限はダイアログではなく内部のフォーマット関数側にあった。Windows 2000では32GBより大きいドライブをFAT32でフォーマットしようと試みることはできるが、フォーマットの最後でハードコードされた制限のため失敗する。同じ関数を使うコマンドラインの
format.comも同様である。なぜ彼が自分の関与度をいつも誇張するのかは分からない。MicrosoftがInfo-ZipからライセンスしたZipフォルダーのコードについても、統合の過程で手を入れたという理由で彼が書いたと信じる人が出てきた。今ではインフルエンサーになろうとしているようで、誇張はそういう人たちがやることのように思える
1994年末にFAT32が開発中だったのかは分からないが、Windows NT 4にも初期のWindows 95にも入っていなかった。Windows 95 OSR2に入ったときも、
formatコマンドは128GiBパーティションまで問題なく受け付けていたが、Windows 95はNTではない。実際の原因はWindows 2000の内部フォーマット関数にあるようだ。GUI、
formatコマンド、diskpartのいずれでも32GiB超のファイルシステムは作れない。当時すでにそのサイズを超えるドライブはあったのに、なぜそうなっていたのかは分からない。Linuxのmkdosfsなどを使えば、Windows 2000以降のVFATドライバーは2TiBボリュームも受け付け、そのような大きなボリュームにWindows 2000をインストールすることも可能である正直、難読化ツールを通したように見えたし、元の作者がMicrosoftに変更や改善をしにくくさせるためにわざとそうしたのだと思っていた。今でもあのコードの悪夢を見る
だとすると、Corvetteはどこから来たのだろう: https://www.tomshardware.com/software/windows/dev-shows-off-...
そのコードはXPの一部バージョンにも残っていたようだ: https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b...
ZIPサポートについてはZipフォルダー自体のソースコードを見つけるのが難しい。代わりに、別会社であるSchlumberger Technology Corp.の抜粋コードがある: https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b... コメントを信じるなら1996年に追加されたコードである
Dave Plummerは本当にすごい人だ。歴史上もっとも広く使われたカーネルの1つを作っていた話を、あまりにも淡々と書くのが良い。
Windows向けタスクマネージャー、Windows NT向けSpace Cadet Pinballの移植、Windows向けZipファイルサポート、Amiga向けHyperCache[4] など、さまざまなソフトウェアを作り、ソフトウェア工学分野の特許も6件取得したという。
https://en.wikipedia.org/wiki/Dave_Plummer
よくある落とし穴をよく示している。問題を一時しのぎで「解決」してしまうと、より良い解決策の優先順位は、まだ解決されていないあらゆる問題よりも低くなってしまう
そうした未解決の問題は常に十分すぎるほど多いので、誰もその一時しのぎを見直しに戻ってこなくなる
どこで聞いたのかは覚えていないが、会社で一時しのぎを出さず、最初からきちんと作ろうと説得するときによく使う
「ファイルシステム、ラベル、クラスタサイズ、圧縮、暗号化など、ディスクのフォーマットに関して選べるすべてのオプションを紙に書き出した」という流れから、「洗練されたUIが来るまで持たせるための仮UIだった」という結論には、あまりつながりが感じられない
必要なオプションをすべてシンプルなインターフェースに表示できているのに、より「洗練された」インターフェースには何を入れるべきなのだろうか
そのダイアログはいまでも残っているだけでなく、HP USB Disk Storage Format Tool のようなツールにも影響を与えた。32GBのFAT32制限を回避するときにいつも使っていたツールだ: https://www.majorgeeks.com/files/details/hp_usb_disk_storage...
今のままで完璧なので、「洗練されたUI」に置き換えないでほしい
フォーマットダイアログの代替としては、この新UIはかなり気に入っている。ただし、Disk Manager 機能の代替部分は、ディスク配置のグラフィカルな表示がないので少し物足りない
基本表示: https://i.imgur.com/56yZ8gZ.png
詳細表示セクション: https://i.imgur.com/fKb3R8c.png
既存パーティションのフォーマット: https://i.imgur.com/DmbX3FQ.png
完璧ではないが、同じレイアウトをおおむね維持しつつOSのテーマに合わせてあり、昔の Disk Manager では複数ページのウィザードだったオプションもいくつか追加されている。「start」より「format」のほうが直接的で、「close」より「cancel」のほうが適切、といった細かな改善もある。もちろん、幅が33%広くなったことを世界の終わりのように思う人もいるだろうが
ただ、新しいパーティションサイズをいまだにMB単位で入力させるのは微妙だ。ローカライズされた数値区切りは入れてくれるが、今後さらに数字が大きくなるのに、何百万MBという単位を気にさせるのは少し妙だ
一時しのぎと恒久的な解決策が別にあるというより、悪い解決策と良い解決策があるのだと思う。良い解決策は、たとえ素早く実装されたとしても、十分に良いから残り続ける
悪い解決策でも、しばらくのあいだ唯一または現実的な選択肢であれば残ることがあり、その後のすべてがそれに下位互換性を合わせなければならなくなる
ヨーロッパで最大級かつ最古級の銀行のひとつで働いていたが、本番環境がこうした一時しのぎで埋め尽くされていることはよくあった
たいていは、以前の応急修正が生んだ大きな問題を素早く直すために、また応急的に作られたものだった
「十分に良い」一時しのぎには注意すべきだ。会社の中核ロギングコンポーネントはインターンが書いたもので、名前にPOCが入っている
データ形式もインターンが作りそうなものだったが、皆がちゃんと気づいたころには、すでにあまりに多くのデータを書き込んでいて、直すための予算と労力のほうが問題そのものより大きくなっていた
いつでもすべてを完璧にできるわけではないし、最も重要なことを優先し、それほど重要でないことはある程度受け流すべきだと自分を納得させるようにしている
古い格言のとおり、一時しのぎほど恒久的なものはない