Microsoft Dave Probert 氏の Windows Kernel に関する講演会

Dave 氏は Microsoft で 1996 年から Windows カーネル (NTOS) の開発を行っている凄腕の開発者。最近は、NTOS カーネルの一部を教育用に移植した ProjectOZ という教育用 OS キットの作成も行っているらしい (MINIX みたいなものですかな)。


この日を結構前から待ち望んでいた訳だが、ついにやってきた。


Dave 氏登場。


さすがアメリカ人。体格が良くパワーもある。



講義の内容は、Windows カーネルの内部構造について。つまり、「インサイド Windows」に書いてあることと同等。
全部英語の講義で、もちろん同時通訳などが無いのが難点だが、技術用語がたくさん出てきたので内容はそれほど難なく理解できた。


午後5時半に講義が終了して、その後数名で 夕食を食べに行こう ということになった。店は、Dave 氏の秘書が事前に google で調べたところ、研究学園駅の近くにイタリアンレストランがあるのでそこを予約してあるらしい。ただ、問題は筑波大学のメンバーのだれもその店の場所をよく分からないこと。


Dave 氏ともう 1 人の MS の人と、加藤先生・新城先生とあと6人の合計10人で行くことになったのだが、遠いので車で移動、ということで、僕と、加藤研の A さんと I さんと、あと新城先生の車の 4 台に分乗することになったのだが、なぜか新城先生が行方不明になってしまったので、3 台に分乗してその謎のイタリアンレストランを目指して出発する。


Dave 氏ともう 1 人の MS の人は、Prius が良いということで、僕の車に乗ってきた。残りの人も適当に分かれて乗ったが、誰も道がわからないのでとりあえず A さんが先導して、後ろから付いていくと、なぜかたどり着くことができた。さすが。


夕食の際もずーっと NT カーネルの話などをする。しかも Dave 氏を見ると NT カーネルについて熱く語っているため、出てきた料理をほとんど食べていない。さすが、この人は AC に違いない。


僕は英語は不得意なのだが、一応コミュニケーションはとれていたらしくて、色々な質問に答えてくれた。普段はなかなかこういうマニアックな質問ができないので、このチャンスを生かしていろいろ聞くべきだ。
下記は僕が行った質問とその回答のメモである。ただし英語の聞き取りで間違っている可能性があるので、下記は完全に信頼しないでください。


[質問] スライドでは、NTOSKRNL はデバイスドライバコードを一切含んでいないということだったが、では ntfs.sys や scsi.sys、disk.sys などのハードディスクを読み書きするデバイスドライバはどうやって読み込まれるのか?
NTOSKRNL を呼び出す PreLoader (恐らくブートセクタプログラムおよび ntldr のこと) に NTFS などのファイルシステムドライバが特別なコードとして組み込まれている。


[質問] では、サードパーティの開発者が例えば新しいファイルシステムを開発してそれ用のデバイスドライバを書いたとしても、そのファイルシステムのドライブ上に NT カーネルを置いてブートすることは不可能ということか?
現在のところ不可能である。


[質問] 講義では、「HAL」のことを「Hardware Adaptation Layer」と言っているが、Windows DDK や Internal Windows 本では「Hardware Abstruction Layer」と書かれている。これはどちらが正しいのか?
Hardware Adaptation Layer が正しいはずである。Hardware Abstruction Layer はミステイクだと思う。


[質問] 将来的に、MSIL (.NET の中間言語) を Windows カーネル内で使用することができるようになるか?
将来はそうなるかも知れない。現時点では難しい。そのプロジェクトはあったが、いくつかの問題にぶつかった。(確か、ガベッジコレクションが安全上の問題を引き起こすとか、そういう話)


[質問] Windows カーネルをプログラミングするとき、どのようなテキストエディタを使っているか?
vim を使っている。


[質問] Windows NT ソースコードのビルドには、"SHOWSTOPPER" という本によると、昔は半日から 1 日くらいかかっていたということだが、現在はどうか?
現在はマシンの速度が向上したのと、差分ビルド技術が使えるようになったので、ずっと速くなった。あと、Windows 自体がたくさんのバイナリで構成されるので、開発者のほうでバイナリを組み上げてそれをチェックインするようにしていることもある (という意味のことを言っていたようですが、正確ではないかも知れない)。


[質問] "SHOWSTOPPER" という本によると、昔はプログラマーフロッピーディスクにプログラムを書いてそれを手でビルド・ラボに持ってきてチェックインしていたというが、現在ではどういうツールを使ってバージョン管理を行っているか?
自社内で共通のソースコード管理ツールがあるのでそれを使う。ソースコードの流れで、たとえばバージョン分岐などの管理もこれでうまくできる。


[質問] では、Visual SourceSafe などは使っていないのか?
Visual SourceSafe は使わない。あれはビギナー (初心者) 向けのソフトだ。


[質問] Windows Vista を使ってみたが、TCP/IP プロトコルスタックWindows XP に比べてどうも違うのではないかと感じたが、実際に違うのか?
全く違う。新しい TCP/IP スタックを書き直した。これまでは IPv4IPv6 のスタックは別々のコードだったが、Vista ではこれが統合されていて、同じコードで TCP/IP 通信ができるようになっている。


[質問] 以前の WindowsTCP/IP プロトコルスタックコードは BSD ベースであるという噂があるが、本当か?
現在 (Windows 2000 以降?) は自分たちで作ったものなので、それは違う。最初の頃のバージョンでは、Windows の開発チームにネットワークスタックを書ける人があまりいなかったので、BSD のライセンスを受けていた (と言っていたようですが、正確ではないかもしれない)。




上記のようなマニアックな質問をしたり、他の人がした質問を聞いていたりしたのだが、さすがカーネル開発者だけあって答え方は的を得ている。日本の大学でもこういう人がもっと頻繁に教えればすごい人材をもっと出せると思った。


最も良いプログラム言語は何かと聞かれると、Prolog だと言っていた。だが仕事ではほとんど C 言語でプログラムを書くと言っていた。予想通りである。あと Ada や Perl 等も好きらしい。



2時間くらい AC な話をして、「あと10分でつくば駅の電車に乗らないといけない!」ということになって、また僕が Prius に載せて駅までお送りする。
すると、Dave 氏がPrius はこの GEEKインターフェイスが良いのだよ!」 みたいなことを言って、運転席の横に付いているディスプレイにエネルギー図 (現在ガソリンエンジン・電気モーター・バッテリーの間でどのような方向にエネルギー伝達が行われているかをリアルタイムで示す画面) を出して喜んでいた。さすが AC だ。


…… っていうか、万が一事故って Dave 氏死亡とかいうことになると、ものすごい額の損害賠償請求が MS から来る気がして、大変慎重に運転した。



筑波に来る前は、早稲田大学で3日間の集中講義をしてきて、次は韓国の大学へ行って講義をする、ということで、大変お忙しいようであった。さすがアメリカ人は違うなあ。