第92回カーネル読書会に

行ってきました。お題は「GRUB」。言わずと知れたブートローダです。

akachochinはブートローダに特別な思い入れがあります。それは前に在籍していたソフト開発会社で客先常駐したときに最初に作ったものだったのです。

当時は約8年前。最初の会社入って品質保証系の単純作業をやることが多くなり、嫌気がさして転職した直後のことでした。

今考えるとあきれ返るほどに技術力がない。勉強しようにも、本もロクにない。今でこそ組み込みに関する本は山ほど出版されていますが、当時はそんな本などないに等しい。せいぜい「Interface」くらい。

しかもデバッグなどロクにしたこともない。英文もロクに読んだ事がない。アセンブラも書いたことない。

無い無い尽くしの中、英語の分厚いCPUマニュアルを読みつつ、試行錯誤し、何とかリリースできたのを覚えています。(当時はPCI空間がよく理解できず、いろいろ聞き回りました・・・・懐かしい)

シリアルのデバッグコンソールに自分の仕込んだprintfメッセージが表示されたときはものすごく嬉しかったのを覚えています。ここで仕込んだ知識を元に、3年後またも転職。そして現在の会社でnetbsdをいじって今に至っています。

ブートローダはそんなわけでakachochinの原点なのです。

さて、講義について。印象に残ったのは、okujiさんはRubyなお人で、オブジェクト指向な設計に基づいてGRUB2で実装されているところ。
GRUBをはじめとするブートローダは基本的にコードがハードべたべたという先入観がありましたが、見事に打ち砕かれました。

ここで、読者の中には「ブートローダ」と「オブジェクト指向」は一見ミスマッチに思える方もいると思います。

確かに組込みのように「特定のボードでのみ」動くのであれば「いかに早く、小さなサイズで」を目指すことになります。移植性など二の次です。

しかし、PCアーキテクチャはそうはいかない。何が装着されるのかわからない、
しかも、x86以外のCPUもサポートしようとしている。

そうすると、重要になるのは「いかに労を少なくして、ブートローダをより多くの環境で動かせるのか」というところになってきます。

すると、効率よりも移植性、サイズよりも変更に対する耐性が重要になってきます。
(もちろんブートローダなので、ある程度サイズ、効率も重要になってきますが)
これを行うには、「抽象化」をいかにできるのかが鍵。

そして、抽象化と相性が良いのがオブジェクト指向な考え方。
オブジェクト指向は考え方であって、オブジェクト指向な「言語」を使わなくても実現は可能。

なので、ブートローダオブジェクト指向は別にミスマッチでもなく、むしろGRUBのような汎用ブートローダでは要請されることなのです。

ちなみに、現在のOSでは抽象化の考え方は別段変わったことでありません。例えばvnodeはもろオブジェクト指向な考え方で構成されていますし、メモリ管理、プロセス管理とあらゆるところで抽象化の跡が見えます。

いやはや、あっという間の二時間でした。

あとは・・・・
○RCUの和訳の話。
吉岡さんや他の方には「RCUの文書」(http://lwn.net/Articles/253651/)の和訳をしている旨話をしました。
海外出張などで一時中断しましたが、どうにかこうにか遅々として進めています。
何とか公開できたらいいなあ。勉強会に通うようになってから、何かしてみようと思えるようになった自分がいることにびっくり。経験値が高い人たちの間に交わると、自分が確かに変わります!

○勉強会のあと
やっぱりご飯が食べたくなり,2件目はニュー新橋ビルの地下で飲んでしまいました。噛むと肉汁がじゅっとほとばしる餃子に青島ビール、白い飯は最高です。
(写真はあとではります)