Rubyist インタビュー特別編 小崎資広さん 後編

はじめに

アメリカはフロリダ州マイアミビーチにて開催されていた RubyConf 2013 の会場にて、Ruby と Linux カーネルのデュアルコミッタとして有名な小崎資広さんにインタビューさせていただきました。二日間にわたるインタビューとなり、前編 (Rubyist インタビュー特別編 小崎資広さん 前編) に続いて今回二日目となる後編をお送りします。まだお読みでない方は前編も合わせてお読みいただければと思います。

では、お楽しみください。

DSCI3710.JPG

インタビュー (後編)

聞き手
卜部さん (@shyouhei)
語り手
小崎資広さん
野次馬
笹田さん*1 (@koichisasada)、松田さん (@a_matsuda)、中村さん (@nari3)、瀬尾さん (@sonots)、菅井さん (@hokkai7go)、三村さん (@takkanm)、郡司さん (@gunjisatoshi)
日にち
2013 年 11 月 9 日、11 月 10 日*2
場所
RubyConf 2013 会場ホテル (Loews Miami Beach Hotel) の瀬尾さんの部屋

目次

プログラミング全般 (承前)

パソコンに初めて触ったのは

DSCI3731.JPG

卜部 初めてコードを書いたのは、いつぐらいですか?

小崎 定義によるけれど、初めてキーボードを触ったという意味では、 中学生くらいのとき。MSX を買ってもらって、雑誌を買って MSX BASIC で見様見真似でプログラムを打ち込んで、変数を変えてチートしてゲームをクリアしたりしてた。入手したのは機種としての寿命が終わりかけの頃だったので、あんまりおもしろいゲームは出てなかった。結局そんなには遊ばずに、1 年しないうちに飽きちゃって、その後は中古の 286 か何かを買ってパソ通をやってた。プログラムはいっさい書かなかったけど。

郡司 286 って? PC/AT 互換機ですか?

小崎 エプソンの 98 互換機。機種の名前覚えてないという。愛着がなかったらしい。

郡司 (笑) まあそんなもんでしょうねえ。

小崎 理解してプログラムを書いてたのは大学に入るころかな? ファミコン通信で知りあいになったプログラマのおっちゃんに、40 MB のハードディスクと Turbo C をもらった。

卜部 もらった、って Turbo C ってけっこう高くないですか?

小崎 もう安くなってきてたんじゃないかな。たぶんプロフェッショナルの世界では MS-C じゃないと、みたいな時代になってた。それでおっちゃんが「もう使わないから」って感じで。

郡司 ところでファミコン通信って? ファミ通の投稿欄か何かでやりとりしてたんですか?

小崎 ファミコン通信じゃなかったパソコン通信*3。失礼しました。地元の草の根 BBS。

その頃の生活

卜部 中学の頃とか何をやってました?

小崎 中学の記憶はまったく無いなあ。高校は行かずにしばらく働いてた。スーパーとかコンビニとかの店員とか。暇な時は暇だなあ、とか、単純労働はつらいなあ、とか。まあアイドルタイムには商品の整理とかあるので、それはそれで忙しいんだけど。

郡司 そうですよね。私もスーパーのバイトやってたことありますけど、日本のスーパーって暇な時は商品を綺麗に並べるんですよね。お客さんが商品を取って手前にスペースが空いたら商品を前に出すし、ずれたら直したりしないといけないので、暇な時ってあんまりないんですよ。いま RubyConf でマイアミにいるわけですが、カンファレンス会場周辺のスーパーを見てきたんですけど、陳列ぐっちゃぐちゃでも店員は知らん顔ですよね。そのあたりアメリカと日本の違いを感じます。

小崎 まあまあ。そんなこんなで、僕は、毎日の仕事でプロジェクトが前に進んでいかない仕事はとことん向いてないなあ、と自覚しました。毎日お客をさばいていくようなルーチンワークは飽きちゃう。

卜部 プロジェクトがないとだめだ、と思って大学に行った?

小崎 ですね。でもその当時は相談できる人とか居なかったので、数学物理学科っていうまったく就職先のない学科に行っちゃった。

卜部 理論物理学ですね。就職のことを考えなければ楽しそう。物理だと最近は LHC とか、粒子まわり。

小崎 みたいですね。でも僕は実験装置のことはさっぱりわからないんですよね。量子力学系を本気でやってる大学にはちゃんと実験装置とかあるんだけど、うちは理論系の先生が東大かどこかから移ってきて一人でやってる感じで、研究室どうしの連携もなかったし、あんまり横の広がりはなかった。

卜部 研究室が一つしかなかったんですか。

小崎 1つではないけど量子力学っぽいのは少なかった。わたしの年代だと宇宙系の研究室が人気だった。なんかの産学連携で人工衛星にのせるロボットをやらせてもらえるという話を取ってきた研究室があってそこがものすごく人気があった。わたしの行ってた近畿大学は東大阪市というところにあるんだけど、そこが宇宙系の下請けやってる中小企業がいっぱいある土地柄で、そのころ「まいど1号」とか盛り上がってた気がする。

郡司 それは航空宇宙とかになるんですか? 量子力学とかからは、ずいぶん離れてる気がするけど。

小崎 どうなんでしょうね。学科と言っても学部の時はそんなに細分化されてないからさ。研究室を選べといわれたときに、教授にというか人に依存しているというか。

郡司 私は大学で情報工学だったのですが、学部ではそんなに極端な選択肢はなかったですよ。そういえば量子力学といえば、最近「量子将棋」とか「量子人狼」とか聞きますよね。

小崎 ああいうのは全然関係ないっしょ。

郡司 なんかそういうのが応用できたりしないんですか。量子 malloc とか。

小崎 そりゃリークしてるかどうか最後まで分からない、という (笑)

卜部 と言っても Linux の mmap はそんな感じでしょう。マップしても実際に触るまで割り当てられてるかどうかわからないわけで。触っていたらありませんでした、っていうことが起きる。

郡司 重ね合わせ状態を観測すると収束するというわけですね (笑)

プログラミングを始めたきっかけ

卜部 大学の時にプログラミングを始めたっていうのは、どういうきっかけだったんですか?

小崎 割と浅い興味で、せっかく C コンパイラもあるし、やったら何かできそうな気がしたし。

卜部 コンパイラには資料も付いてきたんですか?

小崎 資料は無かったけれど、大学に情報系もあるから生協に売られてる「プログラミング言語 C」を買ってきて普通に前から読んで。

卜部 「プログラミング言語 C」を一人で読むのはだいぶ大変な気がするけれど。

松田 大学の授業で始めたんですか?

小崎 大学では FORTRAN を習った。物理系だと FORTRAN がまだ標準で。富士通で HPC やってる時に痛感したんだけど、シミュレーションをスーパーコンピューターで走らせるとかそういうのは FORTRAN のほうが C より明らかに速いんですよね。ポインタがあるとどこから触られるかわからないから、できない最適化がいっぱいある。

松田 じゃあ FORTRAN で Ruby 作ったらどうだろう? 一番速いやつ。fRuby とか。

小崎 あの言語仕様でまっとうな応用ソフトができる気はあんまりしないんですけれど。物理系は計算しかしないから困らないだけで

卜部 僕も大学の研究室で連綿と受け継がれてる 40 年ものの FORTRAN のコードは一切読めませんでした。僕らの感覚では複数の作業をきれいにまとめるために関数を使うけれど、彼らは純関数の意味で関数を使っておられるので、コピペの嵐だし。

小崎 誤差計算とか関数ごとに流儀が違うし。読んでいると頭痛くなりますね。

生い立ち

大学を出てから

卜部 それからは?

小崎 4 回生にもなると就職活動を始めるわけですが、そこでハタと気づくわけですよ。物理学科って、就職先がまったく無いって。まわりは人生を考えて教職とかを取ったりしてるわけですけど、僕はそういうの一切興味なかった。それでもまだインターネットバブルの時代だったので、コンピューター系でさえあれば学科を問わずにもぐりこめそうだった。他にあんまり選択肢はなかったし。

郡司 当時は理系の就職先って限られてましたよね。今はそうでもないのかもしれませんが。

卜部 公務員試験を受けたりはしなかったんですか?

小崎 途中までは院に行くつもりだったんですよ。でも経済的に厳しかったので就職しました。

卜部 もし大学院まで行ってたら?

小崎 物理を続けてたと思いますよ。今も物理で食べていたかもしれない。研究者系はあり得るかな、と思っていたれど。

卜部 GRAPE*4 とか使ったりして。でもまあ院には行かずに。

小崎 就職課のおっちゃんに聞いてみたら、「やっぱり冠企業は安泰でいいよ」って毒にも薬にもならないアドバイスをいただいた。あんまり考えずに、大学が関西だったから関西の家電王国の企業のなからから松下電器の子会社に入りました。その会社はできたばかりで新人研修の体制はできていないから、入ってきた新人は親会社にどーんと送りこむ。仕事のことを誰にも聞ける人も頼れる人もいないので、とりあえず自分で何とかするしかないという*5

デジタルテレビの開発

