Nợ kỹ thuật: thư viện Rust của tôi giờ đã trở thành CDO
- Có một câu đùa về nợ kỹ thuật rằng nếu đã có nợ kỹ thuật thì cũng nên có các công cụ phái sinh để xử lý khoản nợ đó.
- Hệ sinh thái Rust đã tạo ra một giải pháp trông như thể đang chứng khoán hóa nợ kỹ thuật.
- Ví dụ, một thư viện
stuff phụ thuộc vào một thư viện khác là learned-rust-this-way, nhưng tác giả của learned-rust-this-way đã mất hứng thú và các vấn đề bắt đầu chất đống.
Bản chất của nợ kỹ thuật
learned-rust-this-way được xem là nợ kỹ thuật; bản thân nó không gây ra vấn đề trực tiếp, nhưng dù vậy vẫn là một khoản nợ.
- Đến một thời điểm nào đó, ai đó nhận ra
learned-rust-this-way là nợ, không liên lạc được với tác giả ban đầu, và nó bị thêm vào cơ sở dữ liệu RUSTSEC.
- Với vai trò là cơ quan xếp hạng, RUSTSEC đánh giá khoản nợ đó là rác, và vì thế CI (tích hợp liên tục) của rất nhiều người bắt đầu thất bại.
Cách xử lý khoản nợ
- Với tư cách là người bảo trì của
stuff, mức độ căng thẳng tăng lên khi người dùng nêu vấn đề về việc sử dụng learned-rust-this-way, và bạn bị yêu cầu phải có biện pháp xử lý khoản nợ này.
- Chuyển sang một lựa chọn thay thế là một phương án, nhưng trong trường hợp này thì mọi lựa chọn thay thế đều không hấp dẫn.
- Fork
learned-rust-this-way sẽ khiến bạn đối mặt với cùng một yêu cầu, nên đó chỉ là giải pháp tạm thời chứ không thực sự giải quyết vấn đề.
Giải pháp thực sự có hiệu quả
- Nếu bạn gộp đoạn mã đó vào thư viện của chính mình, thì khoản nợ kỹ thuật rác rưởi đó đột nhiên được xếp hạng “AAA”.
- Bạn không còn đụng tới đoạn mã đó nữa, che giấu việc đã gộp nó vào, và tiếp tục bảo trì thư viện như trước, thế giới vẫn cứ vận hành.
- Bằng cách vendoring
yaml-rust vào insta rồi gộp nó vào, nó trở thành một thể kết hợp giữa mã của insta và yaml-rust, qua đó nâng hạng khoản nợ kỹ thuật lên AAA.
Ý kiến của GN⁺
- Bài viết này ví nợ kỹ thuật với các công cụ phái sinh tài chính để giải thích một cách dí dỏm những vấn đề phát sinh trong phát triển phần mềm.
- Nợ kỹ thuật là vấn đề thường gặp trong phát triển phần mềm, và bài viết đưa ra cho lập trình viên một cách sáng tạo để quản lý khoản nợ đó.
- Các hệ thống đánh giá như RUSTSEC trong hệ sinh thái Rust có thể giúp lập trình viên đánh giá độ ổn định của thư viện, nhưng đồng thời cũng có thể gây ra căng thẳng không cần thiết.
- Việc gộp mã để xử lý nợ kỹ thuật có thể là một giải pháp tạm thời; về lâu dài vẫn cần một chiến lược bảo trì bền vững.
- Trong những tình huống như vậy, nên cân nhắc nhiều hướng giải quyết khác nhau như bảo trì do cộng đồng dẫn dắt, đồng bảo trì các dự án mã nguồn mở, hoặc tìm một phiên bản thay thế của thư viện.
1 bình luận
Ý kiến trên Hacker News
deprecated) và không còn được bảo trì (unmaintained). Việc này diễn ra mà không có cảnh báo hay chỉ định người bảo trì khác, và dù gói vẫn hoạt động, nó đang được hơn 4.000 crate khác sử dụng, nên các công cụ kiểm toán và cập nhật tự động sẽ cảnh báo về việc dùng crate không được bảo trì.collateralized debt obligation, vì từcollateralizedđã được dùng nhiều lần.Collateralized Debt Obligation. Người này muốn viết một bài về “nợ kỹ thuật”, nhưng cho rằng phép ẩn dụ “nợ” không thật sự phù hợp với khái niệm đó. Cụm “mã có độ nhớt cao” có lẽ phù hợp hơn. Mã không thể dễ dàng thay đổi để đáp ứng tính năng mới, nên nó tạo cảm giác như có độ cảm ứng cao.AAA, có vẻ tác giả muốn nói rằng cùng một đoạn mã thì không thể có xếp hạng nợ tốt hơn trước và sau khi được vendoring. Nhưng cách nhìn này chỉ xét giá trị của bản thân mã, và bỏ lỡ phần quan trọng nhất của đề xuất giá trị tổng thể. Người bảo trì thực hiện vendoring giờ đây sở hữu đoạn mã đó, và một người bảo trì tích cực mang mã từ dự án đã chết vào sẽ làm tăng giá trị của nó, vì lúc này đã có con người có thể phản hồi issue, xem xét pull request và sửa lỗi.Npm auditchủ yếu đưa ra các cảnh báo phóng đại về vấn đề bảo mật, và miễn là giấy phép cho phép, việc vendoring là một trong những cách đáng tin cậy nhất để thoát khỏi những vấn đề vô lý mà người dùng ném vào bạn.yaml-rustvà viết lại nó bằng Rust thuần để tạo rayaml-rust2là một điều may mắn. Bản fork này vượt qua hoàn toàn bộ kiểm thử YAML và cho hiệu năng tốt hơn trong benchmark. Việc di chuyển sang nó cũng có vẻ đơn giản. Cuối cùng thì vấn đề vẫn còn đó: hiện tại chúng ta vẫn đang phụ thuộc vào những người khác đang cung cấp lao động miễn phí, nhưng không có gì đảm bảo họ sẽ làm điều đó mãi mãi.