Librsvg usará decodificadores de imágenes en Rust desde la versión 2.58.0

Translations: en - Tags: gnome, librsvg, rust

Desde la versión 2.58.0, librsvg ya no usará gdk-pixbuf para decodificar las imágenes de pixeles que se referencian desde documentos SVG. Por ejemplo, en los elementos <image> como éste:

<image href="foo.jpg" width="100" height="100"/>

Acabo de meter un merge request para hacer que librsvg use el huacal image-rs para decodificar imágenes de pixeles. Esto forma parte de dos cambios relacionados:

  • Cargar sub-documentos SVG sin usar gdk-pixbuf. Por razones históricas, el código original en C de librsvg ni siquiera se molestaba en detectar si algo como <image href="foo.svg"/> hacía referencia a otro documento SVG; sencillamente le pedía a gdk-pixbuf que cargara esa imagen como cualquier otra. Esto funcionaba más o menos bien para SVG1.1, pero en SVG2 sí tenemos que mirar los atributos del <image> y del documento hijo SVG, y es más sencillo que librsvg se llame a sí misma para hacer todo eso.

  • No usar gdk-pixbuf para decodificar imágenes de pixeles. Ahora que Loupe usa los mismos huacales en Rust para decodificar imágenes, creo que podemos empezar a mover el resto e la plataforma para que no use codecs sin seguridad de memoria.

Librsvg todavía compila e instala el decodificador de SVG para gdk-pixbuf, para que otras aplicaciones puedan renderizar documentos SVG como si fueran cualquier imagen. Las APIs en C que crean objetos GdkPixbuf siguen funcionando como siempre.

Se buscan probadores

Como te podrás imaginar, esta es la clase de cambio que me da un poco de ansiedad. Digan lo que digan sobre el código sin seguridad de memoria como libpng y libjpeg-turbo, ese código está muy bien probado y se le hace fuzzing todo el tiempo. Los huacales de Rust para decodificar imágenes todavía no están tan bien desarrollados, y hay mucho trabajo interesante por hacer en términos de desempeño y soporte para las variantes exóticas de esos formatos gráficos. Sin embargo, creo que esta es una buena oportunidad para encontrar exactamente qué es lo que les falta.

Por favor prueba la rama main de librsvg, especialmente si usas documentos que tienen elementos <image>. Los cambios descritos aquí son fáciles de revertir, o de hacer opcionales, en caso de que causen muchos problemas.

A beautiful facade covered in geometrical wood carvings, captioned "The code that I just refactored".  In front, a huge jumble of cables on a telephone pole, "The technical debt I'm careful not to touch".