0deps இயக்கம்: உள்ளூர் சார்புகள் மற்றும் மாற்ற முடியாத ஒப்பந்தங்கள்
மென்பொருள் உருவாக்குநர்கள் பெரும்பாலும் நூற்றுக்கணக்கான வெளிப்புற நூலகங்களை (external libraries) நிறுவுகிறார்கள். நவீன கட்டமைப்புகள் (frameworks) ஆயிரக்கணக்கான இடைநிலைச் சார்புகளை (transitive dependencies) நம்பியிருக்கின்றன. இதன் பொருள் உங்கள் பயன்பாடு அறிமுகமில்லாத நபர்களின் குறியீட்டை இயக்குகிறது என்பதாகும்.
இது மென்பொருள் விநியோகச் சங்கிலி அபாயத்தை (software supply chain risk) உருவாக்குகிறது.
ஒவ்வொரு சார்பும் உங்கள் தாக்குதல் பரப்பளவை (attack surface) அதிகரிக்கிறது. அது:
- பாதுகாப்பு குறைபாடுகளை ஏற்படுத்தலாம்.
- விநியோகச் சங்கிலித் தாக்குதல்களுக்கான இலக்காக மாறலாம்.
- பராமரிப்பாளர்களால் கைவிடப்படலாம்.
- அதன் பொதுவான API-ஐ மாற்றலாம்.
- முந்தைய பதிப்புகளுடனான இணக்கத்தன்மையை (backward compatibility) பாதிக்கலாம்.
0deps இயக்கம் ஒரு எளிய கேள்வியைக் கேட்கிறது: உங்கள் பயன்பாடு நீங்கள் கட்டுப்படுத்தும் குறியீட்டை மட்டுமே நம்பியிருந்தால் என்னவாகும்?
0deps மாதிரியில், தேவையான சார்புகளை உங்கள் திட்டக் களஞ்சியத்திலேயே (project repository) நேரடியாக இணைக்கிறீர்கள். கட்டமைப்பின் (builds) போது அவற்றை இயங்குதன்மை முறையில் (dynamically) பதிவிறக்குவதை நிறுத்துகிறீர்கள். பயன்பாட்டை இயக்கத் தேவையான அனைத்தும் தொடக்கத்திலிருந்தே அந்தத் தொகுப்பிலேயே (repo) இருக்கும்.
இந்த அணுகுமுறை பின்வருவனவற்றை வழங்குகிறது:
- மீண்டும் உருவாக்கக்கூடிய கட்டமைப்புகள் (Reproducible builds).
- வெளிப்புறப் பதிவேடுகளை (external registries) சார்ந்திருத்தல் குறைவு.
- மையப்படுத்தப்பட்ட பாதுகாப்புத் தணிக்கைகள்.
- அதிகக் கணிக்கக்கூடிய தன்மை.
குறியீட்டை நிலையாக வைத்திருப்பது இதன் முக்கியக் கொள்கையல்ல. பிழைகளைத் திருத்தவும் பாதுகாப்பை மேம்படுத்தவும் செயலாக்கங்களும் (implementations) வழிமுறைகளும் (algorithms) மாற வேண்டும். எது நிலையாக இருக்க வேண்டுமோ, அதுதான் பொதுவான ஒப்பந்தம் (public contract).
ஒவ்வொரு நூலகமும் கவனமாக வடிவமைக்கப்பட்ட ஒரு இடைமுகத்தை (interface) வெளிப்படுத்துகிறது. உதாரணங்கள்:
- authenticate()
- createSession()
- verifyPasskey()
இந்தச் செயல்பாடுகள் ஒரு ஒப்பந்தத்தை வரையறுக்கின்றன. அந்த ஒப்பந்தம் ஒருபோதும் மாறாது. அதன் பின்னணியில் உள்ள குறியீட்டை நீங்கள் மீண்டும் எழுதலாம் அல்லது அந்த நூலகத்தையே முழுமையாக மாற்றலாம். உங்கள் பயன்பாட்டின் மற்ற பகுதிகள் அந்த மாற்றத்தை உணராது.
ஒரு பாதுகாப்புத் துளை (vulnerability) தோன்றும் போது, நீங்கள் பொதுவாக இரண்டு சிக்கல்களை எதிர்கொள்கிறீர்கள்:
- குறைபாட்டைச் சரிசெய்தல்.
- அந்தப் புதுப்பிப்பு உங்கள் பயன்பாட்டைப் பாதிக்கிறதா என்று சரிபார்த்தல்.
0deps கட்டமைப்பில், இரண்டாவது சிக்கல் மறைந்துவிடும். பொதுவான API மாறாமல் இருக்கும் அதே வேளையில், நீங்கள் உள் செயலாக்கத்தைப் (internal implementation) புதுப்பிக்கலாம். உங்கள் பயன்பாடு குறியீடு மாற்றங்கள் இன்றி தொடர்ந்து இயங்கும்.
ஒரு உள் அடாப்டரைப் (internal adapter) பயன்படுத்தி வெளிப்புற ஒருங்கிணைப்புகளை நீங்கள் தனிமைப்படுத்துகிறீர்கள்: Application -> Public Interface -> Adapter -> Implementation
நாளை ஒரு நூலகம் மறைந்துவிட்டால், நீங்கள் அடாப்டரை மட்டும் மாற்றினால் போதும். உங்கள் பயன்பாட்டின் வேறு எந்தப் பகுதியும் பாதிக்கப்படாது.
0deps மென்பொருளைப் பூரணமாக்காது. இது விநியோகச் சங்கிலி அபாயங்களைக் குறைக்கிறது. தீய நோக்கமுள்ள தொகுப்புகள் (malicious packages), பதிவேடு ஊடுருவல்கள் (registry compromises) மற்றும் சார்பு குழப்பங்கள் (dependency confusion) போன்ற சிக்கல்களை இது தடுக்கிறது.
திட்டங்கள் பல தசாப்தங்கள் நீடிக்கும். நூலகங்களும் கட்டமைப்புகளும் மாறும். 0deps மூலம், சூழல் (ecosystem) எவ்வாறு மாறினாலும், உங்கள் பயன்பாடு அதே நிலையான ஒப்பந்தங்களைத் தொடர்ந்து பயன்படுத்தும்.
