今回は、お待ちかね(?)プログラミングコースの様子をお届けしたいと思います(連載の目次はこちら)。
今年大幅に強化されたプログラミングコース
今では「セプキャン」愛称で親しまれているこのキャンプですが、実は私がキャンプに参加した2007年までは、セキュリティコースだけの「セキュリティキャンプ2007」でした。去年から、プログラミングコースが追加され「セキュリティ&プログラミングキャンプ2008」となりました。私は去年、この新設されたプログラミングコースのチューターとして講義補助をしましたが、1年目としての新たな試みということもあり、講義が幅広く、参加者がついて来られない部分があったり、またやさしすぎたりする部分があり、課題がいくつか残された結果となりました。今年はそんな去年の経験を生かし、プログラミングコースが大幅に強化されました。
いちばん大きな改善点としては、プログラミングコースにも組分けが導入されました。プログラミングもセキュリティ同様に幅が広いので、さらに細かく、「OS自作組」「Linuxカーネル組」「プログラミング言語組」の3つに分けられ、応募時から違う応募用紙が用意されました(セキュリティコースの応募用紙はクラス共通)。そして、講師陣も『30日でできる!OS自作入門』の著者である川合講師、「Linux Kernel Watch」を連載している小崎講師、「Yet Another Ruby VM」を開発した笹田講師など、去年よりさらに豪華なメンバーとなりました。こんな豪華な講師陣の講義が受けられるのもキャンプならではのことで、キャンプの一つの大きな魅力です。それでは、クラス別に見ていきましょう。
デバッグが大変~OS自作組
OS自作組の参加者には、キャンプへの参加が決定した後、川合講師の著書である『30日でできる!OS自作入門』の本が配られ、キャンプに参加するまでに、みんな各自で予習してくるという宿題が課せられました。このクラスでは後述する他のクラスと異なり、講義という形を取らず実習中心で行われました。
ご存じの通り、OSは、コンピュータで動くプログラムのベースとなるソフトウェアであり、これを自作するのは、簡単なことではありません。普通のプログラミングと違い、OSを自作するのは、ブートローダー(OSを起動させる小さなプログラム)を作ることに始まり、ハードウェアを制御する部分をも作らなければなりません。また、標準ライブラリもないので、アセンブラとC言語を組み合わせて自作しなければなりません。
デバッグが特に大変なようで、開発環境の仮想マシンで動いても、フロッピーディスクに入れて実機でいざ動かすと動かなかったりして、苦労している人が多かったようです。それでも参加者たちは、教科書のサンプルだけでなく、最大化・最小化やパスワード認証など、独自の機能を自作のOSに盛り込んでいったりしていました。
LKMLにデビューも~Linuxカーネル組
同様に、Linuxカーネル組には参加決定後、『Linuxカーネル2.6解読室』の本が配られました。実際にLinuxカーネル開発に日々関わっている講師陣より、カーネルの実行コンテキスト・コンテキストスイッチ・タイマー・排他制御などの基礎的な事項を学び、デバッギング演習を行った後、講師陣が用意したいくつかの演習課題をこなしていました。
さらにすごいのは、参加者のうち3人が、LKML(Linux Kernel Mailing List:Linux開発メーリングリスト)にデビューし、自らが開発したパッチを投稿していました。キャンプ中にパッチを投稿した1人(Tatsuhiro Aoshima)は/proc(Linuxのシステム上のリソース関連情報をファイルであるかのように配置したファイルシステム)の拡張をし、Linux Kernel Podcastにも取り上げられました。キャンプ後にパッチを投稿した2人はそれぞれ、NFSのレースコンディションのバグの修正とmlock()処理中にプロセスが終了できるように拡張する改善を提案して、この2つともに、本家のLinuxカーネルにマージされる見込みです。3人も参加者がLKMLにデビューするとは、キャンプのレベルの高さが伺えます。
思い思いに言語改造~言語組
言語組には、『Rubyソースコード完全解説』が事前に配られ、講義は、大半がほとんどマンツーマンのような感じでした。参加者たちは、思い思いに言語を改造。全角の演算子に対応させたり、新しい定数を導入したりする実用的な改造から、ifなどの条件分岐によって音を鳴らすという面白い改造もありました。また、Rubyのパフォーマンスに注目した参加者2人は、特定のベンチマークで5倍速くなるような修正や、多倍長整数の計算を平均8%高速化させる修正コードを書いていました。後者はキャンプ後に実際に本家Rubyに取り込まれたようです。
以上、プログラミングコースについてお伝えしました。どの組もやっていることが本当に高度で、実際に本家に取り込まれるパッチが生み出され、彼らはこれからも開発に関わっていくことになるでしょう。次回は4日目の講演会とBoF Part2についてお伝えします。