0deps ఉద్యమం: లోకల్ డిపెండెన్సీలు మరియు ఇమ్మ్యూటబుల్ కాంట్రాక్టులు
సాఫ్ట్వేర్ డెవలపర్లు తరచుగా ప్రతి ప్రాజెక్ట్లో వందలాది బాహ్య లైబ్రరీలను ఇన్స్టాల్ చేస్తారు. ఆధునిక ఫ్రేమ్వర్క్లు వేలాది ట్రాన్సిటివ్ డిపెండెన్సీలపై (transitive dependencies) ఆధారపడి ఉంటాయి. అంటే మీ అప్లికేషన్ వందలాది తెలియని వ్యక్తుల కోడ్ను రన్ చేస్తోంది అని అర్థం.
ఈ వేగం మీ సాఫ్ట్వేర్ సప్లై చైన్కు భారీ ప్రమాదాన్ని కలిగిస్తుంది.
0deps ఉద్యమం ఒక సాధారణ ప్రశ్నను అడుగుతుంది: మీ అప్లికేషన్ కేవలం మీరు నిజంగా నియంత్రించే కోడ్ను మాత్రమే రన్ చేస్తే ఎలా ఉంటుంది?
ప్రతి డిపెండెన్సీ మీ అటాక్ సర్ఫేస్ను (attack surface) పెంచుతుంది. ఇది సెక్యూరిటీ లోపాలను తీసుకురావచ్చు, వదిలివేయబడవచ్చు (abandoned), లేదా కొత్త అప్డేట్తో మీ కోడ్ను పాడు చేయవచ్చు. మీ ప్రొడక్షన్ ఎన్విరాన్మెంట్లో రన్ అవుతున్న కోడ్పై మీరు నియంత్రణను కోల్పోతారు.
0deps మోడల్లో, మీరు అన్ని డిపెండెన్సీలను నేరుగా మీ ప్రాజెక్ట్ రిపోజిటరీలోకి తీసుకువస్తారు. ఇన్స్టాలేషన్ సమయంలో వాటిని డైనమిక్గా డౌన్లోడ్ చేయరు. మీ యాప్ను బిల్డ్ చేయడానికి మరియు రన్ చేయడానికి అవసరమైనవన్నీ ఇప్పటికే అక్కడ ఉంటాయి.
ఈ విధానం అనేక ప్రయోజనాలను అందిస్తుంది:
- Reproducible builds
- బాహ్య ప్యాకేజీ రిజిస్ట్రీలపై తక్కువ ఆధారపడటం
- కేంద్రీకృత సెక్యూరిటీ ఆడిట్లు
- మెరుగైన ప్రిడిక్టబిలిటీ (predictability)
- తక్కువ సప్లై చైన్ రిస్క్
కోడ్ మారకుండా ఆపడటం దీని ప్రధాన ఉద్దేశ్యం కాదు. అల్గారిథమ్లు మరియు సెక్యూరిటీ ఫిక్స్లు అభివృద్ధి చెందాలి. స్థిరంగా ఉండేది కేవలం పబ్లిక్ కాంట్రాక్ట్ మాత్రమే.
ప్రతి లైబ్రరీ జాగ్రత్తగా రూపొందించిన ఇంటర్ఫేస్ను అందిస్తుంది.
- authenticate()
- createSession()
- verifyPasskey()
ఈ ఫంక్షన్లు ఒక కాంట్రాక్ట్ను నిర్వచిస్తాయి. ఆ కాంట్రాక్ట్ ఎప్పటికీ మారదు. మీరు లోపల ఉన్న కోడ్ను తిరిగి వ్రాయవచ్చు లేదా లైబ్రరీని పూర్తిగా మార్చవచ్చు. మీ అప్లికేషన్ యొక్క మిగిలిన భాగం మారదు, ఎందుకంటే అది కేవలం కాంట్రాక్ట్తో మాత్రమే సంభాషిస్తుంది.
ఏదైనా వల్నరబిలిటీ (vulnerability) కనిపించినప్పుడు, మీరు దానిని అంతర్గతంగా సరిచేస్తారు. మీరు ఇంటర్ఫేస్ వెనుక ఉన్న ఇంప్లిమెంటేషన్ను అప్డేట్ చేస్తారు. పబ్లిక్ API అలాగే ఉంటుంది. మీ అప్లికేషన్ కోడ్ మార్పులు లేకుండానే పని చేస్తూనే ఉంటుంది.
బాహ్య కోడ్ను వేరు చేయడానికి ఈ నిర్మాణం అంతర్గత అడాప్టర్ను ఉపయోగిస్తుంది: Application ↓ Public Interface ↓ Adapter ↓ Implementation
ఒకవేళ ఏదైనా బాహ్య లైబ్రరీ కనిపించకుండా పోయినా, మీరు కేవలం అడాప్టర్ను మాత్రమే అప్డేట్ చేస్తే సరిపోతుంది. మీ యాప్లోని ఇతర భాగాలు దెబ్బతినవు.
0deps ఉద్యమం ఓపెన్ సోర్స్కు వ్యతిరేకం కాదు. ఇది మీరు దానిని ఉపయోగించే విధానాన్ని మారుస్తుంది. లైబ్రరీలు మీరు స్వయంగా ఆడిట్ చేసే మరియు వెర్షన్ చేసే ఇంటిగ్రేటెడ్ భాగాలగా మారుతాయి.
ఇది దశాబ్దాల పాటు మన్నే సాఫ్ట్వేర్ను సృష్టిస్తుంది. ఇంప్లిమెంటేషన్లు మారుతాయి, కానీ మీ కాంట్రాక్టులు అలాగే ఉంటాయి. ఈ స్థిరత్వం మీ సాఫ్ట్వేర్ను ప్రిడిక్టబుల్ (predictable) మరియు రెసిలియంట్గా (resilient) చేస్తుంది.
