3 पॉइंट द्वारा GN⁺ 2025-03-21 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • Skrifa Rust में लिखी गई एक नई font processing लाइब्रेरी है, जिसे Chrome में फ़ॉन्ट प्रोसेसिंग को अधिक सुरक्षित बनाने के लिए मौजूदा FreeType के विकल्प के रूप में विकसित किया गया है
  • Rust की memory safety की वजह से security समस्याएँ कम होती हैं और फ़ॉन्ट टेक्नोलॉजी में सुधार की गति बढ़ती है
  • FreeType से Skrifa में बदलाव के साथ code quality बेहतर हुई है और security fixes का समय घटा है

FreeType को बदलने की वजह

  • वेब वातावरण में अलग-अलग स्रोतों से आने वाले अविश्वसनीय resources को सुरक्षित रूप से लाना और उपयोग करना संभव होना चाहिए

  • Chrome वेब फ़ॉन्ट्स को सुरक्षित रूप से उपयोग करने के लिए कई security उपाय पहले से लागू कर रहा था

    • सैंडबॉक्सिंग (Sandboxing): क्योंकि code सुरक्षित नहीं है और फ़ॉन्ट्स भरोसेमंद नहीं हैं, इसलिए उन्हें अलग संरक्षित वातावरण में चलाया जाता है
    • OpenType Sanitizer: फ़ॉन्ट प्रोसेसिंग से पहले फ़ॉन्ट को साफ़ और जाँचता है
    • फ़ज़िंग (Fuzzing): फ़ॉन्ट प्रोसेसिंग से जुड़ी लाइब्रेरीज़ का व्यापक परीक्षण
  • FreeType का उपयोग Android, ChromeOS और Linux में default font processing लाइब्रेरी के रूप में होता है

    • अगर security vulnerability पैदा होती है, तो उसके बहुत बड़े संख्या में users को प्रभावित करने का जोखिम है

FreeType में सामने आई प्रमुख security समस्याएँ

  • 1. असुरक्षित भाषा का उपयोग
    • FreeType C में लिखा गया है, इसलिए memory errors और buffer overflow जैसी security vulnerabilities की संभावना रहती है
  • 2. प्रोजेक्ट-विशिष्ट समस्याएँ
    • macro उपयोग के कारण explicit size types की कमी
      • macros (FT_READ_*, FT_PEEK_*) explicit size types (int16_t आदि) को छिपा देते हैं
    • नए code में बार-बार bugs का आना
      • COLRv1 और OT-SVG support जोड़ते समय समस्याएँ सामने आईं
    • test coverage की कमी
      • जटिल test fonts बनाना कठिन होने के कारण पर्याप्त testing नहीं हो पाई
  • 3. dependency समस्याएँ
    • FreeType जिन bzip2, libpng, zlib जैसी लाइब्रेरीज़ का उपयोग करता है, उनमें भी बार-बार समस्याएँ सामने आईं
  • 4. फ़ज़िंग की सीमाएँ
    • फ़ॉन्ट फ़ाइलों की जटिल data structures के कारण कुछ समस्याएँ fuzzing से पकड़ी नहीं जातीं
      • फ़ॉन्ट्स में जटिल rules और state machine शामिल होते हैं
      • valid structures बनाना कठिन होने से प्रभावी fuzzing करना मुश्किल होता है

Skrifa का परिचय और Chrome में लागू करने की प्रक्रिया

  • Chrome में उपयोग होने वाली graphics लाइब्रेरी Skia फ़ॉन्ट metadata और rendering के लिए FreeType का उपयोग करती है
  • Chrome ने FreeType को Skrifa से बदलने के लिए Skia का font backend नए सिरे से बनाया

Skrifa अपनाने के चरण

  • Chrome 128 (अगस्त 2024):
    • color fonts और CFF2 जैसे कम उपयोग होने वाले font formats के लिए Skrifa का trial लागू किया गया
  • Chrome 133 (फ़रवरी 2025):
    • Linux, Android और ChromeOS में web font processing के लिए Skrifa को पूरी तरह लागू किया गया
    • Windows और Mac पर, जब system किसी font format को support नहीं करता, तब इसे fallback processor के रूप में उपयोग किया जाता है

