Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ Chrome ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½ Π½Π° ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²ΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ Skrifa, написанный Π½Π° Rust

Компания Google ΠΏΠ΅Ρ€Π΅Π²Π΅Π»Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Chrome Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Skrifa, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π½Π° языкС Rust ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ возмоТности для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ OpenType. Skrifa Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ подмноТСство возмоТностСй ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° FreeType, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для 2D-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Skia, примСняСмой Π² Chrome ΠΈ Chromium. Для избавлСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Skia ΠΎΡ‚ привязки ΠΊ Π΄Π²ΠΈΠΆΠΊΡƒ FreeType создан Π½ΠΎΠ²Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²ΠΎΠΉ бэкСнд, основанный Π½Π° Skrifa.

Π’ Chrome 128 написанный Π½Π° Rust бэкСнд Π±Ρ‹Π» Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ для Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ CFF2 ΠΈ Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹. Начиная с выпуска Chrome 133 Π½ΠΎΠ²Ρ‹ΠΉ бэкСнд задСйствован для всСх web-ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² Π² сборках для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ Linux, Android ΠΈ ChromeOS. На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Windows ΠΈ macOS Π½ΠΎΠ²Ρ‹ΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ ΠΏΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС запасного ΠΈ примСняСтся Π² случаС, Ссли систСма Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΡˆΡ€ΠΈΡ„Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пытаСтся ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€.

Код Skrifa Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌΠΈ Google Π² Ρ€Π°ΠΌΠΊΠ°Ρ… инструмСнтария Fontations ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΏΠΎΠ΄ лицСнзиями MIT ΠΈ Apache 2.0. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности Ρ€Π°Π±ΠΎΡ‚Ρ‹ Skrifa ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 700 unit-тСстов. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π³Π»ΠΈΡ„ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT ΠΈ sbix, Π²Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… glyf, CFF2 ΠΈ COLRv1, Ρ…ΠΈΠ½Ρ‚ΠΈΠ³ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… glyf, CFF ΠΈ CFF2.

Помимо Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Skrifa, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ API для доступа ΠΊ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² Π³Π»ΠΈΡ„ΠΎΠ², инструмСнтарий Fontations Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для чтСния, Ρ€Π°Π·Π±ΠΎΡ€Π°, измСнСния ΠΈ создания ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ OpenType. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Fontations являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Oxidize, созданного для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с тСкстом ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° языках Python (fonttools, fontmake, nanoemoji) ΠΈ C++ (HarfBuzz, FreeType) Π½Π° Π½ΠΎΠ²Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, написанныС Π½Π° Rust.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° Rust Π½Π°Ρ‡Π°Π»Π°ΡΡŒ ΠΈΠ·-Π·Π° нСдостаточной эффСктивности выявлСния ошибок ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ fuzzing-тСстирования, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² слишком слоТны для ΠΎΡ…Π²Π°Ρ‚Π° всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ. НапримСр, Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅ Π²ΠΎ FreeType Π±Ρ‹Π»Π° выявлСна критичСская ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΠΈΠ· пСрСполнСния Π±ΡƒΡ„Π΅Ρ€Π°. Помимо Π΄Π²ΠΈΠΆΠΊΠ° FreeType ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с обСспСчСниСм бСзопасности ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π½Ρ‘ΠΌ зависимости, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ bzip2, libpng ΠΈ zlib.

ИспользованиС Rust ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ появлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ качСство ΠΊΠΎΠ΄Π°, ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° исправлСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ внСсСниС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ Π² возмоТности Chrome, связанныС со ΡˆΡ€ΠΈΡ„Ρ‚Π°ΠΌΠΈ. По статистикС Google ΠΈ Microsoft ΠΎΠΊΠΎΠ»ΠΎ 70% опасных уязвимостСй Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ использовании языка Rust Π±Π΅Π· unsafe-Π±Π»ΠΎΠΊΠΎΠ².

НапримСр, использованиС Rust, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ Π²Ρ‹ΡΠ²Π»ΡΠ²ΡˆΠΈΡ…ΡΡ Π² ΠΊΠΎΠ΄Π΅ FreeType ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ освобоТдённым областям памяти, Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π±ΡƒΡ„Π΅Ρ€Π°, доступом ΠΊ массивам Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ индСксов, цСлочислСнными пСрСполнСниями, Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ использованиСм Π½Π΅ΠΎΠ±Π½ΡƒΠ»Ρ‘Π½Π½Ρ‹Ρ… областСй памяти ΠΈ ошибками привСдСния Ρ‚ΠΈΠΏΠΎΠ².

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