- En julio de 2023, Servo recibió una subvención de NLnet y reforzó funciones clave de layout como una alternativa ligera y de alto rendimiento para embeber tecnologías web en aplicaciones
- El alcance de las mejoras se centró en completar CSS float, ampliar el soporte multilingüe del layout en línea y agregar soporte inicial para
<table> - El trabajo en CSS float venía en marcha desde mediados de 2023, con el objetivo de elevar la tasa promedio de aprobación de las pruebas WPT relacionadas a más del 80%
- Al layout en línea le falta soporte para selección de fuentes, escritura de derecha a izquierda y propiedades lógicas, funciones necesarias para renderizar caracteres no latinos
- Como la falta de soporte para table en el nuevo motor de layout rompe la visualización de muchas páginas web, el primer objetivo práctico será el renderizado de tables de Wikipedia
Áreas de Servo reforzadas con la subvención de NLnet
- En julio de 2023, Servo recibió una subvención de NLnet para mejorar varias funciones relacionadas con layout
- Los principales objetivos se resumen en tres puntos
- Completar el soporte de float en Servo
- Soportar más idiomas en el layout en línea
- Agregar soporte inicial para
<table>
Objetivos y avances por función de layout
-
Floats
- El soporte de float en Servo está en desarrollo desde mediados de 2023
- Aún quedan problemas por resolver antes de considerarlo una implementación totalmente compatible con CSS float
- El objetivo es superar una tasa promedio de aprobación WPT del 80% en
/css/CSS2/floats/y/css/CSS2/floats-clear/ - Los resultados pueden seguirse en el WPT dashboard
- La semana pasada, las pruebas de
/css/CSS2/floats/superaron el objetivo con una tasa de aprobación de 82.2% /css/CSS2/floats-clear/está actualmente en 73.3% de aprobación y se acerca al objetivo
-
Más idiomas en el layout en línea
- El motor de layout de Servo carece de funciones clave necesarias para renderizar idiomas que no usan el alfabeto latino
- Las mejoras previstas incluyen la selección de fuentes correcta, soporte para escritura de derecha a izquierda y propiedades lógicas
- El objetivo es ampliar el alcance del soporte del layout en línea para que Servo pueda mostrar contenido más diverso
-
Soporte inicial para
<table>- Las tablas HTML son una función web importante y ampliamente utilizada
- El nuevo motor de layout de Servo aún no soporta tables, por lo que el layout de muchas páginas web no se muestra correctamente
- El objetivo prioritario del soporte inicial de tables es poder renderizar las tables usadas en Wikipedia
- A medida que cada hito avance y se complete, se tratará con más detalle en futuras publicaciones del blog
1 comentarios
Comentarios en Hacker News
Tengo muchas expectativas con Servo, y me cuesta creer que Mozilla no le haya prestado atención
La idea de un motor con gran seguridad y rendimiento ya me parece buena, pero lo que más me gusta es que se pueda usar el motor web como componente
En la época de Windows 9x, IE tenía controles ActiveX y se podía embeber un motor web en cualquier parte; KHTML era parecido, pero hoy en día ni Firefox ni Chrome parecen interesados en ese uso
Menos mal que existe Qt WebEngine, pero entiendo que la relación es algo incómoda porque del lado de Chrome no se preocupan mucho por este caso de uso
Además, Chrome es cosa de Google, y por experiencia los productos de Google viven en su propio mundo, así que compilarlos e integrarlos es un fastidio
Por eso tengo muchas ganas de ver una alternativa práctica que se pueda meter en el código, que resuelva las preocupaciones de seguridad y además reduzca el dolor de integración
Mozilla lo financió como proyecto de investigación, y más bien se dio cuenta de que para llevarlo por completo al mercado harían falta mucho más dinero y tiempo, así que optó por ahorrar costos
Eso sí, queda el problema de que repartieron ese dinero entre ejecutivos y otros de una forma que no encajaba con la moralidad que decían defender
Por lo que se ve en las entradas del blog, Mozilla integró en Firefox varias cosas que pudo tomar de Servo, así que en cierto modo sí obtuvo valor del proyecto
Creo que si alguien le hubiera dado a Mozilla mucho dinero y un calendario ilimitado, habrían terminado Servo
Pero en cuanto CEF se volvió popular, Google dedicó muchos recursos a bloquear el inicio de sesión de Google desde CEF y otros navegadores embebidos[0]
Por eso tuve que abandonar un navegador basado en CEF, y aunque esas prácticas empresariales me parecen detestables, no había mucho que pudiera hacer
Si mi navegador no puede iniciar sesión en productos de Google, es difícil que se use de forma amplia, y tampoco tengo tiempo para entrar en un juego del gato y el ratón con los métodos de detección de Google
Para que el componente de navegador embebido se vuelva algo común, al punto de que cualquiera pueda crear un navegador, primero hay que tratar el problema de que las grandes empresas bloqueen los navegadores embebidos cuando empiezan a ganar popularidad
Idealmente, estaría bien contar con un Gecko embebible que no sea Android, porque Firefox es demasiado grande como para meterlo ahí
Ya se habló bastante de esto antes, e incluso hice una prueba de concepto usando el robo de handles de ventana[1], pero no da dinero
0 - https://developers.googleblog.com/2016/08/modernizing-oauth-...
1 - https://github.com/cretz/ffembedpoc
No sé exactamente a qué te refieres, pero llevó varios componentes a Gecko, incluidos WebRender y Stylo
Recuerdo que si fallaba el fondo de escritorio aparecía en el escritorio una página de error de ActiveX con enlaces clicables, y era realmente confuso
En macOS y Linux funciona muy bien
Aun así, hacen falta más motores web embebibles
Gecko es bueno, pero el hecho de que siga atado permanentemente a XULRunner le pone un freno
Me da gusto ver que el trabajo en Servo sigue adelante desde que Igalia se hizo cargo
Hay mucha deuda técnica acumulada tras años de mantenimiento mínimo, pero parece que sí hay avances reales
Personalmente, me gustaría que empujaran con fuerza la modularidad
Da la impresión de que hay un nicho para un motor de navegador de código abierto centrado en la posibilidad de embeberse, y si existiera una biblioteca de “haz tu propio navegador” con la que la gente pudiera mezclar piezas como bloques de Lego para crear motores nuevos, eso también podría ayudar mucho a la salud a largo plazo de la plataforma web
Un Electron con Servo integrado, o algo parecido a Electron, podría dar buenos resultados
Tauri ya cubre en cierta medida ese nicho, pero en vez de integrar algo, usa lo que ofrece el sistema operativo
Estaría bien tener una opción a medio camino
Por ejemplo, Sciter [1] tuvo cierto éxito implementando solo un subconjunto razonable de la API del DOM
No sirve tanto para navegar por internet en general, pero si se usa como biblioteca de UI, puedes evitar las partes que no funcionan
1: https://sciter.com/
El modelo de componentes y la capa de embebido están hechos para esa estructura
Parte del financiamiento de esta subvención proviene de la Comisión Europea y se canaliza a través del programa NGI
Son noticias realmente buenas para Servo
NLNet Foundation ha estado apoyando muchos proyectos excelentes últimamente, y su nombre aparece seguido
Necesitaba ayuda para sacar adelante algunos problemas, y de verdad la recibimos
Estamos principalmente en Norteamérica, así que es un apoyo muy visionario considerando que el financiamiento viene de la UE
Como otro navegador hecho desde cero, Ladybird también vale la pena mirar
Lo está creando un grupo indie todavía más improvisado: https://ladybird.dev/
Siendo honestos, es un proyecto realmente muy rudo
Si consideras que sigue siendo un proyecto muy joven, ya resulta bastante impresionante
Con solo ver capturas de pantalla, el renderizador de Servo se ve muy básico, lento y con muchos bugs
Es rápido y están construyendo todo en público, así que lo que hace el equipo de Ladybird es muy impresionante
Por alguna razón pensé que Servo ya se había integrado en Firefox
¿Hay alguna forma de renderizar HTML como imagen en Rust sin levantar un navegador completo?
No hace falta que soporte mucho HTML ni CSS
https://blog.nightly.mozilla.org/2017/07/25/stylo-is-ready-f...
Supongo que también podría haber otras cosas
Pero hay dos diferencias: solo soporta Markdown, no HTML arbitrario, y renderiza en pantalla, no como imagen
Aun así, es un buen punto de partida
Creo que el principal cuello de botella del renderizado web en Rust ahora mismo es un mejor layout de texto, sobre todo el soporte para meter contenido no textual dentro del texto, como
display: inline-blockSi eso se implementa, creo que se podría hacer un renderizado de páginas web básicas bastante decente
Son, respectivamente, el compositor basado en GPU y el motor de CSS
Servo es un motor de renderizado web escrito en Rust con soporte para WebGL y WebGPU, y puede adaptarse a aplicaciones de escritorio, móviles e integradas
Es un motor de renderizado web embebible e independiente, con seguridad de memoria, modularidad y paralelismo
¿Qué es Legacy Layout, que usan como referencia de comparación?
¿Es una iteración anterior de Servo?
Parece que parte del código todavía se usa en ambos lados, y las curvas a veces suben y bajan al mismo tiempo, aunque no siempre
Después se inició un segundo sistema, Layout 2020, para resolver problemas que no encajaban limpiamente en la arquitectura de Layout 2013 al implementar partes de la especificación CSS
Este año hubo un buen informe en la wiki de Servo, escrito por gente de Igalia, que resume las diferencias entre ambos sistemas y por qué decidieron avanzar con Layout 2020
https://github.com/servo/servo/wiki/Servo-Layout-Engines-Rep...