4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

株式会社ACCESSAdvent Calendar 2024

Day 11

ブラウザエンジン Servo を動かしてみる

Last updated at Posted at 2024-12-10

Servo とは

https://servo.org/about/
Servo aims to provide an independent, modular, embeddable web rendering engine, allowing developers to deliver content and applications using web standards.

Mozilla によって立ち上げられたプロジェクト。現在は Linux Foundation Europe の下にあります。クロスプラットフォームで再利用可能な Web コンポーネントを目指しています。

OSS であり、 https://github.com/servo/servo で開発されています。バージョンは無いようで、ローリングリリース形式によるリリースが行われています。

また、Servo をブラウザエンジンとするブラウザアプリのプロジェクト Verso (https://github.com/versotile-org/verso) が 2024 年に立ち上がっています。Servo の開発を活性化させて完成度を上げ、Servo を WebView の代替として利用可能なコンポーネントを用意することが狙いのようです。1

Servo のアーキテクチャについては、https://book.servo.org を読むと良さそう。
物足りない感じはありますが、一通り読める分量だと思います。

環境

  • Ubuntu 22.04 X112
  • Servo (2024/12/07) fb787306b3f8d89f2b41cb150aa3bb8cdc666138

ビルド

方法は Readme に書いてあるので省略。

time ./mach build にかかった時間は 2 分程度でした3。Chromium と比べるとずっと早い。

real    1m53.368s
user    16m13.446s
sys     1m42.487s

動作確認

Chrome や Firefox と比べると完全動作とは行かないものの、よく動いていると思います。
Media Source Extensions は非サポートなので動画サイトは基本動きません。

image.png

image.png

image.png

簡単なハック

指定できるコマンドライン引数

./servo --help を確認すれば ok。

例えば、user agent を変えるには ./servo -u "NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)"

components/config/opts.rs にコマンドラインのパース処理がありますが、エントリーポイント近くにある ports/servoshell/desktop/cli.rs でもコマンドライン引数の値を取り出しているのでこちらもチェック。

ビルド引数

ビルド時に決まる設定値の一覧は、resources/prefs.json にあります。例えば、"shell.homepage": "https://servo.org" など。

マルチプロセス

デフォルトはシングルプロセスで動作します。マルチプロセスで動作させるには、コマンドライン引数 -M を追加します。コンテンツごとにプロセスが作成されるようになります。コンテンツごとに作成されるプロセスは、コード中では content process と呼ばれています。

コードを読む限り、Servo ではエントリーポイントである ChromeProcess と コンテンツごとの ContentProcess の 2 種類のみが存在するようです。Chromium は GPU や Zygote とか Network など色々あるので今後さらに増えるかも。

devtools

https://github.com/servo/servo/wiki/Devtools に方法が書いてあります。
--devtools=6080 引数を追加し、Firefoxから about:debugging を開いて localhost:6080 に接続します。

Javascript のエラーや DOM 構造等確認できます。Inspector による要素の編集はできませんでした。

WebIDL

WebIDL は HTML 標準の仕様でも使用されているインターフェース記述言語です。
WebIDL のファイルフォーマットをパースする python スクリプトが取り込まれており、third_party/WebIDL に入っています。
Servo や Chromium はこれを使って WebIDL を Rust や C++ に変換しています。4

お気持ち

正直 Servo という名前は検索しづらい。Servo は Raspberry Pi でも動かせるみたいですが、先駆者が居ないか調べようとしてもサーボモーターの方が出てしまうんですよね。

Qiita のタグも大半がサーボモーターに関する記事で、ブラウザエンジンの Servo は… ちょっとだけ出てきます https://qiita.com/tags/servo

おわり

ブラウザエンジン Servo を簡単に触ってみました。

  1. https://www.publickey1.jp/blog/24/rustservowebverso.html https://nlnet.nl/project/Verso/

  2. Servo(winit)は Wayland にも対応しているので、Wayland 環境でも同様に動作するはず。

  3. Intel Core i7-14700K / RAM 64GB

  4. ビルド時に components/script/build.rs から components/script/dom/bindings/codegen/run.py を呼び出して、components/script/dom/bindings/codegen/CodegenRust.py で WebIDL を Rust に変換。 Chromium にも同様のコードがある。https://chromium.googlesource.com/chromium/src/+/refs/tags/132.0.6834.39/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?