0deps ચળવળ: સ્થાનિક નિર્ભરતાઓ અને અપરિવર્તનીય કરારો
સોફ્ટવેર ડેવલપર્સ ઘણીવાર સેંકડો બાહ્ય લાઇબ્રેરીઓ ઇન્સ્ટોલ કરે છે. આધુનિક ફ્રેમવર્ક હજારો ટ્રાન્ઝિટિવ નિર્ભરતાઓ (transitive dependencies) પર આધારિત હોય છે. આનો અર્થ એ છે કે તમારું એપ્લિકેશન અજાણ્યા લોકોના કોડ પર ચાલે છે.
આ સોફ્ટવેર સપ્લાય ચેઇન જોખમ ઊભું કરે છે.
દરેક નિર્ભરતા (dependency) તમારા એટેક સર્ફેસને વધારે છે. તે:
- સુરક્ષા ખામીઓ લાવી શકે છે.
- સપ્લાય ચેઇન હુમલાઓ માટે લક્ષ્ય બની શકે છે.
- મેન્ટેનર્સ દ્વારા છોડી દેવામાં આવી શકે છે.
- તેની પબ્લિક API બદલી શકે છે.
- બેકવર્ડ કમ્પેટીબિલિટી (backward compatibility) તોડી શકે છે.
0deps ચળવળ એક સરળ પ્રશ્ન પૂછે છે: જો તમારું એપ્લિકેશન ફક્ત તમે નિયંત્રિત કરતા કોડ પર જ આધારિત હોય તો?
0deps મોડેલમાં, તમે જરૂરી નિર્ભરતાઓને સીધી તમારા પ્રોજેક્ટ રિપોઝિટરીમાં એમ્બેડ કરો છો. તમે બિલ્ડ દરમિયાન તેને ડાયનેમિકલી ડાઉનલોડ કરવાનું બંધ કરો છો. એપ્લિકેશન ચલાવવા માટે જરૂરી બધું જ શરૂઆતથી જ રિપોમાં રહે છે.
આ અભિગમ આ સુવિધાઓ પૂરી પાડે છે:
- રિપ્રોડ્યુસિબલ બિલ્ડ્સ (Reproducible builds).
- બાહ્ય રજિસ્ટ્રીઓ પર ઓછી નિર્ભરતા.
- કેન્દ્રીય સુરક્ષા ઓડિટ.
- વધુ અનુમાનિતતા (predictability).
મુખ્ય સિદ્ધાંત કોડને સ્થિર રાખવાનો નથી. બગ્સ સુધારવા અને સુરક્ષા વધારવા માટે ઇમ્પ્લીમેન્ટેશન અને અલ્ગોરિધમ્સ વિકસિત થવા જોઈએ. જે સ્થિર રહે છે તે પબ્લિક કોન્ટ્રાક્ટ (public contract) છે.
દરેક લાઇબ્રેરી એક સાવચેતીપૂર્વક ડિઝાઇન કરેલ ઇન્ટરફેસ પ્રદાન કરે છે. ઉદાહરણોમાં શામેલ છે:
authenticate()createSession()verifyPasskey()
આ ફંક્શન્સ એક કરાર (contract) વ્યાખ્યાયિત કરે છે. આ કરાર ક્યારેય બદલાતો નથી. તમે તેની પાછળનો કોડ ફરીથી લખી શકો છો અથવા આખી લાઇબ્રેરી બદલી શકો છો. તમારી એપ્લિકેશનના બાકીના ભાગને આ ફેરફારની જાણ થશે નહીં.
જ્યારે કોઈ નબળાઈ (vulnerability) દેખાય છે, ત્યારે તમારે સામાન્ય રીતે બે સમસ્યાઓનો સામનો કરવો પડે છે:
- ખામી સુધારવી.
- અપડેટ તમારી એપ્લિકેશનને તોડી નાખશે કે નહીં તે તપાસવું.
0deps આર્કિટેક્ચરમાં, બીજી સમસ્યા દૂર થઈ જાય છે. તમે આંતરિક ઇમ્પ્લીમેન્ટેશન અપડેટ કરો છો જ્યારે પબ્લિક API સમાન રહે છે. તમારી એપ્લિકેશન કોડમાં ફેરફાર કર્યા વિના કામ કરવાનું ચાલુ રાખે છે.
તમે આંતરિક એડેપ્ટરનો ઉપયોગ કરીને બાહ્ય ઇન્ટિગ્રેશનને અલગ પાડો છો: Application -> Public Interface -> Adapter -> Implementation
જો આવતીકાલે કોઈ લાઇબ્રેરી અદૃશ્ય થઈ જાય, તો તમારે ફક્ત એડેપ્ટર બદલવાનું રહેશે. તમારી એપ્લિકેશનનો બીજો કોઈ ભાગ તૂટશે નહીં.
0deps સોફ્ટવેરને સંપૂર્ણ બનાવતું નથી. તે સપ્લાય ચેઇન જોખમો ઘટાડે છે. તે માલિશિયસ પેકેજીસ (malicious packages), રજિસ્ટ્રી કોમ્પ્રોમાઇઝ અને ડિપેન્ડન્સી કન્ફ્યુઝન જેવી સમસ્યાઓને અટકાવે છે.
પ્રોજેક્ટ્સ દાયકાઓ સુધી ચાલે છે. લાઇબ્રેરીઓ અને ફ્રેમવર્ક બદલાતા રહે છે. 0deps સાથે, ઇકોસિસ્ટમ ગમે તે રીતે વિકસે, તમારી એપ્લિકેશન તે જ સ્થિર કરારોનો ઉપયોગ કરવાનું ચાલુ રાખશે.
