
2026/08/01 3:17
6月のServo:実世界互換性、メディアクエリ、SharedWorkerなど
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Servo 0.4.0 のリリースは、6 月だけで 558 コミットに基づき、重要なセキュリティパッチとパフォーマンス向上を主導する大幅なバージョンアップを表します。このアップデートは、SpiderMonkey の更新を通じて JavaScript ランタイムの深刻なセキュリティ脆弱性を対処しており、特にクロスサイトスクリプティング (XSS) 修正のための特定 CVE を含んでいます。同時に、RSA 操作に関する RUSTSEC アドバイソリおよび ML-DSA 分解に関する問題を緩和するための定数時間アルゴリズムを実装していますが、Marvin Attack の脆弱性は依然として残存しています。パフォーマンスの向上は大きく、メモリ使用量の 17% 削減を実現する小さな BoxFragment サイズ、キャンバスグラフィックスでの電力消費の削減、Google Photos、Zulip、Lichess などの主要サイトでのレイアウト処理の改善などが特徴です。開発者にとっては、SharedWorker やポインターキャプチャーなどの新しい DOM API の拡張機能群、「attr()」の完全サポートやフォント処理の向上を含む高度な CSS 機能、Firefox DevTools で強化されたデバッグツールの恩恵を受けます。また、このリリースでは WebGPU とアクセシビリティに関する実験的な機能も導入され、Android 13+ 向けに servoshell の機能を更新してドラッグ&ドロップサポートを追加し、Servo Embedding API を改良しています。一部のサイト(例:Google Maps、OpenStreetMap)はレンダリング機能を維持していますが、インタラクティブ性に関する問題が生じる可能性があります。
本文
Servo 0.4.0 リリースノート:Web プラットフォームの進化とセキュリティ強化
Servo 0.4.0 は、6 月にマージされたすべての機能を含んでいます。これにより、コミット数は 558 と新たな記録を更新しました(4 月:534、5 月:391)。セキュリティ関連の詳細は「§ セキュリティ」を参照してください。
主要な新機能と改修
Web プラットフォーム機能の追加
- 'attr()': 実験的モードで提供(@Loirooriol, #45041)
- 'ellipse()' および 'circle()':
に対応image(<color>)
およびclosest-corner
の追加(@Loirooriol, #45421)farthest-corner
- 遅延計算のサポート:
- 解析時点よりも後の段階で値を解決可能にしました。
- 例:
など、sign(1em - 32px)
や数学的式の処理に対応(@Loirooriol, #45421)'calc()'
- '@font-face':
に対応(@simonwuelker, #45393)font-feature-settings - メディアクエリの拡張:
,'@media (device-width)'
,'@media (device-height)'
,'@media (height)''@media (aspect-ratio)'- それらの
およびmin
変種(@jdm, @mrobinson, @nicoburns, @jschwe, #44978, #45707, #45490)max
(@nicoburns, #45707)'@media (orientation)'
,'@media (pointer)'
(@nicoburns, #45681)'@media (any-pointer)'
,'@media (hover)'
(@nicoburns, #45681)'@media (any-hover)'
新しい DOM API の追加
- SharedWorker の実装(@Taym95, #45786)
- console.dir() の実装(@Taym95, #45109)
- Document および ShadowRoot:
の追加(@shubhamg13, #45872)customElementRegistry - CustomElementRegistry:
メソッドの追加(@shubhamg13, @yezhizhen, #45903)initialize()- 新しいインスタンス作成機能(@shubhamg13, #45791, #45550)
- Request、Response、Blob:
メソッドの追加(@yezhizhen, #45864, #45861)textStream() - Element のポインタ操作機能:
,setPointerCapture()
,releasePointerCapture()
(@webbeef, #45048)hasPointerCapture()
- Element のタッチイベントハンドラ:
,onTouchStart
,onTouchEnd
,onTouchMove
(@stevennovaryo, #45049)onTouchCancel
- crypto.subtle:
への KT128 および KT256 対応(@kkoyung, #45699).digest()
への ML-KEM および ML-DSA 対応(@kkoyung, #45252).getPublicKey()
サービス概要と貢献の呼びかけ
アップデートの内容
Servo 0.4.0 は以下の領域で大幅な更新を遂げています:
- セキュリティ
- リアルワールド互換性
- 進行中の作業(実験的機能)
- エンベッディング API
- ユーザーおよび開発者向け体験
- Web プラットフォームに関するその他の情報
- ガーベージコレクションの安全性向上
- パフォーマンスと安定性
- 新しいコントリビューター
貢献者の協力が必要不可欠です
Servo は毎月規模が拡大しており、2026 年 6 月時点でコミット数の倍増が見込まれています。変更内容からの質問を自動で回答するために Highfive ボット が導入されました。
以下の手順でプルリクエストへの参加をご案内ください:
- 「monthly update」ラベルの付与:
- PR に
ラベルを追加するかmonthly update - コメントに
と記載する@servo-highfive monthly update
- PR に
- 質問への回答:
- Highfive ボットから投稿された質問コメントに対し、
を含めて回答してください。@servo-highfive monthly update answer
- Highfive ボットから投稿された質問コメントに対し、
主要な検討事項(Highfive ボットが確認します)
- この変更が誰に影響を与えるか?(ユーザー、開発者、埋め込み者など)
- どのような可観測な違いが生じるか?
- 特定のプレファレンスの有効化が必要か、デフォルトで利用可能か?
- リアルワールドのウェブサイトへの影響は?
- 関連する問題またはプロジェクト ID は何か?(PR 説明文内の
またはFixes: #xxxxx
で確認)Part of: #xxxxx
セキュリティ
SpiderMonkey 140.10.1 をベースにした Servo JS ランタイムには、以下のセキュリティバグが存在しており、アップデートによって修正されました(@jschwe, #45584)。詳細は CVE-2026-8388, CVE-2026-8391, CVE-2026-8974, CVE-2026-8975, および MFSA 2026-48 を参照してください。
さらに SpiderMonkey 140.12.0 アップデートにより、追加のセキュリティバグが修正されました(@jschwe, #45766)。正確な CVE は未確定ですが、詳細は MFSA 2026-58 を参照してください。
重要なセキュリティ対策
- SubtleCrypto の RSA 演算:
- 一定時間内にモジュラー指数演算を行うように実装されました(@kkoyung, #45631)。
- ⚠️ 注意: 当社の RSA 実装は現在、Marvinn 攻撃に対して脆弱である可能性があります。詳細:RUSTSEC-2023-0071
- SubtleCrypto の ML-DSA 演算:
ステップを一定時間内に実行するように実装し、RUSTSEC-2025-0144 が修正されました(@kkoyung, #45294)。Decompose
- HTML インジェクション(XSS)の修正:
ディレクトリ一覧におけるバグが修正。ファイル名にfile:///
を含む場合の影響も排除されました(@sahvx655-wq, #45510)。</script>
リアルワールド互換性
lichess.org のレイアウト正確性が大幅に改善され、変形フォントの処理向上によりウェブサイトの読みやすさが向上しました。
- 対応サイト:
- Zulip (
)servo.zulipchat.com - Speedtest (
)speedtest.net
- Zulip (
互換性のある主要ウェブサイト
多くのサイトが動作していますが、以下のサイトでは引き続き対応可能です:
- Google Photos (
)photos.google.com - Cash Converters (
)cashconverters.com.au
他方、以下のサイトは良好に描画されますが、インタラクティブ性に課題がある場合があります:
- Google Maps (
)maps.google.com - OpenStreetMap (
)www.openstreetmap.org
お気に入りのサイトの動作についてのご報告を歓迎いたします。成功例は Zulip スレッド、失敗例は GitHub Issues へご報告ください。
進行中の作業(実験的機能)
特定のパラメータ (
--pref) を有効にすることで、以下の機能を試すことができます。
CSS 機能
- 実験的 'attr()':
で利用可能(@Loirooriol, #45041, #45421, #45495, #45752)--pref layout_css_attr_enabled
WebGPU サポート (--pref dom_webgpu_enabled
)
--pref dom_webgpu_enabled
におけるGPUQueue
の実装(@sagudev, #45646)copyExternalImageToTexture()
におけるGPUDevice
とcreateQuerySet()
におけるGPUCommandEncoder
の実装(@sagudev, #45644)resolveQuerySet()- デバッグ機能の実装:
,pushDebugGroup()
,popDebugGroup()
(@jschwe, #45489)insertDebugMarker()
- より準拠した API の実装:
(@sagudev, #45300)GPUTexture
on GPU(@sagudev, #45424)requestAdapter()- セキュアコンテキストの強制実装(@sagudev, #45279)
上記機能は servoshell の実験的モードで有効です。
アクセシビリティとアニメーション
- 可視およびインタラクティブなテキスト選択: 長らく要望されていた機能の実装を開始(@mrobinson, @SimonSapin, #46107)
- Web Animations の実装開始(@simonwuelker, #45522, #45983)
- File API における
の実装開始(@yezhizhen, #45666)webkitRelativePath
C API と Rust 型システム
- 事前ビルド共有ライブラリ: ラッパー C API を設計し、ソースなしでの埋め込みを可能にしました。将来的にはラッパー Rust API も追加予定(@mukilan, #44984)。
エンベッディング API の変更
新機能
の追加(@mrobinson, #46047)WebView::rendering_context
破壊的変更
が削除されました(@mukilan, #45502)。内部向けであり、新しい API 移行後には使用されなくなりました。WebView::send_error
ドキュメントの改善
以下の型と構造体のドキュメントが改善されました:
,WebView
,WebViewDelegate
,JSValue
,AlertDialogAllowOrDenyRequest
,AuthenticationResponse
,BluetoothDeviceDescriptionConfirmDialog
,ConsoleLogLevel
,CreateNewWebViewRequest
,EmbedderControlEmbedderControlResponse
,FilePicker
,Image
,JavaScriptErrorInfoNavigationRequest
,PermissionRequest
,PixelFormatPromptDialog
,ProtocolHandlerRegistrationProtocolHandlerUpdateRegistration
,Scroll
,SelectElementSelectElementRequest
(@mukilan, #45282, #45467)WebViewVector
ユーザーおよび開発者向けの変更点
servoshell の改善
- Android 要件: Android 13 以降が必要になりました(@jschwe, #46104)
- デスクトップ版の新機能:
- ファイルのドラッグ&ドロップでの開封が可能に(@simonwuelker, #45454)
- タブが多数ある場合、タブバーを水平スクロールできるようになりました(@Nylme, #44884)
- ウィンドウを別のモニターに移動しても、そのモニターでフルスクリーンになるように修正(@rhit-kapilaar, #45556)
- パフォーマンス向上: UI サイズ変更が滑らかになり、ホバー状態への固執現象が解消(@mrobinson, #45289, #45456, #45290)
- HTML 修正:
の操作性を改善(@alexcat3, #45419)<select multiple>
URL スキームの表示変更
は、location バーとコマンドラインでlocalhost:<port>
と表示されるようになりました。以前は非公式なスキームとして扱われていました(@SteveSharonSam, #45729, #45832)。http://
Firefox DevTools の強化
- Console タブ: 未捕捉の例外を正しく報告(@jdm, #45549)
- Console および Debugger タブ:
- ネストされた配列や
オブジェクトのエンTRIES を検査可能に(@atbrakhi, #45435, #45514, #45767)Map - Scopes パネルに
の変数、' (uninitialized)'
の値、グローバルスコープを表示(@atbrakhi, @eerii, #45824, #45517)this
- ネストされた配列や
ビルド環境の整備
- アーキテクチャ:
,riscv32
,riscv64
向けビルド問題を修正(@fxzjshm, @saschanaz, #45285, #45731)arm64 - Android モダン化: Compose UI および Kotlin へ更新(@veyndan, #45923 など多数の PR)
開発者コマンドラインツールの進化
: 実行可能なすべての試行ジョブを一覧表示(@shubhamg13, #45607)mach try --help
: テスト実行と期待値更新をワンコマンドで可能に。以前はmach test-wpt --update-expectations
と--log-raw
を別々に行う必要がありました(@TimvdLippe, #45521)。update-wpt
Web プラットフォームに関するその他の情報
イベントリスナーの制限
パフォーマンス向上のため、パッシブなイベントリスナーが一つ以上ない限り、
事件は 'wheel'
でなくなります。Firefox と同様にデフォルトでパッシブです(@kunalmohan, #45667)。.cancelable
視覚的改善
- テキスト装飾:
,'dotted'
,'dashed'
は、要素境界を超えて連続して表示されるようになりました(@mrobinson, #45726)'wavy' - CSS グラデーションの準拠性向上(@mrobinson, #43945)
対応と修正された機能
の準拠性向上(@skyz1, @mrobinson, #45825, #45761)<dialog>
の強化(@cychronex-labs, #45880)<iframe sandbox>
,<input minlength>
への対応(@skyz1, #45705)<input maxlength>
内の'@font-face'
とfont-style
への対応(@Loirooriol, #45821)unicode-range- FontFaceSet の準拠性向上(@mrobinson, #45390, #45382)
- HTMLInputElement および IntersectionObserver の改良(@steigeo, @jdm など)
- 新しい Response() の実装(@yezhizhen, #45953)
およびURL.createObjectURL()
への完全対応(@yezhizhen, #45182, #45417)URL.revokeObjectURL()- SubtleCrypto 内の ECDSA および Ed25519 の準拠性向上(@kkoyung, #45833, #46017)
バグ修正一覧
以下の多数のバグが修正されました:
、<input hidden>
,'animation-delay'
,'clip-path'
など(@mrobinson, @yezhizhen, @Loirooriol, @SimonSapin, @RichardTjokroutomo など)'tab-size'
,'width'
,'height'
,'box-shadow: inset''animation-iteration'- イベント:
,'click'
, ワーカースコープ内の'load''error'
に関連するバグdocument.getElementById()
ガーベージコレクションの安全性向上
Servo は Rust の「エイリアシングか不変性の一方」のルールをランタイムで強制しています。これにより、多くの DOM タイプを格納する際に RefCell ベースの機構を使用しますが、ガーベージコレクション(GC)時における参照追跡が困難な課題がありましたが、以下の革新で解決されました。
- 型システムによる保証:
マーカー値を用いて、特定箇所(NoGC
など)で GC が発生しないことを証明します。borrow_mut()- Rust の参照システムを活用し、カスタム静的解析を不要にしました。
メソッド:safe_borrow_mut()- 大規模なコードベースを部分的に改変する必要がなくなりました。
から借用し、&NoGC
(GC 許容)への借用は禁止する設計です。&mut JSContext
これにより、SpiderMonkey と Servo の統合がより安全で信頼性高く進化しています(@sagudev, #46050 など多数のコミット)。
パフォーマンスと安定性
最適化成果
- ルート付け省略: GC が発生しない領域での JS オブジェクト対話でルート付けを省略し、レイアウト処理と HTMLCollection のオーバーヘッドを 1% 以上削減(@Narfinger, #46092, #45582)。
- メモリ削減:
が 17% ショーン小さくなりました(amd64 で 288 バイト → 240 バイト)(@SimonSapin, @mrobinson, #45183, #45496)BoxFragment
- メモリリークの解消:
- リロード時および 2D キャンバスで発生していた深刻なリークを修正。
- これにより、2D キャンバスが最大 23% の電力節約を実現し、SVG 描画の冗長化を防ぎました(@Taym95, @sagudev, @yezhizhen など)
スクロールとレイアウトの高速化
- 非同期デコード: すべての画像を非同期でデコード・キャッシュすることで、スクリプトスレッドに負荷をかけません(@Narfinger, #45542, #44483)。
- インクリメンタルレイアウト: 再フローを削減し、スタッキングコンテキストツリーのアップデートを改善(@mrobinson, @Loirooriol, @jschwe など)
- マイクロベンチマーク高速化: スタッキングコンテキストツリーのためのインクリメンタルアップデートにより、いくつかのベンチマークが最大 10% 高速化(@mrobinson, #45208)。
バグ修正総括
Frédéric (@fred-wang) らによるフォージング作業により、以下のクラッシュバグを多数修正:
,<iframe>
,<slot><link onerror>
,'animation'
,'clip-path'
,'content''rotate'
,'transition'
,'transform-style'
,'display: contents''overflow: clip'- CSSKeyframesRule, FontFace, Window.stop(), document.elementFromPoint() など(@fred-wang, @mrobinson など、#46031 他多数)
- IPC 失敗、HTMLInputElement, Range, DevTools Debugger タブ、native-bluetooth ビルドに関するクラッシュ修正
新しいコントリビューター
以下の皆さんに、初のパッチを実装してくれたことへ特別に感謝申し上げます:
- Deepam Goyal (@Deepam02)
- Mark (@Mark-Boger)
- Mr SheerLuck (@MrSheerluck)
- Psychpsyo (Cameron) (@Psychpsyo)
- TusharSariya (@TusharSariya)
- Adam Sharif (@adamsharifc)
- Akash Ravikumar (@ak4shravikumar)
- Sean Cunneen (@alexcat3)
- Abdul Wahab Melethil Shibu (@cychronex-labs)
- darkdragon-001 (@darkdragon-001)
- Frédéric Wang Nélar (@fred-wang)
- fxzjshm (@fxzjshm)
- Piyush Gupta (@guptapiyush16)
- Ivo Murrell (@ivomurrell)
- rhit-kapilaar (@rhit-kapilaar)
- sahvx655-wq (@sahvx655-wq)
- Kagami Sascha Rosylight (@saschanaz)
- shangguanmachine-dot (@shangguanmachine-dot)
- Glenn Skrzypczak (@skyz1)
- Oskar Steiger (@steigeo)
- Veyndan Stuart (@veyndan)
Web ブラウザの構築に興味がありますか?新しいコントリビューター向けの課題リストをご確認ください!
寄付について
継続的なご支援に心より感謝申し上げます。毎月 7,681 ドル(5 月比 +0.2%)を受領し、CI/ベンチマークサーバーのコストや Outreachy インタンの人件費、維持管理資金として活用しています。thanks.dev を通じた寄付も可能であり、スポンサーシップの段階に入りました。
- 現在: 7,681 ドル / 月
- 目標: 10,000 ドル / 月
寄付の使用状況は技術舵取り委員会のプロセスで透明に管理され、進行中の提案は
servo/project#187 で追跡しています。詳細は スポンサーシップページ を参照ください。