» ドキュメント翻訳

ユーザ中心のオンラインプライバシーを加速させる Polaris イニシアチブを設立しました

Mozilla は、インターネット上の個人のプライバシーを「オプション」として扱うべきではない と信じています。私たちのプライバシー原則は、各製品やサービスを設計する際の指針となっています。LightBeam、Ghostery、Privacy Badger といった Firefox 向けアドオンの作成を可能にしているアドオンプラットフォーム、Do Not Track 設定、プライベートブラウジング、ゲストブラウジング、Firefox Sync の高度な暗号化、アプリ許可設定の個別手法、さらには新しい「忘れる」ボタンに至るまで、Mozilla はプライバシーに焦点を当てた機能をデスクトップとモバイルの双方で導入してきました。それでもまだ、さらに良いこと、より多くのことをする必要があると考えています。透明性とコントロールをもたらす機能を通じてユーザが望む Web 体験を提供したい、また、ユーザに Mozilla と Web を信頼して欲しいと願っています。

2014 年 10 月、18 歳から 64 歳まで 7,000 人以上の成人を対象に、米国の調査会社 Harris Poll が Mozilla に代わって世界的なオンライン調査*を実施しました。およそ 4 分の 3 (74%) の回答者が、現在 Web 上にある自分たちの個人情報が 1 年前よりもプライベートではなくなっていると感じています。また、ほぼ同数の成人が、インターネット企業は自分たちについて知りすぎていると答えました。私たちはこうした懸念の解消に役立てるのではないかと考えました。

Mozilla は今日、Polaris という新たな戦略的イニシアチブを発表します。Polaris は、私たち独自のプライバシーに関する取り組みと、業界内の他のプライバシー先駆者をまとめる目的で設立されたプライバシーイニシアチブです。Polaris は、さらに多くのプライバシー機能を私たちの製品へ組み込むため、より効果的に、明確に、直接的に共同研究できるよう設計されています。私たちは、Web のためのプライバシー技術について、ユーザに焦点を合わせた実践的な革新を加速させ、ユーザの Web 体験においてより幅広いコントロール、知識、保護を提供したいと考えています。また、より一般のユーザに向けて提供することに特に焦点を当てたプライバシー機能の技術革新を進めたいと思います。

立ち上げには、Center for Democracy & Technology (CDT) と Tor プロジェクト が参加します。いずれも非営利法人で、Polaris プロジェクトに協力と助言と提供し、政策目標と一致させるために協力してくれます。これらのプロジェクトによる協力と援助は必要不可欠です。「CDT は、Polaris プログラムに関して Mozilla と協力し、ネット上の表現の自由を推進するために欠かせない、ネット検閲との戦いやオンライン匿名性の保護といった問題について助言できることを楽しみにしています」と、CDT の Justin Brookman 氏は述べています。これらの共同研究は、新しい革新的なプライバシー機能を一般向け製品に組み込むという、私たちが自ら課した目標に忠実であり続けるための責任を負わせるだけでなく、知識、焦点、意見に多様性が生まれ、一般の人たちにもたらす機能の改善につながるでしょう。

今日私たちは、Polaris の旗印の下、反検閲技術、匿名性、クロスサイト追跡防止に焦点を当てた 2 つの実験を発表します。まず、Tor プロジェクトが行っている Firefox への変更を Mozilla のエンジニアが評価し、Firefox 自体のプラットフォームコードベースに変更を加えることで Tor の動作がより高速で容易になるかどうかを判断します。Mozilla では、Tor ネットワークの応答性を高め、より多くのユーザが Tor へ参加できるよう、近日中に独自の大容量 中間リレー のホストも開始する予定です。「Tor プロジェクトは、Polaris プログラムの立ち上げパートナーとして Mozilla へ参加できることを嬉しく思います。プライバシー技術、オープンスタンダード、今後の製品に関する共同研究などで互いに協力できることを楽しみにしています」と、Tor プロジェクトの Andrew Lewman 氏は述べています。

2 つ目の実験 (Polaris 初となる製品内実験) は、ユーザの選択を尊重している広告主やコンテンツサイトに不利益をもたらすことなく、侵略的な追跡から逃れたいというユーザを保護する機能をどのようにしたら提供できるかを理解することを目指すものです。このプライバシーツールは今のところ Firefox の Nightly チャンネルでテスト中です。実験そのものは有望ですが、まだ本格的な機能とはなっていません。今後数か月にわたってユーザ体験とプラットフォーム動作のテストと改良を続け、一般向けリリース版へ追加する前にあらゆる関係者からフィードバックを集めるつもりです。

私たちは、プライバシーが単なるコンピュータ上の機能や、有効と無効を切り替えられるだけの設定にとどまらないと考えており、オンラインプライバシー発展のため Polaris で何ができるかを楽しみにしています。プロジェクトの詳細と参加方法は Wiki をご覧ください。

* 調査方法

本調査は、イギリス、フランス、スペイン、ドイツ、ブラジル、インド国内の成人 7,077 人 (18 歳から 64 歳まで) を対象に、2014 年 10 月 22 日から 29 日までの間、Mozilla の依頼を受けた Harris Poll 社によって、Global Omnibus 製品を通じオンラインで実施されました。年齢、性別、人種、教育、地域、収入別の回答者数は、実際の人口比率に合わせるため必要に応じて重み付けされています。また必要に応じ、このデータもオンライン成人人口の構成を反映させるために重み付けされています。重み付けの変数など詳しい調査方法については press@mozilla.com までお問い合わせください。

[これは Mozilla Privacy Blog の記事 Introducing Polaris Privacy Initiative to Accelerate User-focused Privacy Online の翻訳です]

Content Security Policy 1.0 を Firefox に導入

原文: Content Security Policy 1.0 Lands In Firefox on June 11, 2013 by imelven

Content Security Policy (よく CSP と略されます) は、ページ内にコンテンツを含めることが可能なサイトを制限する、Web ページ向けの手段です。また、インラインスクリプトの実行を許可するかや、インラインのスタイル/CSS をページに適用することを許可するかの制限もできます。一般的に、CSP は Web 開発者に対してコンテンツの強力な制御を可能にして、さまざまなセキュリティ問題の軽減を助けます。CSP の主な利点の一つは、デフォルトでインラインスクリプトを実行させないことです。これは、XSS (クロスサイトスクリプティング) や他のスクリプトインジェクションの脅威を大幅に軽減する助けになります。CSP のすばらしい紹介として、Mike West の投稿 “An Introduction to Content Security Policy” をご覧ください。

ドキュメントでコンテンツ制限を指定できるというアイデアは、少なくとも 2007 年にさかのぼります。当時このアイデアは Mozilla Project の Gervase Markham とセキュリティ研究者の Robert ‘rsnake’ Hansen によって議論されました。Brandon Sterne と Sid Stamm は公式な仕様が存在するよりはるか前に、Firefox 向けに CSP の初期プロトタイプの実装作業を行いました。CSP の ‘前仕様 (pre-spec)’ 実装は 2011 年 3 月に Firefox 4.0 へ投入して、X-Content-Security-Policy ヘッダを使用しました。 CSP のコンセプトはかなり急速に牽引力を得て、Chrome は 2011 年 8 月に X-Webkit-CSP ヘッダを使用して最初の実装を公開しました。セキュリティや Web の専門家による多くの議論を経て、2011 年 11 月に Content Security Policy 1.0 の W3C 仕様のワーキングドラフトが公開されました。時間をかけてコンセプトが発展や改良したことにより、ワーキングドラフトで示された構文は、初期の Firefox 実装で使用されるものとはかなり異なっていました。1 年後に CSP 1.0 仕様が勧告候補に達して、実装する準備が整いました。Chrome は 2 月公開の Chrome 25 で、接頭辞なしのヘッダを使用した CSP 1.0 仕様をサポートしました。Internet Explorer 10 は CSP の ‘sandbox’ ディレクティブをサポートしましたが、現時点で他の CSP ディレクティブは未サポートです。

