1 points par GN⁺ 3 시간 전 | 1 commentaires | Partager sur WhatsApp
  • Servo 0.3.0 est une version qui intègre d’un coup 391 commits fusionnés en mai, couvrant la plateforme Web, l’API d’intégration, les performances, la stabilité et des correctifs de sécurité
  • Côté plateforme Web, la compatibilité avec les sites réels s’élargit grâce à font-variant-*, à la lecture de mp4 sans fast start, à l’encodage des formulaires et à l’ajout d’API DOM
  • Côté sécurité, le runtime JS a été mis à jour vers SpiderMonkey 140.10.1 afin de corriger des bugs de sûreté mémoire, liés à CVE-2026-7322, CVE-2026-7323 et MFSA 2026-36
  • Les utilisateurs et développeurs peuvent exploiter les options --host-file= et --userscripts= de servoshell, ainsi que le blackboxing « Ignore source » du Debugger DevTools de Firefox
  • Les intégrateurs doivent tenir compte de l’exigence Rust 1.88.0 ou supérieur et des breaking changes de SiteDataManager, Preferences et DiagnosticsLogging ; les améliorations de performance se concentrent sur la réduction des parcours de layout et l’unification des pools de threads

Changements de mai inclus dans Servo 0.3.0

  • Servo 0.3.0 inclut les changements fusionnés en mai, soit 391 commits au total
  • De nouvelles fonctionnalités de plateforme Web ont été ajoutées autour des polices, des médias, des formulaires et de la compatibilité de layout
    • Fonctionnalités CSS de polices : font-kerning: none, font-variant-east-asian, font-variant-ligatures, font-variant-numeric, font-variant-position
    • Médias et formulaires : prise en charge des fichiers mp4 sans fast start dans , , ``
    • Layout : layout de ``
  • Plusieurs API DOM ont aussi été ajoutées dans différents domaines standards
    • La propriété onslotchange a été ajoutée à ShadowRoot
    • screenLeft et screenTop ont été ajoutées à Window
    • new Blob() prend en charge {endings: "native"}
    • new PerformanceMark() a été ajouté
    • parseHTML() a été ajouté à Document
    • readAsBinaryString() a été ajouté à FileReader
    • performance.measure() prend en charge les valeurs de mark redirectStart, redirectEnd, secureConnectionStart, responseEnd
  • Des problèmes de build sous Windows, FreeBSD, NixOS ou dans les environnements basés sur Nix ont également été corrigés

Sécurité : correctifs de sûreté mémoire dans SpiderMonkey

  • SpiderMonkey 140.10.0, le runtime JS de Servo, contenait plusieurs bugs de sûreté mémoire
  • Servo 0.3.0 corrige ces problèmes avec la mise à jour vers SpiderMonkey 140.10.1
  • Les détails sont disponibles dans CVE-2026-7322, CVE-2026-7323 et MFSA 2026-36

Fonctionnalités Web en cours

  • L’implémentation de document.execCommand() se poursuit pour prendre en charge l’édition de texte riche, sous --pref dom_exec_command_enabled
    • Cette version prend en charge les commandes backColor, foreColor, createLink, unlink, superscript, subscript, removeFormat
    • La commande insertParagraph est partiellement prise en charge
  • Le travail sur la Sanitizer API continue sous --pref dom_sanitizer_enabled
    • Elle est activée dans le mode expérimental de servoshell
    • setComments(), setDataAttributes(), allowProcessingInstruction(), removeProcessingInstruction() et removeUnsafe() ont été ajoutés à Sanitizer
  • IndexedDB continue de s’améliorer sous --pref dom_indexeddb_enabled, avec une meilleure conformité aux standards pour IDBTransaction.abort()
  • Les fonctionnalités ci-dessus sont activées dans le mode expérimental de servoshell
  • La prise en charge de l’accessibilité inclut l’algorithme name from contents et un changement visant à construire l’arbre d’accessibilité progressivement
    • La construction progressive de l’arbre d’accessibilité est importante pour les performances sur du contenu Web réel
  • L’implémentation liée aux workers a également commencé
    • SharedWorker prend en charge new SharedWorker() sous --pref dom_sharedworker_enabled
    • ServiceWorker ajoute une partie de l’API sous --pref dom_serviceworker_enabled

