- Servo 0.3.0 ist ein Release mit 391 im Mai gemergten Commits und bündelt Korrekturen für Webplattform, Embedding-API, Performance, Stabilität und Sicherheit
- Die Webplattform erweitert die Kompatibilität mit echten Websites durch
font-variant-*, Wiedergabe von mp4 `` ohne Fast Start, Formular-Encoding und zusätzliche DOM-APIs - Auf der Sicherheitsseite wurde die JS-Runtime auf SpiderMonkey 140.10.1 angehoben, um Memory-Safety-Bugs zu beheben; dies steht im Zusammenhang mit CVE-2026-7322, CVE-2026-7323 und MFSA 2026-36
- Nutzer und Entwickler können in servoshell die Optionen
--host-file=und--userscripts=sowie das Blackboxing „Ignore source“ im Firefox DevTools Debugger nutzen - Embedder müssen die Anforderung Rust 1.88.0 oder höher sowie Breaking Changes bei SiteDataManager, Preferences und DiagnosticsLogging berücksichtigen; Performance-Verbesserungen konzentrieren sich auf weniger Layout-Traversals und die Zusammenlegung von Thread-Pools
In Servo 0.3.0 enthaltene Änderungen aus dem Mai
- Servo 0.3.0 enthält die im Mai gemergten Änderungen, insgesamt 391 Commits
- Neue Webplattform-Funktionen wurden in den Bereichen Schriftarten, Medien, Formulare und Layout-Kompatibilität ergänzt
- CSS-Schriftfunktionen:
font-kerning: none,font-variant-east-asian,font-variant-ligatures,font-variant-numeric,font-variant-position - Medien und Formulare: Unterstützung für mp4-Dateien
ohne Fast Start,, `` - Layout: ``-Layout
- CSS-Schriftfunktionen:
- Auch die DOM-API wurde in mehreren Standardbereichen erweitert
- Die Eigenschaft
onslotchangewurde zu ShadowRoot hinzugefügt screenLeftundscreenTopwurden zu Window hinzugefügtnew Blob()unterstützt{endings: "native"}new PerformanceMark()wurde hinzugefügtparseHTML()wurde zu Document hinzugefügtreadAsBinaryString()wurde zu FileReader hinzugefügtperformance.measure()unterstützt die Mark-WerteredirectStart,redirectEnd,secureConnectionStart,responseEnd
- Die Eigenschaft
- Außerdem wurden Build-Probleme unter Windows, FreeBSD, NixOS oder in Nix-basierten Umgebungen behoben
Sicherheit: Memory-Safety-Fixes in SpiderMonkey
- SpiderMonkey 140.10.0, die JS-Runtime von Servo, enthielt mehrere Memory-Safety-Bugs
- Servo 0.3.0 behebt diese Probleme durch das Update auf SpiderMonkey 140.10.1
- Details finden sich unter CVE-2026-7322, CVE-2026-7323 und MFSA 2026-36
Laufende Webfunktionen
- Die Implementierung von
document.execCommand()schreitet zur Unterstützung von Rich-Text-Bearbeitung weiter voran und läuft unter--pref dom_exec_command_enabled- Dieses Release unterstützt die Befehle
backColor,foreColor,createLink,unlink,superscript,subscript,removeFormat - Der Befehl
insertParagraphwird teilweise unterstützt
- Dieses Release unterstützt die Befehle
- Die Arbeit an der Sanitizer API läuft unter
--pref dom_sanitizer_enabledweiter- Sie ist im experimentellen Modus von servoshell aktiviert
setComments(),setDataAttributes(),allowProcessingInstruction(),removeProcessingInstruction()undremoveUnsafe()vonSanitizerwurden hinzugefügt
- IndexedDB wird unter
--pref dom_indexeddb_enabledweiter verbessert; die Standardkonformität vonIDBTransaction.abort()wurde erhöht - Die genannten Funktionen sind im experimentellen Modus von servoshell aktiviert
- Die Unterstützung für Barrierefreiheit umfasst Änderungen am Algorithmus name from contents und den schrittweisen Aufbau des Accessibility Tree
- Der schrittweise Aufbau des Accessibility Tree ist wichtig für die Performance realer Webinhalte
- Auch Implementierungen rund um Worker wurden begonnen
SharedWorkerunterstützt unter--pref dom_sharedworker_enablednew SharedWorker()- Für
ServiceWorkerwurden unter--pref dom_serviceworker_enabledTeile der API hinzugefügt
Änderungen an der Embedding-API und Migrationspunkte
- Die Minimum Supported Rust Version, MSRV, von Servo wurde von 1.86.0 auf 1.88.0 oder höher angehoben
- Compile-Tests werden mit der MSRV ausgeführt, die meisten Tests jedoch mit Rust 1.95.0
- Bei den Cookie-Methoden von SiteDataManager gibt es Breaking Changes
clear_cookies,clear_session_cookiesundset_cookie_for_urlnehmen ein zusätzliches Argumentcallbackentgegen und können nun asynchron aufgerufen werden- Um synchrone Aufrufe beizubehalten, wird
Noneancallbackübergeben set_cookie_for_url_asyncwurde entfernt und muss durch die Formset_cookie_for_url(Some(Box::new(callback)))ersetzt werden
- In der Preferences-API wurden die Namen der Thread-Pool-Einstellungen bereinigt
threadpools_image_cache_workers_max,threadpools_indexeddb_workers_maxundthreadpools_webstorage_workers_maxwurden durch das vereinheitlichtethread_pool_workers_maxersetztthreadpools_fallback_worker_numwurde inthread_pool_fallback_workersumbenanntthreadpools_async_runtime_workers_maxwurde inthread_pool_async_runtime_workers_maxumbenanntthreadpools_webrender_workers_maxwurde inthread_pool_webrender_workers_maxumbenannt
- Auch die DiagnosticsLogging-API wurde überarbeitet
- Optionen werden mit
toggle_optiongesetzt, und mitis_enabledwird geprüft, ob sie aktiviert sind - Jede Option ist eine Variante des neuen Typs
DiagnosticsLoggingOption - Die optionsspezifischen
pub-Felder vonDiagnosticsLoggingwurden entfernt; Schreib- und Lesezugriffe auf Felder müssen durchtoggle_optionbzw.is_enabledersetzt werden extend_from_stringnimmt die Optionhelpnicht mehr entgegen; die entsprechende Implementierung wurde nach servoshell verschoben
- Optionen werden mit
Funktionen für Nutzer und Entwickler
- In servoshell wurden zwei neue Optionen hinzugefügt
--host-file=legt den Pfad zur hosts file fest und ist eine Alternative zur UmgebungsvariableHOST_FILE--userscripts=gibt ein Verzeichnis für Userscripts an, die in allen Dokumenten ausgeführt werden sollen
- Im Tab DevTools Debugger von Firefox ist nun Script-Blackboxing möglich
- Wenn „Ignore source“ angeklickt wird, werden innerhalb dieses Scripts keine Breakpoints ausgelöst
- Auch beim schrittweisen Durchlaufen im Debugger sollte nicht innerhalb dieses Scripts angehalten werden
- Die Genauigkeit des Panels Scopes wurde ebenfalls verbessert
- Servo-Entwickler selbst dürfen gemäß Projektpolitik keine Ausgaben von Large Language Models oder generativen KI-Tools für Beiträge verwenden
- Um dies durchzusetzen, wurde ein CI-Check hinzugefügt, der Beiträge ablehnt, bei denen ein AI Agent als Co-Autor enthalten ist
- Build-Probleme mit
--features vellowurden ebenfalls behoben
Detaillierte Verbesserungen der Webplattform
- Die Standarddarstellung mehrerer HTML-Elemente wurde verbessert
- Betroffen sind
,,,,,,,,,,,und ``
- Betroffen sind
- CryptoKey ist nun serialisierbar und kann in
structuredClone()undpostMessage()verwendet werden - JS-Fehlermeldungen in mehreren Teilen des DOM wurden verbessert
- Verbesserungen der Standardkonformität betreffen folgende Bereiche
- Formularübermittlung, Tab-Navigation, Navigation über
javascript:-URLs Refresh-Header und ``line-break: anywhere,Location.assign()crypto.subtle.deriveBits(),getComputedStyle(),performance.measure()FileReader.readAsDataURL(),Blob.stream()- ML-KEM in
SubtleCrypto
- Formularübermittlung, Tab-Navigation, Navigation über
- Bei WebGPU wurden
GPUSupportedLimits,GPUTexture,GPUDevice.createBindGroup()und weitere WebGPU-Funktionen verbessert - Bugfixes betreffen unter anderem `` und
Content-Security-Policy,:active,:hover,align-items,border-image-outset,paddingbeioverflow: scroll,pointerup-Events,slotchange-Events, dynamischesimport()undCanvasRenderingContext2D.clip()
Performance-Verbesserungen: weniger Layout-Traversals und verzögerte Verarbeitung
- Für Verbesserungen an
about:memorywurde ein Tool erstellt, das nicht verfolgte Allokationen findet - Die Thread-Pools für Image Cache, Web Storage und IndexedDB wurden zusammengelegt, wodurch pro CPU weniger OS-Threads benötigt werden
- Layout-Optimierungen konzentrieren sich darauf, Traversals des fragment tree und Caching-Kosten zu reduzieren
- Der fragment tree ist größtenteils unveränderlich geworden, wodurch bei vielen Zugriffen die Laufzeitkosten von
AtomicRefCell-Borrows entfallen - Die Berechnung des containing block und der Aufbau des stacking context tree wurden in den meisten Fällen zu einem einzigen Traversal des fragment tree zusammengeführt
- Die Berechnung des scrollable overflow wurde auf eine lazy und inkrementelle Methode umgestellt, sodass vollständige Traversals des fragment tree praktisch entfallen
- Das Caching von Fragments, Shaping-Ergebnissen und weiteren Layout-Ergebnissen zwischen Reflows wurde verbessert
- Die Präzision des incremental fragment layout wurde erhöht
- Der Speicherverbrauch beim Text-Shaping wurde reduziert
- Der fragment tree ist größtenteils unveränderlich geworden, wodurch bei vielen Zugriffen die Laufzeitkosten von
- Auch die Verarbeitung von DOM attributes wurde effizienter
- Wenn ein Script Attributwerte schreibt, wird die Serialisierung bis zum erneuten Lesen vermieden; häufiges Schreiben von inline style wird dadurch um bis zu 25 % schneller
- Beim HTML-Parsing oder beim internen Lesen von Attributen wird die Erstellung von
Attr-Nodes vermieden, bis ein Script sie tatsächlich benötigt, wodurch Speicherverbrauch und mögliche Garbage Collection reduziert werden
- Das Verhalten, bei dem jedes Mal der gesamte DOM tree traversiert wurde, wenn
an den Tree angehängt wurde, wurde entfernt; das macht sich beim Parsen von Dokumenten mit vielen-Tags bemerkbar - Das stylesheet lock verwendet AtomicRefCell, das effizienter ist als
parking_lot::RwLock - Unter OpenHarmony wurde ein echter refresh driver hinzugefügt, wodurch die CPU-Nutzung im Leerlauf sinkt; außerdem wird die font list auf die Festplatte gecacht, was den Start beschleunigt
- Zur Verbesserung der Build-Zeit wurde weiterer Code aus der riesigen script crate ausgelagert, und auch die Größe des Dependency Tree wurde reduziert
Stabilitätsfixes und Nutzung des Typsystems
- Mehrere Crashes und Hänger wurden behoben
content,MediaStream,Element.attributes.item(),CSSKeyframesRule.appendRule(),FocusEvent.initEvent(),Window.stop()document.execCommand("delete")--debug-mozjs-Builds- Script-Auswertung während einer Pause in DevTools
- Vorschau bestimmter JS-Werte in DevTools
- Shaping von zero-width spaces im Layout
- Umschalten des experimentellen Modus von servoshell zur Laufzeit
- Die langfristige Arbeit, das Rust-Typsystem zu nutzen, um bestimmte dynamische Borrow-Fehler unmöglich zu machen, geht weiter
Beitragende und Sponsoring-Status
- 9 Personen haben ihren ersten Patch in Servo gemergt
- AbdAlRahman Gad, Onyeka Obi, Steve Sharon Sam, avis137, Xabier Rodríguez, June, Matt Van Horn, nicole, panxt8
- Eine Liste geeigneter Issues für neue Beitragende wird als curated list bereitgestellt
- Wiederkehrendes Sponsoring liegt bei 7659 US-Dollar pro Monat, ein Anstieg um 4,2 % gegenüber April
- Die Sponsorengelder werden für CI- und Benchmarking-Server, Outreachy-Praktikanten und die Unterstützung von Maintainer-Arbeit verwendet
- Auf thanks.dev sponsern 35 GitHub-Nutzer, die von Servo abhängen; das sind 2 mehr als im April
- Über die Verwendung von Sponsorengeldern wird durch den öffentlichen funding request process des Technical Steering Committee entschieden; aktive Vorschläge werden in servo/project#187 verfolgt
1 Kommentare
Meinungen auf Lobste.rs
Aufgefallen ist mir nur, dass fette Links nicht fett dargestellt werden, die Schrift etwas merkwürdig wirkt (fühlt sich wie Fira Sans an), die Eingabefelder auf der Login-Seite zu dünn sind und dass der Cursor beim Klicken in dieses Textfeld nicht an der angeklickten Stelle landet
In den Kommentaren hieß es, dass die JavaScript-Engine dieselbe wie in Firefox ist, daher scheint es insgesamt wie erwartet zu funktionieren
Bearbeitung: Nachdem ich die experimentellen Einstellungen aktiviert habe, ist das Problem mit dem Fettdruck behoben
Eines der Hauptziele war Microsoft HoloLens, aber als größeres Projekt wurde es schließlich eingestellt, und einige Komponenten wurden in Firefox übernommen
Dazu gehört zum Beispiel die CSS-Engine, die wegen ihrer Multithreading-Eigenschaften in C++ schwer umzusetzen war
Danach hat Igalia übernommen und ist zur neuen betreuenden Organisation geworden; nun versucht man, das Projekt wiederzubeleben und zu einem neuen Konkurrenten zu machen
Die JavaScript-Engine ist dieselbe wie in Firefox
Das Ziel ist, eine Alternative zu den großen Browser-Engines zu haben und insbesondere der Chrome-Engine Blink mehr Konkurrenz zu machen
Wichtig ist auch, eine separate Implementierung der Webplattform zu haben, die außerhalb des Einflusses der großen Tech-Konzerne steht
Google hat inzwischen zu viel Macht, und Mozilla hat sich über Jahre hinweg fast von seiner schlechtesten Seite gezeigt
Deshalb spende zumindest ich jeden Monat ein paar Dollar