2009-07-05

webkit-dev 近況

連載中くらいはと思い webkit-dev を購読したけれど, 案の定ぜんぜん読んでいない. 今日は一念発起して 300 通くらい目を通した(= "j" を連打した). だいたい二ヶ月ぶん. 外野にも興味深い話題がいくつかあったのでぱらぱら書いてみたい. (過労気味といいつつ野次馬は別腹でよろしくおねがいします.)

まず JavaScript 関係から.

ARM 用 JIT をめぐるいざこざ

4 月頃, ハンガリー Szeged 大学の面々が SquirrelFish (Nitro?) を ARM に移植中だと アナウンスした. trunk には入っておらず, 彼らの git 上で開発が続いている. その後の 6 月, Apple は独自に実装した ARM ポートを ひっそりとチェックインした. それを発見した件の大学チームのメンバが 全然オープンじゃなくてガッカリだ と不満を表明. Apple 社員が "ごめん, iPhone 3GS が出るまで内緒にしろって言われててさ..." と謝り (3GS の Safari は JIT つきなの? それとも将来のバージョンで入るんだろうか?), 他の投稿が "Apple のは ARM7 だけど君たち(Szeged 大学)のは ARM6 で用途は広いから頑張って開発してよ" と励ましたりするが, 一方で MIPS ポートをしている別のプログラマが "Apple の入れた ARM JIT のつくりは汎用性も低くていまいちじゃね? このデザインで両方保守するのは筋が悪い" とケチをつけたり, "去年は <設計などを議論したい> と言ってたくせに何も言わないままだった"...と Szeged の面々も不満を返す. フレームが勃発しかけるなか, Apple が 長文 を投稿, 早期のレビューを求めなかった Szeged 大学側にもわずかな非はあるなどと指摘しつつ仲良くやろうと諭し, Szeged 大学も "まあ会社の事情じゃ仕方ないですね." と理解を示して議論は収束した.

ブラウザ+モバイルという過当競争の渦中にあるプロジェクトらしいトラブルだった. bugzilla を見る限り, 今は仲良くやっているようす.

Nitro-Extreme

Szeged の学生はめざとい. 今度は Nitro-Extreme というブランチの存在に気付いた. (ブランチ自体は 5 月頃からあった.) 非整数の数値にもなるべくヒープを使わない変更 (r43554) などが入っているらしい. 今まで 32 bit だった JSValue 型は double を入れるために 64 bit になった. (こういうでかい変更に bugzilla の id がなく, ブランチでガガっと作ってマージする様子を見ると, たしかに bazarr-rish なソフトウェアよりはフェアネスを欠くと映るかもしれない. レビュアは Apple の外の人だけど.)

YARR: Yet Another Regex Runtime

Chrome の Irregexp に 刺激されたからだろうか, JavaScriptCore にも似たような 正規表現ランタイム が入った. パーサがあってインタプリタがあって JIT があって...という作り. こういうのを凄い勢いで作ってしまうのはおそろしい. 趣味で追いかけるのはムリ目な進展の速さ...

最初のチェックイン は 4 月. そのあとデフォルトで有効になったり, たまにバグがみつかって無効になったりしている. 今はたぶん有効. ARM でも動くらしい. SquirrelFish-Extreme と共にデビューした WREC は短い命だった.

Chromium 由来の新機能

HTML5 をがんばる という言葉に嘘はないらしく, Google から Chromium 由来のフィードバックや提案が色々あった.

HTML 5

まず ルビ(...HTML5 じゃないけど), ページをまたいで動く SharedWorker, Growl のブラウザ版 Desktop Notification API, HTTP に飽きた人向け Web Socket, オフライン動作のための アプリケーションキャッシュ などが 提案されている.

本筋とは関係ないけど web socket の提案を書いているのは日本のひと. 日本 Google でも Chromium やってるんだね.

マルチプロセスと V8

HTML5 は直接関係ないけれど, Chrome のマルチプロセス構成向けにあわせた WebKit の変更として Isolated World に関する話題が 面白かった. 複数の JS コンテクスト(=VM) から同じ DOM をさわれるようにしたいらしい. (おそらくワーカスレッドからも DOM を使いたい, ということじゃなかろうか. 知らんけど.)

話の発端はコードではなく, そのためのテストをツリーに置かせてよという話だった. Apple の Maciej Stachowiak は "そんな V8 固有の機能は入れられない" と冷くあしらっている. Apple は "WebKit はブラウザじゃなくてエンジンだ" という立場をとる. そして "ブラウザの機能" や "ポーティング固有の事情" を本体のコードに入れるのは好まないらしく, こういうあしらい方をたまに見かける. V8 はポーティングという扱い. (その割に "#if ENABLE(DASHBOARD_SUPPORT)" とか "#if PLATFORM(MAC)" とかはあちこちにある.)

