1. まとめトップ

【ソース解析】linuxカーネルソースを読む 先人の苦労

Linux カーネルの開発者は高齢化が進んでおり、若い開発を惹きつけていない

更新日: 2019年06月16日

25 お気に入り 69149 view
お気に入り追加

この記事は私がまとめました

twcritiqueさん

まずはソースを見てみよう

今、Linux カーネル開発者の高齢化が進んでいる

LWN.net の編集長 Jonathan Corbet 氏は「Linux カーネルの開発者は高齢化が進んでおり、若い開発を惹きつけていない」と指摘したそう

だ (InformationWeek の記事、japan.internet.com、本家 /. 記事より) 。

開発者の高齢化に関しては、他にも「髭に白いものが混じるようになった人は増え、それと共にコーディングに関する知識も増えた。Linux カーネルの高齢化は開発者らが死に始めるまで続くだろう」といったコメント (SCSI サブシステム開発者 James Bottomley 氏) や、「上層部での新陳代謝は起きておらず、(昔からいる) 我々がまだそこにいる。もし我々が邪魔なようであれば言ってくれ」といったコメントなど (sysfs サブシステム開発者 Greg Kroah-Hartman 氏) もあったそうだ。

カーネルって、なんすか?

カーネル(英: Kernel)は、階層型に設計されたオペレーティングシステム (OS) の中核となる部分である。システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理する。

読むとどんなよいことが?

カーネルのソースを読むと負荷分散に強
くなります。自信が持てます

「カーネルのソースが読めると、たいそう儲かるってことが、分かってしもうたから」。「もうすぐ大学の仕事は定年や、でも定年後の収入の方が多いんとちゃうかな」---。

ですってよ、奥さん

赤松氏によると、Linuxにかなり詳しい技術者でも、ソースを深く読んでいる人は「ほとんどおらへん」という。ソースの一部なら読む人は多いようだが、全体像を把握できるまで詳細に読みこなしている人は、ほとんどいないらしい。

アラー

カーネル内部のネットワーク技術を読むことで、処理手順を詳細に理解でき、トラブルが発生しても、すぐに原因究明や再発防止ができるようになります。もしカーネル内部を読むことができなければ、リブートするしか方法がありません。

とにかく膨大、複雑らしい

Linux カーネルくらい巨大で複雑なプログラムになると、見ようとする者を威圧 するかのような感がなくもない。まるで辿るべき一端がなくて、解けない球状の 巻き糸のようである。カーネルの一部を見ていると、しばしばいくつかの他の関連 ファイルへと導かれて、すぐに自分で何を探していたのか分からなくなる。以下では、 節に付けた題名について、ソースツリーのどこを見れば最良かヒントを述べる。

Linuxユーザーならば、一度はLinuxのソースコードを解読してみようと考えます(考えますよね^^;)。LinuxのソースコードはThe Linux Kernel Archives(http://kernel.org/)からダウンロードすることができますので、「よし早速ダウンロードして読んでみよう」と意気込んでみたりします。しかし、いざtarボールを展開して、ディレクトリを覗いてみると、ソースコードは果てしなく膨大な量であることを実感します。ダウンロードしたは良いが、いったいどこから読めばよいのか、どのファイルが何をしているのか、そもそもどこから始まるのか、と疑問ばかりが膨らんでしまい、結局読む気が失せてしまいます。

読むのに数年かかるらしい

私は約5年もかかりました。し

かし、その5年のうち最初の4年は、どのようにすればカーネル内部を読めるのかを知るためだけに費やしました。つまり、最初の1歩に時間がかかるのです。

 4年もかかって悟ったのは、「カーネルを読むための基礎知識は意外に少ない」ということでした。

具体的には、知っていなければならない技術は、“たったの5項目”程度です(図1)。


・データ構造の表現方法
・プログラム構造の知識
・カーネルをコンパイルする技術
・ライブラリの利用・指定方法
・エラー表示の確認方法

・1 とりあえずカーネル変数を/porcを使って読み込んでいく
・2 並列処理を考慮に入れたLinux上のプログラミングを体験する
・3 ソーネルのソースを読んでみる
・4 カーネルの一部となる、スーパーバイザーモードで動くプログラムを作る
・5 システムコールの追加
・6 共有メモリ機能の変更
・7 仮想メモリ機構の理解とチューンナップ
・8 プロセス間の同期メカニズムである「イベント」について学ぶ
・9 スケジューラの変更
・10 プロセス間で利用するパイプをデバイスドライバとして実装
・11 ディスクドライバの変更
・12 ファイルシステムの作成

全米が、泣いた

ソースコードの読み方の解説本としては、「デーモン君のソース探検」がおすすめです。

カーネルのコードではなく、ユーザコマンドのソースコードの解説本ですが、主人公のデーモン君と一緒にBSD系OSのソースコードがどのように系統だっていて、それをどうやって読み進めればいいのかが体験的に学べるようになっています。この時に本で学んだ方法はBSD系OSに限らずあらゆるソースコードを読むときに役立つでしょう。

ほら、みんなやってるぞ

1 2 3