Servo 0.4.0 リリースノート
Servo 0.4.0 は、558 件のコミットを含む大規模なアップデートで、ウェブプラットフォームの互換性拡大、セキュリティの強化、エンジンのパフォーマンスとメモリフットプリントの最適化に焦点を当てています。
ウェブプラットフォームと DOM API の強化
Servo 0.4.0 は、CSS と DOM API のサポートを大幅に拡張し、ウェブ全体のレンダリングとインタラクティブ性を向上させます。
CSS とメディアクエリのサポート
新機能として、attr() 関数(実験的モード)、image(<color>)、および解析後に解決可能な calc() の更新された数式の実装が含まれます。このリリースでは、包括的なメディアクエリのサポートが追加されました:
device-widthとdevice-height(min- と max- バリアントを含む)heightとaspect-ratio(min- と max- バリアントを含む)orientationpointerとany-pointerhoverとany-hover
さらに、@font-face 内で font-feature-settings がサポートされるようになりました。
新しい DOM API
アプリケーション機能を向上させるために、いくつかの重要な DOM API が追加されました:
- Concurrency(同時実行):
SharedWorkerの実装。 - Developer Tools(開発者ツール):
console.dir()の追加。 - Custom Elements(カスタム要素):
DocumentとShadowRoot上のcustomElementRegistry、initialize()を含み、new CustomElementRegistry()のインスタンス化が可能。 - Streaming(ストリーミング):
Request、Response、Blob上のtextStream()。 - Pointer Events(ポインターイベント):
Element上のsetPointerCapture()、releasePointerCapture()、hasPointerCapture()。 - Touch Events(タッチイベント):
Element上のontouchstart、ontouchend、ontouchmove、ontouchcancel。 - Cryptography(暗号): KT128/KT256 用の
crypto.subtle.digest()と ML-KEM/ML-DSA 用のcrypto.subtle.getPublicKey()。
実際の互換性とレンダリング
レイアウトの正確性が、特に可変フォントの取り扱いの改善により、いくつかの高トラフィックサイトで向上しました。
- Lichess.org: レイアウトの正確性が大幅に改善されました。
- Zulip と Speedtest.net: 可変フォントの改善により可読性が向上しました。
- Google Photos と Cash Converters: バージョン 0.4.0 で動作が確認されています。
- Google Maps と OpenStreetMap: 正常にレンダリングされますが、いくつかのインタラクティブ性の問題が残っています。
セキュリティ更新
Servo 0.4.0 は、ランタイムの更新と実装の変更により、複数のセキュリティ脆弱性に対処しています。
- SpiderMonkey の更新: JS ランタイムが SpiderMonkey 140.11.0 と 140.12.0 に更新され、CVE-2026-8388、CVE-2026-8391、CVE-2026-8974、CVE-2026-8975(MFSA 2026-48 および MFSA 2026-58)を含む複数のセキュリティバグが修正されました。
- 暗号強化:
SubtleCryptoの RSA 操作が定数時間のモジュラー指数演算を使用するようになりました。ML-DSA の操作は Decompose ステップを定数時間で実行し、RUSTSEC-2025-0144 を修正しました。 - XSS 修正:
file:///ディレクトリ一覧で、ファイル名に</script>を含む場合に発生していた HTML インジェクションバグが解決されました。
パフォーマンスと安定性の最適化
メモリと電力効率
- メモリフットプリント:
BoxFragmentが 17% 小さくなり(amd64 で 288 バイトから 240 バイトへ)、ShapeCacheEntryもサイズが削減されました。 - 電力消費: 2D キャンバスの電力使用量が最大で 23% 減少しました。
- リソース管理: 画像デコードと画像キャッシュの充填が非同期で行われるようになり、スクリプトスレッドへの負荷が軽減されました。
エンジンの安定性
- ファジング: 6 月にファジング作業により 16 件のクラッシュバグが修正され、
<iframe>、<slot>、clip-path、DOM ツリーなどの領域が対象となりました。 - メモリリーク: ページのリロードや 2D キャンバスに関連するリークが解消されました。
技術アーキテクチャと今後の課題
ガベージコレクション(GC)安全性
Servo は、GC 中の動的借用失敗を防ぐために Rust の型システムを活用し、SpiderMonkey との統合をより安全に移行しています。NoGC マーカー値と safe_borrow_mut() メソッドの導入により、特定の操作中に GC が発生し得ないことをエンジンが証明でき、不要な JavaScript オブジェクトのルート化を回避することでパフォーマンス最適化も可能になります。これにより、レイアウトプロセスと HTMLCollection のオーバーヘッドが 1% 以上削減されました。
埋め込みと API の進捗
- C API ラッパー: 安定した Rust ABI が不足している問題を解決するため、Servo はラッパー C API の設計を開始しました。これにより、安定した C ABI を介して事前構築された共有ライブラリとして Servo を利用でき、上位に Rust ラッパーを構築して使いやすさを提供する可能性があります。
- WebGPU:
copyExternalImageToTexture()、createQuerySet()、resolveQuerySet()の実装や、セキュアコンテキストの強化などの改善が行われました。 - テキスト選択: 可視かつインタラクティブなテキスト選択の実装作業が開始されました。
ユーザーと開発者の体験
Servoshell の更新
- Android: Android 13 以降が必須となり、Compose UI と Kotlin を使用するようにモダン化されました。
- Desktop: ドラッグ&ドロップでのファイルオープン、水平タブバーのスクロール、複数モニタでのフルスクリーン動作の改善が追加されました。
- General(全般):
localhost:<port>がロケーションバーとコマンドラインで自動的にhttp://とみなされるようになりました。
DevTools の改善
Firefox DevTools を使用する際、Servo はコンソールタブで未捕捉例外を正しく報告し、コンソールおよびデバッガータブで入れ子になった配列や Map オブジェクトの検査が可能になりました。Scopes パネルにはグローバルスコープ、this の値、そして (uninitialized) 変数が表示されます。