2 पॉइंट द्वारा GN⁺ 2024-12-22 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • C को सुरक्षित Rust में compile करने की औपचारिक पद्धति

  • Rust भाषा की लोकप्रियता तेजी से बढ़ रही है, लेकिन कई महत्वपूर्ण codebase अभी भी C में लिखी हुई हैं, और उन्हें हाथ से दोबारा लिखना व्यावहारिक नहीं है। इसलिए C को Rust में स्वचालित अनुवाद के रूप में बदलना एक आकर्षक विकल्प के रूप में सामने आ रहा है।

  • कई मौजूदा शोध unsafe जैसे Rust की विभिन्न सुविधाओं का उपयोग करके C के बढ़ते हिस्सों को सँभालने की दिशा में आगे बढ़ रहे हैं। हालांकि स्वचालन का आकर्षण स्पष्ट है, यदि उत्पन्न कोड unsafe पर निर्भर हो तो Rust से मिलने वाली memory safety की गारंटी निष्क्रिय हो जाती है, और इसलिए पुराने codebase को एक memory-safe language में पोर्ट करने का प्रमुख लाभ समाप्त हो जाता है।

  • हमने एक अलग रास्ता खोजा और C को सुरक्षित Rust में अनुवाद करने की पद्धति का अध्ययन किया। यानी ऐसा कोड उत्पन्न करना जो Rust के type system का पालन करे और आसानी से memory safety सुनिश्चित कर सके।

  • हमारे शोध में कई नई योगदान शामिल हैं:

    • C के कुछ हिस्सों का सुरक्षित Rust में type-driven translation
    • Rust के slices और partition operations का उपयोग करके C की pointer arithmetic को व्यक्त करने वाला "split tree" आधारित नया static analysis
    • यह सटीक अनुमान लगाने वाला analysis कि कौन-सा borrow बदलनेयोग्य (mutable) होना चाहिए
    • Rust के non-owning और owning allocation विभाजन के अनुकूल C struct types के लिए compilation strategy
  • हमने इस पद्धति को पहले से औपचारिक रूप से सत्यापित C codebase पर लागू किया: HACL* encryption library, और EverParse के binary parser तथा serializer. समर्थित C subset के इतने हिस्से पर्याप्त थे कि दोनों applications को सुरक्षित Rust में translate किया जा सके।

  • मूल्यांकन से पता चला कि Rust के aliasing discipline को तोड़ने वाले कुछ हिस्सों के लिए पर्याप्त केवल automated surgical rewrites ही हैं, और डाले गए कुछ रणनीतिक copies का प्रदर्शन (performance) पर प्रभाव बहुत कम है।

  • खास तौर पर, HACL* पर इस approach के लागू करने के बाद, सभी आधुनिक algorithms को लागू करने वाली 80,000 लाइन की verified encryption library पूरी तरह pure Rust में लिखी गई। यह पहली ऐसी मिसाल है।

1 टिप्पणियां

 
GN⁺ 2024-12-22
Hacker News टिप्पणी
  • Rust में प्रोजेक्ट पोर्ट करते समय कुछ निष्कर्ष सामने आए

    • C प्रोग्राम को Rust में बदलने पर Rust की कठोर सीमाओं की वजह से बग जल्दी पकड़ में आ जाते हैं
    • C से Rust में पूरी तरह स्वचालित रूपांतरण शायद पूरी तरह हल नहीं होगा क्योंकि दोनों भाषाओं का डिज़ाइन मूल रूप से अलग है
    • कुछ मामलों में C से Rust में पोर्ट करना संभवतः संभव नहीं भी हो सकता है, क्योंकि भाषा डिज़ाइन में निहित मूलभूत असुरक्षा यही कारण हो सकती है
    • बेहतर टूलिंग के साथ पोर्टिंग प्रक्रिया अधिक सुचारू होनी चाहिए
  • औपचारिक रूप से सत्यापित C codebase और सामान्य सिस्टम C codebase अलग होते हैं

  • शोधकर्ताओं ने 2002 में सुरक्षित C डायलेक्ट Cyclone पर एक पेपर प्रकाशित किया था और C से Cyclone में कोड पोर्ट करते समय सुरक्षा से जुड़े बग खोजे

    • ऐसे मैनुअल या ऑटोमेटेड रूपांतरण से safe language अपनाने की संभावना बढ़ सकती है और मौजूदा बग खोजने का मौका भी मिलता है
  • Rust में सरल अनुवाद से सुरक्षित और असुरक्षित दोनों हिस्से निकल सकते हैं, और मैनुअल प्रयास unsafe क्षेत्रों की सुरक्षा का सत्यापन करने पर ध्यान दे सकता है

    • unsafe हिस्सा बड़ा हो तो भी इसमें कुछ लाभ हो सकते हैं
  • C के छोटे हिस्से को कंपाइल करने वाले तरीके से अधिक अपेक्षा नहीं रखनी चाहिए

    • Rust के ownership model का वास्तविक C प्रोग्रामों से बहुत अलग होना यही कारण है
  • Zig के C conversion फीचर की तुलना को लेकर जिज्ञासा

    • Zig नया code और मौजूदा C code को साथ में चलाने वाला mix बहुत अच्छे से बना सकता है, और इसे C compiler के रूप में भी इस्तेमाल किया जा सकता है
    • Linux kernel maintainers शायद Zig को C के विकल्प के रूप में क्यों नहीं देख रहे हैं, यह प्रश्न बाकी है
  • C2Rust द्वारा औपचारिक रूप से सही code बनाया जा सकता है या नहीं, इस पर सवाल

    • Rust code उत्पन्न करने वाले स्रोत कोड का लिंक दिखाई नहीं दे रहा है
  • यदि C library काम कर रही है तो Rust की unsafety का उपयोग करके ट्रांसलेट करने में भी मूल्य हो सकता है

    • Rust में आमतौर पर libraries की कमी रहती है
  • उच्च ऑप्टिमाइज़ेशन स्तर पर भी Rust की speed में बड़ा सुधार न दिखना दिलचस्प है

    • यह देखना रोचक होगा कि O3 optimization स्तर पर C को सीधे Rust में एक साथ कंपाइल करना कितना अच्छी तरह काम करता है