小崎 当時は 2000 年のオリンピックに合わせて BS デジタル放送を始めようという頃で、激動の時代でした。郵政省*6 が旗を振って規格を策定しようとしていて、日米欧のなかで先を走ってた。でもアメリカの人たちが、日本がやってる MPEG ベースの方式は時代遅れだ、XML ベースで行くぜ、と言い始めて、政治的な理由で追随しちゃった。本放送が 1 年後に迫ってるところに、じゃあ今までの方式やめまーすって、規格を変えちゃった。XML 方式でやることにしましたってプレスリリースしたんだけど、当時は規格自体はまっ白なの。え、これから規格を作って製品を作って合計 1 年ってどういうこと?

一同 (笑)

小崎 XML ベースって簡単に言うけど、中身は難しい。ブラウザってけっこう複数の技術の集合体なので、いちから始めようとすると、勉強しなきゃいけないことがけっこうあるんですよ。そもそもHTMLの規格なんか読んでもブラウザの内部実装とか実際の動作とかは少しも分からないし。でも僕は学生のころアルバイトでイントラネットとか作ってた経験があるので、CGI も書けるし C も書けるしで、「あ、きっとこんな風に動きますよ」と言えたんですよね。W3C の規格もちょっとは読んだことあったし。

卜部 規格をちょっと読んだことがある人はいっぱい居ると思うんですけど、何か作るところまで行くのはけっこう大変かと。

小崎 重箱の隅をつつくのが得意なところがあるみたい。ARIB*7の規格ドラフトが出てくるたびにレビューして、赤ペン 100 個ぐらい引いて返してという作業を繰り返してたら、「こいつすごい詳しい人なんじゃない?」という勘違いがパナの中で広まっちゃって。そんなこんなでブラウザ部隊の有識者みたいになって、「DOM はこうなるべき」とか「HTML のレンダリングはこういう考えかたで」とか言うようになりました。当時まわりに居た人がおもしろくて。分社制の社内から人が集まったジョイントプロジェクトだったんですよ。黒物家電やってる分社と研究所の部署とが何個かチームをつくって、デジタル放送を進めてました*8

卜部 けっこう大きそうな話ですね。

小崎 会社にとってテレビは基幹産業だからね。それで、新しい規格を作るときには研究所がからまないといけない。コツが必要なので、プログラミングをしたことがない人がすらすらと規格書を書けるわけじゃないんですよね。それで、研究所側のボスが、jdvi2kps を作ってた楠見雄規さん*9 だった。 なんていうか、割と話が合うんですよね。HTML のレンダリングとか実装とかになると、結局文字の流し込みとか TeX と一緒なんですよ。それでかわいがってもらいました。「かわいがってもらって」というのは「山ほど仕事をもらって」という意味なんだけどね*10。こんな感じで何年か割とデスマーチ状態を続けてたら、実力が付きました。

卜部 BS デジタルの開発は 1 年で終わらなかった?

小崎 これはちゃんと終わりました。でも続きがあるんです。まず、次の年には CS 110 度だ、とか。当時はCSといえば DirecTV とスカパーだったんだけれど、帯域が足りないからチャンネル増やせないとか言って新しく人工衛星を増やすことになった。どうせ増やすなら当時の一番先進的なデジタルテレビの技術を流用するべきだ、ってことになる。他にも、テレビは発売したら終わりじゃないんですよ。放送だからネットワークにつながってなくても自動アップデートありなんです*11。卑怯なことに。当時は割と 2ch がアングラ掲示板として機能していて、そこで「こういう操作をしたら課金せずに有料版が見れるぞ」ってチートを報告しあったりしていて、いたちごっこが続いてました。本放送が始まってしばらくの間は、幹部社員の仕事は、「朝来たら 2 ちゃんねるをチェックすること」っていう時期があった。

一同 (笑)

家電製品のバグへの対応

小崎 テレビの自動アップデートをダウンロードするコンポーネントにバグがあったことも 2 度あった。1 度目は事業部の人が全員でお客さんをまわって、人海戦術で全ての機械を更新してまわった。大企業といっても予算は部署ごとにしかついてないから、頼める先があるわけじゃない。

郡司 おお、戸別訪問で全部まわったんですね。

小崎 2 度目は何年かあとの話。ファームアップデートしてリブートする時に IO を flush し忘れてたことがあった。更新内容を flush せずにリブートして起動できなくなっちゃうっていう問題。Linux の IO スケジューラの作りの関係で、末尾じゃなくてちょうど真ん中くらいが欠ける。そこに意味のないデータが入るようにしておけばファームアップが成功することがわかったので、じゃあ、そういう ELF ファイルを吐けるコンパイラをこれから作ってください、と。

一同 (爆笑)

郡司 それはうまくいったんですか?

小崎 うまくいった。

卜部 でも人海戦術はつらいよね。

小崎 家電はミスすると大きいんですよ。

卜部 家電に限らずハードウェアがからむと、ね。

小崎 1 回改修すると、数億飛ぶじゃないですか。どれだけ「頑張ってソフト作りました」って言っても「でも何億円も飛んだよね」って言われるわけですよ。ちょーつらい。

テレビの規格へのメーカーの対応

松田 しかしテレビのために自社内でブラウザまで開発しちゃうもんなんですね。業界内での他社との横の連携みたいなものはないんですか?

小崎 ありましたよ。規格を作る時はテレビ屋さん*12 が主役で彼らがやりたいサービスを規定していくんだけど、放っておくと実現不可能な規格になっちゃう。彼らには夢があるから(笑い)。さっき言ったように規格が白紙に戻ったのが本放送直前だったので、もうチップの仕様は固まってしまったあとだったので微調整が効かない。あるメーカーのテレビでは使えない機能があると、テレビ局に対して、データ放送どんどん使ってくださいって言えなくなっちゃう。ここで議論のキーワードになってたのが「モンタを繰り返すな」だった。日本の放送は放送の一意性に関して強い縛りがあり、あるTVでは映るが別のTVでは映らないようなコンテンツを放送してはいけないことになってる。アナログ放送で、モンタ放送 (文字多重放送) ってのがあった*13のだけれど、メーカーごとに受信できるできないか差があったので、結局誰も放送しなくなっちゃった。ユーザー的には意味ないし、メーカーとしても誰も使っていない機能のために、けっこうでかい容量を食うソフトを入れこんでおかないといけないし、ステップ数も多くて検証コストもすごいという。いろいろとダメなマイナス面があった。なのでこの時はメーカーが自社のチップ上で出来ないことを、わりと積極的に開示して、現実的な規格をつくろうという動きだった。結果としてデジタルTVの規格は史上類をみない汚い規格になったし*14、一方で最初から相互運用性の問題がほとんど出ずに安定した放送スタートが切れた*15。またモンタの、もう1つの知見として、モンタがほとんど使われなかった結果としてモンタ用ボタンについて使い方が分からないという苦情が殺到したので、これは良くないということで、とりあえずデジタル放送の時には、「D ボタンを押したらとりあえず何か映るようにしましょう」を合言葉にしてた。実はこういう状況は当時は日本だけで、ヨーロッパとかアメリカのデジタル放送だと、デジタル放送ボタンを押しても何も映らないのが普通だったので、結局アメリカとかだとデータ放送とかもう忘れ去られた技術になってる感じですね。話がだんだん脱線してきましたが、まあいろいろと政治的な駆け引きがありましたね。

卜部 使われない機能を作るのは非常に不毛なので、わかります。

Linux への道

卜部 こうやってプログラミングの実力はついたわけですが、そこからどうやって Linux に向かっていったのでしょう?

小崎 デジタル放送への対応を 3 年くらいやって、BS デジタル対応と CS110 度対応が終わったくらいのころに、次はネット対応してインターネットをちゃんと見えるようにしよう、ということになった。そこで独自 OS では対応できなくなって、Linux に移行しようという話になるわけです。

卜部 まあ独自 OS では無理だよねえ。

小崎 その時同時に、独自ブラウザもコードを全部捨てて、アメリカのOpenTV*16と協業して放送と通信と両方できる統合ブラウザを作って載せようというプロジェクトが走ったわけです。これが完全に失敗なプロジェクトだった。

卜部 基本的に、動いてるものを捨てて新しいものを作ろうという発想になった時に成功する可能性は非常に少ないですよね。

小崎 それもあるけれど、他にもいろいろと大変だった。まずは、Linux というものが何かよくわからない。組み込みの人には UNIX の知識もないので、Linux に UNIX の知識が応用できるといっても何の役にも立たないんですよ。それに、ブラウザベンダがあるからと言って協業を持ち掛けてソースコードをもらってきても、100 万行くらいあるコードのどこを変えていいかアタリをつけて、と言われてもけっこう難しい。

卜部 土地勘も無いし。

小崎 さらに、ブラウザにハードコードされているんだけれど受け入れられない前提条件がいくつかあった。前回言ったように、テレビではスクリーン (業界用語だとプレーン、ゲーム機のスプライトのようにハード的に、動画プレーン・静止画プレーン・OSD*17 プレーンを重ねあわせする) が何枚か重なっているけれど*18、パソコンはスプライトみたいな概念がなく 1 枚絵でしかない。もちろん 1 枚絵であることを決め打ちしてコードが書かれてるわけで、この前提条件を解くのにどこをいじったらいいかがわからないという*19。X Window System を改造しているチームも X のことをよくわかっていないし。当時は無かったアルファブレンディングの機能を追加したいのだけれど、情報が無い。生の X を触るのはとっくに時代遅れになっていたので、本もぜんぜん無い。「Xlib ってどうやって使うんだっけ」って。あと、文字コードが問題。放送ってISO-2022ベースの独自の文字コード*20で、ブラウザは UTF-8 大前提だったんです。

