0deps मूवमेंट: लोकल डिपेंडेंसीज़ और सुरक्षा
सॉफ्टवेयर डेवलपर्स लगभग हर प्रोजेक्ट में सैकड़ों बाहरी लाइब्रेरीज़ इंस्टॉल करते हैं। आधुनिक फ्रेमवर्क अक्सर हज़ारों छिपी हुई डिपेंडेंसीज़ पर निर्भर होते हैं। यह सॉफ्टवेयर सप्लाई चेन के लिए एक बड़ा जोखिम पैदा करता है।
0deps मूवमेंट एक सरल प्रश्न पूछता है: क्या होगा यदि आपका एप्लिकेशन केवल उसी कोड को चलाए जिसे आप नियंत्रित करते हैं?
हर डिपेंडेंसी आपके अटैक सरफेस (attack surface) को बढ़ाती है। डिपेंडेंसीज़ ये कर सकती हैं:
- सुरक्षा खामियां पैदा करना।
- हमलों के लक्ष्य बनना।
- अपडेट मिलना बंद हो जाना।
- अपना कोड बदलना और आपके ऐप को खराब करना।
- नई छिपी हुई डिपेंडेंसीज़ जोड़ना।
0deps मॉडल में, आप हर डिपेंडेंसी को सीधे अपने प्रोजेक्ट रिपॉजिटरी में रखते हैं। आप उन्हें बिल्ड (build) के दौरान डाउनलोड नहीं करते हैं। शुरुआत से ही सब कुछ आपकी रिपॉजिटरी के अंदर रहता है।
यह तरीका प्रदान करता है:
- रिप्रोड्यूसिबल बिल्ड्स (Reproducible builds)।
- बाहरी रजिस्ट्रियों पर कम निर्भरता।
- आसान सुरक्षा ऑडिट।
- अधिक प्रेडिक्टेबल कोड।
मुख्य विचार कोड को बदलने से रोकना नहीं है। एल्गोरिदम और सुरक्षा पैच (security patches) को बदलना ही चाहिए। जो चीज़ समान रहती है, वह है पब्लिक कॉन्ट्रैक्ट (public contract)।
एक लाइब्रेरी फंक्शन्स का एक विशिष्ट सेट दिखाती है। ये फंक्शन्स एक कॉन्ट्रैक्ट बनाते हैं।
- authenticate()
- createSession()
- verifyPasskey()
लाइब्रेरी के अंदर का इम्प्लीमेंटेशन (implementation) पूरी तरह से बदल सकता है। आप एल्गोरिदम या डेटा स्ट्रक्चर्स को बदल सकते हैं। आपके एप्लिकेशन के बाकी हिस्सों को इससे कोई फर्क नहीं पड़ता क्योंकि इंटरफ़ेस वही रहता है।
जब कोई सुरक्षा खामी सामने आती है, तो आपको दो समस्याओं का सामना करना पड़ता है:
- खामी को ठीक करना।
- यह सुनिश्चित करना कि अपडेट आपके ऐप को खराब न करे।
0deps आर्किटेक्चर दूसरी समस्या को हल करता है। आप इंटरफ़ेस के पीछे के कोड को अपडेट करते हैं। पब्लिक API वही रहती है। आपका एप्लिकेशन बिना किसी बदलाव के काम करता रहता है।
आप बाहरी टूल्स को एक इंटरनल अडैप्टर (internal adapter) के पीछे आइसोलेट करते हैं: Application ↓ Public Interface ↓ Adapter ↓ Implementation
यदि कोई लाइब्रेरी काम करना बंद कर देती है, तो आप केवल अडैप्टर बदलते हैं। आपके ऐप का बाकी हिस्सा सुरक्षित रहता है। लाइब्रेरी वर्शन्स एक बड़ी सिरदर्द के बजाय एक छोटा विवरण बन जाते हैं।
लक्ष्य सॉफ्टवेयर को परफेक्ट बनाना नहीं है। लक्ष्य सप्लाई चेन जोखिम को कम करना है। डायनेमिक इंस्टॉल्स (dynamic installs) को हटाकर, आप रोकते हैं:
- दुर्भावनापूर्ण पैकेज रिलीज़ (Malicious package releases)।
- समझौता की गई रजिस्ट्रियां (Compromised registries)।
- डिपेंडेंसी कन्फ्यूजन अटैक (Dependency confusion attacks)।
कोड की हर लाइन आपके प्रोजेक्ट का हिस्सा बन जाती है। यह पूर्ण नियंत्रण और समीक्षा की अनुमति देता है।
प्रोजेक्ट सालों तक चलते हैं। लाइब्रेरीज़ और फ्रेमवर्क गायब हो जाते हैं। 0deps के साथ, इकोसिस्टम बदलने पर भी आपका एप्लिकेशन उन्हीं कॉन्ट्रैक्ट्स का उपयोग करना जारी रखता है।
