Google heeft de Chrome-browser overgezet op de Skrifa-bibliotheek, geschreven in de programmeertaal Rust, die mogelijkheden biedt voor het verwerken van lettertypen in OpenType-indeling. Skrifa implementeert een subset van de mogelijkheden van de lettertypesoftware FreeType, die nodig zijn voor de 2D-bibliotheek Skia, die in Chrome en Chromium wordt gebruikt. Om de Skia-bibliotheek los te koppelen van de FreeType-engine is er een nieuwe lettertype-backend gemaakt, gebaseerd op Skrifa.
In Chrome 128 werd de Rust-gebaseerde backend in een experimentele modus geĆÆntroduceerd voor zelden gebruikte lettertypeformaten, zoals CFF2 en kleurenschriften. Vanaf de release van Chrome 133 wordt de nieuwe backend gebruikt voor alle weblettertypen in builds voor de platforms Linux, Android en ChromeOS. Op de platforms Windows en macOS wordt de nieuwe engine voorlopig als back-up gebruikt en toegepast wanneer het systeem het lettertypeformaat niet ondersteunt dat de browser probeert weer te geven.
De code van Skrifa is ontwikkeld door ingenieurs van Google als onderdeel van het Fontations-toolkit en is openbaar gemaakt onder de MIT- en Apache 2.0-licenties. Voor het controleren van de functionaliteit van Skrifa zijn er ongeveer 700 unit-tests voorbereid. De bibliotheek ondersteunt de decodering van glyphs in de formaten glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT en sbix, variabele lettertypen in de formaten glyf, CFF2 en COLRv1, en hinting van lettertypen in de formaten glyf, CFF en CFF2.
Naast de Skrifa-bibliotheek, die een API biedt voor toegang tot lettertype-metagegevens en het laden van glyph-contouren, omvat het Fontations-toolkit laagdrempelige bibliotheken voor het lezen, parseren, wijzigen en creƫren van lettertypegegevens in OpenType-indeling. Op zijn beurt is Fontations onderdeel van het Oxidize-project, dat is opgezet om tools en bibliotheken voor tekst en lettertypen over te zetten van componenten in de programmeertalen Python (fonttools, fontmake, nanoemoji) en C++ (HarfBuzz, FreeType) naar nieuwe implementaties die in Rust zijn geschreven.
De ontwikkeling van componenten in Rust begon vanwege de onvoldoende effectiviteit van foutdetectie met behulp van fuzzing-tests, aangezien de lettertypeformaten te complex zijn om alle mogelijke combinaties te dekken. Bijvoorbeeld, vorige week werd er een kritieke kwetsbaarheid in FreeType ontdekt die code-executie toestaat bij het verwerken van speciaal ontworpen lettertypen door middel van buffer-overflow. Naast de FreeType-engine kunnen ook de afhankelijkheden die daarin worden gebruikt, zoals bzip2, libpng en zlib, beveiligingsproblemen veroorzaken.
Het gebruik van Rust heeft de kans op geheugenproblemen aanzienlijk verminderd, de codekwaliteit verhoogd, de tijd om beveiligingsproblemen op te lossen verkort en de verbeteringen in de Chrome-functies met betrekking tot lettertypen versneld. Volgens statistieken van Google en Microsoft zijn ongeveer 70% van de gevaarlijke kwetsbaarheden het gevolg van geheugenproblemen die voorkomen kunnen worden door het gebruik van de programmeertaal Rust zonder unsafe-blokken.
Bijvoorbeeld, het gebruik van Rust zou eerder ontdekte problemen in de FreeType-code kunnen voorkomen, zoals toegang tot vrijgegeven geheugenlocaties, buffer-overflows, toegang tot arrays zonder indexcontrole, gehele getaloverlopen, incorrect gebruik van niet-geĆÆnitialiseerde geheugenlocaties en typecasting-fouten.
Bron: opennet.ru