卜部 あ、いちおうユニコードへの対応はできてたんだ。

小崎 ASCII 前提に比べたらまだマシですね。マシだけども、放送で降ってくるのは ISO-2022 を独自拡張しまくった文字で、UTF-8 に変換できないわけなんですよ。携帯の絵文字と同じで、グラフィック文字に対応してる場合があって、携帯よりもさらに不幸で、フォントのグリフも放送で降ってくるケースもあるわけです!

卜部 それは知らなかった。

小崎 それはつまり、特にオリンピックの選手の名前とか政治家の名前とかを表示するときに、カタカナだとマジで怒られる場合があるんです。なので、放送が始まると同時に漢字のグリフがお空から降ってきて、表示するタイミングによって、文字コードからどのグリフを引っぱってこないといけないかが変わるわけです。これは面倒くさいです。このダウンロード外字っていうちょう面倒くさい仕組みに、舶来のブラウザが対応してるはずもなく。

一同 (笑)

小崎 わりとその、中身を知らない人が、「やっぱ独自で作るとお金がかかるから、よそから協業って言ってもらってくると安いよね」って言うと何か違うっていう。

卜部 でも自分で作ると安くなるかっていうと微妙ですよね。大変ですね。

小崎 そんな感じでしょうもない体制でやってると、当時は研究所の独自 OS のカーネルを書いてたチームの人が横滑り的に Linux カーネル担当になったとしても、別に Linux に詳しいわけでもなく、Linux の質問とかしても返事が返ってくるわけじゃないんですよ。そうすると自分でソースコードを読んだ方が早いとかいう状況になるのは極めて自然な流れなんですよね。そうすると、だんだん、Linux を使う時に何を避けなくちゃいけないかっていう感覚が身についてきちゃうわけです。

卜部 ユーザーランドのプログラムを書いてるなかでカーネルのソースコードを読まなくちゃいけなくなったのは、どういう状況だったんですか? 普通の PC やサーバ向けのプログラムを開発してるなかで、カーネルのソースコードを読まなくちゃいけなくなる状況はそんなに多くないと思うのだけれど。

小崎 うーん、すみません。最初のトリガは記憶にないや。

卜部 僕が読み始めたのはネットワークでした。自分でプロトコル書こうと思ったらカーネルに行くしかない。

小崎 そうですよね。

卜部 ネットワークはデバイスがそもそもファイルシステムに見えてないからカーネルを見に行くしかない。ネットワークじゃないだろうけど、きっとそういう事情があって読み始めたんじゃないかな。

小崎 そうそう。僕の場合は、誰も Linux をわかってないから、僕が Linux の仕様を説明する係になってたんですよね。自分で書くときは地雷原には近づかないんだけど、スケジュールがタイトな時に、すでに地雷原になっちゃったコードをどうするか判断しなくちゃいけなくなっちゃうんでですよ。絶対これ踏んでますっていうのを、こっちが証明しなくちゃいけない。

卜部 それはアレですよね。あんまり組織の中での立ち回りがうまくなかった場合ですね (笑) 本当はそういう調査は偉い人にやらせるのが無難ですよね。

小崎 だってほら僕、子会社の社員だから。

菅井 自然に「小崎さんは知ってるぞ」ていうことになったんですか?

小崎 一番最初はドングリの背比べだったはずなんですけど、まあ。

菅井 人柄的な (笑)

卜部 で、カーネルの中を読み始めた、と。

小崎 誰かが異常系で close() の使い方を間違えて、開いてもいないファイルディスクリプタを閉じちゃうようにしちゃった。変数の初期値がゼロだったりして 0 番のファイルディスクリプタを閉じちゃうことになるんですね。次に X で何かを始めようとするときは XOpenDisplay というのをするんですけど、さっき閉じた 0 番のファイルディスクリプタが割り当てられて、次に異常系に入った時には、X が強制的に閉じられちゃう、と。「私は悪くない。X を直してください。」という依頼が飛んできた時に、「いやいやおまえが悪いだろ」と証明しないといけないハメになっちゃう。まずは X がそういうプロセス間通信をしてるっていう説明をする資料を書いて、Linux が close(2) を呼ばれた時にどういう動きをするか説明する資料を書いて、というそういう長い道のりが始まるわけですよ。こういう感じで情報系じゃない企業に就職するといらん手間をくうことになる。そんなこんなで、調査力が徐々に上がったりとかしました。

郡司 わかってない人を説得する技術、ですね。

卜部 まあでも使ってるのは、ちゃんと X プロトコルを通してレンダリングするやつだったんですね。最近の X だとデバイスダイレクトレンダリングだけど。

小崎 X は基本的にはサーバを通すんだけれど、当時、ビットマップを貼る時だけはフレームバッファのメモリを取ってきてクライアントから書くのが許されているという拡張がありました。3D の時代になってから、アクセラレータが直接描く方が速いに決まってるので、サーバが代わりに描くという方式はなくなりました*21

カーネルに手を入れる

卜部 カーネルのソースコードを読むという話までは行きましたが、手を入れ始めたのは何がきっかけだったんですか?

小崎 組み込みをやってたころはそれ用に手を入れるのは必須なんですよ。テレビをやってたころはカーネルコードはリードオンリーだったんけど、D-snap にテレビ機能を付けようって言い出した人が居て。

卜部 ディー・スナップ?

三村 サイズ的には iPhone みたいなやつで、くるくる回るカメラが付いてるんでしたっけ。

小崎 多機能カメラとかウォークマンとかいろんな黒物家電系の機能から携帯電話を引いたみたいなガジェットですね。

卜部 今あると楽しそう。

小崎 当時ワンセグっていう放送の規格が進んでた頃で。今でも日本にあるかどうか知らないけど。

郡司 ありますよ (笑) 今でも日本のキャリア向けのガラパゴスなスマホにはワンセグ機能が載ってます。

小崎 規格をつくりながら、じゃあ、D-snap に載せてみたいね、という話になりました。ガジェットって好き者しか買わないから冒険しやすいんですよ。ワンセグのターゲットは携帯電話なんだけれども、一発目の機種が携帯だったら冒険しすぎだろう、と。で、D-snap に載せるためにテレビ系で経験がある人を何人か抜いてくることになって、子会社の僕は、本体の人事異動をするよりも、契約を変えるだけで簡単なので、集められることになりました。ガジェット系のプロジェクトだと、会社の基幹産業からはずれてしまうし規格台数も予算も限られて、専門家がぜんぜん居なくなってしまうんですよ。どうせ専門家も居ないからって、その時初めて、モンタビスタっていう組込み系のディストロを使うことにして。

卜部 懐かしい名前。

小崎 カーネルコンフィグ適当に決めてやろうとすると、どの項目がどう意味を持ってるか調べるのを手伝うことになる。あと、カーネルを改造したり。今でもそうだけれど、Linux には一度にアロケーションできるメモリの大きさに制限があるし、動画を扱うような大きいサイズのメモリを割り当てたり free したりするとすぐフラグメンテーションしちゃう。なので、スタティックに動画を取り扱う領域を取っておいてドライバを書いて。ドライバを書く人は専任で付けられたのだけれど、いくつかそれが並行して走っちゃったので、スーパーバイザ的にアドバイスする役をやることになりました。ドライバ書きのアドバイザやろうと思ったら結局全部読まないと仕事が進まないという。

卜部 スーパーバイザってのは、ドライバに限らずそんなものですよね。他人に任せるって言ったら、結果は把握しておかないと。そういえば D-snap のためのコードとかは、アップストリームに投げたりはしなかったんですか?

小崎 全然しませんでした。特に組込みのデバイスドライバは再利用できないから、どこでも公開するだけだと思うよ。

卜部 僕らは下町の町工場だったので、デバイスとドライバとくっつけて売ってました。

小崎 それでアップストリームにマージしたの?

卜部 うん。うちの会社は NetBSD だったので。気軽にぽんって投げるとあーって取り込まれる。

小崎 松下は法務がけっこう厳しかったので、個人の開発者がアップストリームに直接コンタクトするのは禁止じゃなかったかな?

卜部 Linux は GPL だからていうのもあるかもしれませんね。NetBSD は BSD ライセンスなので、比較的ゆるやか。

小崎 いや、社風じゃないかな? そんな感じでカーネルのコードを読んだり書いたりするようになったんですけど、デスマーチが新人のころからずっと続いていて、なんか、1999 年からまだ 5 年目なのに忙しすぎると思うし、ってぶち切れちゃった。いろいろあって辞めちゃいました。

富士通に

小崎 で、2005 年くらいに転職。自分の売りは何だろうな、って考えると、Linux カーネルの知識が一番売りやすかったので、富士通のカーネル部隊に移りました。

卜部 カーネル部隊に来ませんか? みたいな求人があったんですか?

小崎 そう。当時は Linux の立ち上げ期で、Linux 技術者の中途採用を集めてた。