WebKit は特に modularity が高くはないので, 特に新しい GUI ツールキットや OS への移植は 本体のコードを改変しないと難しい. 一方で trunk の壁は高い. もともと相対的なコードの小ささとライブラリ指向な構造のおかげで WebKit は多くの環境に移植されたけれど, 設計上また運営上の制限で多くの移植が trunk の進化から取り残され死んでいる. 実行時多態を使った ifdef フリーで pluggable な移植レイヤと DSCM によるホスティングがあれば, もっと素敵なかんじなのにとは思う. 逆に Mozilla は多態な移植層も DSCM もあるのにフレームワーク指向で大きすぎるのが残念. 現実は厳しい.

Missing Design docs

Google からの大きな提案は, どれもすべからく "Design Doc" ありきなのが特徴的. 彼らはよく宣伝で "Design Doc を書いてます" と言っているけれど, その実例というかんじ. たまたま見かけた chromium-dev のメールからも, Google 文化としての Design Doc を伺うことができる. (そういえば Chromium もけっこうドキュメントが揃ってるよね.) 以前は Apple の Safari チームで働いており, 今は Chrome を開発している Eric Seidel"MYTH: WebKit uses design docs" という投稿の中で次のように書いている:

WebKit に参加する Google エンジニアはみな, WebKit の専門家が Google みたいに design doc を書いていると誤解しているようだ. Google では沢山の design doc を書いている. Apple に三年いたけれど, WebKit でそういうのを書いている のは 2,3 回しか見たことがない. 先週, Google のエンジニアは 3 本の design doc を webkit-dev に投稿したけれど, どれも大した反応はなかったと思う. 間違いかもしれないけれど.

思わず笑ってしまう. たしかに上に書いた HTML5 の design doc に対する反応は薄い. (web socket なんて返信ゼロ.) bugzilla の patch へはそれなりに返事がついているので, 案外 Apple は現物主義なのかもしれない.

chromium-dev に見られる Google エンジニアの反応も可笑しい. "design doc は理解が深まっていいのになあ." というぼやきもあれば, "過去の様子を見ると僕らのやりかたを押しつけると嫌われがちだよね" という意見, "design doc は嫌われてるってほどじゃないから, とりあえず出しとけばいいんじゃない?" とか "改宗や返信を迫らなければ大丈夫だよ" という建設的(?)な声も. たしかにドキュメントだけがあってもコミュニティに議論をするスタイルが伴わないと難しそうな気はするけれど, みんなぶっちゃけすぎです.

一端フォークしかかった WebKit を trunk に戻すなど, 冷たくあしらわれているにも関わらず, Chrome チームは涙ぐましい(?)努力をしている. ("Chromium Unforking: Please hold off on big changes for a day or so") ...というか自分で涙ぐましい (bring tears of joy to my eyes) と言っている. がんばってね, という気分になった.

レビューまつり

上では patch への返信はあると書いたけれど, 実際のところ外様 patch のレビューは遅れがちのようだ. 5 月, 件の Eric Seidel は "レビューが 100 件以上たまってるんですけど." と 苦情を申し立てている. このスレッドは面白かった. 痺れを切らした Eric Seidel が放置されているレビューを軒並みクローズしはじめ, それを見て慌てた他のメンバーが代案を出し, 別のメンバーはレビューを消化して, 結果としてキューがだいぶ縮んだらしい. やるな Seidel...

その後も断続的にレビューの話題は続く. ある日は Chrome チームの Ojan Vafai が "うちで使ってるレビューツール使おうぜ" と言いだして ("to reitveld or not to reitveld") 良いねえとか移行が面倒じゃね?などとそれなりに盛り上がる. (が, Apple 社員はスルー.) あくる日は Eric Seidel が ChangeLog からレビュアーのレビュー数を数えるスクリプトを書き, "Darin Adler は神!" というスレを立てる. ("Darin Adler is a machine".) ちょっと楽しそう.

WebKit のお仕事

webkit-dev にはたまに "Webkit 技術者募集" の案内がリストに流れる. (Apple, Google, Nokia 以外でそんな仕事があるのはちょっと羨しい.) 最近だとセットトップボックスの会社が JavaScript JIT の専門家を探していたり, ("Looking for WebKit-JIT consultants"), ケータイハードウェアの Qualcomm がコミッタを探していたり ("WebKit Development Engineer - Needed ASAP at Qualcomm") する. そういうのはやめてくれという案内 があった. かわりに webkit-jobs リストを作るから, という話も. 野次馬としてそのリストは見てみたい... (※今のところできてません.)

といったところでオチもなくおわります.

WebKit の動向を追うにはこのほかに ChangeLog, webkit-reviews, あとは Chrome 側で chromium-dev などを見ると良いのかもしれない. 私は webkit-dev でおなかいっぱい.