Servo 0.4.0 est sorti le trente et un juillet avec 558 commits, le plus gros total mensuel de l'histoire du projet, et le fil rouge n'est pas le benchmark mais les vrais sites. lichess.org se met en page correctement. Google Photos fonctionne. Zulip a cessé de massacrer les polices variables et Speedtest est devenu lisible. En dessous, le moteur a gagné SharedWorker, neuf media queries qu'il n'implémentait pas, la capture de pointeur, les gestionnaires d'événements tactiles et plusieurs fonctions CSS dont attr() et les expressions mathématiques résolues tardivement. Vingt nouveaux contributeurs ont livré leur premier correctif. Si vous suiviez Servo par curiosité, c'est la version où l'écart de compatibilité commence à se refermer visiblement.
The short answer
Servo 0.4.0 est sorti le trente et un juillet, regroupant les 558 commits livrés en juin. Le travail de compatibilité en est la moitié visible : lichess.org se met en page correctement, Google Photos et Cash Converters fonctionnent, Zulip a cessé de casser sur les polices variables et Speedtest est devenu lisible. La moitié plateforme a ajouté SharedWorker, neuf media queries jusqu'ici absentes, la capture de pointeur, les gestionnaires tactiles et plusieurs fonctions CSS dont attr(). Les performances progressent par petits pas, avec BoxFragment en baisse de 17% et la consommation des canvas 2D en baisse de 23%. Google Maps et OpenStreetMap s'affichent mais gardent des soucis d'interaction.
Il existe une façon bien particulière dont les moteurs de rendu indépendants échouent, et ce n'est pas sur la conformité aux standards. Ils passent les suites de tests, puis on charge un vrai site et la mise en page s'effondre, parce que les vrais sites dépendent d'une centaine de petits comportements qu'aucun test de conformité ne couvre. Servo est du bon côté des suites de tests depuis des années. Cette version parle de l'autre moitié.
Les sites, qui sont la vraie information
lichess.org se met en page correctement désormais. Zulip a cessé de mal gérer les polices variables. Speedtest est passé d'illisible à lisible. Google Photos et Cash Converters fonctionnent.
Cette liste ressemble à de l'anecdote jusqu'à ce qu'on regarde sur quoi chacun de ces sites s'appuie. Un site d'échecs est un problème de canvas et de capture de pointeur. Zulip est un problème de police variable et de mise en page dense. Google Photos est une grille virtualisée à chargement paresseux. Ce ne sont pas des pages décoratives. Ce sont les catégories d'applications qui cassent les moteurs.
Google Maps et OpenStreetMap occupent une position intermédiaire : ils s'affichent bien, mais l'interaction n'est toujours pas correcte. C'est une description juste de l'état général du moteur. Peindre la page est réglé depuis un moment. Répondre correctement à un glisser sur une surface de tuiles est la moitié la plus difficile.
Neuf media queries manquantes, c'est beaucoup
Le changement le plus responsable du fait que des sites se comportent soudain bien, c'est le lot de media queries : device-width, device-height, height, aspect-ratio, orientation, pointer, any-pointer, hover et any-hover.
Regardez ce que fait une media query non implémentée. Elle ne produit pas d'erreur. La requête ne correspond simplement jamais, donc le site prend en silence une branche que ses auteurs n'avaient pas prévue, et vous obtenez une mise en page destinée à un autre appareil appliquée discrètement au vôtre. Neuf d'entre elles, dans une feuille de style responsive moderne, suffisent à rendre presque n'importe quel site subtilement faux d'une manière très difficile à attribuer.
Pour le reste du CSS, attr() est arrivé derrière le drapeau expérimental, image(<color>) fonctionne comme forme de dégradé, closest-corner et farthest-corner sont pris en charge dans les fonctions de dégradé, calc() et d'autres expressions mathématiques se résolvent maintenant à des étapes plus tardives, et font-feature-settings fonctionne dans @font-face. Ce dernier point explique directement pourquoi Zulip a cessé de casser.
Les API de plateforme, et l'histoire des entrées
SharedWorker est l'ajout DOM notable, et il débloque toute une classe d'applications qui coordonnent un état entre onglets.
Les ajouts côté entrées comptent plus que leur taille ne le laisse croire. setPointerCapture(), releasePointerCapture() et hasPointerCapture() sont arrivés ensemble, avec les gestionnaires d'événements tactiles. La capture de pointeur, c'est ce qui permet à un élément de continuer à recevoir des événements après que le curseur a quitté ses limites, autrement dit le mécanisme derrière chaque glisser, chaque curseur de réglage et chaque déplacement de carte sur le web. Sans elle, une page peut être parfaite à l'écran et inutilisable, ce qui est précisément la situation de Google Maps décrite plus haut.
Le reste de la liste : console.dir(), customElementRegistry sur Document et ShadowRoot, initialize() sur CustomElementRegistry, un new CustomElementRegistry() constructible, et textStream() sur Request, Response et Blob. S'ajoute un ensemble de primitives cryptographiques couvrant KT128, KT256, ML-KEM et ML-DSA, ce qui met les algorithmes post quantiques en place avant que quiconque en ait besoin.
Les performances, mesurées honnêtement
Les chiffres sont petits et précis, ce qui est bon signe. BoxFragment est passé de 288 octets à 240 sur amd64, une réduction de 17% de la structure que la mise en page alloue plus que toute autre. Les canvas 2D consomment 23% d'énergie en moins. La surcharge du processus de mise en page a baissé de plus de 1%, HTMLCollection s'est amélioré de plus de 1%, et les micro benchmarks limités par la mise en page tournent jusqu'à 10% plus vite. Le décodage d'images et le remplissage du cache sont devenus asynchrones.
Seize bugs de plantage ont été corrigés, touchant <iframe>, <slot>, les animations, clip-path et transform-style. Les corrections de plantage sont la ligne la moins glorieuse d'une note de version et celle qui décide le plus si quelqu'un peut se servir de la chose.
servoshell a rattrapé les bases du bureau
Le navigateur de démonstration a gagné l'ouverture de fichiers par glisser déposer, le défilement horizontal de la barre d'onglets, un plein écran qui vise correctement l'écran contenant la fenêtre, un redimensionnement plus fluide, un <select multiple> interactif sur toutes les plateformes, et une barre d'adresse qui suppose http:// quand vous tapez localhost:<port>. Sur Android, le minimum est désormais Android 13.
Rien de tout cela n'est du travail de moteur. Tout cela fait la différence entre une démonstration utilisable dix minutes et une que l'on referme aussitôt.
Où en est réellement le projet
Les dons récurrents s'établissent à 7 681 dollars par mois, en hausse de 0,2% sur mai, avec 35 sponsors GitHub via thanks.dev. C'est un budget modeste pour un moteur de rendu, et cela rend le chiffre des contributeurs plus intéressant : 20 personnes ont livré un premier correctif pendant ce cycle, et le projet garde délibérément un stock de tickets accessibles aux débutants pour que cela continue.
La tendance des commits vaut plus que n'importe quel mois isolé. Environ 130 commits par mois en septembre 2023, 534 en avril, 391 en mai, 558 en juin. C'est un projet qui capitalise, pas qui fait un pic.
Sources et pour aller plus loin
- Servo : June in Servo, compatibilité réelle, media queries, SharedWorker et plus
- Servo 0.4.0 sur GitHub
- LWN : Servo 0.4.0 released
- Phoronix : le moteur Servo 0.4 affiche correctement plus de sites
- Obtenir servoshell
Questions fréquentes
Servo est il utilisable comme navigateur au quotidien ?
Non, et le projet ne le prétend pas. Ce qui est publié, c'est servoshell, un navigateur de démonstration qui existe pour exercer le moteur, et les notes de version disent explicitement qu'il s'agit d'un navigateur de test. La lecture honnête de la 0.4.0, c'est que l'ensemble des sites qui s'affichent correctement s'est élargi de façon notable, de lichess.org à Google Photos, tandis que Google Maps et OpenStreetMap s'affichent bien mais gardent des problèmes d'interaction. C'est un vrai progrès de compatibilité et cela reste loin d'un navigateur que vous mettriez devant un utilisateur non technique. La cible affichée de Servo a toujours été l'embarqué plutôt que la concurrence frontale.
Qu'est ce que Servo a ajouté côté CSS ?
La fonction attr() derrière le drapeau expérimental, image(<color>) comme forme de dégradé, closest-corner et farthest-corner dans les fonctions de dégradé, calc() et d'autres expressions mathématiques qui se résolvent à des étapes plus tardives, et font-feature-settings à l'intérieur de @font-face. Le travail sur les media queries est le lot le plus immédiatement visible : device-width, device-height, height, aspect-ratio, orientation, pointer, any-pointer, hover et any-hover sont tous arrivés dans ce cycle. Neuf media queries manquantes, c'est beaucoup, et les avoir explique en grande partie pourquoi des sites se mettent soudain en page correctement au lieu de retomber sur une branche qui ne leur était pas destinée.
Quelles API DOM sont nouvelles ?
SharedWorker est la principale. À côté : console.dir(), customElementRegistry sur Document et sur ShadowRoot, initialize() sur CustomElementRegistry, un new CustomElementRegistry() constructible, textStream() sur Request, Response et Blob, les trois méthodes de capture de pointeur setPointerCapture, releasePointerCapture et hasPointerCapture, et les gestionnaires d'événements tactiles. S'ajoute un lot de primitives cryptographiques couvrant KT128, KT256, ML-KEM et ML-DSA. La capture de pointeur et le tactile sont les ajouts qui font passer une page de « s'affiche correctement » à « répond réellement aux entrées », une distinction qui compte énormément sur les sites à base de cartes et de canvas.
Quel gain de performance ?
Les gains sont incrémentaux plutôt que spectaculaires, ce qui est exactement ce que l'on veut d'un moteur de mise en page à ce stade. BoxFragment a rétréci de 17%, de 288 octets à 240 sur amd64. Les canvas 2D consomment 23% d'énergie en moins. La surcharge du processus de mise en page a baissé de plus de 1% et HTMLCollection s'est amélioré de plus de 1%. Les micro benchmarks limités par la mise en page tournent jusqu'à 10% plus vite. Le décodage d'images et le remplissage du cache sont devenus asynchrones. Aucun de ces chiffres ne change une décision à lui seul, mais réduire de 17% la structure de mise en page la plus allouée finit par compter sur une grande page.
Comment le projet est il financé et staffé ?
Servo vit de dons récurrents totalisant 7 681 dollars par mois selon les chiffres de juin, en hausse de 0,2% sur mai, plus 35 utilisateurs GitHub qui sponsorisent via thanks.dev. Le côté contributeurs se porte mieux que la ligne de financement ne le suggère : 20 personnes ont livré un premier correctif pendant le cycle, et le projet maintient délibérément des tickets accessibles aux débutants pour garder ce flux ouvert. Le volume de commits croît à peu près linéairement depuis trois ans, d'environ 130 par mois en septembre 2023 à 558 en juin 2026, ce qui est un signal de santé plus utile que le total d'un seul mois.