Mise à jour de Servo en mai : scripts utilisateur, compatibilité mp4, blackboxing dans DevTools, etc.
(servo.org)- 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 ``
- Fonctionnalités CSS de polices :
- Plusieurs API DOM ont aussi été ajoutées dans différents domaines standards
- La propriété
onslotchangea été ajoutée à ShadowRoot screenLeftetscreenTopont été ajoutées à Windownew Blob()prend en charge{endings: "native"}new PerformanceMark()a été ajoutéparseHTML()a été ajouté à DocumentreadAsBinaryString()a été ajouté à FileReaderperformance.measure()prend en charge les valeurs de markredirectStart,redirectEnd,secureConnectionStart,responseEnd
- La propriété
- 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
insertParagraphest partiellement prise en charge
- Cette version prend en charge les commandes
- 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()etremoveUnsafe()ont été ajoutés àSanitizer
- IndexedDB continue de s’améliorer sous
--pref dom_indexeddb_enabled, avec une meilleure conformité aux standards pourIDBTransaction.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é
SharedWorkerprend en chargenew SharedWorker()sous--pref dom_sharedworker_enabledServiceWorkerajoute 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_cookiesetset_cookie_for_urlacceptent un argument supplémentairecallback, ce qui permet les appels asynchrones- Pour conserver des appels synchrones, passez
Noneàcallback set_cookie_for_url_asynca été supprimé et doit être remplacé par une formeset_cookie_for_url(Some(Box::new(callback)))
- L’API Preferences clarifie les noms des paramètres de pools de threads
threadpools_image_cache_workers_max,threadpools_indexeddb_workers_maxetthreadpools_webstorage_workers_maxsont remplacés par le champ unifiéthread_pool_workers_maxthreadpools_fallback_worker_numest renomméthread_pool_fallback_workersthreadpools_async_runtime_workers_maxest renomméthread_pool_async_runtime_workers_maxthreadpools_webrender_workers_maxest renomméthread_pool_webrender_workers_max
- L’API DiagnosticsLogging a aussi été retravaillée
- Les options se définissent avec
toggle_optionet leur activation se vérifie avecis_enabled - Chaque option est une variante du nouveau type
DiagnosticsLoggingOption - Les champs
pubpropres à chaque option deDiagnosticsLoggingont été supprimés ; les écritures et lectures de champs doivent être remplacées respectivement partoggle_optionetis_enabled extend_from_stringn’accepte plus l’optionhelp, et l’implémentation correspondante a été déplacée dans servoshell
- Les options se définissent avec
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’environnementHOST_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 velloont 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 ``
- Les éléments concernés sont
- CryptoKey peut désormais être sérialisé et utilisé avec
structuredClone()etpostMessage() - 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
Refreshet `` line-break: anywhere,Location.assign()crypto.subtle.deriveBits(),getComputedStyle(),performance.measure()FileReader.readAsDataURL(),Blob.stream()- ML-KEM dans
SubtleCrypto
- Soumission de formulaires, navigation au clavier par tabulation, navigation avec URL
- 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, lepaddingavecoverflow: scroll, l’événementpointerup, l’événementslotchange, 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
AtomicRefCellpour 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 fragment tree est devenu en grande partie immuable, ce qui supprime le coût runtime des emprunts
- 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
Attrest é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
Avis sur Lobste.rs
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
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
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
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