卜部 で、自分は書けるぞ、と。

小崎 当時 30 になるかならないか、で、「何人くらいのチーム持ったことがありますか?」「下に 20 ~ 30 人くらいかな」「えっ」とか言われて。

卜部 まああんまり無いですよね。

小崎 「テレビは全般的に見てきたのでどのサブシステムでもだいたいわかります」さらに「は?」とか言われて。

HPC 部隊で何でも屋さんに

DSCI3802.JPG

卜部 富士通では何をやってきたんですか?

小崎 いっちゃん最初は、結局カーネルにあんまり関係ないことをやってました。HPC の方に回されて。HPC って要はスパコンのことなんだけれども。

卜部 富士通でスパコンだと Linux カーネルではない感じですよね。

小崎 当時は HPC の部隊が、Linux 開発統括部の下に付いてました。公知の事実だと思うんだけど、スパコンって儲からない。なのでスパコンの部署は所属の部が転々としてしまう。サーバー開発の部にいたりソフトの部にいたり、その時は Linux 開統の部署の中に。僕は Linux 開統の枠で入って、若干脇道に逸れた、と。たぶん、パフォーマンスチューニングのノウハウとかあるって言ったせい (笑)

卜部 (笑)

小崎 しばらくはパフォーマンスチューニング屋さんでした。

卜部 自社のセットアップの中でパフォーマンスを突き詰めるんですか?

小崎 何個かパターンがあります。お客さんが作ってきた FORTRAN のコードを走らせて、何秒以内に終わるようにして納入しなさい、とか。みんなで必死こいてコードを読んでですね、「ここをいじったら速くなるんじゃね?」と特殊なコンパイルオプションがばかっと増えたりとか、ファイルシステムの最適化がばかっと増えたりとか。

卜部 大変そうですね。職人芸。

小崎 バッチスケジューラでコンパイルオプションとか全通り試すように放り込んでおいて、次の日に確認するとか。

卜部 その時の部隊は何人くらい?

小崎 全部合わせたら 50 人くらいで、そのうち開発者は 20 人くらい。大企業だと、コード書かない人がいっぱい居ないとまわらないんですよ。フィールドサポートをやったり他の部署と調整をしたりとか。いろいろやっているうちに、一個すごくもめたところがあって。名古屋で開発していた HPC 用のネットワークファイルシステムがうまくいってないっていうことで、人事異動で僕とマネージャクラスの人と二人で落下傘をさせられました。「おまえら二人で立て直してこい」って。Linuxのネットワークスタックとかファイルシステムとの連携とか、超急いで勉強して、半年くらいでなんとかバグを潰してきました。

卜部 分散ファイルシステムのパフォーマンスが出ないとか言われると頭が痛くなりますよね。バグを直せばパフォーマンスが出るというものでもないじゃないですか。下にどういうハードウェアがあるか、ネットワークとかストレージをどれだけ信頼するか、とか。ノードがいなくなった時のことを考えてレプリケーションするとかコンセンサスを取るとか。

小崎 まあいろいろとありました。そこまで難しいことはやってなかったけど、Linux の経験者が足りなかったということに集約されます。それまでは独自 OS とか Solaris とかやっていたので。

卜部 でも Solaris とかソースコードない状態でファイルシステム書くのも大変ですよね。

小崎 富士通は見れる人いましたよ。わたしは Linux 担当なので違いましたが。富士通と Sun は関係が深かったので。*22

卜部 今でも SPARC64 とかやってますよね。

小崎 まあそういうわけで、悲しいことにまた何でも屋さんに戻ってしまった時期がありました。

卜部 まあ何でも屋さんをやってしまう体質の人は居ますよね。悩んでる人のところにふと現われて解決策を示してあげる、みたいなことをやってしまうと徐々にそちらの方向に習慣づけられて行くんですよ。

小崎 そうね。やっちゃいけないよね。

卜部 楽しいからわかんなくもないけど。

アップストリームへの道

小崎 それで相談したら人事異動でスペシャリストのところに回してもらえました。当時はアップストリームとのやりとりが活発ではないという問題があって、なにが問題かというと Red Hat という会社はバグを直してくれって言っても直してくれないんです。あなたの会社がアップストリームに投げてくれたらそれをバックポートすることはできます、って。富士通としてはお客さんのところで出たバグはすぐ直したいし、自分のところで売ってるハードウェアに載ってる機能は全てイネーブルしたい。というわけで、そういうところに潜り込んで、ほそぼそとアップストリーム活動を始めました。

卜部 それまではソースコードを読んだり書いたりはしてたけどアップストリームには投げていなかったと。

小崎 初めてアップストリームに投げたのは 2008 年くらいじゃないかな。ちょう最近。

卜部 いきなりトップスピードでがんがんパッチを投げ始めた?

小崎 まあ割とトップスピードだった。

卜部 社内で知られてる問題をばかばか倒してけばよかった?

小崎 最初は社内が手加減してくれて、まずはアップストリームでの地位を上げることに時間を割いていいよ、って言ってくれたので、まずはアップストリームに上がってたバグをバシバシとしばき倒したり、性能改善をしたりしてました。2008 年はちょうど Linux の Virtual Memory Subsystem を変えようという話をしていたのでそれに参加して。

卜部 その頃から VM の方に専門性が移動していく感じですか?

小崎 そうですね。結局、コミュニティでも会社でもそうなんですけど、火を噴いてるところしか新しい人が入っていく余地はないので。

卜部 そうは言うけど、ぜんぜん新しいところもアリなんじゃないですか? 新しいドライバとかハードウェアとか。

小崎 そうだね、それもアリだったね。そういう意味ではちょっと失敗したかな。

卜部 2008 年当時の Linux の VM ってどういう問題があったんですか?

小崎 Linux の VM、デスクトップではよく動いてたんですけど、データベースとの相性がすごく悪かったんです。でもやっぱり Linux でもデータベース使いたいから。

卜部 データベースはメモリの使い方特殊ですよね。

小崎 今はだいぶまともになってるんですけど、当時はでかいファイルのコピーをしたりすると、ファイルをキャッシュして、データベースの使ってるメモリがばんばんスワップアウトされちゃうんですよね。OS から見るとデータベースが持ってる巨大な共有メモリって最近だれもアクセスしてない無駄な領域にしか見えない瞬間があるので。データベースは自分のメモリがスワップアウトされちゃうとは全く想定していないので大変という。

卜部 2008 年頃って Solaris と Linux で同じ Oracle のデータベースを動かした時に Solaris の方が圧倒的に速かったころですね。

小崎 たぶんそのくらい。

卜部 それからずっと Linux の VM をいじってる感じですか。

小崎 そうですね。自分の会社に関係のあるバグをぶち倒すのがメイン。

アメリカでの生活

卜部 アメリカに越してきたのはどうしてですか?

小崎 単に会社から言われたからですね。籍は富士通アメリカに。異動? 出向? どっちなんだろう。片道切符ではないですよ。

卜部 やること変わらないなら引っ越してくることはなかったんじゃない?

小崎 今の現在進行形のミッションはたぶん詳しくいっちゃダメなんだけど、いや引っ越した意味はありましたよ。

三村 引っ越してきたのは最近なんでしたっけ?

小崎 カーネルでそこそこ名前が売れて、Ruby コミッタになった後に、越してきました。

卜部 US の生活どうですか? ボストンの冬はどうですか?

小崎 寒いですねえ。これまであんまり北に住んだことなかったし、寒さにちょう弱い。よく風邪を引いてる。

卜部 何度くらいまで下がる?

小崎 全力で寒い時は -20 ~ -30 ℃じゃないかな。

卜部 そういう日でも出社しないといけないの大変ですね。

小崎 一番つらいのは寒さじゃなくて、雪。雪が続いた年度末に、市役所が、予算が尽きたからもう雪掻きしないって言う時ですね。アメリカって自治体にあんまり予算がないので。そうすると、会社も折れて、やばい時は出社しなくてもいいよ、ということになる。

卜部 オフィスはボストンの市街地ですか?

小崎 郊外ですね、ニューハンプシャーに近いくらい。毎日自動車で 30 分かけて通ってます。ハイウェイ使ってるから 50 km くらいの距離じゃないかと思う。

卜部 普段の生活は?

小崎 ハイウェイ乗って仕事に行って、仕事して、ハイウェイ乗って仕事から帰ってくる。ご飯は外食ばっかりでどんどん太ります。150 ポンドの大台を越えました。*23

卜部 でも太るようになって良かったですね。まえ聞いた時はご飯が食べられなくて痩せてるって言ってたから。

小崎 去年やばかった。しばらく食事に慣れることができなくて、どんどん痩せてった。

瀬尾 僕もアメリカの大学院に行ってたんですけど、ここの食事はあんまり好きじゃなくって、最終的に日本に帰ってきた、という。日本食が食べたくて。

松田 食事に慣れられないって、まったく食べられないってことですか?

小崎 食いものが慣れなかったっていうこともあるけど、コーヒーの飲み過ぎとかもあるかも。胃を壊した時の初期の対応があんまり良くなくって悪化させちゃった。

瀬尾 それはありますね。欧米に何日か滞在すると、3 日目くらいに胃が重くなっても逃げる先がないんですよね。

