Servo、NLnet財団の助成金でレイアウト機能を改善
(servo.org)- Servoは2023年7月にNLnet助成金を受け、アプリケーションにWeb技術を組み込むための軽量・高性能な代替手段として、コアとなるレイアウト機能を強化した
- 改善範囲は、CSS floatの完成、インラインレイアウトの多言語対応拡大、初期の
<table>サポート追加に集中している - CSS floatは2023年半ばから作業が続いており、関連するWPTテストの平均合格率を80%超に引き上げることが目標
- インラインレイアウトは、非ラテン文字のレンダリングに必要なフォント選択、右から左へ書く文字、論理プロパティのサポートが不足している
- 新しいレイアウトエンジンでtableが未サポートであることは多くのWebページ表示を崩すため、まずはWikipediaのtableレンダリングが実用的な目標となる
NLnet助成金で強化するServoの領域
- Servoは2023年7月にNLnet助成金を受け、複数のレイアウト関連機能を改善した
- 主な目標は3つに整理される
- Servoのfloatサポート完成
- インラインレイアウトでより多くの言語をサポート
- 初期の
<table>サポート追加
レイアウト機能別の目標と進捗状況
-
Floats
- Servoのfloatサポートは2023年半ばから進行中
- CSS floatに完全準拠した実装と見るには、まだ解決すべき問題が残っている
/css/CSS2/floats/と/css/CSS2/floats-clear/の平均WPT合格率80%超が目標- 結果はWPT dashboardで追跡できる
- 先週、
/css/CSS2/floats/テストは**82.2%**の合格率で目標を超えた /css/CSS2/floats-clear/は現在**73.3%**の合格率で、目標に近づいている
-
More languages in inline layout
- Servoのレイアウトエンジンには、ラテンアルファベットを使わない言語のレンダリングに必要なコア機能が不足している
- 強化対象には、正しいフォント選択、右から左へ書く文字のサポート、論理プロパティが含まれる
- 目標は、Servoがより多様なコンテンツを表示できるよう、インラインレイアウトのサポート範囲を広げること
-
Initial
<table>support- HTML tableは重要で広く使われているWeb機能
- Servoの新しいレイアウトエンジンはまだtableをサポートしておらず、多くのWebページのレイアウトが正しく表示されない
- 初期tableサポートの優先目標は、Wikipediaで使われるtableをレンダリングできるようにすること
- 各マイルストーンが進み達成されれば、今後のブログ記事でより詳しく取り上げる予定
1件のコメント
Hacker Newsのコメント
Servoにはとても期待していて、Mozillaが関心を持たなかったというのが信じられない
セキュリティと性能に優れたエンジンという発想も良いが、Webエンジンをコンポーネントとして使える点が特に気に入っている
Windows 9x時代のIEにはActiveXコントロールがあり、どこにでもWebエンジンを埋め込めたし、KHTMLも似たようなものだったが、最近はFirefoxもChromeもそうした用途には関心がないように見える
Qt WebEngineがあるのは幸いだが、Chrome側がこの種のユースケースを気にしていないため、関係がややぎくしゃくしていると理解している
そのうえChromeはGoogleのもので、経験上Googleのものは独自の世界があり、ビルドして統合するのが面倒だ
だから、セキュリティ上の懸念を解消しつつ統合の苦痛も減らしてくれる、コードに組み込める実用的な代替案に大いに期待している
Mozillaは研究プロジェクトとして資金を出しており、完全に市場投入するにははるかに多くの資金と時間がかかると気づき、コストを抑えることにした、というほうが近い
ただし、その資金を自分たちが掲げていた道徳性に合わない形で役員などに配分したという問題はある
ブログ記事を見ると、MozillaはServoから取り込めるものをFirefoxに統合しており、その意味でプロジェクトから一定の価値を得たことになる
もし誰かがMozillaに多額の資金と無制限のスケジュールを提供していたなら、Servoを完成させていたと思う
ところがCEFが人気を得るやいなや、GoogleはCEFや他の組み込みブラウザでGoogleログインをブロックするために多くのリソースを投入した[0]
そのためCEFベースのブラウザを諦めざるを得ず、そうしたビジネス慣行は嫌悪すべきものだが、できることはなかった
自分のブラウザでGoogle製品にログインできなければ広く使われるのは難しいし、Googleの検知方式といたちごっこをする時間もない
誰でもブラウザを作れるほど組み込みブラウザコンポーネントが主流になるには、大企業が人気の出た組み込みブラウザを締め出す問題にまず取り組む必要がある
理想的にはAndroidではない埋め込み可能なGeckoが出てくるとよい。Firefoxは締め出すには大きすぎるからだ
以前にも関連する話は多くあり、ウィンドウハンドルを盗んで使う概念実証も試したが[1]、収益にはならない
0 - https://developers.googleblog.com/2016/08/modernizing-oauth-...
1 - https://github.com/cretz/ffembedpoc
何を意味しているのか分からないが、WebRenderやStyloを含め、複数のコンポーネントをGeckoに取り込んでいる
デスクトップ背景が失敗すると、デスクトップにクリック可能なリンク付きのActiveXエラーページが表示されていたのを覚えているが、本当に混乱した
macOSとLinuxでは非常によく動作する
それでも、埋め込み可能なWebエンジンはもっと必要だ
Geckoは良いが、XULRunnerと恒久的に一体化している点が足かせになっている
Igaliaが引き受けた後もServoの作業が続いているのを見るのはうれしい
何年も最小限のメンテナンスだけで生じた技術的負債は多かったが、実際に前進しているように思える
個人的にはモジュール性を強く推し進めてほしい
埋め込み可能性に焦点を当てたオープンソースのブラウザエンジンが埋められる隙間はありそうで、人々がレゴブロックのように組み合わせて新しいエンジンを作れる「自作ブラウザ」ライブラリが生まれれば、Webプラットフォームの長期的な健全性にも大きく役立つはずだ
Servoを内蔵したElectronや、Electronに似た何かが出てくれば良い結果になり得る
Tauriがすでにその隙間をある程度埋めているが、何かを内蔵するというよりはOSが提供するものを使っている
その中間くらいの選択肢があるとよい
例えばSciter [1]はDOM APIの妥当なサブセットだけを実装しているにもかかわらず、ある程度成功している
一般的なインターネット閲覧にはあまり向かないが、UIライブラリとして使うなら、動作しない部分を避ければよい
1: https://sciter.com/
コンポーネントモデルと埋め込みレイヤーがそうした構造だ
この助成金の財源は一部European Commissionから出ており、NGIプログラムを通じて支援されている
Servoにとって本当に良いニュースだ
NLNet Foundationは最近すばらしいプロジェクトを多く支援していて、名前をよく見かける
いくつかの問題を押し進めるには支援が必要だったが、実際にそうなった
私たちは主に北米にいるのに資金はEUから来るという点で、非常に先を見据えた支援だ
ゼロから新しく作られているもう一つのブラウザとして、Ladybirdも注目に値する
もう少し寄せ集め感のあるインディーグループが作っている: https://ladybird.dev/
正直、本当に硬派なプロジェクトだと思う
まだ非常に若いプロジェクトだという点を考えると、すでにかなり印象的
スクリーンショットを撮ってみるだけでも、Servoのレンダラーは非常に基本的で、遅く、バグが多い
速度が速く、すべてをオープンに作っているので、Ladybirdチームの取り組みは非常に印象的
なんとなくServoはすでにFirefoxに統合されたものだと思っていた
Rustでブラウザ全体を立ち上げずにHTMLを画像としてレンダリングする方法はあるだろうか?
多くのHTMLやCSSをサポートする必要はない
https://blog.nightly.mozilla.org/2017/07/25/stylo-is-ready-f...
おそらく他にもあるかもしれない
ただし2点異なる: 任意のHTMLではなくMarkdownのみをサポートし、画像ではなく画面にレンダリングする
それでも良い出発点ではある
今のRustにおけるWebレンダリングの主な障害は、より優れたテキストレイアウト、特に
display: inline-blockのようにテキスト内に非テキストコンテンツを入れるサポートだと思うそれが実装されれば、基本的なWebページのレンダリングはかなりうまくできるようになると思う
それぞれGPUベースのコンポジターとCSSエンジンである
ServoはRustで書かれたWebレンダリングエンジンで、WebGLとWebGPUをサポートし、デスクトップ・モバイル・組み込みアプリケーション向けに適応できる
埋め込み可能で独立しており、メモリ安全性、モジュール性、並列性を備えたWebレンダリングエンジンである
比較対象として使われているLegacy Layoutとは何だろう?
Servoの以前のイテレーションなのか?
一部のコードは両方で今も使われているように見え、曲線が時々同時に上下することもあるが、常にそうではない
その後、CSS仕様の一部を実装する際にLayout 2013のアーキテクチャにきれいに収まらない問題を解決するため、2つ目のシステムであるLayout 2020が始まった
今年Servo WikiにIgaliaの人たちが書いた良いレポートがあり、2つのシステムの違いと、なぜLayout 2020へ進むことにしたのかがまとめられている
https://github.com/servo/servo/wiki/Servo-Layout-Engines-Rep...