Phong trào 0deps: Các phụ thuộc cục bộ và các 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ã nguồn từ hàng trăm người đóng góp không xác định.

Cách thiết lập này giúp tăng tốc độ phát triển, nhưng nó cũng tạo ra những rủi ro bảo mật khổng lồ trong 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 những mã nguồn 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. Các phụ thuộc có thể:

  • Gây ra các lỗ hổng bảo mật.
  • Đối mặt với các cuộc tấn công chuỗi cung ứng.
  • Bị bỏ rơi (không còn được bảo trì).
  • Thay đổi API công khai của chúng.
  • Làm mất tính tương thích ngược.

Trong mô hình 0deps, bạn đưa tất cả các phụ thuộc cần thiết 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 động trong quá trình cài đặt. Mọi thứ cần thiết để xây dựng và chạy ứng dụng đều có sẵn ngay từ lần clone đầu tiên.

Cách tiếp cận này mang lại:

  • Các bản build có thể tái lập (reproducible builds).
  • Giảm sự phụ thuộc 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 cao hơn.
  • Thu hẹp bề mặt tấn công chuỗi cung ứng.

0deps không có nghĩa là bạn ngừng cập nhật mã nguồn. Các thuật toán và bản sửa lỗi bảo mật phải luôn tiến hóa. Thay vào đó, bạn giữ cho hợp đồng công khai (public contract) luôn ổn định.

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

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

Các hàm này định nghĩa một hợp đồng. Hợp đồng này sẽ giữ nguyên không đổi. Bạn có thể viết lại mã nguồn bên dưới hoặc thay thế các thư viện nội bộ mà không ảnh hưởng đến phần còn lại của ứng dụng.

Khi một lỗ hổng xuất hiện, bạn chỉ cần cập nhật phần triển khai (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ã nguồn.

Cấu trúc trông như thế này: Application (Ứng dụng) ↓ Public Interface (Giao diện công khai) ↓ Internal Adapter (Bộ điều hợp nội bộ) ↓ Implementation (Phần triển khai)

Nếu một thư viện bên ngoài biến mất, bạn chỉ cần thay đổi bộ điều hợp (adapter). Không có phần nào khác của ứng dụng bị hỏng. Sự cô lập này bảo vệ bạn khỏi các gói độc hại, sự xâm nhập kho lưu trữ và sự nhầm lẫn phụ thuộc (dependency confusion).

Các dự án tồn tại trong nhiều thập kỷ, nhưng các thư viện và framework thì không. 0deps cho phép ứng dụng của bạn sử dụng cùng một hợp đồng ổn định trong nhiều năm trong khi hệ sinh thái xung quanh nó không ngừng thay đổi.

Bạn sẽ có được một phần mềm có khả năng dự đoán, kiên cường và dễ bảo trì.

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

Optional learning community: https://t.me/GyaanSetuAi