小崎 そうそう。胃にやさしい食べ物が食べたいんだけど、なかなかない。最近は自分の部屋にレトルトのお粥を一週間分くらい常備してあるよ。ニューヨークにある日本食スーパーから取り寄せて。

卜部 ニューヨークとか、そういうのがある場所は良いですよね。

小崎 送料がかかるのでけっこう高いけど、背に腹は代えられないので。初期対応重要だな、と思って。お粥重要。僕は普段あまりにも節制しなさすぎだな、と反省しました。

郡司 自炊はしないんですか? クックパッドとかでレシピを見れば、好きなものを作れますよね。

小崎 すいません。僕料理できないんですよ。

卜部 感謝祭の時とかはどうしてるんですか?

小崎 店やってないのでカップ麺とか買って逃げます。日持ちのする食べ物。レンジであっためる冷凍食品とか。

郡司 ランチは職場で出るんですか?

小崎 出ないけど会社の売店で買える。今ちょうどオフィスが改装中で食堂が閉まってるんです。仮の売店で作らなくてもいいサンドイッチなら買えるんだけど、毎日サンドイッチじゃ、ちょっと。

卜部 まわりに飲食店とかあるんですか? 飲食店がないと食生活が固定されていっちゃいますよね。

小崎 ないです。なので週に 1 回みんなタイ料理屋さんまで車で行くのが憩いの場みたいになってます。

卜部 晩ご飯とかは?

小崎 家に帰る途中で食べるか、レンジでチン系のものを食べるか。

卜部 何時ごろに帰ります? US って 22 時くらいになると店ぜんぜんやってなくて、びっくりするじゃないですか。

小崎 日によって違う。でも店が閉まっちゃうほど遅い時間にはならないです。20 時とか 21 時とかになると、オフィスの電灯が消えて「うおー」ってなっちゃう。

卜部 タイマーかけるの、こっちの人大好きですよね。

松田 その代わり朝は早いってことですか?

小崎 僕は早くないけど、Red Hat の方々は朝早目に来て、まだ日が高いうちに帰ってくのが好きっぽい。

卜部 健康的だ。

小崎 いや、マサチューセッツは道のつくりがあんまり良くないので、15:30 くらいから道が混んでまともに帰れなくなるので。18 時か 18 時半くらいには渋滞は解消するんですけど、それより遅く残る人はいない。

卜部 話だけ聞いてると優雅そうですけど。

小崎 結局 VPN を活用して家から作業が増える感じですね。

その他

休日の過ごし方

卜部 休日とか。ふだん家では何をしてるんですか?

小崎 ……。ツイッターしてるかな。

一同 (笑)

小崎 コード書くあいまにツイッターしてるのが多いかな。

松田 仕事でカーネルいじりやってると、仕事と趣味のコード書きとのさかい目がいまいち曖昧になりませんか?

小崎 カーネル書くときにちょっと煮詰ってきたから、休憩がてら Ruby のコード書くか、とか。

松田 お、やっと Ruby が出てきた。それって勤務時間中でもだいじょうぶなんですか?

小崎 カーネル書くの自体が夜とか休日が多いんですよ。あと、最近は、日曜日は教会に行くようになったかな。信心深くなったわけじゃなくって、聖書を習い始めの人に教えてあげる、みたいなセッションに出席してます。とうぜん、今まで聖書に触れてなかった、みたいな人には、言語的にも英語ネイティブじゃない人がたくさん居るので、会話の練習にちょうど良い。

卜部 じゃあ日曜日も早起きして教会に行ってるんですか?

小崎 いやいや。午前中に何度かセッションがあるので。ちょう早い時間と、お昼直前と選べる。で、僕は朝早い時間には行かないで寝てます。

菅井 何時ごろ活動してるんですか? フロリダと同じタイムゾーンですよね? ツイッターみてるといつ寝てるのかわからない。

小崎 日によって違う。自分が意識的にやってる時は、9 時~ 17 時の生活ができるように、7 時ごろに起きて、23 時に寝るようにしたいなあ、と思ってスケジュールを合わせるんだけど、コーディングが乗ってくると全部吹き飛んじゃう。いっかい睡眠をはさむと全部忘れてしまうんですよね。

松田 夜中ってゾーンに入るときありますよね。夜中雪が降って物音がしなかったりするとやばい。

小崎 そうですよね。何も止めるものが無くなってしまう。

卜部 じゃあ、普段はツイートしてる、と。

小崎 それか、コード書いてる。

菅井 なにをモチベーションにしてコードを書いてるんでしょうか?

小崎 モチベーションないよ。仏教の写経と同じで淡々と、無心で。

松田 Ruby には、どれくらい時間を費してます?

小崎 測ってない。bugs.ruby-lang.org にコメントつけた数から逆算できるのかもしれないけど。意識的にはあんまり。僕のなかで Ruby て、あの、ゾーンからはずれちゃった時にちょっと手を出すようなもの。

郡司 ちょっと部屋掃除、みたいな感じですか。

卜部 今プログラミングやってるのは、Ruby か Linux カーネルだけ?

小崎 だけ。あと、glibc。

松田 「Ruby の開発をする」んじゃなくて「Ruby で何か開発する」のをやってみるってのはどうですか?

小崎 Ruby 難しいんだもん。クラウドがはやってきてるので Python やらないといけないんですけどね。OpenStack っていうのが勢力を伸ばしつつあって、コンポーネントによるんだけど、Python 率がけっこう高い。

卜部 じゃあ今後 Python を書く、っていうか Python で書くようになってく可能性はある、と。

小崎 やっぱ Ruby は web 以外ではまだまだマイナーっすよ。Web が苦手な Python とは棲み分けがある感じ。

松田 それは単に Rails があるかないかという差なのかな。

ゲーム

卜部 プログラミングとツイート以外は何をやってるんですか? ゲームするとか。

小崎 ゲームはめったにしないけど、歴史シミュレーションはたまにやります。パラドックスもの。『ヨーロッパユニバーサリス 4』が出たのでそれはちょっとやってたな。信長の野望みたいなんだけれど、あんまり不思議歴史に行かない系。『2』は歴史再現重視で、『3』はノブヤボ的とというかゲーム性重視の不思議歴史になったんだけど、『4』で中間に戻りました。

卜部 ヨーロッパの人たちはあんまり不思議歴史は好きじゃないのかな。日本人は別に『信長の野望』気にしないけど。

『信長の野望』はタイムスケールが 50 年かそこらだから、不思議歴史に行っても、まあまあ許せるんだけれども、パラドックスのゲームは 400 年とか続くので、最初の 100 年とかで不思議歴史に行っちゃうと残りの 300 年まったく楽しくないんですよ。

郡司 本当の歴史と関連がなくなっちゃう、と。

小崎 もともと扱ってるのが、ビザンチンが滅びて近世に入ったころから始まって、そろそろ産業革命かなというところまで、という時代。途中で宗教改革があって 30 年戦争があって、というのをやっていきたいんですけど、そもそも 30 年戦争が勃発しないとかになっちゃうと、あんまりやってて楽しくない。そういう事情があって、プレイヤーがちょうがんばっても、大拡大とかできないようになってるので、けっこう楽しめる。

卜部 そういう制限があると逆につまんないかとも思うんですけど。制限があった方がおもしろい?

小崎 ゲームってそういうもんちゃうの。いまどきは『Civilization』でも、主人公が独走しそうになると AI どうしで手組んでつぶしに来てくれるよ。最近はシミュレーションゲームは AI がかしこい。

松田 ちなみにそれは孤独なゲームですか? ソーシャルな要素はないんでしょうか?

小崎 はい。ソーシャルな要素があるとそれが僕のスケジュールを決めちゃうから息抜きにならない。ゲームは基本的に一人用のしかやらない。MMO はなんか肌に合わなかった。そもそも時間を吸われすぎるので。その時間あったらおれコーディングけっこうできるぞーとか。

松田 そういえば昨日 Matz の部屋で寝落ちしちゃって、起きたら Matz がなんか作業したあとがあって、パソコン覗いたらクッキー焼いてました。*24

一同 (笑)

郡司 カット、カット (笑)

小崎 いやいや、それは載せよう (笑)

松田 一番下の Cursor が 100 個くらい。けっこうやりこんでました。

中村 まつもとさんは『黒猫のウィズ』とかいうソーシャル系のゲームも好きですよね。

卜部 けっこう若い。

郡司 お子さんがいるからかなあ。

小崎 この中でクッキー焼いたことがある人は? あ、けっこう少ない。

郡司 10 枚くらい焼きましたけど、面白さがまだわからなくって。

松田 おもしろさはたぶん最後までわからない。

卜部 僕のまわりでは、手で焼いてる人はほとんど居なかったですけど。Javascript で自動化して。

菅井 クッキーをクリックする部分をクラウド化してる人とかもいましたよね。それでも、ゲーム内で雇う人にぜんぜん敵わないという。

スポーツ

卜部 ゲーム以外は? スポーツとかやってます?

小崎 やってないですねー。オフィスから 15 分くらいでスキー場に行けるので始めてみたりはしましたけど。特にアメリカだと車社会なので体力が衰えてってる気がするんですけど。

