0deps मूवमेंट: लोकल डिपेंडेंसीज़ और इम्यूटेबल कॉन्ट्रैक्ट्स

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

यह सॉफ्टवेयर सप्लाई चेन रिस्क (software supply chain risk) पैदा करता है।

हर डिपेंडेंसी आपके अटैक सरफेस (attack surface) को बढ़ाती है। यह:

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

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

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

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

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

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

प्रत्येक लाइब्रेरी एक सावधानीपूर्वक डिज़ाइन किया गया इंटरफ़ेस एक्सपोज़ करती है। उदाहरणों में शामिल हैं:

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

ये फ़ंक्शन एक कॉन्ट्रैक्ट को परिभाषित करते हैं। कॉन्ट्रैक्ट कभी नहीं बदलता। आप इसके पीछे के कोड को फिर से लिख सकते हैं या पूरी लाइब्रेरी को बदल सकते हैं। आपके एप्लिकेशन के बाकी हिस्सों को इस बदलाव का पता भी नहीं चलेगा।

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

  1. खामी को ठीक करना।
  2. यह जांचना कि क्या अपडेट आपके ऐप को तोड़ रहा है।

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

आप एक आंतरिक एडॉप्टर (internal adapter) का उपयोग करके बाहरी इंटीग्रेशन को अलग करते हैं: Application -> Public Interface -> Adapter -> Implementation

यदि कल कोई लाइब्रेरी गायब हो जाती है, तो आपको केवल एडॉप्टर बदलना होगा। आपके ऐप का कोई अन्य हिस्सा नहीं टूटेगा।

0deps सॉफ्टवेयर को परफेक्ट नहीं बनाता है। यह सप्लाई चेन जोखिमों को कम करता है। यह मैलिशियस पैकेज (malicious packages), रजिस्ट्री कॉम्प्रोमाइज और डिपेंडेंसी कन्फ्यूजन जैसे मुद्दों को रोकता है।

प्रोजेक्ट दशकों तक चलते हैं। लाइब्रेरीज़ और फ्रेमवर्क बदलते रहते हैं। 0deps के साथ, आपका एप्लिकेशन इकोसिस्टम के विकसित होने के बावजूद उन्हीं स्थिर कॉन्ट्रैक्ट्स का उपयोग करना जारी रखता है।

स्रोत: https://dev.to/fullagenticstack/movimento-0deps-dependencias-locais-contratos-imutaveis-e-seguranca-por-design-4coo