क्या Rust वास्तव में सुरक्षित है?
क्या C++ सच में इतना असुरक्षित है?
YouTube पर इस दिलचस्प विषय पर एक प्रस्तुति मिली, इसलिए उसे साझा कर रहा हूँ।
अगर शीर्षक का अनुवाद करें, तो उसका भाव कुछ ऐसा लगता है: "memory safe language का उपयोग करो" — मामला इतना सरल नहीं है।
वक्ता किसी एक पक्ष की ओर झुके बिना, अपेक्षाकृत निष्पक्ष दृष्टिकोण से अपने विचार रखता है।
- Rust panic के ज़रिये memory unsafe code के execution को रोकता है, लेकिन
unsafe Rustइन सुरक्षा तंत्रों को bypass कर सकता है। - लेकिन
unsafe Rustके लिए स्पष्ट opt-in की ज़रूरत होती है, इसलिए यह असुरक्षित C/C++ की तुलना में अधिक स्पष्ट दिखता है। उस हिस्से की केंद्रित समीक्षा की जा सकती है। - लगभग 30% Rust crates unsafe code का उपयोग करते हैं, और embedded systems में यह लगभग दोगुना अधिक है।
- Sanitizer (dynamic analysis tool) Rust और C/C++ दोनों code में memory errors का पता लगा सकता है।
- Rust developers में से 70% C/C++ libraries के लिए FFI (foreign function interface) के माध्यम से unsafe code को call करते हैं।
- Rust projects में उपयोग होने वाली कई महत्वपूर्ण libraries C/C++ में लिखी गई हैं (SQLite, OPCUA library)।
- अगर source code उपलब्ध हो, तो Sanitizers LLVM IR layer पर Rust और C/C++ दोनों code का analysis कर सकते हैं।
- Miri, Rust के intermediate representation में undefined behavior का पता लगाने के लिए एक पूरक tool है।
- Miri के फायदे: यह स्पष्ट errors देता है और सभी undefined behavior को एक साथ जाँचता है। सीमाएँ: यह C/C++ code को interpret नहीं कर सकता।
- Rust standard library functions में से लगभग 20% unsafe code का उपयोग करती हैं।
- महत्वपूर्ण infrastructure के लिए केवल memory safe code ही नहीं, बल्कि ऐसा सही code भी चाहिए जो संपत्ति के नुकसान या जीवन के जोखिम को रोक सके।
- सुरक्षित Rust programs भी malfunction कर सकते हैं या denial-of-service attacks के प्रति कमजोर हो सकते हैं।
- Property testing, edge cases खोजने के लिए random inputs बनाकर मदद कर सकता है, लेकिन impossible errors से जूझता है।
- Kani एक model checker है जो गणित का उपयोग करके constraints के भीतर program correctness की जाँच करता है।
- Kani के फायदे: यह constraints के भीतर सभी inputs का गणितीय मूल्यांकन करता है। सीमाएँ: loops को unroll करना पड़ता है और यह concurrency या C/C++ FFI को support नहीं करता।
- Rust पर निष्कर्ष: Rust सुरक्षित है, लेकिन जितना समझा जाता है उतना सुरक्षित नहीं है।
- Bjarne Stroustrup, C और C++ के बीच अंतर करते हुए कहते हैं कि C++ को अधिक सुरक्षित code के लिए डिज़ाइन किया गया था।
- C++ Core Guidelines, type safety, bounds safety और lifetime safety के लिए profiles प्रदान करती हैं, जिससे Rust जैसी guarantees के करीब पहुँचा जा सकता है।
- C++ की सबसे बड़ी समस्या यह है कि default रूप से असुरक्षित code लिखना बहुत आसान है। ऐसा नहीं कि developers प्रयास नहीं कर रहे।
अभी कोई टिप्पणी नहीं है.