0deps चळवळ: स्थानिक अवलंबित्व (Local Dependencies) आणि अपरिवर्तनीय करार (Immutable Contracts)
सॉफ्टवेअर डेव्हलपर्स अनेकदा प्रत्येक प्रोजेक्टमध्ये शेकडो बाह्य लायब्ररी (external libraries) इन्स्टॉल करतात. आधुनिक फ्रेमवर्क्स हजारो ट्रान्झिटिव्ह डिपेंडन्सीजवर (transitive dependencies) अवलंबून असतात. याचा अर्थ असा की तुमचे ॲप्लिकेशन शेकडो अज्ञात योगदानकर्त्यांचा कोड चालवते.
ही पद्धत डेव्हलपमेंटचा वेग वाढवते. परंतु, यामुळे तुमच्या सॉफ्टवेअर सप्लाय चेनमध्ये (software supply chain) मोठ्या सुरक्षा धोक्यांची निर्मिती होते.
0deps चळवळ एक साधा प्रश्न विचारते: जर तुमचे ॲप्लिकेशन फक्त तुम्ही नियंत्रित करता तोच कोड चालवत असेल तर?
प्रत्येक डिपेंडन्सी तुमचा अटॅक सरफेस (attack surface) वाढवते. डिपेंडन्सीजमुळे खालील गोष्टी घडू शकतात:
- सुरक्षा त्रुटी (security flaws) निर्माण होऊ शकतात.
- सप्लाय चेन अटॅक्सचा सामना करावा लागू शकतो.
- त्या सोडून दिल्या जाऊ शकतात (abandoned).
- त्यांचे पब्लिक API बदलू शकतात.
- बॅकवर्ड सुसंगतता (backward compatibility) बिघडू शकते.
0deps मॉडेलमध्ये, तुम्ही सर्व आवश्यक डिपेंडन्सीज थेट तुमच्या प्रोजेक्ट रिपॉझिटरीमध्ये समाविष्ट करता. तुम्ही इन्स्टॉलेशन दरम्यान त्या डायनॅमिकली डाउनलोड करत नाही. ॲप तयार करण्यासाठी आणि चालवण्यासाठी आवश्यक असलेली सर्व सामग्री पहिल्या क्लोनपासूनच उपलब्ध असते.
हा दृष्टिकोन खालील गोष्टी प्रदान करतो:
- रिप्रॉड्युसिबल बिल्ड्स (Reproducible builds).
- बाह्य पॅकेज रजिस्ट्रीजवरील कमी अवलंबित्व.
- केंद्रीकृत सुरक्षा ऑडिट्स.
- अधिक अंदाजक्षमता (predictability).
- लहान सप्लाय चेन अटॅक सरफेस.
0deps चा अर्थ असा नाही की तुम्ही कोड अपडेट करणे थांबवावे. अल्गोरिदम आणि सुरक्षा सुधारणा (security fixes) विकसित होणे आवश्यक आहे. त्याऐवजी, तुम्ही पब्लिक कॉन्ट्रॅक्ट (public contract) स्थिर ठेवता.
प्रत्येक लायब्ररी एक काळजीपूर्वक डिझाइन केलेले इंटरफेस (interface) उपलब्ध करून देते. उदाहरणार्थ:
authenticate()createSession()verifyPasskey()
ही फंक्शन्स एक करार (contract) परिभाषित करतात. हा करार तोच राहतो. तुम्ही तुमच्या ॲप्लिकेशनच्या इतर भागांवर परिणाम न करता मूळ कोड पुन्हा लिहू शकता किंवा अंतर्गत लायब्ररी बदलू शकता.
जेव्हा एखादी असुरक्षितता (vulnerability) समोर येते, तेव्हा तुम्ही इंटरफेसच्या मागे असलेली अंमलबजावणी (implementation) अपडेट करता. पब्लिक API तसाच राहतो. तुमच्या ॲप्लिकेशनमध्ये कोणताही कोड बदल न करता ते काम करत राहते.
रचना अशी दिसते: Application ↓ Public Interface ↓ Internal Adapter ↓ Implementation
जर एखादी बाह्य लायब्ररी उपलब्ध नसेल, तर तुम्हाला फक्त अडॅप्टर बदलावा लागतो. तुमच्या ॲप्लिकेशनचा इतर कोणताही भाग बिघडत नाही. हे अलगीकरण (isolation) तुम्हाला घातक पॅकेजेस, रजिस्ट्री कॉम्प्रमाइज आणि डिपेंडन्सी कन्फ्युजनपासून वाचवते.
प्रोजेक्ट्स दशकांसाठी टिकतात. लायब्ररी आणि फ्रेमवर्क्स तसे नसतात. 0deps मुळे तुमचे ॲप्लिकेशन सभोवतालचे इकोसिस्टम बदलत असतानाही अनेक वर्षे तेच स्थिर करार वापरू शकते.
तुम्हाला अंदाजक्षम, लवचिक आणि देखभाल करण्यायोग्य (maintainable) सॉफ्टवेअर मिळते.
Optional learning community: https://t.me/GyaanSetuAi
