Windows NT開発を知っているか!(「闘うプログラマー」読書メモ)

Windows NTを知っていますか?
今多くの人が使っているWindowsシリーズの基礎になったOSです。

そして!!!
この本は!!!
Microsoft社のWindows NT開発を巡る血みどろのドキュメンタリーである!!!

※サマリーで6,501円とかいう謎価格が表示されてますが実際は2,000円ちょいです。

鬼司令官!!! デビッド・カトラー!!!

カトラーはDEC(Digital Equipment Corporation。当時世界第二位のコンピューターメーカー)でOSの開発を指揮する技術者でした。
彼は新規OSを巡る社内対立の結果、DECを辞めて1988年にMicrosoftに入社します。
当時のMicrosoftは、IBMのパソコンとその類似品で動作するMS-DOSというOSが大ヒットを飛ばし、コンピューター産業の覇権を握り始めていたころでした。

カトラーは技術者としてもリーダーとしても大変優秀な人ですが性格がヤバい!!!
絶対に一緒に働きたくありません。

とにかく罵倒がヤバい。
普通にチームのパフォーマンスを下げるのでは……?と思いますがどうなんでしょうね。

カトラーの侮辱は、芸術的でさえある。激しやすく頑固なカトラーは、図太い態度をとったり、いばりちらすこともあり、あたりまえの礼儀作法を平然と無視する。すぐにかっとなり、些細なことで、口汚くののしる。怒るたびに、カトラー伝説に磨きがかかった。
位置No.400

これは飛び抜けた実力があれば多少(?)の傲慢は許されると本人が考えていたのだろうと思います。
そのせいもあってDECを追われてはいるんですが、Microsoftに拾われてますからね。
ある意味、真ではあったのでしょう。

緊張は爆発寸前だった。「どんなことだって、軽くは考えない」とカトラーは言った。なにかの失敗のことで、ウッドに正面から怒りをぶつけたことがあった。怒りにふるえて、声があえいでいた。鼻をぶつけるばかりにしてどなるカトラーを見て、ウッドは「なぐられるだろうか」と思った。カトラーはなぐりはしなかった。
位置No.1297

ウッドはMicrosoftのベテランプログラマーですが、プログラムのコメント(プログラムの意図を書いておくメモ)の書き方でカトラーと対立していました。
カトラーはコメントをキッチリ書く派で、ウッドはコメントをほとんど書かない派です。
コメントを書かない理由は「プログラムはしょっちゅう変更されるんだから、いちいちコメントなんか書いてたらコメントも変更が必要になって作業が遅れる」というものですが、僕は自分の書いたプログラムですら数ヶ月後に読むと「何故こんな書き方をしたのか意味が分からん」となりがちなので、、、特に複数人で開発する時にコメントつけないのはダメじゃね?と思います。

それにしても殴られるかと思うくらい怒鳴り散らすのはホントやばい。ダメ絶対。
とはいえ当時の社会情勢では許されてたんでしょう。
今のMicrosoft社内でこんなことやってたら、流石に大問題になると思います(知らんけど)

NTの件でカトラーと定期的にミーティングするようになってから、マリッツはたびたび侮辱を受けた。あるとき、なにげなく「われわれがやるべきことは……」と言いかけると、カトラーがさえぎった。「われわれだって。だれのことを言ってるんだ。あんたと、あんたのポケットにいるネズミのことかい」
位置No.1679

マリッツはカトラーの上司で、Windows NT開発の責任者でした。
自分の領域(カーネル)だけに注目して、他のチーム(グラフィックなど)は自分の責任範囲外だと考えていたカトラーに、もっとリーダーシップを取ってもらいたいと考えていました。
そのためマリッツとカトラーは度々衝突するのですが、マリッツは次々に出てくる罵り言葉を楽しんですらいたようです。
うーんタフ……。

昼休みの時間は、一日で最悪になることが多かった。みんながどこかに食べに行こうとすると、カトラーが急に立ち上がって、ドアに突進し、一時間ほどスカッシュをしてくる間に、これとあれをやっておけと命令することがあった。こうなったら、昼食を抜かすか、コンピューターの前に座って食べるしかない。「怖くて、昼休みをとってもいいですかと聞く気にはなれなかった」とシャノンは言う。

