Binary 2.0カンファレンス2005

某所で原田くんと高林さんと飲んだ時に,「Binary 2.0カンファレンスに来ませんか?」と誘っていただいたので,行ってきた.

http://namazu.org/~satoru/blog/archives/000078.html

発表資料はここ.

http://namazu.org/~satoru/blog/archives/000085.html

いや,濃いメンツが一杯ですごい内容でした(笑)ただし,私や吉岡さんのような「旧世代」(苦笑…二人で平均年齢を引き上げていた気がする)はあまり見かけなかった気がするが,新世代にこれだけのパワーがあるのはすごいと思う.

で,内容を簡単にまとめると,次のように分類できた気がする.

まずは,「低水準な(旧世代の)高水準言語(C言語とか)にもリフレクション(ただし具現化のみ)を!」系.実は,昔は,人類は計算機で何でもできた…そりゃそうだ,機械語レベルでは計算機ができることが何でもできる.それが,「高水準言語」というりんごを食べてしまったことにより大規模なプログラムを簡単に書けるようになってしまったかわりに,エデンの園を追い出されて,その自由を手放してしまったわけだ.比較的最近の高水準言語は,この失われた自由を(容易に制御できる形で)取り戻そうとしている気がする.この自由を,低水準な(旧世代の)高水準言語でも使えるようにしようと努力しているわけだ.浜地慎一郎さん,中村孝史さん,青笹茂さんなどが,これに相当すると思われるが,このための努力と豊富な経験から生まれた絶妙な力業!が驚嘆すべき内容であった.今は機種依存していたり,トリッキーだったりするのだが,これって本当にちゃんとできるようにするように,みんなで努力する価値があると思う機能だった.

次は,「自分を書き換えちゃおう!(自己書き換え)」系.首藤一幸さん(ただ,Javaの話じゃないと言ってたので胸をわくわくさせてたのに,Core warsの話でごまかしても,やっぱりJavaの話だったじゃないかっ!(笑)でも,面白かったので許す)は,JITコンパイラ内部における自己書き換えの有効性と手法について話していた.時々出会う不可解な挙動は,これが原因ではないか?という指摘は興味深い.あと,鵜飼文敏さん,後藤正徳さんのライブパッチ系.なぜか,キャリアはシステムを稼働状態のまま修正するのが好きで,某キャリアの研究所ではさまざまな研究をしているという噂.某社のキャリアグレードLinuxパッチが,普通のLinuxコミュニティにどのように受け止められているかがわかって,個人的には興味深かった.昔から現場の交換機の開発者には,これに関してとんでもない技量を持つ人間がいるという噂があるが,ぜひ一度聞いてみたかったものだ.

もう一つは.「プロセッサキャッシュを制御しちゃおう!」系.これはよしおかさんの有名な話だが,個人的には件数がちょっと少ないなあ…という印象.ファイルシステムNILFSの天海良治さんも,TAO(昔Elisというマシンで動いていた,オブジェクト指向,ロジックプログラミングとかなんでもありのLisp)をC言語に変換するプログラムを作って使っていたのだが,さらにそのアセンブラコードをはき出させて,手で最適化するというとんでもないことをしていた.天海さん曰く,「まったく等価なコードでも,一行違うだけでプロセッサキャッシュのヒット率が違ってくるので,実行速度がかなり違うんだよね」とのこと.こういう人って,ほかにも結構いないのかな?(…いないって(苦笑))

さらに,「そのバイナリはなぜ動くか?」系.ひげぽんさんとか,野首貴嗣 さん,g新部裕さんとかの話.Mona OSの動きとか,組み込み系プロトコルスタックはどう実装するかがわかって興味深かった.Binarealの大和正武さんの話もここに分類されるか?

さらに,「バイナリをいじるなら,いっそのことハードウェアからいじろう!」系で,これは八重樫剛史さんの発表.内容としては,身近でLisp専用機とかルータを開発していた人がいた私は既知の話だったが,一番すごかったのはそのプレゼン方法!.なんと,OpenOfficeで作った資料をGIF化したあとに,ELF化!(笑)し,それをGDB!!で一枚づつ表示プログラムとともにロードするという,世界初!!!のデバッガプレゼンなのだっ!なお,他のバイナリアンも,プレゼン方法が普通ではなかった人が多かった(笑)あと,CQ出版が出すという噂の,「コンピュータシステム技術学習キット」(コンピュータが持つ一通りのI/Oがいじれる)に注意すべしっ!

これ以外にも,後から「失われつつある伝統芸能」系もあるなあと思った.もちろん,交換機の話もあるが,たぶん皆さんにとって意外なのは,昔の日本のMacユーザ.なんと,昔のMacユーザは,すべからくバイナリアン(ただし0.5くらい(笑))だったのだっ!というのは,昔は,プログラムの大部分が北米で開発されたものだった…が,当時のMacOSは国際化されていなかったので,日本語が表示できなかったりするわけだ.一番多いのは,フォントの決めうち…で,メニューで変更できればそれなりに動くが,変更できなければ手が出しようがない…というのは素人のあさはかさ.当時のMacは,高機能なGUIライブラリがROM化されて提供されており,Macのプログラムというのは,基本的にそれらのROM内ルーチンを呼び出していたので,誰が最初に見つけたかは不明だが,その呼び出しに着目してフォントをデフォルトフォントを呼び出すようにバイナリ書き換えをしていたのだ.Apple Computerは,リソースやバイナリ書き換えのためにResEditという強力なツールを提供しており,昔の日本のMacユーザは,これがなければ使えるソフトが非常に限られてしまったのだ.

もちろん,バイナリ書き換えはこれに限らない.たとえば,私は昔研修で「HyperCardスタックをXCMDを実装することで機能拡張する」という,今まで会社で受けた中で一番有意義な講義を受けたことがある(当時の我々はひどく,その研修にmicro VAXを持ち込んでUUCP配送をしてもらったりしていた…さすがにそれはやりすぎということで,翌年からかなり厳しく締め付けられてしまったが…閑話休題).そこで研究から戻って,POPが出てき始めたこともあって,POPmailというHyperCardで作られているスタックを日本語化しようとしたのだ.コード変換XCMDは書いたものの,なぜかエスケープが通らない…そこでメールを取得するXCMDを逆アセンブルして,エスケープを通していないところをバイナリ書き換えしたのであった.

さらに,Web黎明期に,NCSA TelnetWindows版とMac版が出た時の話である.高田くんが私の机にやってきて,「Windows版はShift-JISを使えば日本語が表示できるんだけど,Mac版は一部文字化けしてダメなんだよ.なんとかならない?」とやってきたのであった.たぶん,原因はISO-8859-1とMacのフォントエンコーディングを変換してしまっているのが原因だと推測がついたので,そこでさっそくResEditを取り出して,コードを睨むこと30分.それらしき16進数の並びを見つけ出して書き換えたところ,無事Shift-JISのHTMLファイルが表示されたのであった.つまり,「世界で最初に日本語HTMLを表示したMac」は私の机の上にあったのだ(笑)

つまり,昔のMacユーザは,すべからくバイナリアン(ただし0.5)であったのであるっ!(ただし,周囲から相談された時に,いつもその調子で「…をResEditで…に書き換えてね」と指示していたので,天海良治さんには「お前,みんながみんなResEditでバイナリ編集できると思っているのか!」と言われたことがあったが(苦笑))今は,しっかり国際化されているので,このような伝統芸能も見受けられなくなってしまった.まあ,これはいいことであろう.

最後に…すみません,少し遅れてしまって,一番重要な高林さんの発表を聞けませんでした(泣)田舎の職場はダメだな…