松田 ここマイアミでも、ビーチとかでジョギングしてる人がやたら居ますよね。スポーツ観戦は? ボストンって松坂が居たところですよね。

小崎 観戦もしませんねー。よくわかってない。最近 Red Sox が優勝したのは知ってるけど、話に絡めなかった。

瀬尾 何でですかねー。Rubyist ってそういう人が多いですよね。

卜部 日本では、サッカーが盛り上がってる地域に居たこともあったじゃないですか。

小崎 いや結局趣味って時間の取り合いだから、何かやったら何かに興味なくすんだよね。たいてい僕らはコーディングっていう、ものすごく時間を食う趣味があるので。

菅井 息抜きがゲームじゃなくって Ruby のハックっていうのが驚きました。

英語の学習

卜部 音楽聞いたり本読んだりとかは?

小崎 音楽聞くとゾーンからはずれるので、めったに聞かない。車の中で聞いてたこともあったんだけど、最近は ESL*25 のポッドキャストを聞くようになったので、ますます音楽から離れてしまうのであった。

卜部 ESL のポッドキャストは英語の学習の役に立つんですか?

小崎 すごく役に立ったと思う。結局言語は練習量な気がするので、ながらにやる時間は言語にあてた方がいいかな、と。

卜部 偉い。なんかすごい真面目だ。

小崎 いや違うんですよ。僕は最初すごくひどかったので、もっと練習しないとほんとに生きていけないぞ、と思うことが何回もあったので。

菅井 それは仕事中に?

小崎 いや日常生活。体壊した時とか。あと、US って皆さん仕事がいい加減なので、電話で交渉しないといけない。メールはだまって捨てるっていうオプションが向こうにあるので、交渉するなら電話一択になっちゃう。

松田 あー、英語で電話ねー。つらいですよねー。

卜部 生存のために止むに止まれず、と。

趣味とコミット数

卜部 日本に居たころは何か趣味やってたんですか?

小崎 そんなにやってないよ。そんなにやってたらあんなにコミット数増えてるわけないじゃん。たぶん数字で証明できてる気がする。そろそろ nari3 のコミット数越えたんじゃないかな?

中村 平気で越えてるんじゃないですか? 僕なんかぜんぜんコミットしてないですよ。昨日は 1 回コミットして 1 回リバートして 2 回だって喜んでたし。大丈夫です。

小崎 何が大丈夫なのか分からないんだけど (笑)

中村 僕、がばっと変えることが多いんで、コミット数は少ない。

小崎 ながちかさんのやつ見てたりすると、nari3 無双の日があったりして、すごく多く感じるけども。

開発環境

DSCI3807.JPG

卜部 使ってるマシンのスペックは?

小崎 これは MBP の 2011 年前半のやつ。4 コア 8 スレッドあるので、Ruby の test-all が 1 分で終わるところが気にいってる。

卜部 クッキー焼くのもこれですか?

松田 ひっぱるなあ (笑)

小崎 これですね。でもまああれはマシン性能いらない気がするけれども。

卜部 いつもこれですか?

小崎 いちおう会社行くともう少しでかいマシンがあるんだけれども、仕事で使っている。

松田 それで、そろそろ寿命が尽きかけている、と。

小崎 そうです。最近たまに起動しない。そろそろ次の機種を考えないとまじでやばい。

卜部 Linux カーネルの開発をしてる時に、ハードウェアに依存してるところをあんまりやらないから、機種はなんでも良いということになる?

小崎 というか、今の Linux カーネルは最大 CPU 数 8000 とかだから、全部テストすることは無理です。おれはあきらめた。MacBook Pro の上で VM で開発してる。

松田 VM は何を使ってるんですか?

小崎 Parallels っていう Mac 用の製品です。OS X の中で VM が動く。

卜部 Parallels どうですか? 速いとか遅いとか。

小崎 アップストリームのカーネルを使うかぎり、どれでもいっしょです。どの VM を使っても OS のバージョンによって特殊なコードを入れて最適化をしてるんですけど、アップストリームのカーネルに対してはそういう最適化がいっさいできないんです。

松田 VMwareとかじゃなくて Parallels を選んだ理由って何かあるんですか?

小崎 強い理由はないです。Parallels は今 CTO が、Linux の SCSI メンテナの James Bottomley で。御布施のつもりで。SCSIサブシステムに Mac のパッチが飛ぶことなんてないから「お前何の接点があるんだ」って思ってた。結局彼はいま Parallels の OpenVZ チームといっしょにコンテナ推進をしてる

卜部 開発は VM じゃないと恐いですよね。

小崎 Linux はバグってるといろんなものを吹き飛ばしてくれるからね。

松田 そう考えると昔の(VM が一般的ではなかった頃の)人は偉いなあ。

小崎 EXT2 の頃なんかクラッシュするたびにファイルシステムが飛んでたんだから。ジャーナリングファイルシステムは偉大です。

卜部 今でもファイスシステム作ってる人は、ファイルシステムがバグると死にますが。

小崎 さすがにルートファイルシステムは分けるでしょ。

三村 ディストリは?

小崎 CentOS か Fedora が多いです。Yum に慣れてしまってるので。Ubuntu はいろいろ違うので、覚えることが多いし、仕事が RHEL だから乗り換えれるわけでもないので時間を損している気がしてしまってモチベーションが上がらない。

松田 デスクトップ用途では Linux は使わないんですか?

小崎 あんまりハードに詳しくなくて Linux がきれいにインストールできるカードってどれなの? って、特にノート PC をちゃんと調査できる能力がないので、易きに流れてしまっている。

卜部 ThinkPad はたいてい大丈夫ですけどねえ。

小崎 高いんだもん。

卜部 最近中国製品になったのでそうでもないですよ。さらに言うと日本で買える Lenovo はだいたい NEC が作ってたりするので、日本製ですね。

小崎 じゃあ次は Lenovo にしようかな。

卜部 とは言え、このマシンは btrfs と相性が悪いんですよね。何回か飛びました。

小崎 それは btrfs がまだ安定してないということで説明できる気もするけど。

卜部 fsck とかが悲惨なんですよね。

小崎 だってほぼ未実装だもん。あの fsck なんもしてない。

卜部 ジャーナリングで壊れない前提で書かれてるので壊れちゃたら最後どうしようもない感じで。

小崎 何もしてないが故に無茶苦茶速いので最初みんな感動するという。しばらく使ってると真実に気づいて、「あー」って。

郡司 どっかの KVS でも聞いたような話ですね。

Kernal Watch の記事

三村 カーネルのアップデートの連載あったじゃないですか。あれどうして終わっちゃったんですか?

小崎 文字数少ないにもかかわらず、調べるのがけっこう大変で、ちょう時間を食うんですよ。まず LKML を読んで、散発的な議論とか、何年か一度蒸し返される議論とか追ってかないといけない。誰も URL を教えてくれないので、なんとかして過去の議論を探しだして読まないとけない。

卜部 LKML 読むとき何を使ってます? 過去の議論を追う時とか。

小崎 普通に Google 検索。

卜部 Ruby だと blade あるけれど、Linux にはそういうのはないんですか。

小崎 はい。何も助けてくれない。lwn.net とかあるけれど、良い検索がついてるわけじゃないから。日々、お前議論読んでないだろみたいな人が現われる。うんざりしてきてぞんざいに対応すると「Linux は新人に冷たい」って言われる。

郡司 「半年 ROM れ」とかって正しいんでしょうか?

小崎 正しい。Linux の文化とかあって、それを言っちゃったらパッチはリジェクトだよねっていうような禁句があるわけですよ。「その機能おれの会社で必要なんだよ」とか。その辺を身に付けてから。

松田 Ruby で言うと、Matz を説得するユースケースを出さずにコードだけ送っちゃうみたいな。

小崎 そうですね。

郡司 検索のシステムは、簡単にはできないんでしょうか?

卜部 過去ログをどこから取ってくるか、ですね。

小崎 誰かが実現してくれたら、ちょう喜んで使うかもしれないですね。あと、Google さんにお願い。Google コード検索を復活させてください。オープンソースのコードを串刺し検索できる同等のものを。何か非互換を入れるときに、壊れるかどうかを全部検索できるっていうのが偉大だったんです。いかにも使われていなさそうな機能を消すときに、検索してその機能を使ってるアプリケーションがマッチしなかったら消してもだいじょうぶってわかる。

松田 それ Ruby だと GitHub で検索するとけっこういい線行くんですけどね。

郡司 みんな GitHub に載せよう、と。

小崎 GNU とかは乗ってこないよね。

卜部 まあ GitHub と Savannah だけで良ければそこそこできるかもしれませんね。

好きな女性のタイプ

卜部 好きな女性のタイプは? まずは次元から聞きましょうか。

小崎 三次元一択でしょう。

卜部 ほう。そうなんだ。特にタイプはない?

小崎 敢えて言うなら、会話が続くタイプの人がいいですね。あんまり自分がおしゃべりな方じゃないので、何か接点がないと完全に会話が続かなくなってしまう。

郡司 それは Linux カーネルについて語れる人、みたいな。

小崎 いやいやいや。それは高望みしすぎでしょう。

郡司 でも望みはある、と。

小崎 いやいやそうじゃない。いやごめん、それは望んでないや。一方的にしゃべってくれる人でもいい。

