0deps चळवळ: स्थानिक डिपेंडन्सीज आणि इम्युटेबल कॉन्ट्रॅक्ट्स (Local Dependencies and Immutable Contracts)

सॉफ्टवेअर डेव्हलपर्स अनेकदा शेकडो बाह्य लायब्ररीज (external libraries) इन्स्टॉल करतात. आधुनिक फ्रेमवर्क्स हजारो ट्रान्झिटिव्ह डिपेंडन्सीजवर (transitive dependencies) अवलंबून असतात. याचा अर्थ असा की तुमचे ॲप अशा अनोळखी व्यक्तींनी लिहिलेला कोड चालवते ज्यांना तुम्ही ओळखत नाही.

या वेगाची एक किंमत चुकवावी लागते. तुम्हाला सॉफ्टवेअर सप्लाय चेन रिस्कचा (software supply chain risks) सामना करावा लागतो.

प्रत्येक डिपेंडन्सी तुमचा अटॅक सरफेस (attack surface) वाढवते. डिपेंडन्सीजमुळे खालील गोष्टी घडू शकतात:

  • सुरक्षा त्रुटी (security flaws) निर्माण होऊ शकतात.
  • सप्लाय चेन अटॅक्सचे लक्ष्य बनू शकतात.
  • लेखकांनी सोडून दिलेली असू शकतात.
  • त्यांचे पब्लिक API बदलू शकतात.
  • बॅकवर्ड सुसंगतता (backward compatibility) बिघडू शकते.

0deps चळवळ हे बदलत आहे. ती विचारते: जर तुमचे ॲप फक्त तुमच्या नियंत्रणाखालील कोडवर अवलंबून असेल तर?

0deps मॉडेलमध्ये, तुम्ही सर्व आवश्यक कोड थेट तुमच्या प्रोजेक्ट रिपॉझिटरीमध्ये (project repository) आणता. तुम्ही इन्स्टॉलेशन किंवा बिल्ड दरम्यान पॅकेजेस डाउनलोड करत नाही. जेव्हा तुम्ही रिपो क्लोन करता, तेव्हा तुम्हाला आवश्यक असलेला सर्व कोड तिथेच उपलब्ध असतो.

याचे अनेक फायदे आहेत:

  • रिप्रॉड्युसिबल बिल्ड्स (Reproducible builds).
  • बाह्य पॅकेज रजिस्ट्रीवर अवलंबून राहण्याची गरज नाही.
  • केंद्रीकृत सुरक्षा ऑडिट्स (Centralized security audits).
  • अधिक अंदाजक्षमता (Higher predictability).
  • कमी सप्लाय चेन रिस्क.

कोड बदलण्यापासून रोखणे हे याचे ध्येय नाही. अल्गोरिदम आणि सुरक्षा सुधारणा (security fixes) विकसित होणे आवश्यक आहे. जे कायम राहते ते म्हणजे 'पब्लिक कॉन्ट्रॅक्ट' (public contract).

तुम्ही प्रत्येक लायब्ररीसाठी एक स्थिर इंटरफेस डिझाइन करता. उदाहरणार्थ:

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

या फंक्शन्सच्या मागे असलेली अंमलबजावणी (implementation) पूर्णपणे बदलू शकते. तुम्ही लॉजिक पुन्हा लिहू शकता किंवा लायब्ररी बदलू शकता. तुमच्या ॲपच्या उर्वरित भागाला यातील फरकाची जाणीवही होत नाही.

यामुळे अपडेट्स दरम्यान येणारा सर्वात मोठा त्रास दूर होतो. सहसा, एखादा बग फिक्स करताना तुमचे ॲप बिघडू नये, अशी तुम्हाला काळजी वाटते. 0deps मुळे, पब्लिक API तसाच राहतो. तुमच्या ॲप्लिकेशनमध्ये कोणताही कोड बदल न करता ते काम करत राहते.

तुम्ही बाह्य टूल्सना अंतर्गत अडॅप्टर्सच्या (internal adapters) मागे वेगळे ठेवता. जर एखादी लायब्ररी उद्या बंद पडली, तर तुम्हाला फक्त अडॅप्टर अपडेट करावा लागेल. तुमची उर्वरित सिस्टीम सुरक्षित राहील.

0deps ओपन सोर्सचा द्वेष करत नाही. तर ते ओपन सोर्स अधिक सुरक्षितपणे वापरू इच्छिते. डायनॅमिक इन्स्टॉलेशनऐवजी, तुम्ही लायब्ररीजना एकात्मिक घटक (integrated components) म्हणून मानता. तुम्ही त्यांचे ऑडिट करता. तुम्ही त्यांचे व्हर्जनिंग करता. तुम्ही त्यांना एनकॅप्युलेट (encapsulate) करता.

सॉफ्टवेअर दशकानुदशके टिकते. लायब्ररीज आणि फ्रेमवर्क्स नष्ट होतात. 0deps हे सुनिश्चित करते की तुमच्या ॲप्लिकेशनमध्ये कितीही बदल झाले तरी ते चालू राहील.

Source: https://dev.to/fullagenticstack/movimiento-0deps-dependencias-locales-contratos-inmutables-y-seguridad-por-diseno-1a6o

Optional learning community: https://t.me/GyaanSetuAi