【LinuxCon 3日目レポート】Android開発スタイルは「壁に囲まれた庭での開発?」

Linux20年史や新バージョンでの変更なども解説


 Linuxの開発者が集まる世界的な技術カンファレンス「LinuxCon Japan Tokyo 2011」が6月1日から3日まで開催された。3日目の6月3日にも、カーネル開発動向やオープンソース論など、20近いテクニカルセッションが開かれた。

 

1.0の17万6000行から2.6の590万行へソースコードが成長

Jon Corbet氏(LWN)

 3日目の基調講演では、Linuxカーネルハッカーであり、Linuxに関するニュースサイト「Linux Weekly News(LWN)」編集長でもあるJon Corbet氏が登壇した。最近のLinuxカーネルの変更点などを紹介する定番の講演「The Kernel Report」の特別版として、20周年を迎えたLinuxの歩みをまじえて語った。

 まずLinux前史として、1976年に登場したUNIXソースコード解説書「Lion's commentary on UNIX」でOSの中身が明かされたこと、1985年に発表された「GNU Manifesto(GNU宣言)」で自分たちがOSを作るというコンセプトが登場したこと、1988年のMIT X Consortium結成により企業が集まってフリーなソフトをサポートするようになったことの3つを紹介。「これらが準備となってLinuxが登場した」と述べた。

 それを受けてCorbet氏はLinuxカーネルの歴史を最初から紹介した。最初に公開されたLinuxカーネルは1991年8月のバージョン0.01で、ソースコードは1万行だったという。その後、1991年の0.11でツールチェーンが動いて自身をコンパイルできるようになり、1992年の0.12でGPL2を採用。1992年の0.95は1.0を見据えたバージョンで、GUIのX Window Systemが動くようになった。

 1994年に登場したバージョン1.0では、ソースコードが17万6000行となり、CREDITSファイルに記載された開発者は80名だったという。1995年の1.2では行数が倍になり、x86以外のアーキテクチャに対応した。1996年の2.0では行数がさらに倍になり、SMPに対応し、Documentation/ディレクトリにドキュメントが用意された。1999年の2.2では行数がそのまた倍に。2001年の2.4では340万行に、2003年の2.6では590万行に成長した。

 これらを振り返り、Corbet氏は、Linuxの歴史の中で何度か重要なターニングポイントがあったと説明。その中から、1998年にLinus Torvalds氏が「もうだめだ」と弱音を吐いて開発が一時止まったこと、2002年にバージョン管理システムのBitKeeperを採用して作業フローが変わったこと、2004年にバージョン2.6のリリースプロセスを変更したことなどをエピソードとして紹介した。

 もう一つ大きなターニングポイントとしては、2003年にSCOが「LinuxはUNIXの著作権を侵害している」といくつかの企業を相手に訴訟を起こした事件にも言及した。Corbet氏は、「結果的には、これによってLinuxはクリーンであることが証明され、環境がよくなった。天から降ってきた祝福といってもいい」とコメントした。

 今後の開発体制の課題としては、コミュニティが大きくなることで何か問題が起こるかもしれないという心配、新しい開発者にベテランが席を作ってあげられるかどうかの心配、コードがどんどん複雑になってより経験が必要になっている心配が語られた。

Linux前史。「むかしむかし、はるかかなたの銀河系で…」最初期のLinuxの状況
これまでの重要なターニングポイント企業ごとのコントリビュータ数の変化。TIが0から伸びているとCorbet氏は指摘

 

