Cộng đồng phát triển phần mềm đang tham gia vào một cuộc thảo luận sôi nổi về việc liệu các mô hình ngôn ngữ lớn ( LLMs ) có đang khiến các developer ít có khả năng sử dụng các thư viện đã được thiết lập hay không. Trong khi một số người cho rằng mã được tạo bởi AI đang tạo ra những thói quen xấu, những người khác lại coi LLMs như những công cụ mạnh mẽ thực sự cải thiện việc áp dụng thư viện.
Các lỗ hổng bảo mật thúc đẩy sự hoài nghi về thư viện
Một phần đáng kể các developer bày tỏ mối quan ngại nghiêm trọng về các dependency thư viện và những tác động bảo mật của chúng. Cộng đồng chỉ ra các sự cố lớn như lỗ hổng Log4j và cuộc khủng hoảng left-pad của npm như những ví dụ về việc dựa vào các thư viện bên ngoài có thể tạo ra những rủi ro thảm khốc. Những sự kiện này đã khiến nhiều team trở nên thận trọng hơn khi thêm các dependency vào dự án của họ.
Các developer Python đặc biệt gặp khó khăn với tình trạng phình to dependency, khi việc cài đặt một package đơn lẻ thường kéo theo hàng chục thư viện bổ sung. Mỗi dependency mới đại diện cho một rủi ro bảo mật tiềm ẩn mà các team phải giám sát và duy trì. Đối với các ứng dụng quan trọng, mọi thư viện hiện đều yêu cầu kiểm tra kỹ lưỡng và đánh giá bảo mật liên tục.
Log4j: Một lỗ hổng bảo mật nghiêm trọng được phát hiện vào năm 2021 trong thư viện logging Java được sử dụng rộng rãi đã ảnh hưởng đến hàng triệu ứng dụng trên toàn thế giới
Các Sự Cố Bảo Mật Thư Viện Lớn Được Tham Chiếu:
- Log4j (2021): Lỗ hổng nghiêm trọng trong thư viện ghi log Java ảnh hưởng đến hàng triệu ứng dụng
- npm left-pad (2016): Việc gỡ bỏ gói đã làm hỏng hàng nghìn dự án JavaScript phụ thuộc vào một hàm tiện ích chỉ có 11 dòng code
LLMs như công cụ khám phá thư viện
Trái ngược với những lo ngại về việc LLMs thay thế thư viện, một số developer báo cáo rằng các công cụ AI thực sự giúp họ khám phá và sử dụng các thư viện phù hợp một cách hiệu quả hơn. Những công cụ này có thể ngay lập tức cung cấp các ví dụ sử dụng và giảm ma sát khi tích hợp các dependency mới vào dự án. Thay vì viết các giải pháp tùy chỉnh kém chất lượng, các developer có thể nhanh chóng đánh giá xem các thư viện hiện có có đáp ứng nhu cầu của họ hay không.
Cuối cùng chúng ta cũng có một công cụ có thể học hỏi từ tất cả các thư viện và abstraction phải phù hợp với nhu cầu của mọi người, và trích xuất chỉ những phần thực sự liên quan đến vấn đề và lĩnh vực của chúng ta.
Cách tiếp cận này cho phép các giải pháp có mục tiêu hơn với bề mặt tấn công nhỏ hơn, vì các developer có thể tạo mã dành riêng cho lĩnh vực kết hợp các pattern đã được chứng minh mà không cần mang theo overhead thư viện không cần thiết.
Những Lập Luận Chính Ủng Hộ Phát Triển Có Hỗ Trợ LLM:
- Giảm ma sát trong việc khám phá và tích hợp thư viện
- Tạo mã theo lĩnh vực cụ thể với bề mặt tấn công nhỏ hơn
- Truy cập tức thì vào các ví dụ sử dụng và tài liệu hướng dẫn
- Khả năng trích xuất các mẫu liên quan mà không cần toàn bộ chi phí phụ của thư viện
- Nâng cao khả năng học tập và khám phá
Sự cân bằng giữa đổi mới và độ tin cậy
Cuộc tranh luận tiết lộ một căng thẳng cơ bản trong phát triển phần mềm hiện đại. Các team làm việc trên các hệ thống quan trọng thường ưa thích tính dự đoán được của mã tùy chỉnh hơn là sự không chắc chắn của các dependency bên ngoài. Họ cho rằng việc xử lý lỗi trong mã của chính họ tốt hơn việc quản lý các thư viện đã lỗi thời hoặc các bản cập nhật phiên bản gây lỗi.
Tuy nhiên, cách tiếp cận này đi kèm với những đánh đổi. Việc viết các implementation tùy chỉnh mất nhiều thời gian hơn và có thể bỏ lỡ các trường hợp ngoại lệ mà các thư viện đã được thiết lập đã giải quyết. Sự lựa chọn thường phụ thuộc vào trường hợp sử dụng cụ thể, chuyên môn của team và khả năng chấp nhận rủi ro của tổ chức.
Các lập luận chính chống lại việc sử dụng thư viện:
- Lỗ hổng bảo mật và mở rộng bề mặt tấn công
- Phình to phụ thuộc (các gói đơn lẻ cài đặt hàng chục thư viện)
- Gánh nặng bảo trì việc cập nhật các phụ thuộc
- Thay đổi phá vỡ trong các bản cập nhật phiên bản
- Nhu cầu kiểm tra kỹ lưỡng và đánh giá mã nguồn
Kết luận
Cuộc thảo luận làm nổi bật rằng cả LLMs và thư viện đều có vị trí của chúng trong quy trình phát triển hiện đại. Thay vì xem chúng như những cách tiếp cận cạnh tranh, các team thành công đang học cách sử dụng từng công cụ một cách phù hợp. LLMs xuất sắc trong việc tạo ra các giải pháp có mục tiêu và giúp các developer hiểu các API thư viện, trong khi các thư viện đã được thiết lập cung cấp các giải pháp đã được thử nghiệm trong thực chiến cho các vấn đề phức tạp. Điều quan trọng là biết khi nào sử dụng từng cách tiếp cận dựa trên yêu cầu bảo mật, ràng buộc dự án và các cân nhắc bảo trì dài hạn.
Tham khảo: Libraries are under-used. LLMs make this problem worse.