Changements de l’API d’intégration et points de migration

  • La version minimale de Rust prise en charge par Servo, la MSRV, passe de 1.86.0 à 1.88.0 ou supérieur
    • Des tests de compilation sont effectués avec la MSRV, mais la plupart des tests sont réalisés avec Rust 1.95.0
  • Les méthodes de cookies de SiteDataManager comportent des breaking changes
    • clear_cookies, clear_session_cookies et set_cookie_for_url acceptent un argument supplémentaire callback, ce qui permet les appels asynchrones
    • Pour conserver des appels synchrones, passez None à callback
    • set_cookie_for_url_async a été supprimé et doit être remplacé par une forme set_cookie_for_url(Some(Box::new(callback)))
  • L’API Preferences clarifie les noms des paramètres de pools de threads
  • L’API DiagnosticsLogging a aussi été retravaillée
    • Les options se définissent avec toggle_option et leur activation se vérifie avec is_enabled
    • Chaque option est une variante du nouveau type DiagnosticsLoggingOption
    • Les champs pub propres à chaque option de DiagnosticsLogging ont été supprimés ; les écritures et lectures de champs doivent être remplacées respectivement par toggle_option et is_enabled
    • extend_from_string n’accepte plus l’option help, et l’implémentation correspondante a été déplacée dans servoshell

Fonctionnalités pour utilisateurs et développeurs

  • Deux nouvelles options ont été ajoutées à servoshell
    • --host-file= définit le chemin du hosts file et constitue une alternative à la variable d’environnement HOST_FILE
    • --userscripts= indique le répertoire de scripts utilisateur à exécuter dans tous les documents
  • Le blackboxing de scripts est désormais possible dans l’onglet Debugger DevTools de Firefox
    • En cliquant sur « Ignore source », aucun breakpoint ne se déclenche à l’intérieur du script concerné
    • Lors de l’exécution pas à pas dans le débogueur, le comportement doit aussi éviter de s’arrêter à l’intérieur de ce script
    • La précision du panneau Scopes a également été améliorée
  • Les développeurs de Servo eux-mêmes ne peuvent pas utiliser les sorties de grands modèles de langage ou d’outils d’IA générative dans leurs contributions, conformément à la politique du projet
    • Pour faire appliquer cette règle, un contrôle CI refusant les contributions incluant un agent IA comme co-auteur a été ajouté
  • Les problèmes de build avec --features vello ont aussi été corrigés

Améliorations détaillées de la plateforme Web

  • L’affichage par défaut de plusieurs éléments HTML a été amélioré
    • Les éléments concernés sont , , , , , , , , , , , et ``
  • CryptoKey peut désormais être sérialisé et utilisé avec structuredClone() et postMessage()
  • Les messages d’erreur JS de plusieurs parties du DOM ont été améliorés
  • Les améliorations de conformité aux standards couvrent les domaines suivants
    • Soumission de formulaires, navigation au clavier par tabulation, navigation avec URL javascript:
    • En-tête Refresh et ``
    • line-break: anywhere, Location.assign()
    • crypto.subtle.deriveBits(), getComputedStyle(), performance.measure()
    • FileReader.readAsDataURL(), Blob.stream()
    • ML-KEM dans SubtleCrypto
  • Côté WebGPU, GPUSupportedLimits, GPUTexture, GPUDevice.createBindGroup() et d’autres fonctionnalités WebGPU ont été améliorés
  • Les correctifs de bugs couvrent notamment `` et Content-Security-Policy, :active, :hover, align-items, border-image-outset, le padding avec overflow: scroll, l’événement pointerup, l’événement slotchange, l’import() dynamique, CanvasRenderingContext2D.clip(), etc.

Améliorations de performance : réduction des parcours de layout et traitement différé

  • Un outil a été créé pour trouver les allocations non suivies afin d’améliorer about:memory
  • Les pools de threads du cache d’images, du Web Storage et d’IndexedDB ont été unifiés, ce qui réduit le nombre de threads d’OS nécessaires par CPU
  • Les optimisations de layout se concentrent sur la réduction des parcours de fragment tree et des coûts de cache
    • Le fragment tree est devenu en grande partie immuable, ce qui supprime le coût runtime des emprunts AtomicRefCell pour de nombreux accès
    • Le calcul du containing block et la construction du stacking context tree sont, dans la plupart des cas, fusionnés en un seul parcours du fragment tree
    • Le calcul du scrollable overflow est passé à une approche lazy et incrémentale, ce qui élimine pratiquement le parcours complet du fragment tree
    • La mise en cache des fragments, des résultats de shaping et d’autres résultats de layout entre les reflows a été améliorée
    • La précision de l’incremental fragment layout a été renforcée
    • L’utilisation mémoire du text shaping a été réduite
  • Le traitement des attributs DOM a lui aussi été rendu plus efficace
    • Lorsqu’un script écrit des valeurs d’attributs, leur sérialisation est évitée jusqu’à une relecture, et les écritures fréquentes de style inline sont jusqu’à 25 % plus rapides
    • Lors du parsing HTML ou de la lecture interne d’attributs, la création de nœuds Attr est évitée jusqu’à ce qu’un script en ait réellement besoin, ce qui réduit l’utilisation mémoire et le risque de garbage collection
  • Le comportement qui parcourait l’ensemble du DOM tree chaque fois que était attaché à l’arbre a été supprimé, ce qui se ressent lors du parsing de documents comportant de nombreuses balises
  • Le lock des feuilles de style utilise AtomicRefCell, plus efficace que parking_lot::RwLock
  • Sur OpenHarmony, un vrai refresh driver a été ajouté, ce qui réduit l’utilisation CPU en idle, et la liste des polices est mise en cache sur disque pour accélérer le démarrage
  • Pour améliorer les temps de build, davantage de code a été extrait de l’énorme crate script, et la taille de l’arbre de dépendances a également été réduite

