Movement 0deps: உள்ளூர் சார்புகள் மற்றும் மாற்ற முடியாத ஒப்பந்தங்கள்
மென்பொருள் உருவாக்குநர்கள் பெரும்பாலும் ஒவ்வொரு திட்டத்திலும் நூற்றுக்கணக்கான வெளிப்புற நூலகங்களை (external libraries) நிறுவுகிறார்கள். நவீன கட்டமைப்புகள் ஆயிரக்கணக்கான இடைநிலைச் சார்புகளை (transitive dependencies) நம்பியிருக்கின்றன. இதன் பொருள் உங்கள் பயன்பாடு நூற்றுக்கணக்கான அறியப்படாத பங்களிப்பாளர்களிடமிருந்து வரும் குறியீட்டை இயக்குகிறது என்பதாகும்.
இந்த வேகம் உங்கள் மென்பொருள் விநியோகச் சங்கிலிக்கு (software supply chain) ஒரு மிகப்பெரிய ஆபத்தை உருவாக்குகிறது.
0deps இயக்கம் ஒரு எளிய கேள்வியைக் கேட்கிறது: உங்கள் பயன்பாடு நீங்கள் உண்மையில் கட்டுப்படுத்தும் குறியீட்டை மட்டுமே இயக்கினால் என்னவாகும்?
ஒவ்வொரு சார்பும் உங்கள் தாக்குதல் பரப்பளவை (attack surface) அதிகரிக்கிறது. அது பாதுகாப்பு ஓட்டைகளை ஏற்படுத்தலாம், கைவிடப்படலாம் அல்லது புதிய புதுப்பிப்பின் மூலம் உங்கள் குறியீட்டைச் சிதைக்கலாம். உங்கள் உற்பத்திச் சூழலில் (production environment) இயங்கும் குறியீட்டின் மீதான கட்டுப்பாட்டை நீங்கள் இழக்கிறீர்கள்.
0deps மாதிரியில், நீங்கள் அனைத்துச் சார்புகளையும் நேரடியாக உங்கள் திட்டக் களஞ்சியத்திற்குள் (project repository) கொண்டு வருகிறீர்கள். அவற்றை நிறுவும் போது நீங்கள் அவற்றை இயங்குதள ரீதியாக (dynamically) பதிவிறக்கம் செய்வதில்லை. உங்கள் செயலியை உருவாக்கவும் இயக்கவும் தேவையான அனைத்தும் ஏற்கனவே அங்கேயே இருக்கும்.
இந்த அணுகுமுறை பல நன்மைகளை வழங்குகிறது:
- மீண்டும் உருவாக்கக்கூடிய கட்டமைப்புகள் (Reproducible builds)
- வெளிப்புற தொகுப்புப் பதிவேடுகளை (package registries) சார்ந்திருத்தல் குறைவு
- மையப்படுத்தப்பட்ட பாதுகாப்புத் தணிக்கைகள் (security audits)
- சிறந்த முன்கூட்டியே கணிக்கும் திறன் (predictability)
- குறைந்த விநியோகச் சங்கிலி ஆபத்து
குறியீடு மாறுவதை தடுப்பதே இதன் முக்கியக் கொள்கையல்ல. அல்காரிதம்கள் மற்றும் பாதுகாப்புத் திருத்தங்கள் பரிணமிக்க வேண்டும். நிலையாக இருப்பது பொது ஒப்பந்தம் (public contract) மட்டுமே.
ஒவ்வொரு நூலகமும் கவனமாக வடிவமைக்கப்பட்ட ஒரு இடைமுகத்தை (interface) வெளிப்படுத்துகிறது.
- authenticate()
- createSession()
- verifyPasskey()
இந்தச் செயல்பாடுகள் ஒரு ஒப்பந்தத்தை வரையறுக்கின்றன. அந்த ஒப்பந்தம் ஒருபோதும் மாறாது. நீங்கள் அதன் அடிப்படையிலுள்ள குறியீட்டை மீண்டும் எழுதலாம் அல்லது நூலகத்தை முழுமையாக மாற்றலாம். உங்கள் பயன்பாட்டின் மற்ற பகுதிகள் மாறாமல் இருக்கும், ஏனெனில் அவை ஒப்பந்தத்துடன் மட்டுமே தொடர்பு கொள்கின்றன.
ஒரு பாதுகாப்பு குறைபாடு (vulnerability) தோன்றும் போது, நீங்கள் அதை உள்ளூரிலேயே சரிசெய்கிறீர்கள். இடைமுகத்திற்குப் பின்னால் உள்ள செயல்பாட்டை (implementation) நீங்கள் புதுப்பிக்கிறீர்கள். பொது API அப்படியே இருக்கும். உங்கள் பயன்பாடு குறியீடு மாற்றங்கள் இன்றி தொடர்ந்து இயங்கும்.
இந்த அமைப்பு வெளிப்புறக் குறியீட்டைத் தனிமைப்படுத்த ஒரு உள் அடாப்டரைப் (internal adapter) பயன்படுத்துகிறது: Application ↓ Public Interface ↓ Adapter ↓ Implementation
ஒரு வெளிப்புற நூலகம் மறைந்துவிட்டால், நீங்கள் அடாப்டரை மட்டும் புதுப்பித்தால் போதும். உங்கள் பயன்பாட்டின் மற்ற எந்தப் பகுதியும் பாதிக்கப்படாது.
0deps இயக்கம் திறந்த மூலத்திற்கு (open source) எதிராகச் செயல்படுவதில்லை. நீங்கள் அதை எவ்வாறு பயன்படுத்துகிறீர்கள் என்பதை மாற்றுகிறது. நூலகங்கள் நீங்கள் தணிக்கை செய்து மற்றும் பதிப்பு மேலாண்மை செய்யும் ஒருங்கிணைந்த கூறுகளாக மாறுகின்றன.
இது பல தசாப்தங்கள் நீடிக்கும் மென்பொருளை உருவாக்குகிறது. செயல்பாடுகள் மாறலாம், ஆனால் உங்கள் ஒப்பந்தங்கள் அப்படியே இருக்கும். இந்த நிலைத்தன்மை உங்கள் மென்பொருளைக் கணிக்கக்கூடியதாகவும் மற்றும் மீள்திறன் கொண்டதாகவும் (resilient) மாற்றுகிறது.
