Phong trào 0deps: Các phụ thuộc cục bộ và Hợp đồng bất biến

Các nhà phát triển phần mềm thường cài đặt hàng trăm thư viện bên ngoài trong mỗi dự án. Các framework hiện đại dựa vào hàng nghìn phụ thuộc bắc cầu (transitive dependencies). Điều này có nghĩa là ứng dụng của bạn đang chạy mã từ hàng trăm người đóng góp không xác định.

Tốc độ này tạo ra một rủi ro khổng lồ cho chuỗi cung ứng phần mềm của bạn.

Phong trào 0deps đặt ra một câu hỏi đơn giản: Chuyện gì sẽ xảy ra nếu ứng dụng của bạn chỉ chạy mã mà bạn thực sự kiểm soát?

Mỗi phụ thuộc đều làm tăng bề mặt tấn công của bạn. Nó có thể tạo ra các lỗ hổng bảo mật, bị bỏ rơi, hoặc làm hỏng mã của bạn với một bản cập nhật mới. Bạn mất quyền kiểm soát đối với mã đang chạy trong môi trường production.

Trong mô hình 0deps, bạn đưa tất cả các phụ thuộc trực tiếp vào kho lưu trữ (repository) dự án của mình. Bạn không tải chúng một cách linh hoạt trong quá trình cài đặt. Mọi thứ cần thiết để xây dựng và chạy ứng dụng của bạn đều đã có sẵn ở đó.

Cách tiếp cận này mang lại một số lợi ích:

  • Các bản build có thể tái lập (reproducible builds)
  • Ít phụ thuộc hơn vào các kho lưu trữ gói (package registries) bên ngoài
  • Kiểm tra bảo mật tập trung
  • Khả năng dự đoán tốt hơn
  • Rủi ro chuỗi cung ứng thấp hơn

Nguyên tắc cốt lõi không phải là ngăn chặn mã thay đổi. Các thuật toán và bản sửa lỗi bảo mật phải tiến hóa. Thứ giữ được sự ổn định chính là hợp đồng công khai (public contract).

Mỗi thư viện cung cấp một giao diện được thiết kế cẩn thận.

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

Các hàm này định nghĩa một hợp đồng. Hợp đồng đó không bao giờ thay đổi. Bạn có thể viết lại mã nguồn bên dưới hoặc thay thế hoàn toàn thư viện. Phần còn lại của ứng dụng vẫn giữ nguyên vì nó chỉ giao tiếp với hợp đồng.

Khi một lỗ hổng xuất hiện, bạn khắc phục nó nội bộ. Bạn cập nhật phần thực thi (implementation) đằng sau giao diện. API công khai vẫn giữ nguyên. Ứng dụng của bạn tiếp tục hoạt động mà không cần thay đổi mã.

Cấu trúc này sử dụng một bộ điều hợp (adapter) nội bộ để cô lập mã bên ngoài: Ứng dụng ↓ Giao diện công khai (Public Interface) ↓ Bộ điều hợp (Adapter) ↓ Bản thực thi (Implementation)

Nếu một thư viện bên ngoài biến mất, bạn chỉ cần cập nhật bộ điều hợp. Không có phần nào khác trong ứng dụng của bạn bị hỏng.

Phong trào 0deps không chống lại mã nguồn mở. Nó thay đổi cách bạn sử dụng mã nguồn mở. Các thư viện trở thành các thành phần tích hợp mà chính bạn kiểm tra và quản lý phiên bản.

Điều này tạo ra phần mềm tồn tại trong nhiều thập kỷ. Các bản thực thi thay đổi, nhưng các hợp đồng của bạn vẫn còn đó. Sự ổn định này giúp phần mềm của bạn có thể dự đoán được và có khả năng phục hồi cao.

Nguồn: https://dev.to/fullagenticstack/mouvement-0deps-dependances-locales-contrats-immuables-et-securite-par-conception-24c2