これはビルド・ラボ(書き上げたプログラムコードをコンピューター上で動くファイル形式に変換する場所)の一場面です。
ビルドは各プログラマーが書いたコードを集約し、まとめる作業です。
変更したプログラムが正しく動作するかを確認するには、ビルドが必須です。そのため開発が大詰めになると、ビルドの回数は週二回から六回に増え、ビルド担当者は非常に忙しかったようです。

カトラーは自らビルド・ラボに居座り、プログラマー達が毎日持ってくる百件近い変更点を精査していました。
これは驚異的なことです。普通なら脳みそがオーバーヒートします。

怒らせると手がつけられない上に四六時中怒っているカトラーですが、とはいえ部下からは非常に尊敬されていたようです。
これはOS開発において最高の人材という評価が内外ともにあったからでしょう。

部下にとって、カトラーはヒーローであり、スーパーマンであり、ありきたりのルールを守る必要なぞない人物であった。「自分は偉大な仕事のパートナーのひとりなんだ、これほど信頼できる上司に恵まれて、幸せだと思った」と、ある部下は言う。カトラーは、全員が完璧な仕事をするよう期待した。
位置No.414

怖いものなしのカトラーは、ゲイツに対しても物怖じしません。

カトラーは、ゲイツの富と権力に圧倒されるようすもみせず、マイクロソフトとその製品に対する軽蔑を隠そうともしなかった。マイクロソフトのコードはろくでもないし、ドル箱のDOSは「おもちゃ」だと思っている。高性能コンピューターのために、「本物」のオペレーティング・システムを開発したい。
No.753


全く新しいOSを作りWindowsシリーズに加えることの困難さ

NTを開発していた当時、MicrosoftはWindows 3.0というOSを販売していました。
これはマウスでアイコンやウィンドウを操作するグラフィックOSであり、MS-DOSを拡張したものでした(MS-DOS自体は文字のみのOSで、アイコン等はありません)

さらにMicrosoftはWindowsとは別に、IBMと共同でOS/2というOSも開発していました。

ゲイツは、UNIX、OS/2、ウィンドウズ、DOSという、ほぼあらゆる系統のアプリケーションを、NTで実行できるようにしたいと考えていた。「うまくやれるだろうか」とゲイツは聞いた。この点について、カトラーは懐疑的だった。ゲイツの希望を確認してから、「これを全部やりたいというのか」と言った。ゲイツはそうだと答えたが、カトラーは、OS/2のアプリケーション以外は、はっきりと約束しなかった。


アプリケーションは普通、OSが変わると動きません。
例えばiTunesなんかもWindows用/Mac用がそれぞれ用意されています。
しかし上にある通り、Windows NTは全く新しいOSでありながらそれまでのOSのアプリケーションも動くよう設計されました。
これはゲイツの物凄く強固なポリシーと覚悟と、そしてNT開発チームの血を吐くような努力のおかげです。
これにより僕たちは過去の資産を引き継いだまま新しいWindowsパソコンを使えるのです。

ありがとうMicrosoft!

テストにかけると、ワードなど、いくつかのウィンドウズのソフトはすぐにクラッシュした。「テストをはじめるとすぐに、うごかなくなった」とブラウンは言う。
 おなじウィンドウズのソフトであっても、骨格以外にはほとんど共通点がないことが問題だった。ウィンドウズ、DOSのソフトはじつに多様で、その全体に適用できる一般的なモデルをつくるのはむずかしかった。一九九一年末には、モデルの細部をみがいている段階であり、まだまだ先は長かった。
位置No.3654


ソフトがクラッシュする原因は、"変わった方法でDOSを呼び出している"からです。(全てがそうではないでしょうが)
変わった方法がどのようなものなのかは不明ですが、性能を出すために通常の方法ではなく何か裏ワザのような方法を使っているかなーと思います。
これはOSの設計者が意図していない方法なので、それをNTで再現するのは難しいでしょう。
この問題を解決するため、開発チームは多数のアプリケーション開発者(当然他社も含む)に「トリックを教えてほしい」と呼びかけます。

うーん、牧歌的な時代……。

大規模プロジェクトの過酷さ