卜部 どちらかというと、静かな人よりは賑やかな人の方が良い、と。

小崎 そうですねえ。あとは、どうしても業界的にデスマーチとか定期的に来るので、デスマーチでも文句が来ない人がいいです。理解のある人。仕事が忙しいときに「そんなに仕事が忙しいのおかしい」とか怒られても、精神がすり減るじゃないですか。

松田 …何かあったんですか?

小崎 それは、ちょっと、例えということで。

今後の展望

卜部 今後の展望とか将来の夢とか聞かせてください。

小崎 昨日笹田さんにも説教されたし、とりあえず Ruby のカンファレンスで何か発表しようかな、と。

菅井 「来年の RubyConf か RubyKaigi には絶対プロポーザル出してね」って笹田さんが言ってましたね。

卜部 何か 1 回やりましたよね?

小崎 「GVL を作りなおしたよ」みたいないかにも受けなさそうな内容で。

松田 ちょうマニア向けでしたね。

三村 コミッタがすごい集まってましたね。

小崎 今度はちゃんとキャッチーそうなタイトルを考えて。GVL だと古すぎるし。

卜部 もっと先のはなし、例えば日本に戻ってからやりたい事とかでもいいんですが。

もう一度食べ物について

小崎 というか日本に戻りたいですね。ごはんシック。日本のごはんは超恵まれてるよ!

卜部 ボストンって港町だから海産物はないの?

小崎 あるけど超高い。そういうお魚系のレストランとか行ったら 1 回 $ 50 コースだし。そんなにちょくちょくは行けないです。もちろん一番安いのを頼めばもっと安いんだけど、値段を考えなきゃいけない状況になるよりは、魚をはずしてもっと安いところで食べたい。この国はなぜか肉がやたら安いので。

松田 この国で魚食えば日本のごはんシックが癒されるかというとそうでもないし。

小崎 そうですね。味付けがまったく違う。

郡司 自炊すれば解決するんじゃないですか?

小崎 クックパッドで自炊ですか。うーん。

菅井 日本のごはんで特に何が食べたいですか?

小崎 例えばラーメンとか。あとは、居酒屋行きたいですね。居酒屋で出そうなメニューは、だいたいどれもおいしい。

松田 それで日本からツイッターで居酒屋の料理の写真とか撮って送ると、精神的ダメージを被るんですね。

小崎 そうそう。日本で食べ物の写真を撮って精神的テロを敢行する人がたえないわけですよ。お前らわかってるのか、と。

中村 これから先、あったかそうなおでんとか。

小崎 それテロですからね! いつ逮捕されてもおかしくない行為だと自覚を持って欲しいわけですよ。

アメリカに来てよかったこと

卜部 逆にアメリカに来て良かったことはありますか?

小崎 アメリカ企業文化として、VPN で仕事をできるようにしてくれてるのはありがたい。無駄な会議もいっさいないし。外資系で仕事の満足度が上がるんだ、というのが理解できた。

卜部 じゃあ日本に戻って外資系なら全て満たされる、と。

松田 第四のフルタイムコミッタとして、Heroku とかどうですか?

一同 (笑)

コミッタとしての将来

卜部 とりあえず Linux コミッタとか Ruby コミッタは続けてく感じですよね? そんななかでこれに手を出したいとか。コミットを読んでクソだ、と言いだす係とかどうですか? 他の人のコミットを見てみたい、とか、笹田さんの GC はちょっとおかしい、とか。

小崎 そうすると Ruby いじるのが癒しタイムじゃなくなっちゃうじゃないですか。文句を言う係に自分を任命しちゃうとあんまリ癒しタイムじゃなくなっちゃうので、バグをみつけて黙々と直すとかの方が、精神的には良いよね。

卜部 glibc のコミット権は?

小崎 なるべく近い将来に取りたいと思ってます。

卜部 著作権を FSF に移転すれば良い感じ?

小崎 それに近いです。

卜部 glibc も git で開発してるんですよね。そうしたらあんまりコミット権の有無は重要じゃないかも。パッチ送っておけば、そのうちマージされるから。

小崎 そうじゃないです。著作権が移転されてない人のパッチはいっさいマージしないから。FSF への copyright assignment を済ませちゃえばコミット権を取るのは簡単なので、代理コミットはほぼ発生しません。

卜部 Git の機能をフルに活用してる感じじゃないんですね。

露出を増やすこと

小崎 あ、もう一つ将来の夢。Rails 覚えたい。ボストンの Rails 教室に行って、なん十ドルか払うと教えてもらえるんです。「Ruby どれくらいできるの?」って聞かれて「いや、コミッターです」って答えたい。

松田 ひどい(笑)

卜部 そういえばボストンには Ruby 系のスタートアップはあるんですか?

小崎 いっぱいあるみたいよ、って Pat (『Ruby Under a Microscope』の Pat Shaughnessy、いい本だからみんな買いましょう) が言っていた。Boston.rb ってかなりでかいらしくて、毎回 200 ~ 300 人集まってるよ。

郡司 最近シリコンバレー以外にもシード・アクセラレータが増えてきてて、東海岸で盛んなってるとか聞きました。ボストンでもそうなんですかね?

卜部 じゃあそういうところに遊びに行けばいいじゃないですか? それで、Rails 教えてくれって言ってみる。

小崎 いやまったく知らない人のところに行って教えてくれって言うのは失礼な気がしてさ。

松田 お金払って Rails 教室行くよりは、Boston.rb 行った方がいい関係になりそうじゃないですか。

郡司 「おれコミッタだけど何か質問ある?」って。

小崎 僕って CRuby にけっこうコミットしてても、Ruby 界隈で知名度が高いわけじゃないじゃないの? と。そういうわけで、どこかイベントに招待されるようなエンジニアを目指したいです。

松田 世界の小崎資広の価値が正しく理解されてないだけだとは思いますよね。もっと露出を増やさないと。

卜部 まあ理解されやすいプロダクトの人とか、理解されやすい立場の人とかいますからね。自分のプロダクトを持ってる人は強いよね。Linux カーネルコミッタです、とか言っても「はぁ」って。たぶん日本には Alan Cox 知らない人多いよね。

若手に一言

卜部 この連載を読んでる今後育っていくであろう若手に上から目線の説教を。

小崎 将来の夢があったら、将来じゃなくて今やった方がいいよ。年月が経つことによって自動的になにかが出来る様になることは一切ないので、早目に失敗した方が良い。

松田 なるほど。てことは小崎さんは今すぐ露出を増やすってことか。オーストラリアは締め切られたから、次はインドかな。国際カンファレンス的なのじゃなくても、アメリカ国内ならいくらでもありますよ。

卜部 南米とか。

小崎 じゃあ今さらだけど 3 年まえに作った GVL の実装を改造する需要ある? っていう発表を。

一同 (笑)

卜部 まあ誰もその話できないので、通るんじゃないでしょうか?

小崎 需要ないなあ。

松田 でもほんと、そういう特異性のある、その人にしかわからないコンテンツを持ってる人って貴重なので、ぜひ露出してほしいですね。

卜部 じゃあ次は若手の自覚のない Rubyist たちにむけて一言。

小崎 若手じゃない人に上から目線っておかしいでしょ。

郡司 上から目線じゃなくてもいいから、読者の方に何か。

小崎 定番ですけど、とりあえず、ぼくでもできるんですから、オープンソース貢献は難易度高くないのでぜひやってください。

卜部 やったことない人にはどういう貢献がお勧めですか?

小崎 それは上から目線じゃだめで、やりたいことをやらないと。続かないので。

松田 やりたいことを見つけるのがいちばん難しいかもしれない。

中村 学生さんが「僕もオープンソース活動やりたいんですけど」って言うんですけど、やり方がわからない。

小崎 誰でもいっぺんはそういう wanna be の道を通るんだけど、そこからどうやって抜け出すかが難しい。何かアドバイスしたら抜け出せるっていうかとそうでもないところが難しい。

卜部 まあ言っておけば万人には通用しないけど、誰か一人くらいは抜け出せるかもしれない。

小崎 じゃあ。若手向けになっちゃうかもしれないけど、興味あるソフトウェアをダウンロードして、デバッグシンボル付きでコンパイルして、main() から一行一行全部ステップ実行していくと、そこで通らなかったファイルは見なくていいとわかる。

卜部 Linux カーネルだと、ほとんどのファイルは通らないわけじゃないですか。どこを見ればいいんですか?

小崎 /proc ファイルシステムなら全てのサブシステムにつながってるので、ps(1) が使ってるデータがどこから来てるのか見ると、スケジューラはこのファイルなんだ、メモリはこのファイルなんだ、っていうのがわかる。ロードアベレージはそのものずばりの変数があって、こことここでしか触ってないわということが見えるので、どれだけソースコード読めばその辺の土地勘が得られるか、というのが分かりやすい。Linux を前から順番に読んでくのはちょっとお勧めできない。

瀬尾 Ruby だったら main() から追ってくのが良いのでしょうか?

卜部 Ruby を main() から追ってくのは一応可能だけど、ベストではない。どこを見ればわからない人が見ていくのなら。

小崎 でも 2 つ難所があって、1 個はパーザーが死ねくそ、っていう感じで、もう 1 個 YARV のソースコードは C じゃないから。

