Firefox に組み込まれた Rust

この記事は “Shipping Rust in Firefox” の抄訳です。

まとめ:Firefox 48 には、Rust で書かれたコードが初めて含まれます。以降のバージョンにも Rust での実装が予定されている部分があります。

Mozilla ❤ Rust

Mozilla リサーチが Rust の開発をサポートしてから 7 年が経とうとしています。当時は小さくも献身的なコミュニティに支えられる、野心的で実験的な研究プロジェクトでした。長期の開発と研究にもかかわらず、Rust の基本原理は変わっていません。ステムプログラミングの生産性を上げ、ミッションクリティカルなソフトウェアにおけるメモリ由来の脆弱性を低減し、さらには並列アルゴリズムをより扱いやすくするためには、安全な C++ の代替物が必要である、というコアチームがもともと抱いていたビジョンこそ Mozilla が Rust プロジェクトを支援し、それを製品に利用する主な理由です。

コミュニティの盛り上がりも理由の一つです。Rust の提供する安全性と、モダンな機能は新たに人々をシステムプログラミングへと向かわせています。コミュニティによる開発をミッションとする Mozilla にとって、その輪を広げることは極めて重要です。

そして重要なマイルストーンを達成しました。それは Firefox 48 です。これには Mozilla による最初の Rust を利用した全デスクトップ環境向けのコンポーネントが組み込まれています。Android 版でもすぐにサポートされます。

メディアスタックへの組み込み

Mozilla で Rust を最初に使い始めたグループの 1 つがメディア・プレイバック・チームでした。動画や音声といったメディアは、Web 体験の中核であることに疑問を持つ人は少ないでしょう。興味のない人にとっては明白ではないでしょうが、例えばこのシャボン玉をはじくカメレオン、みたいな動画を再生するたびにブラウザの内部では何が起きているでしょうか。動画のデータは複雑なフォーマットでやってきます。そしてそのデータは、信頼できない第三者によって作成されています。そのためメディアデータを利用して、 Web ブラウザのメモリ管理に関するバグに対する攻撃も存在します。

このような背景により、Rust のようなメモリ安全なプログラミング言語が必要とされました。Rust によって、悪意をもっている可能性のある Web 上のメディアコンテンツから守るための術が追加され、Ralph Giles と Matthew Gregan によって Mozilla 初の Rust メディアパーサが作成さ入れました。そしてこれこそが、Firefox に導入された最初の Rust コンポーネントなのです。Rust コミュニティにとっても、これは大きな業績となります:Rust で書かれたプログラムが億人単位でいる Firefox ユーザに利用されるのです。先立つ調査で、Rust コンポーネントは置き換え対象である C++ のコンポーネントと全く同じ振る舞いをしていることがわかりました。しかもメモリ安全に。

Rust コードに問題が1件もなかったことを示すデータ
10 億人以上が利用したにも関わらず、Rust で書かれたコンポーネントには 1 件も問題が起きなかったことを示す統計

今後にご期待ください!

コンポーネントを実装した Ralph Giles と Matthew Gregan、Rust が組み込まれた Firefox をビルドするためのツールや環境構築を行った Nathan Froyd、Nick Nethercote、Ted Mielczarek、Gregory Szorcm、Alex Crichton。 この到達点に達するために働いた彼らに、大きな感謝をしたいと思っています。

Rust は、それ自身が活発で素晴らしいコミュニティの産物です。問題の発見設計実装これらに代表されるすべてのことに対する世界中の Rusticean の貢献なくして、今日はありえませんでした。私自身も Rusticean として、Rust を使う人を増やしたいと思っています。始めるなら今です。そして可能なら Rust を使った Mozilla のプロジェクトに参加してください

Rust が Mozilla の製品に使われる。これは長い旅の最高点のように見えるかもしれません。でもこれは第 1 歩なのです。今後にご期待ください!

Dave Herman について

Mozilla リサーチの主任研究員。戦略ディレクターも兼ねる。

Webサイト:calculist.org

Dave Herman による、その他の記事はこちら。

4 件のコメント

  1. Pingback from 「Firefox 48」正式版がリリース、ダウンロード保護機能が改善され危険なソフトウェアに警告を表示 – エロ象ちゃんねる on :

    […] ○新機能・ダウンロード保護機能が改良され、不要な危険ソフトウェアや、望ましくないソフトウェアに対して警告が表示されるようになりました。詳しくはこちらをご覧ください。・プロセス分離(e10)が行われました。なおこの機能は一部のユーザにのみ提供されます。フィードバックを得つつ、利用可能ユーザを順次拡大してゆきます。・Mozillaによって検証・署名されていないアドオンはロードされなくなります・GNU/Linux:Skiaへの対応によりCanvasの描画性能が向上しました。最大で3倍程度高速になります・WebRTCにいくつか改良がおこなわれましたDelay-agnostic AECが有効になりましたGNU/Linuxと Mac OS Xでの全二重通信をサポートしましたICEのリスタートと更新が利用できるようになりましたMediaStreamとMediaStreamTrackの複製できるようになりました・URLバーで検索した場合、ブックマークされているページや、すでに開いているページはアイコン表示されるようになりました・Windows:Tab(ボタンの移動)とShift+F10(メニューの表示)を、カスタマイズ画面でTabとShift+F10が利用できるようになりました・Rustで書き直されたメディアパーサが組み込まれました […]

  2. Pingback from Firefox 48.0正式版デスクトップ及びAndroid向けリリース。ダウンロード保護機能やマルチプロセス化 on :

    […] Rust で書き直されたメディアパーサが組み込まれました […]

  3. Pingback from Mozilla:マルチプロセス技術“e10s”を導入した「Firefox 48」リリース | ざれごとでも書くことにしよう on :

    […] 新機能:Rust で書き直されたメディアパーサが組み込まれました […]

  4. Pingback from MozillaZine.jp » Blog Archive » Firefox 48 がリリースされた on :

    […] Rust で書き直されたメディアパーサの実装 […]