0deps मूवमेंट: लोकल डिपेंडेंसीज़ और इम्यूटेबल कॉन्ट्रैक्ट्स
सॉफ्टवेयर डेवलपर्स अक्सर हर प्रोजेक्ट में सैकड़ों बाहरी लाइब्रेरीज़ इंस्टॉल करते हैं। आधुनिक फ्रेमवर्क हज़ारों ट्रांसिटिव डिपेंडेंसीज़ (transitive dependencies) पर निर्भर करते हैं। इसका मतलब है कि आपका एप्लिकेशन सैकड़ों अज्ञात योगदानकर्ताओं का कोड चलाता है।
यह सेटअप डेवलपमेंट की गति को बढ़ाता है। लेकिन यह आपके सॉफ्टवेयर सप्लाई चेन में भारी सुरक्षा जोखिम भी पैदा करता है।
0deps मूवमेंट एक सरल प्रश्न पूछता है: क्या होगा यदि आपका एप्लिकेशन केवल वही कोड चलाए जिसे आप वास्तव में नियंत्रित करते हैं?
हर डिपेंडेंसी आपके अटैक सरफेस (attack surface) को बढ़ाती है। डिपेंडेंसीज़ निम्नलिखित कारण बन सकती हैं:
- सुरक्षा खामियां पैदा करना।
- सप्लाई चेन हमलों का सामना करना।
- परित्यक्त (abandoned) हो जाना।
- अपने पब्लिक API को बदल देना।
- बैकवर्ड कम्पैटिबिलिटी (backward compatibility) को तोड़ देना।
0deps मॉडल में, आप सभी आवश्यक डिपेंडेंसीज़ को सीधे अपने प्रोजेक्ट रिपॉजिटरी में शामिल करते हैं। आप उन्हें इंस्टॉलेशन के दौरान डायनामिक रूप से डाउनलोड नहीं करते हैं। ऐप को बनाने और चलाने के लिए आवश्यक सब कुछ पहले क्लोन (clone) से ही मौजूद होता है।
यह दृष्टिकोण प्रदान करता है:
- रिप्रॉड्यूसिबल बिल्ड्स (Reproducible builds)।
- बाहरी पैकेज रजिस्ट्रियों पर कम निर्भरता।
- केंद्रीकृत सुरक्षा ऑडिट।
- अधिक पूर्वानुमान क्षमता (predictability)।
- छोटा सप्लाई चेन अटैक सरफेस।
0deps का मतलब यह नहीं है कि आप कोड अपडेट करना बंद कर दें। एल्गोरिदम और सुरक्षा सुधारों (security fixes) का विकसित होना ज़रूरी है। इसके बजाय, आप पब्लिक कॉन्ट्रैक्ट को स्थिर रखते हैं।
प्रत्येक लाइब्रेरी एक सावधानीपूर्वक डिज़ाइन किया गया इंटरफ़ेस (interface) प्रदान करती है। उदाहरण के लिए:
- authenticate()
- createSession()
- verifyPasskey()
ये फ़ंक्शन एक कॉन्ट्रैक्ट को परिभाषित करते हैं। यह कॉन्ट्रैक्ट समान रहता है। आप अपने एप्लिकेशन के बाकी हिस्सों को प्रभावित किए बिना अंतर्निहित (underlying) कोड को फिर से लिख सकते हैं या आंतरिक लाइब्रेरीज़ को बदल सकते हैं।
जब कोई भेद्यता (vulnerability) सामने आती है, तो आप इंटरफ़ेस के पीछे के इम्प्लीमेंटेशन को अपडेट करते हैं। पब्लिक API बिल्कुल वैसा ही रहता है। आपका एप्लिकेशन बिना किसी कोड बदलाव के काम करना जारी रखता है।
इसकी संरचना इस प्रकार दिखती है: Application ↓ Public Interface ↓ Internal Adapter ↓ Implementation
यदि कोई बाहरी लाइब्रेरी गायब हो जाती है, तो आप केवल एडॉप्टर (adapter) को बदलते हैं। आपके एप्लिकेशन का कोई अन्य हिस्सा नहीं टूटता है। यह आइसोलेशन आपको मैलिशियस (malicious) पैकेज, रजिस्ट्री कॉम्प्रोमाइज और डिपेंडेंसी कन्फ्यूजन से बचाता है।
प्रोजेक्ट दशकों तक चलते हैं। लाइब्रेरीज़ और फ्रेमवर्क नहीं। 0deps आपके एप्लिकेशन को वर्षों तक उन्हीं स्थिर कॉन्ट्रैक्ट्स का उपयोग करने की अनुमति देता है, जबकि उसके आसपास का इकोसिस्टम बदलता रहता है।
आप पूर्वानुमानित (predictable), लचीला (resilient) और रखरखाव योग्य (maintainable) सॉफ्टवेयर प्राप्त करते हैं।
Optional learning community: https://t.me/GyaanSetuAi
