1 puntos por GN⁺ 3 시간 전 | 1 comentarios | Compartir por WhatsApp
  • 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 ``
  • También crecieron las API del DOM en varias áreas estándar
    • Se agregó la propiedad onslotchange a ShadowRoot
    • Se agregaron screenLeft y screenTop a 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 marca redirectStart, redirectEnd, secureConnectionStart y responseEnd
  • 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, subscript y removeFormat
    • El comando insertParagraph tiene soporte parcial
  • 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() y removeUnsafe() de Sanitizer
  • IndexedDB sigue mejorando bajo --pref dom_indexeddb_enabled, y IDBTransaction.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
    • SharedWorker soporta new SharedWorker() bajo --pref dom_sharedworker_enabled
    • ServiceWorker agrega 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_cookies y set_cookie_for_url reciben un argumento adicional callback, lo que permite llamadas asíncronas
    • Para mantener llamadas síncronas, hay que pasar None en callback
    • set_cookie_for_url_async fue eliminado y debe reemplazarse por la forma set_cookie_for_url(Some(Box::new(callback)))
  • En la API Preferences se ordenaron los nombres de configuración de thread pools
  • La API DiagnosticsLogging también fue rediseñada
    • Las opciones se configuran con toggle_option y su activación se comprueba con is_enabled
    • Cada opción es una variante del nuevo tipo DiagnosticsLoggingOption
    • Se eliminaron los campos pub por opción de DiagnosticsLogging; la escritura y lectura de campos deben cambiarse a toggle_option e is_enabled, respectivamente
    • extend_from_string ya no recibe la opción help; esa implementación se movió a servoshell

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 entorno HOST_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 ``
  • CryptoKey ahora es serializable, por lo que puede usarse con structuredClone() y postMessage()
  • 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 Refresh y ``
    • line-break: anywhere, Location.assign()
    • crypto.subtle.deriveBits(), getComputedStyle(), performance.measure()
    • FileReader.readAsDataURL(), Blob.stream()
    • ML-KEM en SubtleCrypto
  • 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, padding de overflow: scroll, evento pointerup, evento slotchange, 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 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 Attr hasta 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

 
GN⁺ 3 시간 전
Opiniones en Lobste.rs
  • Me alegra que lobste.rs funcione casi a la perfección en Servo.
    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.
  • Servo lleva años en desarrollo; ¿qué sentido tiene, para empezar?
    • Servo fue un proyecto experimental que Mozilla inició para crear un nuevo navegador en Rust.
      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 proyecto comenzó en 2012, pero, que yo sepa, el desarrollo estuvo estancado durante varios años y recién hace poco se retomó a buen ritmo.
      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.
    • Implementar un motor de navegador en un lenguaje con seguridad de memoria, que permita aprovechar con más facilidad el paralelismo y la concurrencia que soporta el hardware actual, sigue siendo una gran ventaja, igual que cuando el proyecto empezó.
      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.