Movimiento 0deps: ലോക്കൽ ഡിപെൻഡൻസികളും ഇമ്മ്യൂട്ടബിൾ കോൺട്രാക്റ്റുകളും
സോഫ്റ്റ്വെയർ ഡെവലപ്പർമാർ പലപ്പോഴും നൂറുകണക്കിന് എക്സ്റ്റേണൽ ലൈബ്രറികൾ ഇൻസ്റ്റാൾ ചെയ്യാറുണ്ട്. ആധുനിക ഫ്രെയിംവർക്കുകൾ ആയിരക്കണക്കിന് ട്രാൻസിറ്റീവ് ഡിപെൻഡൻസികളെ (transitive dependencies) ആശ്രയിക്കുന്നു. ഇതിനർത്ഥം നിങ്ങൾക്ക് അറിയാത്ത അപരിചിതരുടെ കോഡ് നിങ്ങളുടെ ആപ്പ് പ്രവർത്തിപ്പിക്കുന്നു എന്നാണ്.
ഈ വേഗതയ്ക്ക് ഒരു വില നൽകേണ്ടതുണ്ട്. നിങ്ങൾ സോഫ്റ്റ്വെയർ സപ്ലൈ ചെയിൻ റിസ്കുകൾ (software supply chain risks) നേരിടുന്നു.
ഓരോ ഡിപെൻഡൻസിയും നിങ്ങളുടെ അറ്റാക്ക് സർഫേസ് (attack surface) വർദ്ധിപ്പിക്കുന്നു. ഡിപെൻഡൻസികൾക്ക് ഇവ ചെയ്യാൻ കഴിയും:
- സുരക്ഷാ പിഴവുകൾ ഉണ്ടാക്കാം.
- സപ്ലൈ ചെയിൻ ആക്രമണങ്ങളുടെ ലക്ഷ്യസ്ഥാനമാകാം.
- എഴുത്തുകാർ ഉപേക്ഷിച്ചേക്കാം.
- അവയുടെ പബ്ലിക് API മാറ്റം വരുത്താം.
- ബാക്ക്വേർഡ് കംപാറ്റിബിലിറ്റി (backward compatibility) തകരാറിലാക്കാം.
0deps മൂവ്മെന്റ് ഇത് മാറ്റുന്നു. ഇത് ചോദിക്കുന്നു: നിങ്ങളുടെ ആപ്പ് നിങ്ങൾ നിയന്ത്രിക്കുന്ന കോഡിൽ മാത്രം ആശ്രയിച്ചാൽ എങ്ങനെയുണ്ടാകും?
ഒരു 0deps മോഡലിൽ, ആവശ്യമായ എല്ലാ കോഡും നിങ്ങൾ നേരിട്ട് നിങ്ങളുടെ പ്രോജക്റ്റ് റെപ്പോസിറ്ററിയിലേക്ക് കൊണ്ടുവരുന്നു. ഇൻസ്റ്റാളേഷൻ സമയത്തോ ബിൽഡ് സമയത്തോ നിങ്ങൾ പാക്കേജുകൾ ഡൗൺലോഡ് ചെയ്യുന്നില്ല. നിങ്ങൾ റെപ്പോ ക്ലോൺ ചെയ്യുമ്പോൾ തന്നെ നിങ്ങൾക്ക് ആവശ്യമുള്ളതെല്ലാം അവിടെയുണ്ടാകും.
ഇത് നിരവധി ഗുണങ്ങൾ നൽകുന്നു:
- റീപ്രൊഡ്യൂസിബിൾ ബിൽഡുകൾ (Reproducible builds).
- എക്സ്റ്റേണൽ പാക്കേജ് രജിസ്ട്രികളെ ആശ്രയിക്കേണ്ടതില്ല.
- കേന്ദ്രീകൃതമായ സുരക്ഷാ ഓഡിറ്റുകൾ.
- കൂടുതൽ പ്രവചിക്കാവുന്ന രീതി (Higher predictability).
- കുറഞ്ഞ സപ്ലൈ ചെയിൻ റിസ്ക്.
കോഡ് മാറുന്നത് തടയുക എന്നതല്ല ഇതിന്റെ ലക്ഷ്യം. അൽഗോരിതങ്ങളും സുരക്ഷാ പരിഹാരങ്ങളും പരിണമിച്ചുകൊണ്ടേയിരിക്കണം. മാറാത്തത് പബ്ലിക് കോൺട്രാക്റ്റ് (public contract) മാത്രമാണ്.
ഓരോ ലൈബ്രറിക്കും നിങ്ങൾ ഒരു സ്റ്റേബിൾ ഇന്റർഫേസ് രൂപകൽപ്പന ചെയ്യുന്നു. ഉദാഹരണത്തിന്:
authenticate()createSession()verifyPasskey()
ഈ ഫംഗ്ഷനുകൾക്ക് പിന്നിലെ ഇംപ്ലിമെന്റേഷൻ പൂർണ്ണമായും മാറാം. നിങ്ങൾക്ക് ലോജിക് മാറ്റിയെഴുതാനോ ലൈബ്രറി മാറ്റാനോ കഴിയും. നിങ്ങളുടെ ആപ്പിന്റെ ബാക്കി ഭാഗങ്ങൾക്ക് ഇതിൽ മാറ്റം സംഭവിക്കുന്നത് അറിയില്ല.
അപ്ഡേറ്റുകൾ നടത്തുമ്പോൾ ഉണ്ടാകുന്ന ഏറ്റവും വലിയ തലവേദന ഇത് പരിഹരിക്കുന്നു. സാധാരണയായി, ഒരു ബഗ് പരിഹരിക്കുമ്പോൾ തന്നെ ആപ്പ് തകരാറിലാകുമോ എന്ന് നിങ്ങൾ ആശങ്കപ്പെടാറുണ്ട്. 0deps ഉപയോഗിക്കുമ്പോൾ, പബ്ലിക് API മാറ്റമില്ലാതെ തുടരുന്നു. കോഡിൽ മാറ്റം വരുത്താതെ തന്നെ നിങ്ങളുടെ ആപ്ലിക്കേഷൻ പ്രവർത്തിച്ചുകൊണ്ടേയിരിക്കും.
നിങ്ങൾ എക്സ്റ്റേണൽ ടൂളുകളെ ഇന്റേണൽ അഡാപ്റ്ററുകൾക്ക് (internal adapters) പിന്നിൽ മാറ്റിനിർത്തുന്നു. നാളെ ഒരു ലൈബ്രറി നിലച്ചാൽ, നിങ്ങൾ അഡാപ്റ്റർ മാത്രം അപ്ഡേറ്റ് ചെയ്താൽ മതി. നിങ്ങളുടെ സിസ്റ്റത്തിന്റെ ബാക്കി ഭാഗങ്ങൾ സുരക്ഷിതമായിരിക്കും.
0deps ഓപ്പൺ സോഴ്സിനെ എതിർക്കുന്നില്ല. ഓപ്പൺ സോഴ്സ് കൂടുതൽ സുരക്ഷിതമായി ഉപയോഗിക്കാനാണ് ഇത് ആഗ്രഹിക്കുന്നത്. ഡൈനാമിക് ഇൻസ്റ്റാളുകൾക്ക് പകരം, ലൈബ്രറികളെ സംയോജിത ഘടകങ്ങളായി (integrated components) നിങ്ങൾ പരിഗണിക്കുന്നു. നിങ്ങൾ അവ ഓഡിറ്റ് ചെയ്യുന്നു. അവയ്ക്ക് വേർഷനുകൾ നൽകുന്നു. അവയെ എൻകാപ്സുലേറ്റ് (encapsulate) ചെയ്യുന്നു.
സോഫ്റ്റ്വെയറുകൾ പതിറ്റാണ്ടുകളോളം നിലനിൽക്കുന്നു. ലൈബ്രറികളും ഫ്രെയിംവർക്കുകളും കാലഹരണപ്പെട്ടേക്കാം. ഈ മാറ്റങ്ങളിലൂടെയും നിങ്ങളുടെ ആപ്ലിക്കേഷൻ സുഗമമായി പ്രവർത്തിക്കുന്നുണ്ടെന്ന് 0deps ഉറപ്പാക്കുന്നു.
Optional learning community: https://t.me/GyaanSetuAi