当初の Firefox CSP 実装と CSP 1.0 仕様とで何が変わりましたか?

  1. ヘッダの接頭辞を削除
    仕様では、X-Content-Security-Policy ではなく Content-Security-Policy ヘッダを定義しています。CSP をサポートするブラウザに適用するポリシーを持つために、サイトが複数の CSP ヘッダを (異なる構文で!) 送信しなければならない状況がなくなるので、よいことです。同一の Content-Security-Policy ヘッダが Firefox、Chrome、IE 10 (sandbox のみ) および仕様を実装する他のブラウザで動作するでしょう。何らかの理由でサイトが X-Content-Security-Policy ヘッダと Content-Security-Policy ヘッダの両方を送信する場合は接頭辞付きのヘッダが無視されて、接頭辞なしのヘッダから得たポリシーだけが適用されます。
  2. 使用できるディレクティブの変更
    ポリシーで使用できるディレクティブが若干変わりました。当初の Firefox CSP 実装では、未指定のディレクティブ向けに使用されるデフォルトポリシーを指定するために ‘allow’ ディレクティブを使用しました。これは CSP 1.0 で ‘default-src’ ディレクティブに置き換えられました。加えて、当初の Firefox の実装では XMLHttpRequest オブジェクトが接続できる生成元を制限するために、‘xhr-src’ ディレクティブを使用しました。1.0 仕様では、‘xhr-src’ が ‘connect-src’ に置き換えられました。また、XHR に加えて EventSource や WebSocket オブジェクトが接続できる場所も制限します。
  3. デフォルトの動作の変更
    当初の Firefox の Content Security Policy 実装は Fail-Close であり、将来の構文に対して下位互換性がありませんでした。CSP 1.0 では、default-src ディレクティブがないときにすべてのソースを許可するようにフォールバックします。
  4. インラインスクリプトと eval() の使用許可に関する変更
    インラインスクリプトや eval() の使用を許可するようオプトインする方法が変わりました。当初の Firefox の CSP 実装では、これを行うために ‘options’ ディレクティブで値 inline-script および eval-script を使用しました。例えば、当初の CSP ポリシーで “allow ‘self’ ; options inline-script eval-script” は、CSP で保護されたドキュメントと同じ生成元からのコンテンツ読み込みと、インラインスクリプト実行および eval() の使用を許可します。
    CSP 1.0 では、この状況を制御するために ‘script-src’ ディレクティブにキーワードが追加されました。‘script-src: unsafe-inline’ がインラインスクリプト許可のオプトイン、‘unsafe-eval’ が eval() の使用許可のオプトインです。CSP を使用する価値を少し落としますが、両方にオプトインするために、両方のキーワードを指定することができます! 例えば CSP 1.0 ポリシーで ‘default-src ‘self’ ; script-src ‘unsafe-inline’ ‘unsafe-eval’ は、CSP で保護されたドキュメントと同じ生成元からのコンテンツ読み込みと、インラインスクリプト実行および eval() の使用を許可します。
  5. インラインスタイルのブロック
    当初の Firefox の CSP 実装では、インラインスタイルをまったくブロックしませんでした。これは CSP 仕様に後で追加されたもので、<style> 要素や他の style 属性を持つ要素を注入することによる攻撃を防ごうとするものです。それらの攻撃は、スクリプトの実行を許可していない場合でも実施できます。ページからデータを取り出すために CSS セレクタを使用して、要素を別の要素の前面に重ねるために属性を使用するといった一部の潜在的な攻撃が、フィッシング攻撃を可能にします。

Firefox の CSP 1.0 実装と仕様との間にまだ相違点はありますか?

はい、小さな違いがいくらかあります。

  • frame-ancestors ディレクティブをまだサポートしています。このディレクティブは X-Frame-Options ヘッダに似ており、どのサイトが Web ページをフレーム化できるかを制限します。X-Frame-Options は非推奨になり、また当初明示された問題点をいくつか抱えています。frame-options ディレクティブによって、この機能を CSP に移すことが提案されました。frame-options は策定中の “User Interface Security Directives for Content Security Policy” 仕様の一部として提案された、新しい CSP ディレクティブです。将来、Firefox の frame-ancestors ディレクティブは、frame-options が選ばれることにより非推奨になるでしょう。
  • report-uri ディレクティブは、CSP 違反のレポートをどこへ送信するかを指定するポリシーを可能にするものです。Firefox ではこれが、CSP が指定されたドキュメントの生成元へのレポート送信に制限されています。レポートを取り巻く適切な制限や懸念に関する議論が、W3C の WebAppSec ワーキンググループや Mozilla で行われています。Bug 843311 をご覧ください。
  • インラインスタイルがブロックされるとき、SMIL アニメーション要素もブロックされます。これの最大の原動力は Bug 704482 です。Mario Heiderich が報告した、スクリプトの実行を許可しない場合でもキーストロークを読み取れる高度な攻撃です。ここで私たちは慎重に取り組み、またこれを W3C の WebAppSec ワーキンググループに持ち込む予定です。
  • Firefox は ‘sandbox’ ディレクティブをサポートしていません。このディレクティブは CSP 1.0 のオプションですが、CSP 1.1 の一部には含められる予定です。

Firefox の CSP は将来どうなりますか?

ある時点で、X-Content-Security-Policy ヘッダを非推奨にする予定です。本投稿の動機のひとつが、接頭辞のない Content-Security-Policy ヘッダを使うようにサイトを移行するときであることを、人々にわかってもらうことです。Firefox は Web コンソールに、接頭辞付きのヘッダは将来非推奨になることを知らせるメッセージを表示します。

加えて、私たちは W3C の WebAppSec で CSP 1.1 仕様の策定に関わっており、Mozilla の Dan Veditz が本仕様のエディターの一人になっています。私たちは特に、script-src および style-src ディレクティブ向けの新たな nonce-source ソースに興奮しています。このソースはポリシーで指定されたものと同じ正当な nonce を提示する場合に、特定のインラインスクリプトやスタイルのホワイトリスト化を可能にします。nonce-source は最近 Blink に実装され、また Firefox では開発中です。詳しくは CSP 1.1 仕様のセクション 4.10.1 “Usage” をご覧ください。なお、この仕様は現在急速に発展中であることにご注意ください!

Mozilla にて私たちは、CSP のインラインスタイルのブロックについてさらに議論しました。特に、eval() のブロックと似た機能を追加したいという希望があります。その根拠は、文字列からスタイルを構築することも本質的に危険であるためです。これは Bug 873302 で扱っており、また一部の議論は、元の ‘インラインスタイルのブロック’ バグ側にあります。私たちはごく近い将来にこのアイデアを、より多くのフィードバックを得るために W3C の WebAppSec ワーキンググループに持ち込む予定です。Mozilla 内では、.innerHTML の使用をブロックする CSP ディレクティブの作成も提案されました (また、ワーキンググループ内でも多少議論しました)。.innerHTML による script 要素の挿入がインラインスクリプトをブロックする CSP でブロックされるとしても、.innerHTML 内の信頼されない入力を使用することで他にもさまざまな問題が生じる可能性があります。

ここまでは長すぎました。現在 Content-Security-Policy ヘッダをどれで使用できるかだけを教えてもらえますか?

  • Firefox : 現在はデスクトップ版の Firefox 23 (Aurora) およびそれ以降です。Android 版 Firefox と Firefox OS がすぐ後に続きます。
  • Chrome : 25 およびそれ以降
  • Internet Explorer : 10 およびそれ以降 (sandbox ディレクティブのみ)

