0deps ಚಳುವಳಿ: ಸ್ಥಳೀಯ ಅವಲಂಬನೆಗಳು ಮತ್ತು ಬದಲಾಗದ ಒಪ್ಪಂದಗಳು

ಸಾಫ್ಟ್‌ವೇರ್ ಡೆವಲಪರ್‌ಗಳು ಪ್ರತಿ ಪ್ರಾಜೆಕ್ಟ್‌ನಲ್ಲಿ ನೂರಾರು ಬಾಹ್ಯ ಲೈಬ್ರರಿಗಳನ್ನು (external libraries) ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತಾರೆ. ಆಧುನಿಕ ಫ್ರೇಮ್‌ವರ್ಕ್‌ಗಳು ಸಾವಿರಾರು ಟ್ರಾನ್ಸಿಟಿವ್ ಅವಲಂಬನೆಗಳನ್ನು (transitive dependencies) ಅವಲಂಬಿಸಿವೆ. ಇದರರ್ಥ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ನೂರಾರು ಅಜ್ಞಾತ ಕೊಡುಗೆದಾರರ ಕೋಡ್ ಅನ್ನು ರನ್ ಮಾಡುತ್ತದೆ.

ಈ ವೇಗವು ನಿಮ್ಮ ಸಾಫ್ಟ್‌ವೇರ್ ಸಪ್ಲೈ ಚೈನ್ (software supply chain) ಗೆ ದೊಡ್ಡ ಅಪಾಯವನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ.

0deps ಚಳುವಳಿಯು ಒಂದು ಸರಳ ಪ್ರಶ್ನೆಯನ್ನು ಕೇಳುತ್ತದೆ: ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಕೇವಲ ನೀವು ನಿಜವಾಗಿಯೂ ನಿಯಂತ್ರಿಸುವ ಕೋಡ್ ಅನ್ನು ಮಾತ್ರ ರನ್ ಮಾಡಿದರೆ ಏನಾಗಬಹುದು?

ಪ್ರತಿಯೊಂದು ಅವಲಂಬನೆಯು ನಿಮ್ಮ ಅಟ್ಯಾಕ್ ಸರ್ಫೇಸ್ (attack surface) ಅನ್ನು ಹೆಚ್ಚಿಸುತ್ತದೆ. ಇದು ಭದ್ರತಾ ಲೋಪಗಳನ್ನು (security holes) ಉಂಟುಮಾಡಬಹುದು, ನಿರ್ಲಕ್ಷ್ಯಕ್ಕೆ ಒಳಗಾಗಬಹುದು ಅಥವಾ ಹೊಸ ಅಪ್‌ಡೇಟ್‌ನೊಂದಿಗೆ ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಹಾಳುಮಾಡಬಹುದು. ನಿಮ್ಮ ಪ್ರೊಡಕ್ಷನ್ ಎನ್ವಿರಾನ್ಮೆಂಟ್‌ನಲ್ಲಿ (production environment) ರನ್ ಆಗುತ್ತಿರುವ ಕೋಡ್ ಮೇಲೆ ನೀವು ನಿಯಂತ್ರಣವನ್ನು ಕಳೆದುಕೊಳ್ಳುತ್ತೀರಿ.

0deps ಮಾದರಿಯಲ್ಲಿ, ನೀವು ಎಲ್ಲಾ ಅವಲಂಬನೆಗಳನ್ನು ನೇರವಾಗಿ ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್ ರೆಪೊಸಿಟರಿಗೆ (project repository) ತರುತ್ತೀರಿ. ಇನ್‌ಸ್ಟಾಲೇಶನ್ ಸಮಯದಲ್ಲಿ ನೀವು ಅವುಗಳನ್ನು ಡೈನಾಮಿಕ್ ಆಗಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡುವುದಿಲ್ಲ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಬಿಲ್ಡ್ ಮಾಡಲು ಮತ್ತು ರನ್ ಮಾಡಲು ಬೇಕಾದ ಎಲ್ಲವೂ ಈಗಾಗಲೇ ಅಲ್ಲಿರುತ್ತವೆ.

ಈ ವಿಧಾನವು ಹಲವಾರು ಪ್ರಯೋಜನಗಳನ್ನು ನೀಡುತ್ತದೆ:

  • ಪುನರಾವರ್ತಿತ ಬಿಲ್ಡ್‌ಗಳು (Reproducible builds)
  • ಬಾಹ್ಯ ಪ್ಯಾಕೇಜ್ ರಿಜಿಸ್ಟರಿಗಳ ಮೇಲಿನ ಅವಲಂಬನೆ ಕಡಿಮೆ
  • ಕೇಂದ್ರೀಕೃತ ಭದ್ರತಾ ಆಡಿಟ್‌ಗಳು (Centralized security audits)
  • ಉತ್ತಮ ಮುನ್ಸೂಚನೆ (Better predictability)
  • ಕಡಿಮೆ ಸಪ್ಲೈ ಚೈನ್ ಅಪಾಯ

