Skrifa vs FreeType: una nueva era en el manejo de fuentes en Chrome

Skrifa vs FreeType: una nueva era en el manejo de fuentes en Chrome

Los viejos enfoques de la gestión de la memoria están dando paso a la innovación.

image

La empresa Google ha comenzado oficialmente a utilizar su propio desarrollo Skrifa en lugar de la biblioteca FreeType en el navegador Chrome para el procesamiento de fuentes web. El nuevo mecanismo está basado en el lenguaje de programación Rust y sirve como una alternativa más segura a la solución anterior, eliminando vulnerabilidades que anteriormente se lograban detectar incluso después del lanzamiento de actualizaciones.

Inicialmente, Chrome utilizaba FreeType para cargar e interpretar fuentes en Android, ChromeOS y Linux. Sin embargo, la arquitectura de FreeType está basada en el lenguaje C, lo que hace que la biblioteca sea vulnerable a errores de gestión de memoria.

A pesar de años de optimización y del esfuerzo de los desarrolladores de Google, errores recurrentes relacionados con desbordamientos de búfer, tipos de datos incorrectos y manejo defectuoso de la memoria continuaban apareciendo en las versiones lanzadas. Solo el proceso de eliminación de tales vulnerabilidades requiere aproximadamente una cuarta parte del tiempo de trabajo de un desarrollador.

La mayoría de los problemas, según los investigadores, están relacionados con las particularidades del lenguaje C: gestión manual de memoria, macros implícitos, prácticas de tipado obsoletas y la dificultad para probar nuevas funciones. Las fuentes, como formato de archivo, son un contenedor con numerosas tablas interdependientes: desde la descripción visual de glifos hasta mini programas en su propio bytecode que controlan la visualización. Un simple cambio aleatorio de bytes, como el que se usa en las herramientas de fuzzing convencionales, casi no ayuda: la mayoría de las pruebas se descartan al comienzo del procesamiento.

Skrifa, como parte de la biblioteca Fontations, fue creada teniendo en cuenta todos estos problemas. Gracias a Rust, la biblioteca está protegida desde el principio contra accesos fuera de los límites de memoria y otros errores típicos. Para mejorar el rendimiento se utiliza una lectura de datos estrictamente tipada desde archivos sin copias, implementada mediante la biblioteca externa bytemuck, que ha pasado por una verificación exhaustiva.

Además de la fiabilidad, el equipo también prestó atención a la calidad de la representación visual. El cambio de FreeType no debería afectar la apariencia del texto — para ello se han creado herramientas como fauntlet, que comparan la salida de ambas bibliotecas en decenas de miles de fuentes. Todos los cambios también se someten a una comparación de renderizado en el motor Skia a nivel de píxeles individuales, incluyendo diferentes modos de suavizado y hinting.

El fuzzing de Skrifa se ha estado ejecutando desde junio de 2024 y ya ha detectado 39 errores, pero ninguno de ellos fue crítico desde el punto de vista de la seguridad. Todos provocaban o bien artefactos visuales o bien fallos controlados que no representaban una amenaza para el usuario.

La transición a Skrifa comenzó con Chrome 128, donde la biblioteca se aplicaba a formatos de fuentes poco utilizados. A partir de la versión Chrome 133, lanzada en febrero de 2025, Skrifa comenzó a procesar todas las fuentes web en Linux, Android y ChromeOS, y también actúa como un mecanismo de respaldo en Windows y macOS en caso de que las fuentes del sistema no sean compatibles.

En el futuro, Google planea pasar completamente al uso de Skrifa también para las fuentes del sistema, comenzando con Linux y ChromeOS, y luego en Android. La empresa destaca que la seguridad sigue siendo una prioridad clave, y que la implementación de Rust ha permitido reducir el número de vulnerabilidades y acelerar la entrega de actualizaciones sin sacrificar la calidad ni el rendimiento.

¿Estás cansado de que Internet sepa todo sobre ti?

¡Únete a nosotros y hazte invisible!