低レイヤの知識の重要性は今後も変わらない - 小崎資広に聞くLinuxカーネル開発の裏側

Linuxは、世界でもっとも広く使われているソフトウェアのひとつであり、多くのエンジニアの仕事に密接に関わっています。では、Linuxそれ自体は、どのように開発されているのでしょうか。Linuxの中枢である、Linuxカーネルの開発者のひとりである小崎資広さんに、知られざる開発の裏側を聞きました。

低レイヤの知識の重要性は今後も変わらない - 小崎資広に聞くLinuxカーネル開発の裏側

オペレーティング・システムLinuxは、世界でもっとも広く使われているソフトウェアのひとつであり、オープンソースというカルチャーが生み出した、大きな大きな結実です。サーバー用OSとしてはデファクトと呼べるほどの普及を見せており、それだけにLinuxの動向がもたらす影響は広範にわたります。こうした前提があるなかで、Linuxそれ自体は、どのように開発されているのでしょうか。

今回、お話を聞いた小崎資広(こさき・もとひろ/ 1@kosaki55teaさんは、Linuxカーネル開発者のひとり。これまで、VM(仮想メモリ)の大幅な性能改善など、大きな貢献を残してきました。小崎さんははなぜ、Linuxカーネルへのコントリビューションを行うようになったのでしょうか。そして、極めて影響範囲の大きいソフトウェアを修正する困難と醍醐味とは。知られざる開発の裏側を伺いました。

配属から最初の2週間で、W3Cのブラウザ関係の規格書を全て読んだ

―小崎さんがプログラミングのスキルを向上させたのは、新卒入社された企業の経験が大きく影響しているそうですね。

小崎 そうなんです。私は1999年に大学を卒業した後にパナソニックの子会社を就職先として選んだのですが、最初に経験した案件がなかなかのデスマーチでした(笑)。

当時はテレビがアナログからデジタルに切り替わる過渡期で、まずBS放送が切り替わり、1~2年後にCS放送が切り替わり、その後に地上波放送が切り替わり、という時期です。家電業界はひたすらその対応に追われていて、とにかくエンジニアが足りない状況です。私の場合は研修を完全にスキップして、入社後すぐに現場に配属されました。

―おおお……。かなり大変な環境からのスタートだったのですね。

小崎 それに加えて、ちょうど家電の作り方そのものも変化している時期だったんです。昔ながらのファームウェアっぽい世界から、リモコンのボタンを押すとインタラクティブにコンテンツがおりてくるとか、モデムが付いていてインターネットにつながるとか、OSやプロトコルスタックなどが必要な世界に変化しつつありました。

BSデジタル放送においても、日本がそれまで用いていたMPEGベースの方式ではなく、アメリカに追随してXMLベースの方式に切り替えることになりました。ですが、XMLベースの放送規格は当初存在すらしておらず、自分たちでゼロから作るほかありません。放送規格のドキュメントを作成しながら、プログラムを実装するという日々が続きました。これだけ過酷な環境からのスタートですから、自然とレベルはアップしますよね。

2
小崎資広さん:1999年にパナソニックの子会社に新卒入社し、テレビの開発に携わる。業務でLinuxに触れたことをきっかけに、カーネルの知識を深める。2005年に富士通へ転職し、Linuxカーネルの開発に従事、その後、米Red Hatに出向しRHEL7の開発に参加。2016年に帰国し、以後は富士通研究所でリサーチマネージャーを務める。Linuxカーネルコア開発者、Rubyコミッターなど複数のOSSで活動する。現在はサイボウズ、アカツキの技術顧問も務める。

―画面のレンダリングには何の技術を用いていたのですか?

小崎 XHTMLをベースにして改良したものを使っていました。ブラウザまわりの技術を身につける必要がありましたから、配属から最初の2週間で、World Wide Web Consortium(W3C)のブラウザ関係の規格書を全部読みましたね。

それに、私が入社したのは1999年だったのですが、当時ははちょうどNetscape社がブラウザのソースコードを公開したくらいの時期です。「なんだ、良いサンプルがあるじゃん。参考にしよう」と思って見に行ったら、超巨大ソースコードがそこには広がっていて(笑)。大変でしたが、ひたすら読みまくりましたね。

社内にもともといたメンバーも新しい放送規格のことはわかりませんから、いつの間にか新卒で入ったはずの自分が一番詳しいという状況になりました(笑)。

Linuxの“土地勘”をどう身につけるか?

―Linuxの知識を身につけるうえで、転機となったプロジェクトはありますか?

小崎 入社3~4年目くらいの頃に、パナソニック社のテレビがインターネット対応端末になり、それをきっかけにOSを独自OSからLinuxへと移行することになりました。ですが、もともと独自OSのカーネルを書いていたチームなので、Linuxカーネルについて詳しくはない。となると、誰かに質問しても答えは返ってきません。自分でLinuxカーネルの膨大なソースコードを読むしかないわけです。

―当時はどのようにして、Linuxカーネルのソースコードを効果的に解読されていましたか?

小崎 組み込みの開発がキャリアの出発点だったのは、すごく幸運でした。組み込みでは多くの場合、もともと機器にシリアルで接続してリモートデバッグする文化なので、ちょっと工夫すればカーネルでもGNUデバッガで普通に接続し、アプリケーションと同様にデバッグすることが可能です。

―つまり、デバッグで1行ずつ処理を追うことができると。

小崎 そういうことです。そして、問題のある処理をGNUデバッガで止める作業を何度もくり返していると、「よく出てくるファイルは種類が限られている」と気づきます。徐々に「そういったファイルのソースコードを全て読んでおいた方が得だ」と分かってくるわけです。

―それを続けることで、いわばLinuxの土地勘を身につけていったわけですね。

小崎 他にも、カーネルのタイマ・ハンドラでインストラクションポインタレジスタを覚えるだけの超簡易プロファイラを書いて、どの処理が遅いかを洗い出してみたり。メモリ破壊バグを検知するために、ツールを自作してみたり。当時はそうやって、Linuxカーネルの仕様を学んでいきました。

3

―現職の若手エンジニアには、どのような方法でLinuxの土地勘を手に入れることをおすすめしますか?

小崎 私が普段、自社でカーネル開発に携わる方々に言っていることは2つあります。

まずは、CPUスケジューラやメモリ管理の中心部のような、いわゆる情報系の学部のOSの授業で習うような処理のソースコードを最初に読むこと。理論がすでに頭に入っていて、馴染みがある処理なので読みやすいです。

もう1つは、Linuxにはprocファイルシステムというものがあり、さまざまなチューニングパラメーターがそこにぶら下がっています。パラメーターの名前でソースコードをgrepすると、パラメーターをいじった際の挙動がどこで実装されているのかすぐわかります。そういった箇所を起点に見ていくと、解読がしやすいです。

VMの性能改善に、多大なる貢献

エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く