卜部 Ruby のコードはコマンドラインオプションを解釈する段階ですでに -e とかあるので VM が動いてる。コマンドラインオプションの解釈に到達するまでがちょう長くて、そこまで読むのがけっこう大変。VM の起動もそこでやってて、それからパーザーに入ってく。そこら辺で力尽きると思っていただけると、だいたいい良いんじゃないですかね。

小崎 Ruby は何かのメソッドを起点にすると良いと思う。IO.select とか、メソッド名で grep するとどこかに rb_define_method とか書いてあるはず。

中村 1 個 C 拡張つくったらいいんじゃないですかね?

小崎 それを言うなら、Linux もドライバを書くっていう方法もありますね。

三村 オライリーの本も、ドライバから読んでくと楽だった記憶があります。システムコール入ってから、どうやってそのシステムコールが実装されてるか書いてある。

小崎 その辺勉強してたのは、はるか昔なのでもう記憶にないわ。すみません、これがおっさんになるということです。

郡司 自分がどうやって上達したかがわからなくなるという。そういうのをちゃんと高速道路のように整備するっていうのも大事な仕事ですよね。

小崎 自分が詰まったところが、自分だけの問題なのかみんなが詰まるところなのか、わからないんですよね。何人かに教えてみないと、わからない。人に教えるっていうことは、自分が理解するのにちょう役に立つ。社会人になって数年しか経ってない人は後輩にやさしくしてあげましょう。自分にちゃんとお返しがくるので。セプキャンみたいなのは、良いハブになってる。

セプキャンへの参加と教育

卜部 セプキャンみたいなのに参加したのはどういう経緯だったんですか?

小崎 リクルートされたんじゃなかったかな? 僕は最初 Linux 部門で入って、プログラミング部門の主査がよしおかさんで、Linux 部門をまとめてたのが、よしふじさんという、IPv6 を Linux に入れた人で、二人と面識があってひっぱられた。

郡司 USAGI プロジェクトですね。

卜部 教育方面の活動は続けていきたいですか?

小崎 セプキャンはプログラミング部門は無くなっちゃったからね。いまはプが抜けてセキュキャン。似たような感じのがあったらやるかもしれない。

卜部 未踏のプロマネとか。

小崎 未踏のプロマネはアカデミックな人じゃないと難しいのか。アカデミックな人の方が、わけがわからないものを見るのに慣れてる。民間の人が見ると「これは実用まで行かないんじゃないの?」っていう第一印象を持ってしまいがちなんだけど、その中で、それでもどれが一番可能性がありそうか、というのを選ぶのには特殊な経験が必要。

松田 Ruby Summer of Code みたいなのもありますけど。がっつり C で中のほうの、そういうところをやりますっていう人はあんまりいないですけどね。

卜部 それがいるんですよ。Ruby の JIT コンパイルをやりたいっていう人が何人かいて、Summer で終わるわけないやろ、っていう。ちょっとね、希望的にがっつりやっちゃうと終わらないので、勘弁して欲しいっていうことになっちゃう。

小崎 それは設計方針とか聞いたらいいんじゃないですかね。

卜部 大学の先生は?

小崎 そういう話がちょう具体的に来たら、やりたい気持ちがないわけじゃないけど、今まで来たことはない。

卜部 大学院とか通って博士とか取ると、比較的来たりするんじゃないかな?

小崎 博士ですかあ。社会人しながら大学に通うのは、大学に近いところじゃないと厳しいですよね。今の職場だと遠いし、言語ハンディキャップがあると取れる気がしない。日数も足りないし。

卜部 大学院に行けば大学院に行くビザが出るよ。

小崎 それは今の会社を辞めるということで、それはかなり大きなチャレンジだよね。何かのはずみで大学の先生になることは否定しないけど、そこまではちょっと。卜部さんは?

卜部 修士までやって、これは大変だな、っと思ってやめました。日本の大学で先生になっても研究できる気がしない。となりで笹田さんがやってるのを見て、これは無いわあ、と。

松田 学校とか本人の性格にもよりますけど、それは笹田さんが面倒見良すぎなだけなのでは。

がちゃぴん先生との関係

卜部 ところで、なんでがちゃぴん先生なんですか?

小崎 何年か前にブログブームがあって、僕も始めようとしたわけですよ。fc2 のブログ*26のテンプレートに絵を貼るところがあって、僕は絵をかけないので適当にガチャピンの絵を貼っておいたら、セプキャンの時にチームの子に見つかって、そのころ勃興してたツイッターという邪悪なツールですごく拡散されました。

菅井 ああ、セプキャンの先生だったからなんですね。

小崎 そのイメージを払拭すべく最近アイコンを変えてみました*27。背中のチャックを開けて着ぐるみを脱ごうかと。ちょっとマジメな社会人だぞ、という主張をしてみようかと。二次元のアイコンを使ってると知らない人からちょういじられたりするんですよ。ツイッターって良くないですね。会ったこともない人がすごく慣れなれしく話しかけて来たりして、みんなだんだん感性が麻痺してきますから。

終わりに

マイアミビーチでインタビューをさせていただいてからから記事の公開までほぼ 1 年の時間が経ってしまいましたが、お話いただいた内容はまだまだ古びていないように思います。小崎資広さんに関しては最近 (2014 年 9 月) は『続・エンジニアの学び方』が話題になっています。こちらも興味深い記事ばかりですのでお勧めします。

(インタビュー:卜部、テープ起こし&編集:zunda)

Rubyist インタビュー特別編 小崎資広さん 連載一覧


更新日時:2014/12/14 20:28:35
キーワード:
参照:[Rubyist Magazine 0049 号] [0049 号 巻頭言] [分野別目次] [各号目次]

*1 インタビュー後編では欠席

*2 インタビュー後編は 2013 年 11 月 10 日に行われました

*3 5 分前までちゃんとパソコン通信と言っているのに、いきなり間違えるあたり、カンファレンス疲れを感じる

*4 多体問題専用計算機 http://ja.wikipedia.org/wiki/GRAPE

*5 いろいろあって、研修を完全にスキップして入社式翌日から実務に入ったのは私が最初で最後になったので、ちょっとした名物人間でしたね

*6 今の総務省。最初は郵政省とテレビが結びつかなかったが、郵便しかない時代に通信まわりは俺のものって権益をぶんどった人がいたんだね

*7 放送の規格取りまとめてる団体

*8 松下は長いことテレビはリビングの王様、テレビを制するものはリビングを制す。と息巻いていたが、プラズマへの過剰投資で経営が傾き、最近AVC ネットワークス社 (4 つある分社の 1 つ、黒物家電作ってた) が解体されてしまった。とても残念

*9 http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?TeX%E3%81%AE%E6%AD%B4%E5%8F%B2 http://www.ipg.co.jp/press/story/vol47.html

*10 その楠見さんはいまや役員に昇格して、黒物家電全般の責任者らしい。すごいなあ

*11 放送は技術的には片方向かつマルチキャストのネットワークなので、ネットで出来ることはだいたい出来る

*12 ここで言ってるテレビ屋さんはフジテレビとか TBS のような方々

*13 フレームとフレームのVSYNCの期間に文字情報を符号化する仕組み

*14 規格の中に理不尽な制限がたくさんある

*15 今ではHTMLとCSSでどのブラウザでも見れるページが書けるのは常識だが当時はIE4とかの時代でそれは全然普通ではなかった。CSSを規格通りに実装するだけでIEとかと互換性がなくなって通信との相互運用性を軽視していると叩かれた時代。HTMLで動的コンテンツは無理だと Flash に走った携帯業界と Full HTML に走ったテレビ業界とで早すぎた vs Flash 戦争をしていたとも言え、何もかもがみな懐かしい

*16 Mosaicの権利もってたSpyglassがOpenTVにacquireされ、当時Mosaicは組み込み向けブラウザとして第二の人生を送ってた

*17 On Screen Display、元々はテレビの選局時のチャンネル番号表示とか音量表示とかに使われる重ねあわせ画面を指す用語だったが、デジタルTV規格で意味が拡張され、ブラウザが文字やCSS要素やPNGを表示する場所を指すようになった

*18 当時のハードスペックでは1920x1080の動画再生をX Window Systemのレイヤでやるのは非現実的だった

*19 そもそも素の X Window System だとαブレンディングとか、スプライト重ねあわせみたいな概念がない

*20 JIS改定の影響受けないよう、JIS X 208のコード表すらコピーして独自で持ってるぐらい独自

*21 歴史的には昔は書き換えが重かったから X サーバーが中央集権的にリージョン管理して必要最小限なエリアを書くのが速かった。3D 対応のビデオカードはリアルタイムに複数の絵を合成できるので、わざわざプロセスまたいで X サーバーにお願いする理由がなくなってしまった

*22 契約の問題でSolarisの中を完全に知っている人はLinuxの作業が出来なかった

*23 150 lbs ≒ 68 kg。60 台前半を見慣れているとかなりギョッとします

*24 この当時ちょうどCookie Clickerというブラウザゲームが流行っていた

*25 第二外国語としての英語

*26 http://mkosaki.blog46.fc2.com/

*27 インタビューから時間が経ってしまいました。その間にもう何度かアイコンを変えておられます