Moviento 0deps: स्थानीय डिपेंडेंसी और सुरक्षा

अधिकांश प्रोजेक्ट्स में सॉफ्टवेयर डेवलपर्स सैकड़ों बाहरी लाइब्रेरीज़ इंस्टॉल करते हैं। आधुनिक फ्रेमवर्क हज़ारों ट्रांज़िटिव डिपेंडेंसीज़ (transitive dependencies) पर निर्भर करते हैं। इसका मतलब है कि आपका एप्लिकेशन सैकड़ों अज्ञात लोगों द्वारा लिखे गए कोड को चलाता है।

यह इकोसिस्टम विकास की गति को बढ़ाता है। लेकिन यह बड़े पैमाने पर सप्लाई चेन जोखिम (supply chain risks) भी पैदा करता है।

0deps मूवमेंट एक सरल प्रश्न पूछता है: क्या होगा यदि आपका एप्लिकेशन केवल उसी कोड को चलाए जिसे आप वास्तव में नियंत्रित करते हैं?

प्रत्येक डिपेंडेंसी एक नया अटैक सरफेस (attack surface) जोड़ती है। एक डिपेंडेंसी:

  • सुरक्षा खामियां पैदा कर सकती है।
  • सप्लाई चेन हमलों का लक्ष्य बन सकती है।
  • अपने निर्माता द्वारा छोड़ दी जा सकती है।
  • अपने पब्लिक API को बदल सकती है।
  • बैकवर्ड कम्पैटिबिलिटी (backward compatibility) को तोड़ सकती है।

0deps मॉडल में, आप सभी आवश्यक डिपेंडेंसीज़ को सीधे अपने प्रोजेक्ट रिपॉजिटरी में ले जाते हैं। आप बिल्ड टाइम के दौरान डायनामिक रूप से पैकेज डाउनलोड करना बंद कर देते हैं। ऐप चलाने के लिए आवश्यक सब कुछ आपके द्वारा क्लोन करने के क्षण से ही रिपॉजिटरी में रहता है।

यह दृष्टिकोण प्रदान करता है:

  • रिप्रोड्यूसिबल बिल्ड्स (Reproducible builds)।
  • बाहरी पैकेज रजिस्ट्रियों पर कम निर्भरता।
  • केंद्रीकृत सुरक्षा ऑडिट।
  • अनुमानित परिणाम।

लक्ष्य कोड को स्टैटिक बनाना नहीं है। बग्स को ठीक करने और सुरक्षित रहने के लिए इम्प्लीमेंटेशन और एल्गोरिदम का विकसित होना आवश्यक है। लक्ष्य पब्लिक कॉन्ट्रैक्ट (public contract) को स्थिर रखना है।

प्रत्येक लाइब्रेरी एक विशिष्ट इंटरफ़ेस (interface) प्रदान करती है। उदाहरण के लिए:

  • authenticate()
  • createSession()
  • verifyPasskey()

ये फ़ंक्शन एक कॉन्ट्रैक्ट बनाते हैं। यदि आप अंतर्निहित (underlying) कोड को फिर से लिखते हैं, तब भी कॉन्ट्रैक्ट वही रहता है। आप अपने एप्लिकेशन के बाकी हिस्सों को प्रभावित किए बिना लाइब्रेरीज़ को बदल सकते हैं या प्रोटोकॉल बदल सकते हैं।

जब कोई भेद्यता (vulnerability) सामने आती है, तो आपको आमतौर पर दो समस्याओं का सामना करना पड़ता है:

  1. बग को ठीक करें।
  2. जाँचें कि क्या अपडेट आपके ऐप को खराब कर रहा है।

0deps आर्किटेक्चर में, दूसरी समस्या समाप्त हो जाती है। आप इंटरफ़ेस के पीछे के इम्प्लीमेंटेशन को अपडेट करते हैं। पब्लिक API बिल्कुल वैसा ही रहता है। आपका एप्लिकेशन बिना किसी कोड परिवर्तन के काम करना जारी रखता है।

इंटरनल एडेप्टर (internal adapters) के पीछे बाहरी कोड को अलग करके, आप दीर्घकालिक जोखिम को कम करते हैं। यदि कल कोई लाइब्रेरी गायब हो जाती है, तो आपको केवल एडेप्टर को अपडेट करना होगा।

0deps ओपन सोर्स का विरोध नहीं करता है। यह इसके उपयोग के तरीके को बदल देता है। लाइब्रेरीज़ डायनामिक बाहरी लिंक के बजाय एकीकृत घटक (integrated components) बन जाती हैं।

यह ऐसा सॉफ़्टवेयर बनाता है जो अनुमानित, लचीला और बनाए रखने में आसान है। इम्प्लीमेंटेशन विकसित होते हैं। कॉन्ट्रैक्ट बना रहता है।

स्रोत: https://dev.to/fullagenticstack/movimiento-0deps-dependencias-locales-contratos-inmutables-y-seguridad-por-diseno-1a6o