Der Chrome-Browser wurde auf die Schriftbibliothek Skrifa umgestellt, die in Rust geschrieben ist.

Das Unternehmen Google hat den Chrome-Browser auf die Skrifa-Bibliothek umgestellt, die in der Programmiersprache Rust geschrieben ist und Funktionen zur Verarbeitung von Schriften im OpenType-Format bietet. Skrifa setzt ein Teilmengen von Funktionen der FreeType-Schriftbibliothek um, die für die 2D-Bibliothek Skia notwendig sind, die in Chrome und Chromium verwendet wird. Um die Skia-Bibliothek von der Abhängigkeit zur FreeType-Engine zu befreien, wurde ein neuer Schrift-Backend auf Basis von Skrifa erstellt.

In Chrome 128 wurde der in Rust geschriebene Backend im Experimentalmodus für selten verwendete Schriftformate wie CFF2 und Farbschriften aktiviert. Ab der Version Chrome 133 wird der neue Backend für alle Web-Schriften in den Builds für die Plattformen Linux, Android und ChromeOS verwendet. Auf den Plattformen Windows und macOS wird die neue Engine derzeit nur als Backup verwendet und kommt zum Einsatz, wenn das System das Schriftformat, das der Browser darzustellen versucht, nicht unterstützt.

Der Skrifa-Code wurde von Ingenieuren bei Google im Rahmen des Fontations-Toolkits entwickelt und steht unter den Lizenzen MIT und Apache 2.0 zur Verfügung. Um die Funktionsfähigkeit von Skrifa zu überprüfen, wurden etwa 700 Unit-Tests vorbereitet. Die Bibliothek unterstützt das Dekodieren von Glyphen in den Formaten glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT und sbix, variable Schriften in den Formaten glyf, CFF2 und COLRv1 sowie das Hinting von Schriften in den Formaten glyf, CFF und CFF2.

Neben der Skrifa-Bibliothek, die eine API für den Zugriff auf Schriftmetadaten und das Laden von Glyphen-Konturen bereitstellt, umfasst das Fontations-Toolkit Low-Level-Bibliotheken zum Lesen, Analysieren, Bearbeiten und Erstellen von Schriftarten im OpenType-Format. Fontations selbst ist Teil des Projekts Oxidize, das entwickelt wurde, um Werkzeuge und Bibliotheken für die Arbeit mit Text und Schriften von Komponenten in Python (fonttools, fontmake, nanoemoji) und C++ (HarfBuzz, FreeType) auf neue Implementierungen in Rust zu übertragen.

Die Entwicklung von Komponenten in Rust begann aufgrund der unzureichenden Effizienz bei der Fehlererkennung durch Fuzzing-Tests, da die Schriftformate zu komplex sind, um alle möglichen Kombinationen abzudecken. Zum Beispiel wurde letzte Woche eine kritische Schwachstelle in FreeType entdeckt, die die Ausführung von Code bei der Verarbeitung speziell gestalteter Schriften aufgrund eines Buffer Overflows zulässt. Neben der FreeType-Engine können auch die verwendeten Abhängigkeiten wie bzip2, libpng und zlib Sicherheitsprobleme verursachen.

Die Verwendung von Rust hat die Wahrscheinlichkeit von Problemen im Umgang mit dem Speicher erheblich reduziert, die Codequalität verbessert, den Zeitaufwand für die Behebung von Sicherheitsproblemen verringert und die Implementierung von Verbesserungen in den Schriftartenfunktionen von Chrome beschleunigt. Statistiken von Google und Microsoft zeigen, dass etwa 70 % der gefährlichen Schwachstellen durch Speicherprobleme verursacht werden, die durch die Verwendung von Rust ohne unsafe-Blöcke vermieden werden können.

Die Verwendung von Rust hätte beispielsweise die zuvor im Code von FreeType aufgetretenen Probleme mit dem Zugriff auf freigegebene Speicherbereiche, das Überlaufen von Puffern, den Zugriff auf Arrays ohne Indexüberprüfung, ganzzahlige Überläufe, die inkorrekte Verwendung von nicht initialisierten Speicherbereichen und Typumwandlungsfehler verhindern können.

Quelle: opennet.ru

60GB SSD 8Gb DDR4