Kompania Google ka transferuar shfletuesin Chrome në bibliotekën Skrifa, e cila është shkruar në gjuhën Rust dhe ofron mundësi për përpunimin e fonteve në formatin OpenType. Skrifa realizon një nëngrup të mundësive të motorit të fonteve FreeType, të nevojshme për bibliotekën 2D Skia, e cila përdoret në Chrome dhe Chromium. Për të çliruar bibliotekën Skia nga lidhja me motorin FreeType, është krijuar një backend i ri i fonteve, i bazuar në Skrifa.
Në Chrome 128, backend-i i shkruar në Rust u përfshi në një mod eksperimenti për formate fontesh që përdoren rrallë, si CFF2 dhe fonte me ngjyra. Duke filluar nga lëshimi i Chrome 133, backend-i i ri është aktivizuar për të gjitha fontet web në ndërtimet për platformat Linux, Android dhe ChromeOS. Në platformat Windows dhe macOS, motori i ri aktualisht përdoret si rezervë dhe aplikohet në rast se sistemi nuk mbështet formatin e fontit që përpiqet të shfaqë shfletuesi.
Kodi Skrifa është zhvilluar nga inxhinierët e Google brenda setit të mjeteve Fontations dhe është bërë publik nën licencat MIT dhe Apache 2.0. Për të verifikuar saktësinë e punës së Skrifa, janë përgatitur rreth 700 teste unike. Biblioteka mbështet dekodimin e glifëve në formatet glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT dhe sbix, fonte variative në formatet glyf, CFF2 dhe COLRv1, si dhe hinto të fonteve në formatet glyf, CFF dhe CFF2.
Përveç bibliotekës Skrifa, e cila ofron një API për qasje në metadatën e fonteve dhe ngarkimin e konturave të glifëve, seti i mjeteve Fontations përfshin biblioteka me nivel të ulët për leximin, analizimin, ndryshimin dhe krijimin e të dhënave të fonteve në formatin OpenType. Nga ana e saj, Fontations është një pjesë e projektit Oxidize, i krijuar për të transferuar utilitetet dhe bibliotekat për punën me tekstin dhe fontet nga komponentët në gjuhët Python (fonttools, fontmake, nanoemoji) dhe C++ (HarfBuzz, FreeType) në zbatime të reja, të shkruara në Rust.
Zhvillimi i komponentëve në Rust filloi për shkak të efikasitetit të pamjaftueshëm në identifikimin e gabimeve përmes testeve fuzzing, pasi formatet e fonteve janë shumë të komplikuara për të mbuluar të gjitha kombinacionet e mundshme. Për shembull, javën e kaluar në FreeType u identifikua një ranë kritike që lejonte ekzekutimin e kodit gjatë përpunimit të fonteve të dizajnuara posaçërisht, përmes mbinxehjes së atij bufferi. Përveç motorit FreeType, problemet me sigurinë mund të krijohen edhe nga varësitë që përdoren në të, si bzip2, libpng dhe zlib.
Përdorimi i Rust ka lejuar një reduktim të ndjeshëm të probabilitetit të shfaqjes së problemeve me memorien, ka rritur cilësinë e kodit, ka ulur kohën e nevojshme për të zgjidhur problemet e sigurisë dhe ka përshpejtuar përmirësimet në funksionalitetin e Chrome-it lidhur me fontet. Sipas statistikave nga Google dhe Microsoft, rreth 70% e dobësive të rrezikshme shkaktohen nga problemet me memorien, të cilat mund të shmangen duke përdorur gjuhën Rust pa bloket unsafe.
Për shembull, përdorimi i Rust do të shmangte problemet e mëparshme të identifikuara në kodin e FreeType, të lidhura me qasjen në zona memorie të lira, tejkalimin e kufijve të buffer-it, qasjen në array pa verifikimin e indekseve, mbushjet e numrave të plotë, përdorimin e papërshtatshëm të zonave memorie të pa inicializuara dhe gabimet në shndërrim të tipave.
Burimi: opennet.ru
