Mozilla Flux

Mozilla関係の情報に特化したブログです。

型推論の実装は高速リリースサイクルの試金石だった

Firefox 9の目玉機能であるJavaScriptの型推論(Type Inference:TI)。この機能をリリース版に投入できたことによって、ようやく本当に高速リリースサイクルを維持するめどが立ったといっても過言ではない。それくらい、TIの実装は開発プロセスにおいて重要なチャレンジだった。

話は2011年8月上旬に遡る。同年6月にJavaScriptエンジンのモジュールオーナーを継いだMozillaのDavid Mandelin氏が、mozilla.dev.planningニュースグループに1本のスレッドを立てた。『Shipping Type Inference and Other "Irreversible" Changes』と題されたそのスレッドにおいて、Mandelin氏は、TIの導入に当たって開発プロセス上の課題があると指摘した。

TIはJavaScriptエンジン全体を通じて多数の個所を変更するため、問題が生じても単純に設定をオフにするだけでは回避できない。かといって、変更点を逐一撤回する(バックアウト)となると、それ自体のコストが大きいだけでなく、TIを前提とした別の修正が加えられていた場合にその個所にも手を入れねばならず、あまり現実的ではないというのだ。

Mandelin氏は言及していないが、ここで想定されているのは、Nightly・Aurora・Betaというチャンネルを経ても問題を修正しきれないケースだ。開発用のリポジトリ(コードの集合体)でテストを行うのは当然として、Nightlyチャンネルまで目一杯使えば最長18週間の余裕があるものの、その期間内にTIがリリース水準の品質にまで到達できる保証はない。

設定をオフにすることや、バックアウトといった一般的な対処法では扱いが困難なほどの大きな機能の追加。Mandelin氏が「不可逆的変更」と呼ぶこうした事態は、今後も起きることが確実だ。TIの実装は高速リリースサイクルの今後を占う試金石といえた。

Mandelin氏は、この課題に対し、予備のリポジトリを用意してそこにTIを投入するという解決策を提案した。Nightlyチャンネルのメインリポジトリ(mozilla-central)に加えられた修正を毎日自動的に予備のリポジトリにコピーし、Aurora・Betaチャンネルでもやはり予備のリポジトリを設けて同様の措置を続ける。そして、TI版の動作が安定したと判断できた時点で予備とメインを切り替えるが、問題が見つかれば切り替えを元に戻す。これをユーザー視点から見ると、たとえばFirefox Auroraを使っているとあるときTI版が提供されるが、クラッシュが多発するなど問題が生じたときは再び非TI版が提供されるようになるわけだ。もちろん、この案でも「動作が安定している」ことを18週間のうちに確認しきれるかどうか疑問は残るが、リリース時期への影響は最小限に抑えられる。

上記の提案を巡って熱心な議論が交わされ、最終的に次の3つの案がテーブルの上に載った。(1)TIをmozilla-centralに投入し、必要なら正式版のリリースを6週間延期する。(2)TIをmozilla-centralに投入し、ダメだと判断したらJavaScript関係の変更を撤回して、付随するGecko(レンダリングエンジン)の変更も元に戻し、JavaScript関係で必須の修正のみ再投入する。(3)TIをmozilla-centralに投入し、非TI版のリポジトリを予備として維持する。ご覧のとおり(3)案が当初の提案を反映したもので、Mandelin氏は同案を推した。意見を若干変えたのは、最初からTI版をメインにしたほうがユーザーからのフィードバックを多く得られるからだろう。

「さて、メールスレッドでどうやって決めたらいい?」Mandelin氏は結論を出す方法を尋ねた。するとMozillaの重鎮Mike Shaver氏(当時)は、自身(2)案を推しながらも、以下のとおり答えた

You're the module owner, and you're on the hook for the results, so you make the call. Just let people know what it is; you've certainly gone out of your way to get feedback and advice.

君がモジュールオーナーで、君が結果に責任を負う立場だ。だから決断するのも君だ。結論だけはみんなに教えてくれ。わざわざ意見やアドバイスを求めたのは確かなんだからね。

Mozillaの製品開発が開発者主導であることをよく表している。そして、モジュールオーナーの権限がいかに大きいかも。議論にはリリースマネージャのChristian Legnitto氏やDirector of Firefox EngineeringのJohnathan Nightingale氏も参加していた。彼らでさえもモジュールオーナーの決定はひっくり返せないのだ。

Mandelin氏は、自ら最良と信じる(3)案を実行することに決めた。結果はみなさんご承知のとおり。TIは無事ユーザーの手に届き、高速リリースサイクルの中でもFirefoxは大きな機能を追加できることが証明された。Mandelin氏の手腕に拍手を送りたい。

最後に、JavaScriptエンジンの前モジュールオーナー、「JavaScriptの父」ことBrendan Eich氏が、Mandelin氏をどう評しているのか紹介しておこう。Mandelin氏が重い地位を譲るにふさわしい人物であることを示す一言だ。

Dave is even-tempered, super-smart, and a true empirical/skeptical scientist in the spirit of my hero, Richard Feynman.

Daveは、落ち着いていて、とびきり聡明で、私が憧れるリチャード・ファインマンのような経験主義的・批判的精神を持ち合わせた真の科学者だ。