0deps ಚಳುವಳಿ: ಸ್ಥಳೀಯ ಅವಲಂಬನೆಗಳು ಮತ್ತು ಬದಲಾಗದ ಒಪ್ಪಂದಗಳು
ಸಾಫ್ಟ್ವೇರ್ ಡೆವಲಪರ್ಗಳು ಪ್ರತಿ ಪ್ರಾಜೆಕ್ಟ್ನಲ್ಲಿ ನೂರಾರು ಬಾಹ್ಯ ಲೈಬ್ರರಿಗಳನ್ನು (external libraries) ಇನ್ಸ್ಟಾಲ್ ಮಾಡುತ್ತಾರೆ. ಆಧುನಿಕ ಫ್ರೇಮ್ವರ್ಕ್ಗಳು ಸಾವಿರಾರು ಟ್ರಾನ್ಸಿಟಿವ್ ಅವಲಂಬನೆಗಳನ್ನು (transitive dependencies) ಅವಲಂಬಿಸಿವೆ. ಇದರರ್ಥ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ನೂರಾರು ಅಜ್ಞಾತ ಕೊಡುಗೆದಾರರ ಕೋಡ್ ಅನ್ನು ರನ್ ಮಾಡುತ್ತದೆ.
ಈ ವ್ಯವಸ್ಥೆಯು ಅಭಿವೃದ್ಧಿಯ ವೇಗವನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ. ಆದರೆ ಇದು ನಿಮ್ಮ ಸಾಫ್ಟ್ವೇರ್ ಸಪ್ಲೈ ಚೈನ್ನಲ್ಲಿ (software supply chain) ಭಾರಿ ಭದ್ರತಾ ಅಪಾಯಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
0deps ಚಳುವಳಿಯು ಒಂದು ಸರಳ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳುತ್ತದೆ: ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಕೇವಲ ನೀವು ನಿಯಂತ್ರಿಸುವ ಕೋಡ್ ಅನ್ನು ಮಾತ್ರ ರನ್ ಮಾಡಿದರೆ ಏನಾಗಬಹುದು?
ಪ್ರತಿಯೊಂದು ಅವಲಂಬನೆಯು ನಿಮ್ಮ ಅಟ್ಯಾಕ್ ಸರ್ಫೇಸ್ ಅನ್ನು (attack surface) ಹೆಚ್ಚಿಸುತ್ತದೆ. ಅವಲಂಬನೆಗಳು ಹೀಗೆ ಮಾಡಬಹುದು:
- ಭದ್ರತಾ ದೋಷಗಳನ್ನು (security flaws) ಪರಿಚಯಿಸಬಹುದು.
- ಸಪ್ಲೈ ಚೈನ್ ದಾಳಿಗಳಿಗೆ ಒಳಗಾಗಬಹುದು.
- ಕೈಬಿಡಲ್ಪಟ್ಟಿರಬಹುದು (abandoned).
- ತಮ್ಮ ಪಬ್ಲಿಕ್ API ಅನ್ನು ಬದಲಾಯಿಸಬಹುದು.
- ಬ್ಯಾಕ್ವರ್ಡ್ ಕಾಂಪ್ಯಾಟಿಬಿಲಿಟಿಯನ್ನು (backward compatibility) ಹಾಳುಮಾಡಬಹುದು.
0deps ಮಾದರಿಯಲ್ಲಿ, ನೀವು ಅಗತ್ಯವಿರುವ ಎಲ್ಲಾ ಅವಲಂಬನೆಗಳನ್ನು ನೇರವಾಗಿ ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್ ರೆಪೊಸಿಟರಿಯಲ್ಲಿ (project repository) ಸೇರಿಸಿಕೊಳ್ಳುತ್ತೀರಿ. ಇನ್ಸ್ಟಾಲೇಶನ್ ಸಮಯದಲ್ಲಿ ನೀವು ಅವುಗಳನ್ನು ಡೈನಾಮಿಕ್ ಆಗಿ ಡೌನ್ಲೋಡ್ ಮಾಡುವುದಿಲ್ಲ. ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಬಿಲ್ಡ್ ಮಾಡಲು ಮತ್ತು ರನ್ ಮಾಡಲು ಬೇಕಾದ ಎಲ್ಲವೂ ಮೊದಲ ಕ್ಲೋನ್ನಿಂದಲೇ ಲಭ್ಯವಿರುತ್ತದೆ.
ಈ ವಿಧಾನವು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ:
- ಪುನರಾವರ್ತಿತ ಬಿಲ್ಡ್ಗಳು (Reproducible builds).
- ಬಾಹ್ಯ ಪ್ಯಾಕೇಜ್ ರಿಜಿಸ್ಟರಿಗಳ ಮೇಲಿನ ಅವಲಂಬನೆ ಕಡಿಮೆ ಇರುತ್ತದೆ.
- ಕೇಂದ್ರೀಕೃತ ಭದ್ರತಾ ಆಡಿಟ್ಗಳು.
- ಹೆಚ್ಚಿನ ಮುನ್ಸೂಚನೆ ಸಾಮರ್ಥ್ಯ (predictability).
- ಸಣ್ಣ ಸಪ್ಲೈ ಚೈನ್ ಅಟ್ಯಾಕ್ ಸರ್ಫೇಸ್.
0deps ಎಂದರೆ ನೀವು ಕೋಡ್ ಅಪ್ಡೇಟ್ ಮಾಡುವುದನ್ನು ನಿಲ್ಲಿಸಬೇಕು ಎಂದಲ್ಲ. ಅಲ್ಗಾರಿದಮ್ಗಳು ಮತ್ತು ಭದ್ರತಾ ಸರಿಪಡಿಸುವಿಕೆಗಳು (security fixes) ವಿಕಸನಗೊಳ್ಳಲೇಬೇಕು. ಬದಲಾಗಿ, ನೀವು ಪಬ್ಲಿಕ್ ಕಾಂಟ್ರಾಕ್ಟ್ ಅನ್ನು ಸ್ಥಿರವಾಗಿಡುತ್ತೀರಿ.
ಪ್ರತಿಯೊಂದು ಲೈಬ್ರರಿಯು ಎಚ್ಚರಿಕೆಯಿಂದ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ:
authenticate()createSession()verifyPasskey()
ಈ ಫಂಕ್ಷನ್ಗಳು ಒಂದು ಒಪ್ಪಂದವನ್ನು (contract) ವ್ಯಾಖ್ಯಾನಿಸುತ್ತವೆ. ಈ ಒಪ್ಪಂದವು ಬದಲಾಗದೆ ಇರುತ್ತದೆ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನ ಉಳಿದ ಭಾಗಗಳಿಗೆ ಯಾವುದೇ ಪರಿಣಾಮ ಬೀರದೆ ನೀವು ಅಡಿಪಾಯದ ಕೋಡ್ ಅನ್ನು ಮರುಬರೆಯಬಹುದು ಅಥವಾ ಆಂತರಿಕ ಲೈಬ್ರರಿಗಳನ್ನು ಬದಲಾಯಿಸಬಹುದು.
ಯಾವುದಾದರೂ ಭದ್ರತಾ ಲೋಪ (vulnerability) ಕಂಡುಬಂದಾಗ, ನೀವು ಇಂಟರ್ಫೇಸ್ನ ಹಿಂದಿರುವ ಇಂಪ್ಲಿಮೆಂಟೇಶನ್ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಬಹುದು. ಪಬ್ಲಿಕ್ API ಯಂತೆಯೇ ಇರುತ್ತದೆ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಕೋಡ್ ಬದಲಾವಣೆಗಳಿಲ್ಲದೆ ಕೆಲಸ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತದೆ.
ಇದರ ರಚನೆ ಹೀಗಿರುತ್ತದೆ: Application ↓ Public Interface ↓ Internal Adapter ↓ Implementation
ಒಂದು ವೇಳೆ ಬಾಹ್ಯ ಲೈಬ್ರರಿಯು ಮಾಯವಾದರೆ, ನೀವು ಕೇವಲ ಅಡಾಪ್ಟರ್ ಅನ್ನು ಬದಲಾಯಿಸಿದರೆ ಸಾಕು. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನ ಬೇರೆ ಯಾವುದೇ ಭಾಗವು ಹಾಳಾಗುವುದಿಲ್ಲ. ಈ ಪ್ರತ್ಯೇಕತೆಯು (isolation) ನಿಮ್ಮನ್ನು ದುಷ್ಟ ಪ್ಯಾಕೇಜ್ಗಳು (malicious packages), ರಿಜಿಸ್ಟ್ರಿ ಕಾಂಪ್ರೊಮೈಸ್ ಮತ್ತು ಡಿಪೆಂಡೆನ್ಸಿ ಕನ್ಫ್ಯೂಷನ್ನಿಂದ ರಕ್ಷಿಸುತ್ತದೆ.
ಪ್ರಾಜೆಕ್ಟ್ಗಳು ದಶಕಗಳ ಕಾಲ ಬಾಳಿಕೆ ಬರುತ್ತವೆ. ಆದರೆ ಲೈಬ್ರರಿಗಳು ಮತ್ತು ಫ್ರೇಮ್ವರ್ಕ್ಗಳು ಹಾಗಲ್ಲ. 0deps ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಸುತ್ತಲಿನ ಪರಿಸರ ವ್ಯವಸ್ಥೆಯು (ecosystem) ಬದಲಾಗುತ್ತಿದ್ದರೂ, ವರ್ಷಗಟ್ಟಲೆ ಒಂದೇ ರೀತಿಯ ಸ್ಥಿರ ಒಪ್ಪಂದಗಳನ್ನು ಬಳಸಲು ಅನುಮತಿಸುತ್ತದೆ.
ನೀವು ಮುನ್ಸೂಚನೆ ನೀಡಬಹುದಾದ, ಸ್ಥಿತಿಸ್ಥಾಪಕತ್ವ ಹೊಂದಿರುವ ಮತ್ತು ಸುಲಭವಾಗಿ ನಿರ್ವಹಿಸಬಹುದಾದ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ಪಡೆಯುತ್ತೀರಿ.
Optional learning community: https://t.me/GyaanSetuAi