Correctifs de stabilité et utilisation du système de types

  • Plusieurs crashs et blocages ont été corrigés
    • content, MediaStream, Element.attributes.item(), CSSKeyframesRule.appendRule(), FocusEvent.initEvent(), Window.stop()
    • document.execCommand("delete")
    • Builds --debug-mozjs
    • Évaluation de scripts pendant une pause dans DevTools
    • Aperçu de certaines valeurs JS dans DevTools
    • Shaping des espaces sans chasse dans layout
    • Bascule du mode expérimental de servoshell au runtime
  • Le travail de long terme consistant à utiliser le système de types de Rust pour rendre impossibles certains échecs de borrow dynamique se poursuit

Contributeurs et état du sponsoring

  • 9 personnes ont fusionné leur premier patch dans Servo
    • AbdAlRahman Gad, Onyeka Obi, Steve Sharon Sam, avis137, Xabier Rodríguez, June, Matt Van Horn, nicole, panxt8
  • Une liste d’issues adaptées aux nouveaux contributeurs est disponible via la curated list
  • Le sponsoring récurrent atteint 7 659 dollars par mois, soit une hausse de 4,2 % par rapport à avril
    • Les fonds servent à financer la CI et les serveurs de benchmarking, les stagiaires Outreachy et le travail des maintainers
  • Sur thanks.dev, 35 utilisateurs GitHub dépendant de Servo sponsorisent le projet, soit 2 de plus qu’en avril
  • L’utilisation des fonds est décidée via le funding request process public du Technical Steering Committee, et les propositions actives sont suivies dans servo/project#187

1 commentaires

 
GN⁺ 3 시간 전
Avis sur Lobste.rs
  • Ravi de voir que lobste.rs fonctionne presque parfaitement dans Servo
    Ce qui saute aux yeux, c’est surtout que les liens en gras ne s’affichent pas en gras, que la police semble un peu étrange (ça fait penser à Fira Sans), que les champs de saisie de la page de connexion sont trop fins, et que si on clique dans ce champ de texte, le curseur ne se place pas là où on a cliqué
    Comme il a été dit dans les commentaires que le moteur JavaScript est le même que dans Firefox, globalement cela semble fonctionner comme prévu
    Édition : en activant les paramètres expérimentaux, le problème du gras est résolu
  • Servo est en développement depuis des années ; au fond, à quoi ça sert ?
    • Servo était un projet expérimental lancé par Mozilla pour créer un nouveau navigateur en Rust
      L’un des objectifs principaux était Microsoft HoloLens, mais le projet a finalement été abandonné à grande échelle, et certains composants ont été intégrés à Firefox
      Par exemple, le moteur CSS, qui était difficile à écrire en C++ à cause de ses caractéristiques multithread, en faisait partie
      Igalia a ensuite repris le flambeau comme nouveau responsable du projet, et essaie de le relancer pour en faire un nouveau concurrent
      Le moteur JavaScript est le même que dans Firefox
    • Le projet a commencé en 2012, mais, à ma connaissance, son développement est resté au point mort pendant plusieurs années avant de reprendre rapidement tout récemment
      L’objectif est de disposer d’une alternative aux principaux moteurs de navigateur, en particulier pour apporter davantage de concurrence à Blink, le moteur de Chrome
    • Implémenter un moteur de navigateur dans un langage sûr du point de vue mémoire, capable d’exploiter plus facilement le parallélisme et la concurrence pris en charge par le matériel actuel, reste un avantage majeur, tout comme au lancement du projet
      Il est aussi important d’avoir une implémentation distincte de la plateforme web, hors de l’influence des géants de la tech
      Google a aujourd’hui beaucoup trop de pouvoir, et Mozilla donne depuis des années une image proche du pire
      Donc, au moins en ce qui me concerne, je donne quelques dollars chaque mois