Big Kernel Lock削除など最近のバージョンでの変更を説明

 続いてCorbet氏は、いつもの「The Kernel Report」どおり、最近のバージョンでの変更を解説した。バージョン2.6.35(2010年8月)は、47,284の変更セットをマージし、バージョン2.0の総ソースコード量より多い1100万行のコードが追加されたという。機能としては、perf kvm、メモリの圧縮、アイドルの検出、RAMoops、BtrfsのダイレクトI/Oサポートなどが紹介された。

 バージョン2.6.36(2010年10月)については、セキュアOS機能のAppArmorのマージ、赤外線リモコンのドライバー、新しいOOM killer、ファイル変更を通知するfanotifyなどが紹介された。また、「ソースコードを整理して、初めて、前のバージョンよりソースコードのサイズが小さくなった」ことも語られた。2.6.37(2011年1月)については、ファイルシステムのベースとなるVFSでスケーラビリティの問題を解決したことや、ブロックI/O帯域幅コントローラ、GFS2がexperimental扱いではなくなったことなどが紹介された。

 バージョン2.6.38(2011年3月)については、メディアでも「驚異のパッチ」と話題になった、セッションごとにスケジューリングの優先度をグループ化する機能を「すでにあった機能が200行の改良で普通の人に使えるようになった」と説明。そのほか、dcacheのスケーラビリティの改善や、SSDのbatch discard機能、メモリのtransparent hugepageなどが紹介された。

 最新の2.6.39(2011年5月)については、リアルタイムOSでのクロックの改善や、割り込みハンドラーをスレッドで実行する機能、iptablesのルールをグループ化できるIPsetなどを紹介。また、スケーラビリティ改善のため長らく望まれていたBig Kernel Lock(BKL)削除が達成されたことが説明された。

 さらに、「2.6.40」に取消線を引き「3.0」と書いたスライドを映し、「Linusは退屈なものでもいいと言ったが、そんなに退屈ではない」と語りながら、現在rc1が公開されているバージョン3.0についても説明した。変更点としては、Xenのコードの完全マージ、仮想記憶のクリーンなページを特殊な形式でキャッシュするcleancache、コンテナのためのnamespace file descriptor、BPFパケットフィルタのJITコンパイラ、複数のパケットを送信するsendmmsg、ARMアーキテクチャの整理などが挙げられた。

 

今後の技術的な課題は?

 続いて、今後の技術的な課題が分野ごとに紹介された。ARMアーキテクチャについては、最近になってベンダーからコードが積極的にコントリビュートされるように改善された結果、一方で実装の重複やよくない設計の問題も出てクリーンアップが必要になっていることが語られた。電力管理については、CPUは難しくないが周辺機器まで考えると非常に複雑であることが説明された。

 また、最近ではPCIe接続など高速なハイエンドSSDが登場していることに触れ、もっとIOPsを上げる必要があるが、そのためのベストな解はまだなく重要なチャレンジであると指摘した。ファイルシステムについては、ext4は安定して“退屈な”ものに無事なったこと、Btrfsはチェックプログラムや重複削除など課題があるがそのうち“退屈”なものになってくれるのではないかと語った。メモリについては、transparent hugepageの改善やwritebackの問題、GPUなど異なるメモリの扱いなどをテーマとして挙げた。

 また、注目されている分野として仮想化やコンテナ、リアルタイムOSなどがあるが、これらにおいてはアイソレーション(分離)やグループ化が課題であると指摘。cgroupsやrealtime preemptionパッチ、deadline I/Oスケジューラの取り組みを紹介し、「deadline(締め切り)は守られないかもしれないけど」と笑って付け加えた。そのほか、トレースにも言及し、ftraceとperfを統合しようという案などを紹介して、「非常に面白い分野で、プレッシャーや抵抗もある」と語った。

 Corbet氏は最後に、基調講演でもLinus Torvalds氏が「UNIXのコンセプトは40年ぐらい安定していて、20年後でも機能は変わっても基本構造は変わらないんじゃないか」と話した言葉を引用。さらに、5000年後の未来でUNIXマシンが発見されるというSF小説を紹介して、「20年といわず、これからの4000年を見据えて進もう」というジョークで話を終えた。

Linuxカーネル2.6.38の変更点最新版であるLinuxカーネル2.6.39の変更点
次期版であるLinuxカーネル3.0の変更点Linus Torvalds氏の「20年後でも基本構造は変わらないんじゃないか」という発言を引用

 

Androidは最も成功したLinux、しかしオープンソースでやってはいけない例にも

