1 puntos por GN⁺ 2023-11-11 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2023-11-11
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

    • La frase “Mozilla no estaba interesada en Servo” no parece del todo precisa
      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
    • He usado CEF, WebKit y WebView2, y de todos ellos la única opción multiplataforma fácil de embeber era CEF
      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
    • Mozilla sí estaba interesada en Servo
      No sé exactamente a qué te refieres, pero llevó varios componentes a Gecko, incluidos WebRender y Stylo
    • Mencionar ActiveX me trajo muchos recuerdos
      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
    • WebKit sigue siendo bueno para embeber, pero compilarlo en Windows es un desastre
      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
    • Un motor embebido también es un camino mucho más rápido hacia casos de uso prácticos
      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/
    • Es pura especulación, pero si al iPhone lo obligan a abrir los motores web, podrían aparecer apps en dispositivos móviles en general que quieran embeber su propio motor
    • Está fuertemente diseñado en esa dirección
      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

    • Mi proyecto https://www.oilshell.org/ también recibe apoyo de NLnet desde 2022, y ha sido de gran ayuda
      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

    • La verdad, tengo más expectativas con Ladybird que con Servo
      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
    • Ladybird es sorprendente
      Es rápido y están construyendo todo en público, así que lo que hace el equipo de Ladybird es muy impresionante
    • ¿Ladybird de verdad sirve fuera de Serenity OS?
    • ¿Por qué hace falta otro motor de navegador escrito en C++?
  • 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

    • El sistema de estilos CSS Stylo empezó en Servo y ahora está en Firefox, pero según entiendo, ambos se han separado bastante
      https://blog.nightly.mozilla.org/2017/07/25/stylo-is-ready-f...
    • WebRender y Stylo salieron de Servo y se integraron como Quantum Render y Quantum CSS
      Supongo que también podría haber otras cosas
    • Lo más cercano actualmente probablemente sea https://github.com/trimental/inlyne
      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-block
      Si eso se implementa, creo que se podría hacer un renderizado de páginas web básicas bastante decente
    • No el motor completo, pero WebRender y Stylo llevan ya varios años dentro de Firefox
      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

    • Legacy Layout se refiere al sistema original, Layout 2013
      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...