yunomuのブログ

プログラミング関係

研究室の思い出 印刷された大量のソースコード

 2004年頃、大学4年で研究室に配属され、OSとネットワークの研究室でちょっと専門外の機械学習の研究をしていた。配属直後なので研究というより概念のお勉強から始まる。

 その研究室では既に10年続くプロジェクトもあり、打ち合わせのために作られた大量の検討資料がファイルに綴じられて本棚に刺さっていた。しかしよく見ると半数以上のラベルがプロジェクト名ではなく、「FreeBSD src/sys/alpha」とか「FreeBSD src/sys/boot」とか、何かのパス名みたいなものだった。そういうファイルが本棚の1列分以上ある。なんだこれ、と思って先輩に聞いてみた。

「あのファイル何なんですか?」
「あーそれ、俺が印刷した」

 この研究室は私が配属される2年前に教授が他の大学から移られてきてできたものであり、先輩は何もわからないままその研究室に入った人だった。教授が前にいた大学に研究室の先輩と言える人はいたものの、そう頻繁に連絡が取れるわけでもなく、先輩のいない研究室でいきなりOSの研究を引き継ぐことになった。当初はマシンの起動やカーネルのビルドで手こずって遠方の先輩に電話で助けてもらったり出張してきてもらったりもしていたらしい。

 そんなこんなで先輩はOSの研究に加わった。前任者の関係だったか何か忘れたけど、提案手法の実装評価はFreeBSDを改造してやることになっていたため、そもそもの構造の勉強をFreeBSDをベースに行おうとした。行おうとしたが、そもそも何をしたらいいのか取っ掛かりがない。どうしたらいいか先生にたずねてみても「ソースコード読め」くらいしか言われない。とりあえず読みやすいように印刷して読んでみるも、当然のように何もわからない。当時もetagsのようにソースコードを解析して定義を参照できるようなツールはあったものの、当時の先輩はそれを知らないし、カーネルソースコード全体を解析できるようなものではない。関数マクロは解析しきれないし、その後いろいろ理解してから解析対象を絞っても2日くらいはかかった。

 先輩は先生に相談してみる。
「どうしたらいいですか」
「関係ありそうなところを読めばいいよ」
「それがどこかわからないんですが」
「じゃあ全部読め」
「印刷していいですか、読みやすいので」
「いいよ」
「本当に? 大量にありますよ? かなり紙を使いますよ?」
「紙はいっぱいあるから」
というようなやり取りを経て、印刷作業が始まったらしい。

 ちょっとした脅しというか、面倒だから教えてほしいと思っていたのに「やってみれば」みたいな対応をされたのでそれに対抗して、でもまあやるしかないかということでソースコードの先頭(アルファベット順)のファイルから印刷開始。ところがソースコードの量は思っていた量の何倍どころか何十倍も多く、数日経ってもsys以下のディレクトリ1つか2つしか消化できていない。でもやれと言うんだからやってやると意地になって1〜2週間、ひたすらプリンタを専有して印刷し続けて、さすがに頭が冷えたらしい。紙も時間も無駄だし、そもそもそれだけやり続けてもまだ1割も行ってない気がするし、そもそもこれを全部読むのかと。

 結局その後、きちんと調べるべき部分を調べ直し、ようやく研究を開始することができ、この時に印刷したソースコードは記念にファイリングして取っておいている、ということらしい。先輩は「いやーあの頃は若かったなー」と言っていたが1年前の話であるし、実際には「きちんと調べるべき部分を調べ直し」の部分の方が大変だったであろうことは想像できる(私もこの1年後に似たようなことをやったので)。

 余談だが、FreeBSDソースコードはsrc/sys以下にあるが、この中にはデバイスドライバや各アーキテクチャ依存のコードもフラットに置かれているため、先輩が本来読むべきコードは "i386", "kern", "ufs"あたりであり、特に研究テーマがファイルシステムに関係が深かったために最も重要なのは"ufs"であった。アルファベット順に読んでいると大変なことになっていただろうし、実際に頭文字cのディレクトリの数個目で止まっていた。cで始まるディレクトリは多い割にほとんど本筋ではない。危ないところだった。

 ということで、この話は面白すぎるので新しく研究室配属されてきた人に「あのファイル何ですか」と聞かれる度に語り部をやっていたが、語る相手もいなくなったので放流することにする。