謝辞

  • Mozilla で始めに CSP の開発を先導しました: Brandon Sterne
  • Mozilla の Security Engineering & Security Assurance、特に Sid Stamm、Brian Smith、Daniel Veditz、Garrett Robinson、Mark Goodwin、Frederick Braun、Tanvi Vyas
  • CSP に熱中した仲間たち: Mike West、Adam Barth、Brad Hill、Devdatta Akhawe、Neil Matatall、Joel Weinberger、Kailas Patel

Mozilla Hackathon 2013春 終了!!

4 月 27 日、28 日の 2 日間にわたって行った Mozilla Hackathon 2013 が無事終了しました。
今回は、乃木坂の Mozilla Japan 新オフィスに合計 28 名の参加者が集まり、
それぞれに持ち寄った作業を行いました。

今回も 10 年以上 Mozilla で活躍されているベテランコントリビューターや有名なアドオンの開発者から
Mozilla のイベントに初めて参加される方まで、様々な方が参加されました。

初日は 13 時からスタート。
参加者は、翻訳や製品ローカライズを行うチーム、アドオンや Firefox OS 用アプリの開発を行うチーム、
そして Firefox それ自身の実装や改良を含むプラットフォーム開発を行うチーム、の3グループに分かれ、
自己紹介タイムをはさみつつ、18時過ぎまで作業を行いました。
その後、参加者のほぼ全員による懇親会が行われました。

2日目の作業開始時刻は午前 9 時。
精力的に作業を行い、15 時からの成果発表を迎えました。
各人・各チームがそれぞれの作業内容とその成果を発表し、2日間にわたるイベントを締めくくりました。

参加された方々は、真剣に作業される一方、他の方々との交流も大切にされていました。
今後もこのようなオフラインでの交流の機会となるようなイベントを開催できればと思います。
今回参加されなかった方も、機会がありましたらぜひご参加ください!

PCに向かって作業しています。

集中!

アプリケーション画面の設計書が移っています。

Run! Firefox!

議論をしている4人組。

議論をする人々

作業している様子が映っています。

チームごとに集まって作業。

大量のサンドウィッチ

2日目の昼食。大量のサンドウィッチ!

サンドウィッチを撮影している人

と、それを撮影する人々。

Firefox が起動する編ぐるみ

NFC が利用できる端末の上におくと… Firefox が起動します!

追い込み中。

追い込み中。

発表会の様子。1 人 1 人スクリーンをつかって、作業内容と進捗、成果物の報告を行いました。

発表会の様子。
作業内容と成果物の報告を行いました。

誕生日の方がお二人もいらっしゃったので、みんなでケーキを食べ、お祝いしました。

誕生日の方を、みんなでお祝いしました。

 

なぜMozillaの存在が重要なのか