James Bottomley氏(Parallels社)

 2つ目の基調講演では、LinuxカーネルのSCSIサブシステムなどのメンテナーであるJames Bottomley氏(Parallels)が、「いつもとちょっと違う話題」と前置きして、GoogleのAndroid開発とLinuxカーネル開発コミュニティの関係を教訓としたオープンソース論を語った。

 Bottomley氏は冒頭で「Androidは最も成功したLinuxディストリビューションとなった。ただし、やりかたではオープンソースでやってはいけない例にもなっている」とテーマを示した。

 AndroidはLinuxカーネルを独自で大幅に変更して利用している。こうした「フォーク(分岐)」自体についてBottomley氏は、Googleでは独自の要件によってフォークする必要があったこと、フォークはGPLでも保証されたオープンソースでの基本権利であること、Linuxの歴史を見てもフォークが進化を促進してきたことを主張した。フォークの問題点としては、しばしば分断化が指摘されるが、Bottomley氏は「フォークしても後でマージ(統合)されれば分断化ではない。マージされないのが分断化」と述べた。

 また、AndroidがGPLライセンスを避けてソフトウェアを利用していることについても、「これまでGPLのコードが入っていると市場で成功しないと言われてきたが、AndroidでもGPLライセンスのソフトウェアが含まれていて成功した。ライセンスは問題ではないことがわかった」と語った。

 では、何が問題だったのか。Bottomley氏はGoogleによるAndroid開発スタイルを「壁に囲まれた庭での開発(Walled Garden Coding)」と呼び、コミュニティやパートナーは成果物が出るまでわからないと批判。それによって失敗した例として「Android 1.xには企業サーバーと同期するカレンダーソフトがなく、それによって企業ユースでiPhoneに後れをとった」と主張した。

 これらを元に、Bottomley氏はオープンソース開発のありかたを論じた。まず、フォークは良いことだが、成功するにはアップストリーム(本家)へのマージが必要と述べた。そして、Androidでの教訓として、長い間マージせずに開発していると、パッチの量が多くなりすぎてアップストリーム側でレビューしきれなくなることと、アップストームの変化から取り残されて差が広がってしまうことを指摘した。

 そのうえで、こうしたことを避けるためには、早いうちから情報を公開して、継続的に情報を共有しながら開発していく必要があると述べた。また、小さな単位でパッチを継続的にマージしていくのが重要だと説明した。さらに、マージへの考え方として、昨年のLinuxCon JapanでもIBMのDan Frye氏が語っていた「自分のコードがマージされることではなく、そこで必要としている機能が実現されることが重要」という言葉を引用した。

 ライセンスの問題については、GPLはイノベーションや利益の的であるという誤解があるが、コミュニティとかかわるときに問題を少なくするライセンスであると述べ、Bruce Perens氏が発案したチェックシート「Bright Line System」なども紹介した。

 最後にBottomley氏は、コミュニティの多様性はもろ刃の剣でもあるが、推進していく必要があること、LinuxでもLinus Torvalds氏が大きな影響力を持つが決定的ではないことなどを語り、「コミュニケーションを信頼しているからできることだ」とまとめた。

 質疑応答では、ビジネスの世界にライセンスをどう理解してもらうかという質問に対して、Bottomley氏は「GPLはコミュニティでの開発のモデルを反映したものだが、ビジネスの世界ではライセンスというのは違反しているかどうかだけが考えられる。そこを翻訳して伝える必要がある」と答えた。

 また、カーネルメンテナーの一人であるTed Ts'o氏(Google社)は、「新しいパッチに対してLKML(Linuxカーネル開発ML)でやたらとダメ出しをする声も多い。これはいい傾向ではない。特に新しい人は、聞くべき声と無視していい声を区別できないため、説得に時間をかけるより自分たちでやったほうが早いということになってしまう」と問題点を指摘。ではどうするべきかについて、Bottomley氏と議論を交わした。

フォークしたものはマージする必要があるという説明継続的にコミュニケーションをとり少しずつマージしていくのが有効という説明

 

