今回、登場するのは全文検索システムNamazu、ソースコード検索エンジンgonzuiなどの開発者として知られる高林哲氏です。高林氏といえば、「バッドノウハウ」(注1)、「Binary 2.0」などといった言葉の提唱者としても有名ですが、今回は、一昨年末に開催された「Binary 2.0カンファレンス2005」がきっかけで刊行された書籍のお話を中心に、弾さんとの対談が行われました。仕事帰りで、サンドイッチを頬張りながら取材に臨む高林さんに、ゆるりゆるりと弾さんが質問していきます。
Binary Hacksとは
弾:『Binary Hacks』という本を出すそうだけど、これは1人で書いたの?
高林:5人が著者で、ほかの人がコントリビュータということになってます。(仕事とは関係ない)趣味プロジェクトで、休日とかに少しずつ書きました。
弾:どんなことを「Binary Hacks」って言ってますか?
高林:厳密な定義はないんですけど、ソフトウェアの階層構造で一番低いレイヤ、0と1の領域に近い、低い領域のことをBinaryと呼ぼうということで、その低いレイヤのHackのことをBinary Hackと呼んでいます。OSの変な機能を使うとか、そういったことをBinary Hacksと呼んで、それを100個集めて、Binary Hacksという本にしたわけです。
弾:(高林さんは)「Binary 2.0」という言葉の創設者じゃないですか。…何それいったい?
高林:ただの思いつきですよね。当時、Web 2.0って言葉が異様に流行ってたんで、それにかこつけて、ネタとしてやってみました。
弾:1.0とどういうふうに違うの?
高林:1.0は存在しません。2.0という言葉が先行してますね。
弾:じゃあ逆になぜ存在しないんだろう。
高林:存在しないのはそういう言葉を言った人がいないだろうというだけで、Binary技術というか低レイヤの技術は昔から脈々とあるんですけれども、ただ単にある時点でそれをBinary 2.0と呼んでみた。
弾:ただ、言葉っていったん作っちゃうと一人歩きするよね、Web 2.0もそうだし。今や誰もわかんないよね、Web 2.0。
高林:おかげさまでBinary 2.0という言葉は誰も使ってない…。
弾:そうかなぁ(笑)。
高林:使ってないと思いますけどね。
弾:こうなってくると1.0を無理やりこさえたくなるよね、Binary 1.0はかくかくしかじかであり…。無理やりこじつけて言うとしたらBinary 2.0って何なの?
高林:時代錯誤ってことじゃないですかね。あんまり必要性ないっていったら語弊があるけど、なんだろう、逆行してるじゃないですか、より高いレイヤに基本的に技術は進歩していくのに、あえてこのタイミングでBinaryっていうのはちょっと逆行気味ですよね。
弾:あんまり深い意味はないと。あ、COFFとELF[2]とか? それはBinary Formatの違いだって(笑)。
高林:ああ、でも本の中で、COFFは扱ってませんけどELFは扱ってます。
弾:ELFだけ? 今までとどう違うとかっていうのはやってないの? 今、ELFくらいしかないけどなぁ。ああMach-Oもあった。
高林:だいたいLinuxに絞ってますね、たまにMac OS Xの話とかWin 32 APIは書いてるけど。
弾:まあBinaryだからそれはしかたがない…。で、Binary 2.0というのはあんまり意味がないと。
高林:Binary 2.0にはあんまり意味はないけど、Binary Hacksは重要なんです。本が出るからなんですけど(笑)。実体を伴ってなかったわけですよBinary 2.0は。
弾:Binary Hacksが出ることによってなんらかの形を得るかもしれないと。
高林:まあBinary 2.0のことはもう忘れていいんですけど…。
弾:はいはい。
高林:本の目標としてはですね、ELFがどうとかそういう知識って、知る人ぞ知るというところがあって、誰でもちょっと真似すればできるノウハウとしてはあんまりまとまってなかったような気がするんですよね。それを集約して、簡単に誰でも使えるような感じにまとめているところが重要かなと。つまりネットなどでいろんなところに調べにいけば情報がないわけではないけど、ネットだとそもそも情報として何があるのかがわからない。本として100本がまとまってると、めくって眺めているだけで世の中にどういうものが存在しているのかわかると。
弾:普通の人でも想定しうるBinary Hacksの例を挙げてほしいんだけど。
高林:一番、知ってると便利なツールとしてはstrace[3]とか。スクリプト言語を使っている人にも便利だと思います。Binary Hacksでは、straceがどうやって動いているか、中でどうやって実装されているのかっていうのも、適度に説明されていて、使い方としくみをセットで紹介している感じです。
弾:(完成前の目次を見ながら)fileとかodコマンド[4]のあたりからやってるんだ。意外とやさしいというのか親切。いざとなると検索するといろいろ出てはくるんだけど。昔みたいにSun OSをバイナリでパッチするとか…。それもBinary 1.0っぽいネタか(笑)。
高林:ツールの紹介だけじゃなくて、必要に応じてどういうふうに動いているのかとかも説明するようにしています。あと、CとC++のプログラムをリンクするときにどういうことがやばいかとか、オブジェクトファイルをリンクするときにシンボルの衝突がどういうふうに起きるかとかっていう話なんですけど、C++だと非常に面倒なことが起きるので、Cよりも複雑なんですよね。知ってる人はみんな知ってるんでしょうけれども、まとまっている情報があまりなかったんじゃないかと。同じ名前のクラスがあると予期せぬコンストラクタが呼ばれて、わけがわからない動作になるとか。
弾:あと、ちゃんとValgrind[5]の使い方が書いてあるの、すごいよね。オープンソースハッカー系で一番のバイナリ系ツールってこれかもしれない。
高林:そうですね、Valgrindは良いですね。