
Google Chromeのフォント処理がC/C++言語からRust言語に移行!その理由と影響とは?
2025-03-24
著者: 愛子
Google Chromeのフォント処理が、C/C++言語からRust言語に移行することが発表されました。Googleは3月19日に、開発者向けブログ「Chrome for Developers」でその詳細と理由について説明しました。
Webフォントは、従来の環境で安全性を確認することができづらいため、信頼できない(メルマガ化もされない)リソースとして扱われることが多いのが現状です。信頼できないリソースにはサンドボックス化や「OpenType Sanitizer」による無毒化といったセキュリティ対策が取られていますが、ライブラリに対するファジングテスト(少なくとも大量に与える自動テスト)で脆弱性が発見されることが多く、危険性を伴うことも少なくありません。
この変更に伴い、Chromeでは「FreeType」が使用されており、Android、ChromeOS、Linuxではこの「FreeType」が主にフォント処理ライブラリとして用いられています。しかし「FreeType」には脆弱性があり、多くのユーザーが影響を受ける問題となっています。
特に「FreeType」は、まだメムリー安全性より性能が重視されていた過去に開発されたプロダクトであり、問題が続発しています。C/C++言語でメモリーが手動管理されているため、プログラムが破壊されるリスクが高まる一方で、安全な記述やテストの追加が難しくなっているのです。さらに「FreeType」が依存する外部ライブラリ(bzip2、libpng、zlibなど)の脆弱性も影響を及ぼします。フォントファイルは動的ファイルに結びつくため、ファイル管理も複雑です。
そのため、メモリー安全性を考慮したRust言語によって記述された「Skrifa」が新たに開発されました。「Skrifa」はOpenTypeフォントの読み取り・操作ライブラリ「Fontations」の一部であり、Chromeのグラフィックスライブラリ「Skia」において、「FreeType」からメタデータと文字形を読み込み処理を代替します。これにより、今後はメモリー安全性とセキュリティに配慮した脆弱性を心配せずに利用できるようになると期待されています。
同社は「FreeType」を「Skia」に移行するため、「Skrifa」に基づいた新しい「Skia」フォントバックエンドを開発し、変更を段階的にユーザーに届ける予定です。
今後の予測として、2024年8月に導入される「Chrome 128」では、安定した試験運用とするために、カラーフォントやCFF2など、あまり使用されていないフォント形式で使用できるように「Fontations」を有効化します。また、2025年2月には「Chrome 133」がLinux、Android、ChromeOSにおけるWebフォントの利用を増やし、Windows/Macにおいてもフォント使用に必要な要求がある場合に「Fontations」を有効化することが見込まれています。
「Fontations」と「Skrifa」が有効化されることは、今のところWebフォントの取り扱いや、今後のLinux/ChromeOSを皮切りにOSに組み込まれるフォントに関する処理も変わるという予測があります。将来的にはテキスティクスと同様にRustが積極的に採用されるということです。