NT開発は何百人もの技術者を動員し、数年かけて行われました。
このような大規模開発はたいていの場合、超絶激ヤバ炎上します(偏見)
これは開発の規模がある程度以上に大きくなると、人間の能力ではその全容を把握できなくなるためです。
プログラムの一部を変更した場合、別の箇所に悪影響が出ることがありますが、全容を把握していないとその悪影響を予測して事前に回避することができません。
そうして玉突き式に悪影響が積み重なり、発火点を超えて炎上します。

「新しい機能をNTにくわえるときには、……失敗したときの準備をしておくべきだ。ビルドに組みこんで問題がおこったときに、変更点を元に戻せるようにしておかなくてはならない。これはきわめて重要な点だ。現在は、コードを凍結している。新しいコードをチェックインし、その結果、ビルドがこわれた場合、通常、応急修理の方法を見つけだすために、気も狂わんばかりの作業が必要になる」
位置No.3344


プログラムコードはビルド・ラボにあるサーバーに蓄積されます。
ビルドチームはそのサーバーのデータを基にしてビルドを実施して各メンバーに配りますが、ビルドができないと大変です。
問題のあるコードを修正する必要があるのは当然ですが、正しいコードも動作確認が出来ず、全体の作業が止まってしまうのです。
どこの会社もそうだと思いますが、これをやるとバチクソに怒られます。
NT開発ではサーバーへの格納のチェックを何重にもすることで、致命的なコードがビルドに紛れ込まないようにしていました。

開発は家庭を破壊する

自分の生活が破綻しようとしているときに、バグになぞ、かまっていられない。前の日、夫と離婚手続きについて話し合っていた。その前の夜、悪夢にうなされた。他のプログラマーのバグの処理が遅いという評価を上司から手渡される夢だった。
位置No.5167
ブラウンは寝こんでいた。妻が電話を受けた。ダニーの声を聞いて、臨月に近い妻はやれやれと思いながら、受話器を夫にわたした。妻は怒っていた。昨日の夜も寝ているところをおこされ、今日もまたおこされた。出産予定は八月だ。去年の十二月、いくらなんでも八月になれば、NTの仕事も終わっているだろうと思って、二人目の子供をつくることにした。いったいどこまで、会社に貢献しなければならないというのだろう。
位置No.6110

NT開発は超絶激務でした。
何人かの家庭が破壊され、何人かが会社から離脱し、そしてみんな大金持ちになりました。

そしてリリースへ

そんな絶望ともいえるプロジェクトも終わりがきます。
Windows NTの完成です。

カトラーは自分のオフィスで、たったひとり、コンピューターにむかい、メッセージを書きはじめた。

NTは正式に製造にリリースされた。
もういちど、くりかえそう。NTはリリースされた。
長く苦しい戦いだった。全員が、偉大な仕事をなしとげた。
全員の貢献に感謝する。とくに、最後の三か月、毎日二百ものバグを処理しながら、深刻な問題にはぶつからなかった。これだけの成果をあげられたのは、全員の比類ない努力のおかげである。
出荷基準はすべて、達成するか、超過できた。
位置No.6185


激エモですね。
激エモじゃないですか?
超絶厳しい上司からこんなメールがきたら、僕なら泣いちゃいます。

この本、とにかく激ヤバです!ってテンションで紹介しましたがそれと同じくらい激アツです。
これまで大規模プロジェクトに関わったことのある人、Microsoftが好きな人、プログラミングが好きな人、アツい物語が好きな人、全員にオススメです。

WindowsはDOS系とNT系という二つの系統があります。
Windows 95、Windows 98、Windows MEはDOS系であり、Windows 3.0の子孫。
Windows XP、Windows 7、Windows 10などはNT系であり、Windows NTの子孫です。

DOS系は安定性に難ありで、しょっちゅうブルースクリーン(エラー画面)になっていました。
(特に最後のDOS系であるWindows MEは本当に酷かった……。一時間に一回はブルースクリーンを見ました)

DOS系の難点を克服し、DOS系との互換性を確保しつつ信頼性の高い設計を行った結果、NTの子孫は20年経った今も動き続けています。

激エモです!

この記事が気に入ったらサポートをしてみませんか?