0deps મૂવમેન્ટ: લોકલ ડિપેન્ડન્સીઝ અને ઇમ્યુટેબલ કોન્ટ્રાક્ટ્સ

સોફ્ટવેર ડેવલપર્સ ઘણીવાર દરેક પ્રોજેક્ટમાં સેંકડો એક્સટર્નલ લાઇબ્રેરીઓ ઇન્સ્ટોલ કરે છે. આધુનિક ફ્રેમવર્ક હજારો ટ્રાન્ઝિટિવ ડિપેન્ડન્સીઝ (transitive dependencies) પર આધારિત હોય છે. આનો અર્થ એ છે કે તમારું એપ્લિકેશન સેંકડો અજાણ્યા યોગદાનકર્તાઓ દ્વારા લખાયેલ કોડ ચલાવે છે.

આ સેટઅપ ડેવલપમેન્ટની ગતિ વધારે છે. પરંતુ તે તમારા સોફ્ટવેર સપ્લાય ચેઇનમાં મોટા પાયે સુરક્ષા જોખમો પણ ઊભા કરે છે.

0deps મૂવમેન્ટ એક સરળ પ્રશ્ન પૂછે છે: જો તમારું એપ્લિકેશન ફક્ત એ જ કોડ ચલાવે જે તમે ખરેખર નિયંત્રિત કરો છો, તો શું થાય?

દરેક ડિપેન્ડન્સી તમારા એટેક સર્ફેસ (attack surface) ને વધારે છે. ડિપેન્ડન્સીઝ નીચે મુજબની સમસ્યાઓ લાવી શકે છે:

  • સુરક્ષા ખામીઓ લાવી શકે છે.
  • સપ્લાય ચેઇન એટેકનો સામનો કરી શકે છે.
  • તે છોડી દેવામાં આવી શકે છે (abandoned).
  • તેમની પબ્લિક API બદલી શકે છે.
  • બેકવર્ડ કમ્પેટીબિલિટી તોડી શકે છે.

0deps મોડેલમાં, તમે બધી જરૂરી ડિપેન્ડન્સીઝ સીધી તમારા પ્રોજેક્ટ રિપોઝિટરીમાં સામેલ કરો છો. તમે ઇન્સ્ટોલેશન દરમિયાન તેને ડાયનેમિકલી ડાઉનલોડ કરતા નથી. એપ બનાવવા અને ચલાવવા માટે જરૂરી બધું જ પ્રથમ ક્લોન (clone) થી જ ઉપલબ્ધ હોય છે.

આ અભિગમ નીચે મુજબના ફાયદા આપે છે:

  • રિપ્રોડ્યુસિબલ બિલ્ડ્સ (Reproducible builds).
  • એક્સટર્નલ પેકેજ રજિસ્ટ્રીઝ પર ઓછી નિર્ભરતા.
  • કેન્દ્રીય સુરક્ષા ઓડિટ્સ.
  • વધુ અનુમાનિતતા (predictability).
  • નાની સપ્લાય ચેઇન એટેક સર્ફેસ.

0deps નો અર્થ એ નથી કે તમે કોડ અપડેટ કરવાનું બંધ કરી દો. અલ્ગોરિધમ્સ અને સુરક્ષા સુધારાઓ (security fixes) વિકસતા રહેવા જોઈએ. તેના બદલે, તમે પબ્લિક કોન્ટ્રાક્ટને સ્થિર રાખો છો.

દરેક લાઇબ્રેરી એક સાવચેતીપૂર્વક ડિઝાઇન કરેલ ઇન્ટરફેસ પ્રદાન કરે છે. ઉદાહરણ તરીકે:

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

આ ફંક્શન્સ એક કોન્ટ્રાક્ટ વ્યાખ્યાયિત કરે છે. આ કોન્ટ્રાક્ટ સમાન રહે છે. તમે તમારા એપ્લિકેશનના બાકીના ભાગને અસર કર્યા વિના અન્ડરલાઇંગ કોડને ફરીથી લખી શકો છો અથવા ઇન્ટરનલ લાઇબ્રેરીઓને બદલી શકો છો.

જ્યારે કોઈ નબળાઈ (vulnerability) દેખાય, ત્યારે તમે ઇન્ટરફેસ પાછળના ઇમ્પ્લીમેન્ટેશનને અપડેટ કરો છો. પબ્લિક API સમાન રહે છે. તમારું એપ્લિકેશન કોડમાં ફેરફાર કર્યા વિના કામ કરવાનું ચાલુ રાખે છે.

માળખું આ મુજબ દેખાય છે: Application (એપ્લિકેશન) ↓ Public Interface (પબ્લિક ઇન્ટરફેસ) ↓ Internal Adapter (ઇન્ટરનલ એડેપ્ટર) ↓ Implementation (ઇમ્પ્લીમેન્ટેશન)

જો કોઈ એક્સટર્નલ લાઇબ્રેરી અદૃશ્ય થઈ જાય, તો તમારે ફક્ત એડેપ્ટર બદલવાનું રહે છે. તમારા એપ્લિકેશનનો બીજો કોઈ ભાગ તૂટતો નથી. આ આઇસોલેશન તમને માલિશિયસ પેકેજીસ, રજિસ્ટ્રી કોમ્પ્રોમાઇઝ અને ડિપેન્ડન્સી કન્ફ્યુઝનથી બચાવે છે.

પ્રોજેક્ટ્સ દાયકાઓ સુધી જીવે છે. લાઇબ્રેરીઓ અને ફ્રેમવર્ક નથી જીવતા. 0deps તમારી એપ્લિકેશનને વર્ષો સુધી સમાન સ્થિર કોન્ટ્રાક્ટ્સનો ઉપયોગ કરવાની મંજૂરી આપે છે, જ્યારે તેની આસપાસનું ઇકોસિસ્ટમ બદલાતું રહે છે.

તમે અનુમાનિત (predictable), સ્થિતિસ્થાપક (resilient) અને જાળવણી યોગ્ય (maintainable) સોફ્ટવેર મેળવો છો.

Source: https://dev.to/fullagenticstack/mouvement-0deps-dependances-locales-contrats-immuables-et-securite-par-conception-24c2

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