Actualización de Servo de mayo: scripts de usuario, compatibilidad con mp4, blackboxing en DevTools y más
(servo.org)- Servo 0.3.0 es una versión que incorpora de una vez 391 commits fusionados en mayo, con correcciones para la plataforma web, la API de embedding, rendimiento, estabilidad y seguridad
- La plataforma web amplía la compatibilidad con sitios reales mediante
font-variant-*, reproducción de mp4 sin fast start, codificación de formularios y nuevas API del DOM - En seguridad, se actualizó el runtime JS a SpiderMonkey 140.10.1 para corregir errores de seguridad de memoria, relacionados con CVE-2026-7322, CVE-2026-7323 y MFSA 2026-36
- Usuarios y desarrolladores pueden aprovechar las opciones
--host-file=y--userscripts=de servoshell, y el blackboxing “Ignore source” del DevTools Debugger de Firefox - Quienes hacen embedding deben reflejar el requisito de Rust 1.88.0 o superior y los breaking changes en SiteDataManager, Preferences y DiagnosticsLogging; las mejoras de rendimiento se centran en reducir recorridos de layout y unificar thread pools
Cambios de mayo incluidos en Servo 0.3.0
- Servo 0.3.0 incluye cambios fusionados en mayo, con un total de 391 commits
- Se agregaron nuevas funciones de la plataforma web en áreas de fuentes, medios, formularios y compatibilidad de layout
- Funciones de fuentes CSS:
font-kerning: none,font-variant-east-asian,font-variant-ligatures,font-variant-numeric,font-variant-position - Medios y formularios: soporte para archivos mp4 sin fast start en
,, `` - Layout: layout de ``
- Funciones de fuentes CSS:
- También crecieron las API del DOM en varias áreas estándar
- Se agregó la propiedad
onslotchangea ShadowRoot - Se agregaron
screenLeftyscreenTopa Window new Blob()ahora soporta{endings: "native"}- Se agregó
new PerformanceMark() - Se agregó
parseHTML()a Document - Se agregó
readAsBinaryString()a FileReader performance.measure()ahora soporta los valores de marcaredirectStart,redirectEnd,secureConnectionStartyresponseEnd
- Se agregó la propiedad
- También se corrigieron problemas de build en Windows, FreeBSD, NixOS o entornos basados en Nix
Seguridad: correcciones de seguridad de memoria en SpiderMonkey
- SpiderMonkey 140.10.0, el runtime JS de Servo, tenía varios errores de seguridad de memoria
- Servo 0.3.0 corrige esos problemas con la actualización a SpiderMonkey 140.10.1
- Los detalles pueden consultarse en CVE-2026-7322, CVE-2026-7323 y MFSA 2026-36
Funciones web en desarrollo
- La implementación de
document.execCommand()sigue avanzando para soportar edición de texto enriquecido, y funciona bajo--pref dom_exec_command_enabled- Esta versión soporta los comandos
backColor,foreColor,createLink,unlink,superscript,subscriptyremoveFormat - El comando
insertParagraphtiene soporte parcial
- Esta versión soporta los comandos
- El trabajo en la Sanitizer API continúa bajo
--pref dom_sanitizer_enabled- Está habilitada en el modo experimental de servoshell
- Se agregaron
setComments(),setDataAttributes(),allowProcessingInstruction(),removeProcessingInstruction()yremoveUnsafe()deSanitizer
- IndexedDB sigue mejorando bajo
--pref dom_indexeddb_enabled, yIDBTransaction.abort()ahora se ajusta mejor al estándar - Las funciones anteriores se habilitan en el modo experimental de servoshell
- El soporte de accesibilidad incluye cambios para el algoritmo name from contents y para construir el árbol de accesibilidad de forma incremental
- La construcción incremental del árbol de accesibilidad es importante para el rendimiento con contenido web real
- También comenzó la implementación relacionada con workers
SharedWorkersoportanew SharedWorker()bajo--pref dom_sharedworker_enabledServiceWorkeragrega parte de la API bajo--pref dom_serviceworker_enabled
Cambios en la API de embedding y puntos de migración
- La versión mínima de Rust soportada por Servo, MSRV, subió de 1.86.0 a 1.88.0 o superior
- Se realizan pruebas de compilación con la MSRV, pero la mayoría de las pruebas se hacen con Rust 1.95.0
- Los métodos de cookies de SiteDataManager tienen breaking changes
clear_cookies,clear_session_cookiesyset_cookie_for_urlreciben un argumento adicionalcallback, lo que permite llamadas asíncronas- Para mantener llamadas síncronas, hay que pasar
Noneencallback set_cookie_for_url_asyncfue eliminado y debe reemplazarse por la formaset_cookie_for_url(Some(Box::new(callback)))
- En la API Preferences se ordenaron los nombres de configuración de thread pools
threadpools_image_cache_workers_max,threadpools_indexeddb_workers_maxythreadpools_webstorage_workers_maxse reemplazan por el campo unificadothread_pool_workers_maxthreadpools_fallback_worker_numcambió de nombre athread_pool_fallback_workersthreadpools_async_runtime_workers_maxcambió de nombre athread_pool_async_runtime_workers_maxthreadpools_webrender_workers_maxcambió de nombre athread_pool_webrender_workers_max
- La API DiagnosticsLogging también fue rediseñada
- Las opciones se configuran con
toggle_optiony su activación se comprueba conis_enabled - Cada opción es una variante del nuevo tipo
DiagnosticsLoggingOption - Se eliminaron los campos
pubpor opción deDiagnosticsLogging; la escritura y lectura de campos deben cambiarse atoggle_optioneis_enabled, respectivamente extend_from_stringya no recibe la opciónhelp; esa implementación se movió a servoshell
- Las opciones se configuran con
Funciones para usuarios y desarrolladores
- Se agregaron 2 nuevas opciones a servoshell
--host-file=define la ruta del archivo hosts y es una alternativa a la variable de entornoHOST_FILE--userscripts=especifica un directorio de scripts de usuario que se ejecutarán en todos los documentos
- Ahora es posible hacer blackboxing de scripts en la pestaña DevTools Debugger de Firefox
- Al hacer clic en “Ignore source”, no se activarán breakpoints dentro de ese script
- Al avanzar paso a paso en el depurador, también debería evitar detenerse dentro de ese script
- También mejoró la precisión del panel Scopes
- Los propios desarrolladores de Servo no pueden usar salidas de modelos de lenguaje grandes ni herramientas de IA generativa en sus contribuciones, según la política del proyecto
- Para aplicar esto, se agregó una verificación de CI que rechaza contribuciones que incluyan un AI agent como coautor
- También se corrigió un problema de build con
--features vello
Mejoras detalladas de la plataforma web
- Se mejoró la visualización predeterminada de varios elementos HTML
- Los objetivos son
,,,,,,,,,,,y ``
- Los objetivos son
- CryptoKey ahora es serializable, por lo que puede usarse con
structuredClone()ypostMessage() - Se mejoraron los mensajes de error de JS en varias partes del DOM
- Las mejoras de conformidad con estándares incluyen las siguientes áreas
- Envío de formularios, navegación con tabulador, navegación de URL
javascript: - Header
Refreshy `` line-break: anywhere,Location.assign()crypto.subtle.deriveBits(),getComputedStyle(),performance.measure()FileReader.readAsDataURL(),Blob.stream()- ML-KEM en
SubtleCrypto
- Envío de formularios, navegación con tabulador, navegación de URL
- En WebGPU, se mejoraron
GPUSupportedLimits,GPUTexture,GPUDevice.createBindGroup()y otras funciones de WebGPU - Las correcciones de errores incluyen `` y
Content-Security-Policy,:active,:hover,align-items,border-image-outset,paddingdeoverflow: scroll, eventopointerup, eventoslotchange,import()dinámico,CanvasRenderingContext2D.clip(), entre otros
Mejoras de rendimiento: menos recorridos de layout y procesamiento diferido
- Se creó una herramienta para encontrar asignaciones no rastreadas con el fin de mejorar
about:memory - Se unificaron los thread pools de caché de imágenes, web storage e IndexedDB, reduciendo la cantidad de hilos del sistema operativo necesarios por CPU
- Las optimizaciones de layout se centraron en reducir los costos de recorridos del fragment tree y de caching
- El fragment tree pasó a ser mayormente inmutable, eliminando en muchos accesos el costo en runtime del borrow de
AtomicRefCell - El cálculo del containing block y la construcción del stacking context tree se combinaron, en la mayoría de los casos, en un solo recorrido del fragment tree
- El cálculo de scrollable overflow cambió a un enfoque lazy e incremental, eliminando prácticamente el recorrido completo del fragment tree
- Mejoró el caching de fragments, resultados de shaping y otros resultados de layout entre reflows
- Aumentó la precisión del incremental fragment layout
- Se redujo el uso de memoria del text shaping
- El fragment tree pasó a ser mayormente inmutable, eliminando en muchos accesos el costo en runtime del borrow de
- El procesamiento de DOM attributes también se volvió más eficiente
- Cuando un script escribe valores de atributos, se evita serializarlos hasta que vuelvan a leerse; las escrituras frecuentes de inline style se vuelven hasta 25% más rápidas
- Durante el parsing de HTML o la lectura interna de atributos, se evita crear nodos
Attrhasta que el script realmente los necesite, reduciendo el uso de memoria y la posibilidad de recolección de basura
- Se eliminó el comportamiento que recorría todo el DOM tree cada vez que
se adjuntaba al árbol, algo perceptible al parsear documentos con muchas etiquetas - El stylesheet lock usa AtomicRefCell, más eficiente que
parking_lot::RwLock - En OpenHarmony se agregó un refresh driver real, lo que reduce el uso de CPU en idle, y se cachea la font list en disco para acelerar el inicio
- Para mejorar el tiempo de build, se separó más código del enorme script crate y también se redujo el tamaño del árbol de dependencias
Correcciones de estabilidad y uso del sistema de tipos
- Se corrigieron varios crashes y hangs
content,MediaStream,Element.attributes.item(),CSSKeyframesRule.appendRule(),FocusEvent.initEvent(),Window.stop()document.execCommand("delete")- builds con
--debug-mozjs - evaluación de scripts mientras DevTools está en pausa
- vista previa de algunos valores JS en DevTools
- shaping de zero-width space en layout
- al alternar en runtime el modo experimental de servoshell
- Continúa el trabajo de largo plazo para usar el sistema de tipos de Rust y hacer imposibles ciertas fallas de borrow dinámico
Estado de contribuyentes y patrocinios
- 9 personas fusionaron su primer patch en Servo
- AbdAlRahman Gad, Onyeka Obi, Steve Sharon Sam, avis137, Xabier Rodríguez, June, Matt Van Horn, nicole, panxt8
- La lista de issues adecuados para nuevos contribuyentes está disponible como curated list
- El patrocinio recurrente es de 7659 dólares al mes, un aumento de 4.2% frente a abril
- Los fondos se usan para servidores de CI y benchmarking, interns de Outreachy y apoyo al trabajo de maintainers
- En thanks.dev, 35 usuarios de GitHub que dependen de Servo están patrocinando el proyecto, 2 más que en abril
- El uso de los fondos se decide mediante el funding request process público del Technical Steering Committee, y las propuestas activas se siguen en servo/project#187
1 comentarios
Opiniones en Lobste.rs
Lo que noté fue que los enlaces en negrita no se ven en negrita, la tipografía se siente un poco rara (parece Fira Sans), los campos de entrada de la página de inicio de sesión son demasiado delgados, y al hacer clic en este campo de texto el cursor queda en una posición distinta de donde se hizo clic.
En los comentarios dijeron que el motor de JavaScript es el mismo que Firefox, así que en general parece funcionar como se esperaba.
Edit: al activar una configuración experimental, se solucionó el problema de la negrita.
Uno de sus objetivos principales era Microsoft HoloLens, pero al final se discontinuó como proyecto grande, y algunos componentes terminaron incorporándose a Firefox.
Un ejemplo es el motor CSS, que era difícil de escribir en C++ por sus características multihilo.
Después Igalia lo retomó, se convirtió en su nuevo organismo gestor y está intentando revivir el proyecto para convertirlo en un nuevo competidor.
El motor de JavaScript es el mismo que el de Firefox.
El objetivo es contar con una alternativa a los principales motores de navegador, en especial para darle más competencia a Blink, el motor de Chrome.
También es importante tener una implementación separada de la plataforma web, fuera de la influencia de las grandes tecnológicas.
Google tiene demasiado poder hoy, y Mozilla lleva años mostrando una de sus peores caras.
Por eso, al menos yo lo apoyo con unos cuantos dólares al mes.