アジアの著名Linuxカーネル開発者によるパネルディスカッション

 今回は新しい試みとして、アジア人の著名Linuxカーネル開発者によるパネルディスカッション「Asian Kernel Developer Panel」も開かれた。韓国人のTejun Heo氏、日本人の小崎資広氏、中国人のHerbert Xu氏が登壇し、司会の柴田次一氏(NEC)の質問に答える形でLinuxカーネル開発コミュニティとのかかわりが語られた。

 アジア人であることによりカーネル開発コミュニティで難しいことは、という質問に対し、Heo氏は、言葉の壁によって技術的に能力があっても意思を伝えづらい場合があることと、議論に慣れていないという文化の違いを指摘した。それに対し小崎氏は、「私の英語力はこの程度ですが、海外のカンファレンスから招待もいただいてます」と冗談まじりで言いながら(注:パネルディスカッションは英語で行われた)、「開発者には各自いろいろなバックグラウンドがあり、日本固有のことを知らない人も多く、説明が通じないことがある。批判を受けることもあるが、ひるまないことが大切」と答えた。Xu氏は、「コミュニティにはアメリカ人やアジア人だけでなく、例えばイギリス人やロシア人もいる。壁を感じるかもしれないが、それは言語や文化に限らない」として、「何をやってもうまくいかない時もあるが、忍耐強く進むことで道が開けることもある。“忍者”の心だ」とユーモアまじりに答えた。

 今後もっと自国のカーネル開発が増えるか、という質問に対して、Xu氏は「中国では主に企業からLinuxカーネルへのコントリビューションが増えている」と回答。小崎氏は「日本からのコントリビューションが増えているし、若いカーネル開発者も増えている」とし、自身も講師として参加している「セキュリティ&プログラミングキャンプ」(IPA主催)の取り組みを紹介した。Heo氏は、韓国と現在働いているドイツとを比較しながら、「就労時間が世界でトップクラスの韓国では、趣味で開発をしていると時間がとれなかった。今はAndroidのおかげで企業がLinux開発に力を入れるようになった」と語り、「数年前にはアメリカや日本の企業が、開発コミュニティとのかかわり方を検討していたが、同じことが今韓国でも起こってきた。これからも発展すると思う」と答えた。

 そのほか、各自のLinuxカーネル開発参加のきっかけや現在注目している分野なども含め、盛んに討議がなされた。司会の柴田氏は最後に「今回の3人はLinuxカーネル開発で重要なことをやっていて、やりがいを感じていると思う。これからもアジアの開発者に、もっと参加してほしい」と話題を締めくくった。

左から、Tejun Heo氏、小崎資広氏、Herbert Xu氏司会の柴田次一氏(NEC)

 

危機に対してカーネル技術者は何ができるか

Shane Coughlan氏

 3日間のLinuxCon Japan 2011最後のセッションとしては、東日本大震災を受けて、災害や電力問題などの危機に対してカーネル技術者が何をできるか話しあう「Disaster Relief Panel Discussion」が開かれた。

 パネルディスカッションに先立って、日本在住でオープンソースライセンスの専門家であるShane Coughlan氏が、NGOに参加して東北でボランティア活動したときの模様を説明した。地域によって被害状況が大きく違うこと、ところによっては3軒の家しか残らなかったことなどを紹介。テクノロジーはインフラが整っていてこそ意味があること、現地の人に使ってもらうにはユーザーインターフェイスが極力シンプルである必要があることなどを語った。

 それを受けて、Ted Ts'o氏の司会のもと、Rafael Wysocki氏、Chris Mason氏、Fernando Luis Vazquez Cao氏、Shane Coughlan氏が討論した。カーネル技術者のできることという意味で、電力消費を押さえる技術を中心に議論。電力管理機能のメンテナーであるRafael Wysocki氏は、不要な機能をオフにすること、使っていないマシンを停止すること、ACアダプタを外したノートPCでどの機能がどのぐらいバッテリーを消費するかテストしておくことなどを提案した。また、Linuxディストリビューションで省電力機能を設定しやすいようになっていないのではないか、といった疑問も呈された。

 そのほか、サーバーの高可用性のための冗長化と省電力との兼ねあいについても議論。用途によっては、サーバーであってもコールドスタンバイやサスペンド、ハイバネーションなどでよいこともあるのでは、といった意見も出された。

 最後に、Fernando Luis Vazquez Cao氏が、「ITは、災害時に問題の元になるのではなく、問題を解決するものでありたい」と語ってパネルディスカッションを締めくくった。

左から、Fernando Luis Vazquez Cao氏、Shane Coughlan氏、Rafael Wysocki氏、Chris Mason氏司会のTed Ts'o氏
関連情報