Moviento 0deps: உள்ளூர் சார்புநிலைகள் மற்றும் பாதுகாப்பு
மென்பொருள் உருவாக்குநர்கள் பெரும்பாலான திட்டங்களில் நூற்றுக்கணக்கான வெளிப்புற நூலகங்களை நிறுவுகிறார்கள். நவீன கட்டமைப்புகள் ஆயிரக்கணக்கான தொடர் சார்புநிலைகளை (transitive dependencies) நம்பியுள்ளன. இதன் பொருள் உங்கள் பயன்பாடு நூற்றுக்கணக்கான அறியப்படாத நபர்களால் எழுதப்பட்ட குறியீட்டை இயக்குகிறது என்பதாகும்.
இந்தச் சூழல் மேம்பாட்டு வேகத்தை அதிகரிக்கிறது. அதே சமயம் இது மிகப்பெரிய விநியோகச் சங்கிலி அபாயங்களையும் (supply chain risks) உருவாக்குகிறது.
0deps இயக்கம் ஒரு எளிய கேள்வியைக் கேட்கிறது: உங்கள் பயன்பாடு நீங்கள் உண்மையில் கட்டுப்படுத்தும் குறியீட்டை மட்டுமே இயக்கினால் என்னவாகும்?
ஒவ்வொரு சார்புநிலையும் ஒரு புதிய தாக்குதல் பரப்பைக் கூட்டுகிறது. ஒரு சார்புநிலை:
- பாதுகாப்பு குறைபாடுகளை ஏற்படுத்தலாம்.
- விநியோகச் சங்கிலித் தாக்குதல்களுக்கான இலக்காக மாறலாம்.
- அதன் உருவாக்கியவரால் கைவிடப்படலாம்.
- அதன் பொது API-ஐ மாற்றலாம்.
- பின்னோக்கிய இணக்கத்தன்மையை (backward compatibility) உடைக்கலாம்.
0deps மாதிரியில், தேவையான அனைத்து சார்புநிலைகளையும் நேரடியாக உங்கள் திட்டச் சேமிப்பகத்திற்குள் (project repository) நகர்த்துகிறீர்கள். கட்டமைப்பின் போது (build time) தொகுப்புகளைத் தானாகத் தரவிறக்கம் செய்வதை நிறுத்துகிறீர்கள். செயலியை இயக்கத் தேவையான அனைத்தும் நீங்கள் அதை நகலெடுக்கும் (clone) தருணத்திலிருந்தே சேமிப்பகத்திலேயே இருக்கும்.
இந்த அணுகுமுறை வழங்குகிறது:
- மீண்டும் உருவாக்கக்கூடிய கட்டமைப்புகள் (Reproducible builds).
- வெளிப்புற தொகுப்புப் பதிவேடுகளைச் சார்ந்திருத்தல் குறைவு.
- மையப்படுத்தப்பட்ட பாதுகாப்புத் தணிக்கைகள்.
- கணிக்கக்கூடிய முடிவுகள்.
குறியீட்டை நிலையானதாக மாற்றுவதே இதன் நோக்கம் அல்ல. பிழைகளைச் சரிசெய்யவும் பாதுகாப்பாக இருக்கவும் செயலாக்கங்களும் (implementations) அல்காரிதம்களும் (algorithms) பரிணமிக்க வேண்டும். பொதுவான ஒப்பந்தத்தை (public contract) நிலையாக வைத்திருப்பதே இதன் இலக்கு.
ஒவ்வொரு நூலகமும் ஒரு குறிப்பிட்ட இடைமுகத்தை (interface) வெளிப்படுத்துகிறது. உதாரணமாக:
- authenticate()
- createSession()
- verifyPasskey()
இந்தச் செயல்பாடுகள் ஒரு ஒப்பந்தத்தை உருவாக்குகின்றன. அடிப்படையான குறியீட்டை நீங்கள் மாற்றியமைத்தாலும் அந்த ஒப்பந்தம் மாறாமல் இருக்கும். உங்கள் பயன்பாட்டின் மற்ற பகுதிகளைப் பாதிக்காமல் நீங்கள் நூலகங்களை மாற்றவோ அல்லது நெறிமுறைகளை (protocols) மாற்றவோ முடியும்.
ஒரு பாதுகாப்பு குறைபாடு (vulnerability) தோன்றும் போது, நீங்கள் பொதுவாக இரண்டு சிக்கல்களை எதிர்கொள்கிறீர்கள்:
- பிழையைச் சரிசெய்தல்.
- அந்தப் புதுப்பிப்பு உங்கள் செயலியைப் பாதிக்கிறதா என்று சரிபார்த்தல்.
0deps கட்டமைப்பில், இரண்டாவது சிக்கல் மறைந்துவிடும். நீங்கள் இடைமுகத்திற்குப் பின்னால் உள்ள செயலாக்கத்தை (implementation) புதுப்பிக்கிறீர்கள். பொது API அப்படியே இருக்கும். உங்கள் பயன்பாடு குறியீடு மாற்றங்கள் இன்றி தொடர்ந்து இயங்கும்.
வெளிப்புறக் குறியீட்டை உள் அடாப்டர்களுக்குப் (internal adapters) பின்னால் தனிமைப்படுத்துவதன் மூலம், நீண்டகால அபாயத்தைக் குறைக்கிறீர்கள். நாளை ஒரு நூலகம் மறைந்துவிட்டால், நீங்கள் அடாப்டரை மட்டும் புதுப்பித்தால் போதும்.
0deps திறந்த மூலத்திற்கு (open source) எதிராகப் போராடவில்லை. நீங்கள் அதை எவ்வாறு பயன்படுத்துகிறீர்கள் என்பதை மாற்றுகிறது. நூலகங்கள் மாறும் வெளிப்புற இணைப்புகளாக இல்லாமல், ஒருங்கிணைந்த கூறுகளாக மாறுகின்றன.
இது கணிக்கக்கூடிய, மீள்திறன் கொண்ட மற்றும் பராமரிக்க எளிதான மென்பொருளை உருவாக்குகிறது. செயலாக்கங்கள் பரிணமிக்கின்றன. ஒப்பந்தம் நிலைத்திருக்கிறது.