ಕೋಡ್ ಬದಲಾಗುವುದನ್ನು ತಡೆಯುವುದು ಇದರ ಮೂಲ ತತ್ವವಲ್ಲ. ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಮತ್ತು ಭದ್ರತಾ ಸರಿಪಡಿಸುವಿಕೆಗಳು (security fixes) ವಿಕಸನಗೊಳ್ಳಲೇಬೇಕು. ಸ್ಥಿರವಾಗಿರುವುದು ಏನೆಂದರೆ ಪಬ್ಲಿಕ್ ಕಾಂಟ್ರಾಕ್ಟ್ (public contract).

ಪ್ರತಿ ಲೈಬ್ರರಿಯು ಎಚ್ಚರಿಕೆಯಿಂದ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ.

  • authenticate()
  • createSession()
  • verifyPasskey()

ಈ ಫಂಕ್ಷನ್‌ಗಳು ಒಂದು ಒಪ್ಪಂದವನ್ನು (contract) ವ್ಯಾಖ್ಯಾನಿಸುತ್ತವೆ. ಆ ಒಪ್ಪಂದವು ಎಂದಿಗೂ ಬದಲಾಗುವುದಿಲ್ಲ. ನೀವು ಅಡಿಪಾಯದ ಕೋಡ್ ಅನ್ನು ಮರುಬರೆಯಬಹುದು ಅಥವಾ ಲೈಬ್ರರಿಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಬದಲಾಯಿಸಬಹುದು. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ನ ಉಳಿದ ಭಾಗಗಳು ಬದಲಾಗುವುದಿಲ್ಲ ಏಕೆಂದರೆ ಅವು ಕೇವಲ ಒಪ್ಪಂದದೊಂದಿಗೆ ಮಾತ್ರ ಸಂವಹನ ನಡೆಸುತ್ತವೆ.

ಭದ್ರತಾ ಲೋಪವು (vulnerability) ಕಂಡುಬಂದಾಗ, ನೀವು ಅದನ್ನು ಆಂತರಿಕವಾಗಿ ಸರಿಪಡಿಸುತ್ತೀರಿ. ನೀವು ಇಂಟರ್ಫೇಸ್‌ನ ಹಿಂದಿರುವ ಇಂಪ್ಲಿಮೆಂಟೇಶನ್ ಅನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡುತ್ತೀರಿ. ಪಬ್ಲಿಕ್ API ಯಂತೆಯೇ ಇರುತ್ತದೆ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಕೋಡ್ ಬದಲಾವಣೆಗಳಿಲ್ಲದೆ ಕೆಲಸ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತದೆ.

ಈ ರಚನೆಯು ಬಾಹ್ಯ ಕೋಡ್ ಅನ್ನು ಪ್ರತ್ಯೇಕಿಸಲು ಆಂತರಿಕ ಅಡಾಪ್ಟರ್ ಅನ್ನು ಬಳಸುತ್ತದೆ: Application ↓ Public Interface ↓ Adapter ↓ Implementation

ಒಂದು ವೇಳೆ ಬಾಹ್ಯ ಲೈಬ್ರರಿಯು ಮಾಯವಾದರೆ, ನೀವು ಕೇವಲ ಅಡಾಪ್ಟರ್ ಅನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಿದರೆ ಸಾಕು. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ನ ಬೇರೆ ಯಾವುದೇ ಭಾಗವು ಹಾಳಾಗುವುದಿಲ್ಲ.

0deps ಚಳುವಳಿಯು ಓಪನ್ ಸೋರ್ಸ್‌ಗೆ (open source) ವಿರುದ್ಧವಾಗಿಲ್ಲ. ಇದು ನೀವು ಅದನ್ನು ಬಳಸುವ ವಿಧಾನವನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ. ಲೈಬ್ರರಿಗಳು ನೀವು ಸ್ವತಃ ಆಡಿಟ್ ಮಾಡುವ ಮತ್ತು ವರ್ಷನ್ ಮಾಡುವ ಸಂಯೋಜಿತ ಘಟಕಗಳಾಗುತ್ತವೆ (integrated components).

ಇದು ದಶಕಗಳ ಕಾಲ ಬಾಳಿಕೆ ಬರುವ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ಇಂಪ್ಲಿಮೆಂಟೇಶನ್‌ಗಳು ಬದಲಾಗಬಹುದು, ಆದರೆ ನಿಮ್ಮ ಒಪ್ಪಂದಗಳು ಉಳಿಯುತ್ತವೆ. ಈ ಸ್ಥಿರತೆಯು ನಿಮ್ಮ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ಮುನ್ಸೂಚನೆ ನೀಡಬಹುದಾದ ಮತ್ತು ಸ್ಥಿತಿಸ್ಥಾಪಕತ್ವವುಳ್ಳದ್ದನ್ನಾಗಿ (resilient) ಮಾಡುತ್ತದೆ.

ಮೂಲ: https://dev.to/fullagenticstack/mouvement-0deps-dependances-locales-contrats-immuables-et-securite-par-conception-24c2