Servoの現況概説的なおはなし

ゆるふわ系Rust勉強会で話した内容のスライドを公開していなかったので今更ながら話した事について簡単にまとめます。

About Servo

  • Mozillaが行っているRustで書かれたブラウザエンジン実験プロジェクト
    • Rustのセールスポイントである並列性・安全性にフォーカスした実験
    • 現時点における、Rustの主要使用用途にして最大のプロダクトのひとつ
    • Rust言語そのものの開発との事実上の相互フィードバック関係にある
  • Blinkと比較されることが多いが、WebKit Chromium portの延長であったBlinkに対し、Rustは完全な新規の実験プロジェクト。その域を脱してはいない。
  • モダンブラウザエンジン(デザイン・アーキテクチャに挑戦している的な意味で)

Servoの実験領域

  • モダンハードウェアにおける新しいブラウザエンジンの探求
  • メニーコアなどのモダンハードウェア環境における並列処理化
  • メモリ周りにまつわるセキュリティ問題の解決
  • 以上をRustを用いて行う(Rust自体の実験も入っている)
    • Rustでの各種ライブラリの再実装・ポート・バインディングなども研究範囲ではある

並列化によるブラウザエンジンパフォーマンス向上の取り組み案

DOM, CSS, Architecture

  • 第一回かつ筆者も勉強中という事もあり、有益な情報は話せていません

Servoのリポジトリ的な話

開発モデル

  • Githubだもの、Pull Requestです
  • ビルドボットあります
    • 最近は、ちゃんとビルドボット通らないとマージされない
  • ServoのCI手順についてはこれを参照

Servoの現在の状況

  • まずはAcid 1 testクリアが目標
  • 使い物になる段階ではない
    • とりあえずビルドして試せば分かる
    • 関係ないですが、Servoのビルド時間の半分は、Servoが持ってるRustのビルド時間
  • 最近人が増えてきた
    • Sumsungの人も若干名Pull request送ってる(そんなにリソース割いてる印象は無いけど……)

Servoで今後ありそうなおもしろそうなこと

  • ヘッドレステストへの対応?
    • レンダリング結果の出力パスが無いので、現在は動作しない
      • -oオプションつけると、その旨が警告出るはず(出るようにした)
  • WebKit 2 APIへの対応?
    • ひとまず実装してみて、モダンブラウザエンジンとしてどういうAPIモデルが必要なのかのたたき台にしたいんだろうなと推測している
    • Geckoと同じ事をやるんじゃ研究の意味ないだろうし
  • 内部文字コードの検討
  • DOMバインディング方針の決定?
    • とりあえずdom.js使わないことは、ほぼ確定しているっぽい(理由は色々)(できればそのうち書く)
  • CSSセレクタマッチングの並列化?

詳しく知りたい場合

上で書いた事はGithubのServoリポジトリのwikiにだいたい書いてあるので、そこを読みましょう。

だいたいこんな感じで話しました。