[これは、2013年2月14日に投稿された記事https://brendaneich.com/2013/02/why-mozilla-matters/の翻訳です。]
[これは、昨日ノルウェーから届いたニュースをもとに話題を広げて書いたエッセーだ。文章の最後に、全てのオープンソースプロジェクトの参加者に向けた、Mozillaを代表してOperaとそのファンに送る激励がある。 /Brendan Eich]

創始者の回想

2004年の7月にHTML5の始まりに関する記事を、HTML5という言葉は出さず書いたが、Appleが恥ずかしがりだったので、そこでは「Operaなどの」という形でだけパートナーについて触れている。

記憶しているところでは:

  • @tは当時Microsoftで働いて (彼は現在Mozillaにいる、それは彼にとって非常に良いことだ)、 ワークショップの2日目では、私の前の席に座っていた。
  •  既得権益が、XFormsは必要不可欠なものとして、しつこく売り込んでいた(イギリス保険協会がその標準化を行っていた!)。
  • ブラウザベンダーは、互いに非協力的なことからXMLのユートピアに積極的に対抗しないことまで、ありとあらゆることを批判されていた。
  • JavaScriptは、Bert(その何年後からに私はSXSWで彼に会い、とても仲良くなった)からも含め、こっぴどくやられていた。

Hixie (まだGoogleに入る前だったが、既にWeb Forms 2に携わっていた)とOperaのHåkonがAppleのDavid Hyattに加わり、Mozillaの@davidbaronと私がその後サンノゼのパブで加わった。そこで私がコルクの栓を抜いて「もうなんでもいい、HTML5をやろう!」みたいなことを言ったのだ。

私たちは、WHAT-WGで作業を行うつもりだった。Håkonが、ロイヤルティーフリーの特許契約が実現できそうな方法が1つだけW3Cに残っていることを気付かせてくれたので、私たちは仕様書の策定を目指すことになった。彼はまた、Microsoftは私たちの取るに足らない法的存在には加わらず、むしろW3Cの方を好むだろうことも、正確に予見した。

そうして私たちはHTML5に祝杯を挙げた。

2013年に時代を早送りする

1月のはじめ、 「大規模な転換がOperaで起きており、シニアディベロッパーが解雇され、会社に構造的な変化が起きている…。」と書いていた古い友人から連絡をもらった。昨日ニュースになったような内容は、他の情報源からすぐに確信できた:OperaはPresto捨てて、WebKit に移ろうとしている(chromiumと同じ香りがする)。

私の情報源の1人は、Mozillaについて、そしてなぜMozillaが彼にとって重要かについて、こう書いている:

そこには、賢い人、私も知っている大好きな人たちがいる。面白いことをやっている[プログラミング言語とオペレーティングシステム]。おそらく、比較的独立した最後のウェブ技術のプレイヤーだ。(歴史的にはこれまで気にかけてこなかったことだが、しかしApple iOSの領土を離れてGoogle Androidの領土に移ってから、私はロックインされていると気付き、まさに監視されていると感じている)

最近こんなコメントを以前より聞くようになった.これは雑音ではなく何かのシグナルなのだと思う。

なぜMozillaの存在が重要なのか

1月のシグナルは、私が同僚に向けて書いた、「Mozillaはいかにして違いを打ち出すか」というメールを思い出させた:

  1. 私たちは早く、頻繁に、そしてオープンなやり方で技術革新を起こす:標準化でもソースコードでも、ドラフト仕様でもプロトタイプ実装でも、フェアプレーをし、合意を得るために互いに訂正し合う。
  2. 私たちのグローバルコミュニティーは、検索、デバイス、ソーシャルネットワークに関するビジネスや議題、にわたり、エンドツーエンド情報がより合わさった、様々なものの組み合わせで成り立っているウェブの特性を追求する。たとえ人々が、これらの技術的な特長を正確に述べられなかったり、あるいは全くできないとしても。彼らが一番求めているのは、「所有されないこと」だ。彼らは、ユーザーの主導権を求めているのだ。
  3. 私たちは、ユーザーが得をするようなやり方で、標準化を推し進め、ブラウザ間の競争を取り戻す。 私たちは再びそれに取り組んでおり、私たちの支持者も他のプラットフォームを標準に近付けている:SamsungはB2G発のデバイスAPIを使えるようにするためにWebKitのパッチを書いている
  4. 私たちは政治的な駆け引きをあまりしなくてよいので、 パートナーを組んだり、連合したり、多目的な垂直のサイロの中にユーザーを捕まえておこうと躍起になる代わりに、水平統合をすることができる。
  5. 私たちは、あなたが選んだどんなサービスにおいてもあなたがあなた自身の体験やデータを ID付きで保持できる、というビジョンを推し進める。その例が、ソーシャルAPI や、DropBoxやBoxなどにストレージサービスをアウトソースする、新しいFirefox-syncプロジェクトだ。

最後の点は、非常に重要だ。 これこそ私たちが、Firefox OSに関する、こんなに優れたBizDevやパートナー関係を保持してきた理由なのだ。しかしこれはまた、私たちが強く信頼されるブランドを持ちコミュニティーへの従事を続ける理由でもある:人々は私たちに、中立の意見を言うことを、困難だが必要な戦いをすることを、時には孤高を守ることを期待しているのだ。

これらが重要な差別化要因であると私には分かる。これら全てを備えている競合は他にいない。

WebKitに思うこと

webkit-devを読んだ; とても聡明な人たちが投稿をしている。しかし、WebKitの全貌は、勝者の側の解釈である単純な「1つのWebKit」よりも、ずっと複雑で興味深いものだ。

そもそも、WebKitはただ1つではない。Android2.3を扱うウェブ開発者は痛い思いをしてそのことを学んだ。しかしそこは大目に見て、(何年もの)時がそれらの傷を全て癒したか、それに類する状況になったとしよう。

WebKitは8つのビルドシステムを持っており、それが困った挙動を引き起こす。ベールをはぎ取れば、過去何度か、コードがフォークしてしまうような緊張があったことが分かるだろう:V8対AppleのJavaScriptCore(「Nitro」)、iOS(最終的には解決されたものの、何年もの間apple.comの秘密のレポジトリにあった)、様々なグラフィックバックエンド、いくつかのネットワークスタック、2つのマルチプロセスモデル(何年もの間こっそり開発されてきたChromeのそれと、Appleの「WebKit2」のフレームワーク)。技術的な衝突の背後には、深いビジネス上の対立がある。

緊張が高まっている時には、コード共有はよい方法ではない。競合企業から参加している主要リーダー達の、人扱いの巧みさともっとうまく共同作業をしようとする努力に賛辞を贈りたい。

誤解しないでほしい。ここでWebKitを批判したいわけではない。 WebKitは私の属するコミュニティーではないし、いくつかの大企業が世界中から利益を得るのに大いに役立っている — まず、Mozillaと並んで、質の高いウェブ標準のオープン実装を提供している。しかし、それは理想の楽園ではない(その点はMozillaも同様である)。

もっと興味があれば、かつてAppleで働き今はGoogleで(長期にわたってChromeプロジェクトで)働く人間の想いを綴ったエッセーとして投稿された、Eric SeidelのWebKitへの願いを見てみるといい。

私が言いたいのは、「1つのWebKit」など存在しないということだ。流通力は重要な要因である(詳しくはこのエッセーのもっと後ろの、終わりの方で述べている)。対立し合うビジネス上の狙いがWebKitを苦しめる。そしてコード共有はいつも困難をきわめる。すでにたくさんの料理人がいるからだ。

ソフトウェアの世界では、短期的に見れば、コーディングするよりも設計をコピーする方が簡単であり、コードを共有するよりもコピーした方が簡単だ。この精神により、オープンソースの各JSエンジン(そのうち2つはWebKitのためのもの)はお互いを参考にしている。MozillaもJSCのYARR正規表現JITを使っており、こういうコピーやコード共有は今後も増やしていくつもりだ。

ウェブエンジンのトレードオフ

みなさんの中には、まだこんな疑問を持っている人がいるかもしれない: Mozillaは、設計をコピーしたりコードの一部を共有するだけでなく、もうWebKitに切り替えてしまったらいいのではないか?

経済活動の遂行というレベルでこれに答えてしまうと、「正解の方法」をとらないことに対する弁解をリストアップすることになってしまうだろう。経済活動というこの暗黙の前提を私は拒否する。 詳しくは後述するが、ビジョン、戦略、そして着実なビジネス遂行という3つ全てのレベルにおいて、MozillaにはGeckoを進化させ続け、ほぼ新しいエンジンすら研究するだけの、十分な理由がある。

しかし、「なぜ切り替えないのか」という質問に直接答えるなら次のようになる: 純粋なコーディング作業だけで考えても (標準化団体やコミュニティーによる影響力を失うことは考慮せず)、「WebKitに切り替える」のに要する切り替えコストは、現実的でユーザーをつなぎとめておくことが出来る現在の製品タイムラインでは、あまりにも高すぎる。

XULはそのコストの一部であり、かなり部分を占めるが、単に技術的コストが大きいばかりではない。XULを失うことは、ユーザーがリッチで広く深い、Firefox アドオンのエコシステムの恩恵を失うことを意味するのだ。

別の言葉で言えば、デスクトップ版のFirefoxをすぐにchromiumと改名することはできず、まだFirefoxのままだということだ。Firefoxは、XULアドオンやオーサムバー、プライバシーとセキュリティのUIと基盤、そしてchromiumのソースコードには含まれない多くのプラットフォームの深い部分のロジックを必要としている。

Operaは、XULもMozillaの使命も私たちのようなコミュニティーも持たない純粋な商用製品なので、技術的な切り替えコストはずっと低い。特にOperaのデスクトップにおけるシェアは非常に低いし、ウェブコンテンツ全体を「小さく」し、OperaのデスクトップPrestoエンジンとブラウザを悩ませる、 「サイトが壊れています。ブラウザに問題があります」というメッセージが出たときにどうユーザーをつなぎ止めるかという問題からコンテンツ製作者を解放する、トランスコーディングプロキシとしてのOpera Miniだって同様だ。

にも関わらず、私の得た情報により、Operaが要した技術的切り替えコストはわずかではないことが分かった。Mozillaの場合にかかるであろう莫大なコスト(数年にもわたり、製品を破壊する)と比較すれば低いコストであるにもかかわらずだ。このことから分かるのは、切り替えには純粋に「費用対効果」の観点が重視されたということだ:Operaはエンジニアの人数を節約するだろうし、(少なくとも最初のうちは)標準化団体において追従者にすらなるだろう。

大局図

Mozillaの使命というレベルで見ると、モノカルチャーは依然として私たちが戦わなければならない問題だ。ウェブは、進化する標準に対する、相互運用可能性を保った複数の実装を必要としている。

2008年にHyattと私が、WebKitへの技術的および非技術的な切り替えコストについて話したとき、彼はまさにその言葉(「ウェブは、進化する標準に対する、相互運用可能性を保った複数の実装を必要としている」)を私に言った。その言葉は今でも真実だし、WebKitを共有する2、3の大企業がそれを素早く進化させようと努力してきた結果、WebKitの骨格が成熟した今では特にそうである。

たしかに、 1つの強大な勢力が1つの理想的なWebKitを広め新鮮に保っている状況を想像し、 「モノカルチャーを実現しよう」 という人もまだいるかもしれない。そのような人々だって、かつての独占的ルールのもとでは生きていけなかったかもしれない。もしくは、十分に未来が見えなくなって、 「我が後に大洪水あれ」 や 「長い目で見ると、私たちはみんな死んでいる」 のように思うかもしれない。そういう人たちは、John LillyがTumblrで述べている警告を読むべきだ。

@andreasgal が言うには、W3Cは2つ以上の相互運用された実装プロトタイプが無い標準を作らないよう努めており、WebKitとペアになるようなメジャーなエンジンは他にはMicrosoftのTridentしかないため、互いに独立したGeckoとWebKitが今では好まれているそうだ。確かにそうだが、しかしもちろん時にはみな協力し合うし、政治によって奇妙な仲間関係が生まれたりもする。

ハードウェアのトレンドと電力の壁問題を考えると、次の10年間で少なくとも今以上の数のウェブエンジンが出てこないかと期待している。この観点から、現在MozillaはGeckoだけに投資するのではなく、急速に普及している高度並列化ハードウェアアーキテクチャ(マルチコアCPUと超並列GPUを持つ)にフォーカスしたServoについても研究をしている。

もし、私たちMozillaの使命を支えるために必要な標準化団体での影響力を、これまでに私たちが失っていたとしたら、どれほどの人々が私たちとともに働くことを選んだか疑問だ。Servoだって、もし研究のパートナーもおらず技術トレンドを変える見込みもなかったら、関心を維持し続けるのはずっと大変だったろう。こうした状況だったら、私はなぜMozillaにいるのか、Mozillaには意義があるのか、疑問を持っただろう。
しかし私はそんなことを疑問に持たない。MozillaはOperaではない。 もし私たちがもっと従来型のビジネスをしており、十分なデスクトップブラウザのマーケットシェアも持たなかったら、たぶんOperaがしたのと同じことをしただろう。しかし私たちがしているのは単なるビジネスではないし、私たちのデスクトップにおけるシェアは維持できているしひょっとしたら上昇しているかもしれないのだ — 短期的な勝利のおかげで、私たちはGeckoの開発を続けることができる。

未来のウェブエンジン

非常に現実的な話をすれば、競争から脱落しない数年間の間にWebKitに切り替えるために、私たちはWebKitに移行する取り組みを、平行してこっそりと開始すべきなのかもしれない。しかし私たちは、そのためのハッカーコミュニティー(有償無償問わず)を持ち合わせていない。XULやこれまでに述べた他の依存関係を考えると、FFOSのコミュニティーを含めても、そのようなコミュニティーには程遠い。(それに、私たちは「こっそり」とはやらない。)

私たちが適切に投資をしたので、Geckoは私たちとって良いものになっている、というのが実際のところだ。(継続的に進化するウェブの世界を考えれば、どんなエンジンをもってきたとしてもフリーランチを得ることはできない。)Geckoなくしては、私たちはFirefox OSもAndroid版Firefoxも作ることができなかった。これらのプロジェクトがGeckoを進化させ続ける力になる。

そしてもう一度言うが、Servoを忘れてはならない。 マルチコア/GPUの未来は、WebKit、Chromeのどちらかに特に有利に働くわけではない。これらのエンジンに投資しているさまざまな会社、私たちやもちろんAppleやGoogleやその他の会社、は、「プロセッサーの海」となる未来のハードウェア上でうまくスケールさせるために、エンジンを独立プロセスにするのと同時にマルチスレッド化にも取り組まなければならない。

スレッドだけでは済まない: アムダールの法則を見れば、スレッドも、SIMDの名でも知られるいわゆる「データ並列化」も、画像や音声・動画のデコーディングのみならずエンジンのあらゆるステージにおいて、より細かい粒度で必要とされることが分かる。しかしC++のスレッドを使うことは、他の手法と比べてより困難なバグとセキュリティ脆弱性を作りこむことを意味する。

私は、万一ということもあるかと思って、メモリ安全でないSMPカーネルプールの深みに飛び込んだSGIで、80年代の終わりに学んでいた。AppleとGoogleは、彼らのソースコードの多くをマルチスレッド化、そしてSIMDによる並列化すらできるし、おそらくやるだろうが、それにはしばらく時間がかかるし、生産性を重視し、無難なヒットを打ってくるだろう。Servoは、メインの実装言語、Rust、が並列性と同じくらい安全性を重視していることもあり、より安全な設計がされている。だから、私にはこれは技術的に筋の良い賭けに見える。

超並列ハードウェアに対する他のアプローチも考えられ、未来のハードウェアまだ十分にデザインされていない。だから、私たちはウェブエンジンの研究を進めていかなければならないと思う。

きわめて重要な責務

ここまで考察してきたこと以外に、私たちの立場からも私たちのパートナーの立場からも、新たなきわめて重要な責務があることに、私たちは気付いた:世界は新しくて、きれいで、安全で並列化された、オープンソースのウェブエンジンを必要としているのだ。単にマルチコアデバイス向けのものではなく、— 私たちとパートナーではその動機は異なるが — 途方もない資金力を持ちロックインを好む競合が支配するエンジン、すなわちWebKit、への依存を避けるためのものとして。

このような安全で並列化されたエンジンは、ウェブ標準をより宣言的で 暗黙のうちに並列化が行われるような方向に推し進めるためにも、配布されウェブ標準のフィードバックを受けるべきだ。

単なる切り替えコストや標準化の進展、そして私たちの使命や価値、それ以上のものが私たちにかかっているのである。

上記では触れなかった純粋なビジネス的始点で見て言えるのは、WebKitのようなエンジン(もしくはこの文において似たような位置づけのもの、例えば中国におけるTridentのラッパー)を使うと、流通シェア競争に製品を陥らせるということだ。一般的に言って、フロントエンドの技術革新は難しくない;どのみちコピーは簡単だ。AndroidにおけるDolphinがいい例だ。もしくは、Maxthonが20%以上あった市場シェアを一年で1%以下に落としたこと、中国市場で1%以下のシェアになっていることを考えてみればいい。フロントエンドの技術革新を特にしていないQihoo/360が同じ期間に0%から20%までシェアを拡大していることも考えてみるといい。

プラットフォームの深い部分の技術革新は難しくなることがあり、そして私たちの経験によれば、その革新こそ全ての人に恩恵のあるウェブの前進につながるものである。JSのパフォーマンスが一例である。他の例としては、権限を持ったネイティブアプリケーションスタックにしか使えなかったデバイスAPIを含めるようにウェブを拡張することが挙げられる。複数の相互運用されているオープンソース実装やユーザーが所有するベンダー非依存な資産によって、プラットフォームの技術革新が標準に基づき、そして標準化されている限り、「実装と技術革新の質」を確保する難しさは問題にならない、というのが私の意見である。

Mozillaの話に戻ろう。私たちは競合勢力のようにデスクトップにおける流通力を持たないが、それでもうまくやっており、もっとうまくやる態勢も整っている。これこそ、ユーザーに対する素晴らしい証明であり、私たちの使命と私たちが作っている製品の、ユーザーにとっての価値である。そしてデスクトップ版のFirefoxに加え、(特にウェブアプリケーションの実行ランタイムとしての)Firefox OSとAndroid版Firefoxは、次の数年間でモバイル分野において大きな流通シェアを得ると私は信じている。

さあがんばろう

さあ、がんばってやり抜こう。HTML5と手軽に使える<video>要素の共同創始者によって創られた、残された数少ない独立系ウェブプラットフォーム、Prestoがなくなってしまったそうだ。OperaがWebKitプロジェクトの中でも良き戦いを続けてくれることを私は願っている。Mozilaコミュニティーは、Operaファンのあらゆるレベルの貢献(標準化、ハッキング、雇用)をいつでも歓迎する。

私たちには未来は分からない、しかしSarah Connorが刻んだように、「運命は自ら作るしかない」のだ。どんなことが起こっても、Mozillaは耐え抜く。

/Brendan Eich

その他の意見:

Firefox OS の課金アプリを作るには

原文: Building A Paid App For Firefox OS

Firefox OSFirefox Marketplace をぱっと見たところでは Apple Store や Google Play と大差なく見えるかもしれないが、重要な違いがあります: あなたを Mozilla にロックインしたり、Firefox OS 端末にロックインしたりすることはありません。レシート プロトコルによって、どのオープン Web デバイスでも動作する Web  アプリを販売できるようになります。Mozilla 以外の マーケット もレシートフォーマットを実装することで Firefox OS のアプリ販売に参加でき、ユーザは何処のストアで課金したアプリを使ってもその違いに気づくことはありません。

他のデバイスが レシート プロトコルを実装すれば、理論的には 一度買えば何処でも使える ようになります。もちろんこれは、鶏か卵かの問題であり、Mozilla は卵となって、分散的なレシートコンセプトを実証し、プロトコルの改善を続けます。Mozilla はレシートが正しく機能し、課金アプリができるかぎりポータブルで「Web らしい」ものとなるよう他のベンダーと協力していきます。

開発者のみなさんへ

自分のアプリのレシートを検証 する責任は各アプリにあります。Firefox OS でアプリを販売しようとしている開発者は、この投稿を読めばレシート検証の実装をするにあたって幸先の良いスタートが切れるでしょう。仕様に準拠した Web ランタイムやマーケットプレイスを実装しようと考えている方にも役立つかと思います。

navigator.mozApps JavaScript API でアプリケーションのデバイスレシートにアクセスできます。レシートを検証する最も簡単な方法は、receiptverifier.js などのクライアントサイドライブラリを読み込み、レシートに埋め込まれたホスト型の検証サービス URL を使うことです。receiptverifer のドキュメントに詳細が書かれていますが、アプリの起動時に次の JavaScript を呼び出すだけでとても簡単です:

mozmarket.receipts.Prompter({
  storeURL: "https://marketplace.firefox.com/app/your-app",
  supportHTML: '<a href="mailto:you@yourapp.com">email you@yourapp.com</a>',
  verify: true
});

じゃじゃーん!これは高水準なショートカット検証であり、レシートが確認できないか無効である場合にはアプリ内に問い合わせ画面が表示されます。verifier のドキュメントには低水準の検証方法も書かれています。

より完備な例としては、テストに使用しているアプリ Private Yacht のコードをチェックアウトしてください。このアプリでは receiptverifier.js ライブラリでクライアントサイドの確認をどのように行っているかだけでなく、サーバサイドの確認を Node.js を使ってどのように行っているかご覧頂けます。他にも Python ライブラリ (更に Django 用ライブラリ) を用意しており、サーバ側でのレシート確認にお使いいただけます。仕組みはどうなっているのか?各レシートは JSON Web Tokens のマッシュアップです。プロパティにはレシートの確認に使える検証サービスがホストされているリンクも含まれます。レシートをオフラインで検証することも可能ですが、定期的な鍵の同期が必要になりますし、オフライン検証では今のところ払い戻しや再発行などが上手く扱えません。デフォルトでは、レシートはアプリの manifest に記載の installs_allowed_from パラメータのストア URL のいずれかにのみ許可されています。開発者としてあなたは各マーケットプレイスと明示的に支払いの関係を作り、アプリを売ったと主張できるサイトを制限できます。誰がアプリのレシートを提供できるかというホワイトリストとして機能します。クライアントサイド JavaScript はゆるい性質があるので、サーバサイド (つまり、アプリのサーバで) でレシートを検証することでよりしっかりと制御できるようになります。

Firefox Marketplace の課金アプリはまだ完全に有効になっていませんが、間もなくです。今のうちにレシート確認をアプリに統合していただければ、アプリの登録フローが課金をサポートする時に備えられます。

詐欺防止

だれもが Web でアプリを販売できるようにすることは、Mozilla の Opwn Web アプリのビジョンにおいてきわめて重大です。しかしながら、(DRM なしで) アプリを完全に保護しながらレシートを分散化させることは困難なことです。現時点ではユーザが課金アプリにアクセスできるように自身のクライアントに対して行える、DNS プロキシなどの攻撃がありますが、少し例を挙げれば、CSP, CORS HSTS といったもので緩和できます。今日の iOS や Android の課金アプリの状況も 大差はありませんマーケットプレイスのホワイトリストをより効果的に出来るよう現在すすめられている取り組みもありますし、Mozilla ではより多くの開発者とより多くのストアが参加するようシステムを改善していくつもりです。署名付きの パッケージ型アプリ へと切り替えればもう一つの資産保護レイヤーを提供できますが、これは権限の問題を解決するために設計されたものです。

例によって、問題があればバグを報告してください!アプリプラットフォームのバグであれば Core (component: DOM: Apps) あるいは Marketplace (component: Payments/Refunds) へと報告してください。

Mozilla Mission

Mozilla Missionの訳です。
Mozilla Japan には直接対応するページ自体がないようですが、何かの参考になれば、ということで。

私達はより良いインターネットを築いていきます

私達の使命は、オープンであること、改革、そして Web 上の機会を推進していくことです。

Mozilla は、誇りを持って、ウェブの力を人々の手に保つことに寄与する非営利の組織です。私達は世界中のユーザ、貢献者、開発者からなるコミュニティであり、あなたの味方として改革のために働いています。Firefox または他の Mozilla 製品を使うことで、あなたもそのコミュニティの一部となり、より明るいウェブの未来を築く手助けをすることになります。

私達が追い求める使命の価値と、それを追い求める際の原則についてさらに知りたい場合は、Mozilla 憲章 をご覧ください。

My Mozilla Experience

原文はこちら https://blog.mozilla.org/community/2013/04/18/my-mozilla-experience/

(投稿日、2013年4月18日)

…Summit 2013 のボランティア貢献者、  Ramona Costandel からのブログへのゲスト投稿です。

マウンテンビューにあるMozilla のオフィスへ行き、従業員の方達と話をし、会社、文化、そしてそこで働きたがる理由について、いくつかの質問をする機会を得ました。私は、ここシリコンバレーでは、すべてのものごとが、読者の方が想像しているであろうことと違うということを学び、そして、そこに示されたやりかたを見て、もっと知りたくなりました。ほぼ同じ時期に、私はUCSCで学んでいる人事管理ブログラムの経験/訓練となるボランティアの仕事を探し始めまていました。足しになるのかどうかはわかりませんでしたが、私は試してみることにしました。

私がMozillaのボランティアを通じて学んだことのいくつか:

  • もし尋ねる/頼むことをしなければ、答えは常にNoである。Mozilla のコミュニティの一部になり、ウェブのより良い未来を築くことに貢献してきた偉大な人々に会うチャンスがあるとは、考えたこともありませんでした。しかし、両方とも難しいことではなかったのです。私がしなければならなかったことはまず尋ねてみることだったのです!私は Mozilla のウェブサイトを開き、Mozilla は私が送った考えを読みました。「ボランティア」タブの下に、「手助けをしたいですか(“Want to help?”)」という質問があります。私は、私自身が何者であるか短い文章を書き、「手伝えることはありますか?(“Can I help?”)」と書き添えて送りました。
  • 迅速であることの重要性。2回めに、私がMozilla によって嬉しい驚きをもらったのは、私の方から連絡して数日のうちに返事をもらったことです!それは、Mozilla が本当に人々と共に、人々のために働いているという素晴らしい感触でした。彼らのミッションステートメントは空虚なただの文章ではなかったのです。私にとっては、Mozilla プロジェクトへの貢献が素晴らしい体験になるに違いないという確信になりました。

  • 時には研究というのは滑りやすい坂のようなもの。私は、私が働くべきプロジェクトを受け取り、とても興奮していました!私はすぐに研究にとりかかり、間もなくそこにはできることがとてもたくさんあることに気づきました。とても多くの興味深く、クリエイティブなアイディアがあり、それらのほとんどは Mozilla の価値に沿うものでした。私は、さらに探し出したいと思い、私が、プロジェクトについて考えられる限りのアイディアについて考察していることを確かめたいと思いました。私はまた、私が探しているものだけが私のプロジェクトに関係するのではなく、私が読んだものすべてが「私のプロジェクトにどう適用できるか?」というレンズを通して関連していることに気づきました。そのような状況にあるということは多大な情報に接するこどかできるという意味ですごいことですが、一方で、過大であり時間の浪費にもなり得ます。それが、次のポイントにつながります:

  • 1つのプロジェクトで働いているときは、(〆切ではなく)あなた自身のタイムリミットを設けるべきだ。私は、私のプロジェクトのために使えるとても多くの情報があることに気づいたので、さらに時間を使っても良いかと尋ねました。答えは yes でした。それは学習の過程であり、必要なだけ時間を使って良いと言われました。私はすごいことだと感じ、感謝し、偉大なチームで働いているという確信を新たにしました。しかし、すぐにこの「贈り物」は呪いとなったのです─それが意味することは、私は「滑りやすい坂の上の研究」に好きなだけ足を突っ込むことができるということだったのです。誰かにあなたの進捗をチェックし、あなたがどれだけの割り当て時間を残しているか、または終わるであろう日付を推測できるのかを気づかせてもらえるよう努めてください、本当の〆切が来る前に。

ついに、私は新しいアイディアを探すことをやめて、見つけたものに集中することにしました。私はその研究をほとんど終えており、私のチームのメンバーにプレゼンテーションする準備をしていました。正直に言って、プレゼンテーションについて考えると神経が擦り減るものですが、私は公衆の前で話をするという「山」について克服するよう努めており、これは良い練習になるはずです。私は、希望に満ち、また理解しようとする姿勢を持ち、私がミスをしたときには学ぶお手本としたいと思うような素晴らしい人々と共に働いたことを覚えていたいと思います。

チームの一員として、私は効果的に学び、本当にグループワークを楽しみました、しかし、私の訓練と知識から、人々と働くということにはまだまだ多くの変数が係わっているということがわかりました。仕事の場、経験、報酬の他にも考慮に入れなければいけないことは数多くあります。いくつかの典型例はありますし、またそれをどう扱うかについての文献も数多くありますが、実際の事態に直面してみると、まったく異なることがあるのです。これは、Mozilla のボランティアとして 2013サミットで私がさらに学ぶことを楽しみにしていることです。

私は、この夏にUCSCの人事管理プログラムを卒業する予定で、その後すぐに職を探すことになりますが、可能であれば将来もMozilla プロジェクトに貢献し続けたいと思います。私のMozilla での経験は、この分野でのスタートを加速し、また就職に向けての自信を高めるものでした。私は、ここまで聞いてくださり、重要だと考える事実をみなさんと分かちあうことができたことをとても幸運だと思います。

ありがとう Mozilla!

Contributor contribution – Summit 2013

原文はこちら https://blog.mozilla.org/community/2013/04/26/contributor-contribution-summit-2013/

(投稿者 mdouglass, 投稿日 2013年4月26日)

こんにちは、私の名前は Ramona で、Mozillian です! 現在、私はUCSCで人事管理プログラムを受講しており、Mozilla では People チームに所属しています。私が強い関心を持っているのは、人間について、彼らがどうつながるのか、コミュニケーションを取るのか、またそのことが彼らの職場における成功にどのような影響を及ぼすのか、です。

私のプレゼンテーションを始める前に、ある日、偉大なるWebで見つけた引用を紹介したいと思います:「ボランティアは報酬を受け取らない、価値がないからではなく、値段がつけられないからだ」

Mozilla のボランティアの1人として、私は最近の2週間をツールとプロセスの研究に費しました。2013年の Mozilla サミットで、地理的な離散により発生する問題に対処するために使うことができるかもしれないと思ったのです。これらの発見はもしかすると世界中で Mozilla の従業員、ボランティアの双方にとって助けとなり、お互いがより深くつながっていると感じられるかもしれません。Ramona の研究については、こちらからもっと読むか、 ビデオ ドキュメンタリー [1] [2] を閲覧することができます。

We’ll always have Paris – Summit 2013

原文はこちら https://blog.mozilla.org/community/2013/04/26/well-always-have-paris-summit-2013/

(投稿者 mdouglass, 投稿日 2013年4月26日)

僕達にはパリの思い出があるじゃないか (映画 カサブランカより)

今週は、オフサイトで、驚異的な Mozilla People チームと過ごしました。常に、私の部隊と実際の時間を過ごしたのです(彼らの目玉を覗き込みながら:))。 多くの Mozillians のように、私は普段、主にIRC(#peoplepeople)を通して共に働いている人々と連絡をとり、Eメール、その他のビデオソフトも使っています。そんなわけで、これは良い経験でした。

私にとって、それほどうまくいっていないのが、パリの件です。以前の投稿でも書いたとおり、パリはとても人気のある都市である ─10月には特に─ 2013年の10月4日〜6日の週末には特別に─ことがわかりました。この経験はサミットにとってとても重要で、目下のところ Mozilla にふさわしい場所(ホテルなど、イベントが開催できるところ)を見つけることができず、他の場所を探しています。サミットの場所として探しているのは、Mozillarian たちがつながっていると感じられる場所です。私達のすべてのために、ハックし、つながり、分け合い、交換し、成果を見せ、食べ、飲み、お互いに楽しめる場所であって欲しいと思います。そして、もしパリで私達の考えるような催しができないとしたら、他のどこで開催できるでしょうか?

カリフォルニアのベイエリアの会場としては、サンタ クララ マリオット がふさわしいと思います。(通りの向かいにアミューズメントパークがあります!)

この話題について何かわかり次第みなさんにお伝えするため、来週も投稿を続けます。サミット計画部会は引き続きパリで開催される予定です。

質問は、IRC のチャネル #summit2013 まで。 Mardi

Baseline コンパイラを導入しました

原文: The Baseline Compiler Has Landed on April 5, 2013 by Kannan Vijayan

水曜日に、私たちは Firefox Nightly に Baseline コンパイラを投入しました。始めから終わりまで 6 か月の作業の後、私たちはついに苦労の末の産物をメインリリースストリームにマージできます。

Baseline コンパイラとは何か?

Baseline (いいえ、これに *Monkey のコードネームはありません) は、IonMonkey の新たなウォームアップコンパイラです。これは短期的にはパフォーマンス向上を、また長期的には新たなパフォーマンス向上の機会をもたらします。それは JaegerMonkey を不要にするための扉を開き、そして SpiderMonkey のメモリ使用量を大きく削減するという別の変化を与えることも可能にするでしょう。新たな言語機能の第一段階の最適化を実装することを容易かつ迅速にするとともに、それらを IonMonkey での高い段階の最適化に改良することを容易にします。

Kraken、Sunspider、Octane ベンチマークのスコアは投入段階で 5-10% 向上しており、また SpiderMonkey をよりよくするための Baseline の活用を続けることによる改善を続けます。AreWeFastYet の Web サイトをご覧ください。グラフは範囲選択 (クリック & ドラッグする) することで拡大できます。

別の JIT? なぜ別の JIT?

現在まで、Firefox は 2 つの JIT を使用していました: JaegerMonkey と IonMonkey です。Jaeger は “かなり高速な” 汎用の JIT で、Ion は “実に高速な” 強力に最適化する JIT です。最初のうちはホットコードが Jaeger でコンパイルされ、それが本当にホットである場合は Ion で再コンパイルされます。この手法は段階的なコードの最適化を可能にするので、確実にホットなコードに対してとても重厚なコンパイルを行います。しかしこの手法の成否は、さまざまな段階のコンパイルで費やす時間と各段階で得られる実際のパフォーマンス向上との間でよいバランスをとることにかかっています。

簡単に言うと、現在は JaegerMonkey を IonMonkey 用の一時しのぎのベースラインコンパイラとして使用していますが、そのような処理向けには設計されていません。Ion は Ion のことを考慮したベースラインコンパイラを必要としており、それが Baseline とは何かの答えです。

より充実した説明では、いつものように微妙なニュアンスの違いがあります。これから、それを 3 つの章で見ていきます: 現行リリースでの動作、なぜ問題であるのか、Baseline はどのようにして問題の修正を助けるか。

現在の事実

簡単に言うと、こちらが現行リリースの Firefox の JIT コンパイル手法です:

  1. すべての JavaScript 関数はインタプリタで実行し始めます。インタプリタは実に遅いのですが、JIT で使用する型情報を収集します。
  2. 関数がややホットになると、JaegerMonkey でコンパイルされます。Jaeger は生成した JIT コードの最適化に、収集された型情報を使用します。
  3. 関数は Jaeger の JIT コードで実行されます。それがさらにホットになると、IonMonkey で再コンパイルされます。IonMonkey のコンパイラは JaegerMonkey より多くの時間を費やして、実に最適化された JIT コードを生成します。
  4. 関数の型情報が替わった場合は、既存の JIT コード (Jaeger のものと Ion のもの両方) が破棄されて関数はインタプリタ実行に戻り、JIT のライフサイクル全体を再度たどります。

SpiderMonkey の JIT コンパイル方法がこのように構成されている、よい理由があります。

おわかりのとおり、Ion は高度に最適化されたコードを生成するためコンパイルに長い時間をかけて、重厚な最適化手法をたくさん適用します。これは、Ion のコンパイルを過度に早く働かせるとコンパイル後に型情報が替わりやすくなり、Ion のコードが無効になることが多くなるかもしれないということです。それはエンジンで、破棄されるであろうコンパイルにかけた多くの時間全体が無駄になることを引き起こします。一方、コンパイルまであまりに長く待つと、コンパイルまでに関数をインタプリタ実行するところで過度に時間を費やすでしょう。

JaegerMonkey の JIT コンパイラは IonMonkey の JIT コンパイラほどの時間を費やしません。Jaeger は収集された型情報をコード生成の最適化に使用しますが、Ion が生成したコードを最適化する際ほど多くの時間は費やしません。こちらは “かなり高速な” JIT コードを生成しますが、Ion より高速な生成方法です。

よって Jaeger はインタプリタと Ion の間に挟まっており、確実にホットなコードは Ion でコンパイルされてより高速になり、またややホットなコードは Jaeger でコンパイルされます (型情報の変更によりたびたび再コンパイルされますが、Jaeger はコンパイルが高速なので問題ありません)。

この手法は SpiderMonkey がパフォーマンスを犠牲にするインタプリタで実行する時間が可能な限り少ないようにするのと併せて、確実にホットな JavaScript コード向けの Ion によるコード生成の利点を得るようにします。よってすべてがうまくいく、そうでしょうか?

いいえ。そうではありません。

問題点

上記の手法はすばらしい初期の折衷案ですが、いくつか重大な問題を引き起こしています:

  1. JaegerMonkey も IonMonkey も型情報を収集しませんが、型情報に頼って JIT コードを生成していました。それらは、JIT コードに関連づけられた型情報が安定している限り実行されます。型情報が変化すると JIT コードは無効にされて、さらに型情報を収集するためインタプリタ実行に戻されます。
  2. Jaeger と Ion の呼び出し規則は異なっていました。Jaeger はヒープに割り当てられたインタプリタのスタックを直接使用したのに対して、Ion は (より高速な) ネイティブ C スタックを使用しました。これは、Jaeger と Ion のコード間の呼び出しを非常に高コストにしました。
  3. インタプリタで収集された型情報は、ある特定の状況で制限されました。既存の型推定 (TI) システムは、ある種の型情報をうまく取り込みました (例えば、コード内の指定された場所で読み取るプロパティから見えると考えられる値の型) が、別の種類の型情報についてはとても下手でした (例えば、プロパティが取得されていたオブジェクトの型)。これは、Ion が実行可能な種類の最適化を制限しました。
  4. TI の基盤は、型の分析情報を永続的に追跡するために追加のメモリを多く要求しました (今でも要求します)。初めに TI の設計や実装を行った Brian Hackett 氏は Ion 向けのメモリオーバーヘッドを劇的に削減できると考えましたが、それは Jaegar 向けに行うのよりもはるかに多くの時間がかかるようでした。
  5. 多くの Web コードは、Jaegar によるコンパイル段階へ入るのにも不十分なほどホットではありません。Jaeger は Ion よりコンパイルにかかる時間が短いのですがそれでも高コストであり、また出力されたコードは常に型情報の変化により破棄される可能性がありました。このため、Jaegar によるコンパイルのしきい値はいまだにかなり高く設定されており、それゆえ多くのホットではないコードがインタプリタで実行されました。例えば SpiderMonkey はこの問題のために、SunSpider ベンチマークで大きく出遅れていました。
  6. Jaeger は実に複雑であり、扱うのが困難です。

解決策

Baseline コンパイラは、これらの短所を解決するよう設計されました。Baseline の JIT コードはインタプリタのように既存の TI エンジンに情報を与えます。さらに、インラインキャッシュ (IC) チェーンを使用することでより多くの情報を収集します。 実行中に Baseline の JIT コードが作成する IC チェーンは Ion によって調査されて、Ion の JIT コードをより最適化するために使用されます。Baseline の JIT コードは無効にならず、また再コンパイルも不要です。動的な変化を追跡およびそれに対応して、必要に応じて IC チェーンの新たなスタブを追加します。Baseline のネイティブコンパイルと最適化された IC スタブは、インタプリタより 10 倍から 100 倍高速な実行を可能にします。また Baseline は Ion の呼び出し規則を踏襲して、インタプリタスタックに代わり C スタックを使用します。最後に、ベースラインコンパイラの設計は JaegerMonkey や IonMonkey よりとてもシンプルであり、IonMonkey と共通のコードを多数共有しす (例えばアセンブラ、JIT コードコンテナ、トランポリンなど)。またこれは、Baseline が新たな型情報を収集したり、新たなケースの最適化を行ったりするように拡張することを実に容易にします。

要するに、Baseline はインタプリタと JIT の間のよりよい中間層を提供します。Baseline は動的なコードに対してインタプリタのように安定的かつ弾力的で、高い段階の JIT に提供する型情報を収集して、また新機能を扱うための更新が容易です。しかし JIT として一般的なケース向けの最適化を行って、インタプリタより大幅な高速化を実現します。

私たちはどこへ進むのか?

今は Baseline を有効にする重要で大きな変化の一握りであり、これから注視していくことがあります:

  • 型推定で使用するメモリの削減によるメモリ消費の大幅な低減
  • 型推定がインライン関数のよりよい最適化を可能にすることによるパフォーマンス向上
  • IonMonkey と Baseline のさらなる統合により、高度に多相的なオブジェクト操作コードのパフォーマンスを向上させる
  • getter/setter、proxy、ジェネレータといった高度な機能のさらなる最適化

また、最近の出来事についてもお話ししましょう… asm.js や OdinMonkey を取り巻くニュースによる波乱を受けて、高度な JavaScript が最適化の観点で劣った存在になることに関する懸念が (重要な意見として) 浮かび上がりました。Baseline の投入と継続的な作業が、JS チームが高度でとても動的な JavaScript をできるだけ早くすることに関心を持ち、また持ち続けるために説得力がある合図として仕えることを少しでも望んでいます。

謝辞

Baseline は Jan De Mooij と私 (訳注: Kannan Vijayan 氏) が、Tom Schuster 氏と Brian Hackett 氏による重要な貢献とともに開発しました。開発作業は、すばらしいファジングテスターである Christian Holler 氏と Gary Kwong 氏にとても助けられました。

もちろん、Baseline はそれ自身では目的を果たさないことは特筆しなければなりません。IonMonkey チームによってすばらしい作業が行われ、また他の JS チームは Baseline が存在する理由を与えてくれます。

 

(4/10 訳注追記: 文中で「Javas」と記載している箇所がありましたが、「JavaScript」の誤りですので修正しました。ご指摘ありがとうございました。)