सुरक्षा और performance में सुधार

  • 1. memory safety को मज़बूत करना
    • Rust डिफ़ॉल्ट रूप से memory safety सुनिश्चित करता है
    • हालांकि performance के लिए bytemuck लाइब्रेरी का उपयोग किया गया है
      • यह तब उपयोग होती है जब मजबूत type structures के साथ bytes की reinterpretation की ज़रूरत होती है
      • Rust के भविष्य के updates में सुरक्षित conversion संभव होने पर इसे उसी सुविधा से बदला जाएगा
  • 2. सटीकता में सुधार
    • Skrifa data structures की immutability सुनिश्चित करके code readability, maintainability और multithreading performance को बेहतर बनाता है
    • लगभग 700 unit tests से code quality की पुष्टि की गई
    • fauntlet टूल का उपयोग करके FreeType और Skrifa के outputs की तुलना की गई → image quality के मेल की जाँच की गई
  • 3. व्यापक testing और security में सुधार
    • Skrifa और integration code पर जून 2024 से fuzzing tests चलाए जा रहे हैं
      • अब तक 39 bugs मिले हैं → ये security vulnerabilities नहीं हैं (visual errors या नियंत्रित crashes)
      • इससे पुष्टि हुई कि code quality में सुधार हुआ है और समस्याएँ security issue तक नहीं पहुँचतीं

निष्कर्ष और आगे की योजना

  • Rust-आधारित Skrifa को अपनाने से security मज़बूत हुई है और code quality में सुधार हुआ है
  • development productivity बढ़ी है और users को अधिक सुरक्षित font environment मिलता है
  • आगे Linux और ChromeOS के system font processing में भी Skrifa लागू करने की योजना है

2 टिप्पणियां

 
iolothebard 2025-03-22

पिछली बार zlib, इस बार freetype…
पुराने दिग्गजों का एक-एक करके पीछे हटना… कुछ-कुछ इंसानों की दुनिया जैसा ही लगता है।

 
GN⁺ 2025-03-21
Hacker News राय
  • Google में fuzzing से मिली समस्याओं को ठीक करने के लिए कम से कम 0.25 software engineer की ज़रूरत होती है

    • इस अतिरिक्त काम को मापने का तरीका पसंद आया
    • चाहूँगा कि FreeType का उपयोग किए बिना भी TTF hinting instructions को पूरी तरह इस्तेमाल करने का कोई तरीका हो
    • लगता है कि Windows और macOS में अब सही hinting को सक्षम करने का कोई तरीका नहीं बचा है
    • FreeType ने भी version 2.7 के बाद से गलत hinting को default बना दिया है
    • अगर जानना हो कि सही तरह से hinted text कैसा दिखता है, तो screenshot देखा जा सकता है
    • संदेह है कि Windows ने XP के बाद से font hinting को छोड़ दिया
    • UI scaling और अलग-अलग resolution वाली screens पर raster images देखना धुंधलापन पैदा करता है
  • Rust की असली ताकत safety की ओर क्रमिक बदलाव और मौजूदा projects में integrate हो सकने की उसकी क्षमता है

    • बड़े पैमाने पर rewrite किए बिना components को एक-एक करके migrate किया जा सकता है
  • monitor panel के subpixel layout के अनुसार fonts कैसे render होते हैं, इसके बारे में सीख रहा हूँ

    • Windows मानता है कि सभी panels RGB layout का उपयोग करते हैं, और ClearType software उसी मान्यता के आधार पर fonts render करता है
    • नए display types में text fringing होता है
    • MacType या Better ClearType Tuner जैसे third-party tools मौजूद हैं, लेकिन Chrome या Electron में काम नहीं करते
    • नई panel technologies के आम होने के साथ, subpixel layout को graphics layer तक पहुँचाने के लिए किसी standard को परिभाषित करने की ज़रूरत है
    • Blur Busters में कुछ प्रयास दिखते हैं, लेकिन vendors में जागरूकता अभी भी कम है
  • Skia उन्नत text layout करता है और glyphs को cache करने वाली एक उन्नत library है

    • Skia C++ में लिखा गया है और Google ने बनाया है
    • FreeType glyphs को measure और render करता है, और विभिन्न anti-aliasing modes तथा hinting को support करता है
    • FreeType C में लिखा गया है और इसे Google ने नहीं बनाया
    • जिज्ञासा है कि FreeType को पहले Rust में rewrite क्यों किया गया
  • fonts को OpenType Sanitizer से प्रोसेस किए जाने से पहले उसके माध्यम से गुज़ारा जाता है

    • सोचता हूँ कि क्या font format इतना खराब है कि files को sanitize करना पड़ता है
    • integer overflow को vulnerabilities के कारणों में से एक के रूप में पहचाना गया है
    • कई languages overflow को detect नहीं करतीं, और RISC-V जैसी आधुनिक architectures में भी overflow trap शामिल नहीं है
    • समझ नहीं आता कि Rust जैसी नई languages में overflow trap क्यों शामिल नहीं है