1 Punkte von GN⁺ 3 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • 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
  • Auch die DOM-API wurde in mehreren Standardbereichen erweitert
    • Die Eigenschaft onslotchange wurde zu ShadowRoot hinzugefügt
    • screenLeft und screenTop wurden zu Window hinzugefügt
    • new Blob() unterstützt {endings: "native"}
    • new PerformanceMark() wurde hinzugefügt
    • parseHTML() wurde zu Document hinzugefügt
    • readAsBinaryString() wurde zu FileReader hinzugefügt
    • performance.measure() unterstützt die Mark-Werte redirectStart, redirectEnd, secureConnectionStart, responseEnd
  • 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 insertParagraph wird teilweise unterstützt
  • Die Arbeit an der Sanitizer API läuft unter --pref dom_sanitizer_enabled weiter
    • Sie ist im experimentellen Modus von servoshell aktiviert
    • setComments(), setDataAttributes(), allowProcessingInstruction(), removeProcessingInstruction() und removeUnsafe() von Sanitizer wurden hinzugefügt
  • IndexedDB wird unter --pref dom_indexeddb_enabled weiter verbessert; die Standardkonformität von IDBTransaction.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
    • SharedWorker unterstützt unter --pref dom_sharedworker_enabled new SharedWorker()
    • Für ServiceWorker wurden unter --pref dom_serviceworker_enabled Teile 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_cookies und set_cookie_for_url nehmen ein zusätzliches Argument callback entgegen und können nun asynchron aufgerufen werden
    • Um synchrone Aufrufe beizubehalten, wird None an callback übergeben
    • set_cookie_for_url_async wurde entfernt und muss durch die Form set_cookie_for_url(Some(Box::new(callback))) ersetzt werden
  • In der Preferences-API wurden die Namen der Thread-Pool-Einstellungen bereinigt
  • Auch die DiagnosticsLogging-API wurde überarbeitet
    • Optionen werden mit toggle_option gesetzt, und mit is_enabled wird geprüft, ob sie aktiviert sind
    • Jede Option ist eine Variante des neuen Typs DiagnosticsLoggingOption
    • Die optionsspezifischen pub-Felder von DiagnosticsLogging wurden entfernt; Schreib- und Lesezugriffe auf Felder müssen durch toggle_option bzw. is_enabled ersetzt werden
    • extend_from_string nimmt die Option help nicht mehr entgegen; die entsprechende Implementierung wurde nach servoshell verschoben

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 Umgebungsvariable HOST_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 vello wurden ebenfalls behoben

Detaillierte Verbesserungen der Webplattform

  • Die Standarddarstellung mehrerer HTML-Elemente wurde verbessert
    • Betroffen sind , , , , , , , , , , , und ``
  • CryptoKey ist nun serialisierbar und kann in structuredClone() und postMessage() 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
  • 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, padding bei overflow: scroll, pointerup-Events, slotchange-Events, dynamisches import() und CanvasRenderingContext2D.clip()

Performance-Verbesserungen: weniger Layout-Traversals und verzögerte Verarbeitung

  • Für Verbesserungen an about:memory wurde 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
  • 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

 
GN⁺ 3 시간 전
Meinungen auf Lobste.rs
  • Ich freue mich, dass lobste.rs in Servo fast perfekt funktioniert
    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
  • Servo wird seit Jahren entwickelt, aber was bringt das eigentlich?
    • Servo war ein experimentelles Projekt, das Mozilla begonnen hat, um einen neuen Browser in Rust zu bauen
      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 Projekt begann 2012, aber soweit ich weiß, stagnierte die Entwicklung einige Jahre und wurde erst vor Kurzem wieder mit hohem Tempo aufgenommen
      Das Ziel ist, eine Alternative zu den großen Browser-Engines zu haben und insbesondere der Chrome-Engine Blink mehr Konkurrenz zu machen
    • Eine Browser-Engine in einer speichersicheren Sprache zu implementieren, die Parallelität und Nebenläufigkeit, wie sie heutige Hardware unterstützt, leichter nutzen kann, ist weiterhin ein großer Vorteil, genauso wie zu Beginn des Projekts
      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