Phong trào 0deps: Các phụ thuộc cục bộ và Bảo mật
Các nhà phát triển phần mềm cài đặt hàng trăm thư viện bên ngoài trong hầu hết mọi dự án. Các framework hiện đại thường dựa vào hàng ngàn phụ thuộc ẩn. Điều này tạo ra rủi ro khổng lồ cho chuỗi cung ứng phần mềm.
Phong trào 0deps đặt ra một câu hỏi đơn giản: Điều gì sẽ xảy ra nếu ứng dụng của bạn chỉ chạy mã mà bạn 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.
- Trở thành mục tiêu của các cuộc tấn công.
- Ngừng nhận các bản cập nhật.
- Thay đổi mã nguồn và làm hỏng ứng dụng của bạn.
- Thêm các phụ thuộc ẩn mới.
Trong mô hình 0deps, bạn đưa mọi 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 xuống trong quá trình build. Mọi thứ đều nằm trong kho lưu trữ của bạn ngay từ đầu.
Phương pháp này mang lại:
- Các bản build có khả năng tái lập (reproducible builds).
- Ít phụ thuộc hơn vào các registry bên ngoài.
- Kiểm tra bảo mật dễ dàng hơn.
- Mã nguồn dễ dự đoán hơn.
Ý tưởng cốt lõi không phải là ngăn chặn mã nguồn thay đổi. Các thuật toán và bản vá bảo mật phải thay đổi. Điều giữ nguyên chính là hợp đồng công khai (public contract).
Một thư viện hiển thị một tập hợp các hàm cụ thể. Các hàm này tạo thành một hợp đồng.
authenticate()createSession()verifyPasskey()
Việc triển khai bên trong thư viện có thể thay đổi hoàn toàn. Bạn có thể thay thế các thuật toán hoặc cấu trúc dữ liệu. Phần còn lại của ứng dụng không quan tâm vì giao diện (interface) vẫn giữ nguyên.
Khi một lỗ hổng bảo mật xuất hiện, bạn đối mặt với hai vấn đề:
- Khắc phục lỗ hổng.
- Đảm bảo bản cập nhật không làm hỏng ứng dụng của bạn.
Kiến trúc 0deps giải quyết vấn đề thứ hai. Bạn cập nhật mã nguồn đằ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 bất kỳ thay đổi nào.
Bạn cô lập các công cụ bên ngoài đằng sau một bộ chuyển đổi (adapter) nội bộ: Application ↓ Public Interface ↓ Adapter ↓ Implementation
Nếu một thư viện ngừng hoạt động, bạn chỉ cần thay đổi bộ chuyển đổi. Phần còn lại của ứng dụng vẫn an toàn. Các phiên bản thư viện trở thành một chi tiết nhỏ thay vì là một vấn đề lớn.
Mục tiêu không phải là làm cho phần mềm trở nên hoàn hảo. Mục tiêu là giảm thiểu rủi ro chuỗi cung ứng. Bằng cách loại bỏ việc cài đặt động, bạn ngăn chặn:
- Các bản phát hành gói độc hại.
- Các registry bị xâm nhập.
- Các cuộc tấn công gây nhầm lẫn phụ thuộc (dependency confusion attacks).
Mỗi dòng mã đều trở thành một phần của dự án của bạn. Điều này cho phép kiểm soát và xem xét toàn diện.
Các dự án kéo dài trong nhiều năm. Các thư viện và framework biến mất. Với 0deps, ứng dụng của bạn tiếp tục sử dụng các hợp đồng tương tự ngay cả khi hệ sinh thái thay đổi.
