Bài đăng này là phần mở đầu của series chia sẻ Những thực hành hay nhất trong việc quản lý thành phần nguồn mở của Sonatype.
Một khi bạn sử dụng các thành phần nguồn mở trong ứng dụng của mình, chắc chắn bạn sẽ gặp rủi ro. Ngay cả những người sử dụng chúng một cách thận trọng nhất cũng phải đối mặt với các nguy cơ. Để tránh nguy cơ bị tấn công và sử dụng thành phần nguồn mở một cách an toàn, Sonatype đã thực hiện series này để chia sẻ những thực hành hay nhất khi sử dụng mã nguồn nguồn mở do chính những chuyên gia của họ đúc kết.
Bạn đã gặp rủi ro
Hãy đối mặt với sự thật: các thành phần nguồn mở rất rủi ro. 29% thành phần nguồn mở chứa một lỗ hổng đã biết (known vulnerability). Vào năm 2021, số vụ tấn công mạng nhằm vào các nhà cung cấp nguồn mở đã tăng đến 650%. Các sự kiện như lỗ hổng log4j vào cuối năm 2021 đã chứng tỏ rằng ngay cả các thành phần phổ biến, được hỗ trợ tích cực cũng có thể khiến người dùng bị tấn công.
Thế nhưng số lượt tải xuống các thành phần nguồn mở đã tăng 73% vào năm 2021. Tại sao việc sử dụng mã nguồn mở vẫn ngày càng phổ biến, bất chấp rủi ro cao của nguồn mở?
Đó chính là vì lợi ích các thành phần nguồn mở mang lại lớn hơn rất nhiều so với rủi ro. Các ứng dụng chứa thành phần nguồn mở được phát triển và phát hành nhanh chóng, với chất lượng và tính ổn định cao hơn. Phần mềm nguồn mở không chỉ là một phím tắt tiện lợi hay một món đồ xa xỉ, mà là một thành phần trọng yếu trong việc tạo ra các phần mềm. Và chúng cũng đưa vào ứng dụng của bạn một số rủi ro.
Trong series này, hãy cùng thảo luận về các thực hành hay nhất để quản lý các thành phần nguồn mở và phòng tránh những rủi ro liên quan đến chúng.
Rủi ro và Lợi ích của nguồn mở
Điều quan trọng bạn cần hiểu chính là, không phải tất cả các rủi ro do thành phần nguồn mở đều là những yếu tố phá vỡ thoả thuận. Các tổ chức cần cân nhắc những ưu nhược điểm của từng rủi ro để biết vấn đề nào có thể chấp nhận được và vấn đề nào không. Việc áp dụng các thực hành hay nhất được nêu trong series này cần bắt đầu bằng việc xem xét tất cả các khía cạnh của phần mềm nguồn mở, để từ đó có được các thông tin cần thiết nhằm quyết định cách áp dụng nguồn mở trong tổ chức của bạn.
Lợi ích
Nhanh chóng thích ứng với thay đổi là một lợi thế cạnh tranh cực kỳ quan trọng. Khả năng thích ứng thể hiện rõ ràng nhất trong cách mà nguồn mở thúc đẩy đổi mới trong phần mềm. Bằng cách áp dụng các thành phần nguồn mở một cách hợp lý, bạn có thể:
– Tạo bản mẫu (prototype) và triển khai dự án mới chỉ trong vài ngày.
– Tích hợp các công nghệ tiên tiến chỉ với một vài dòng mã.
– Giúp các nhà phát triển tài năng nhanh chóng gia nhập một nhóm mới.
– Tiết kiệm hoặc hoàn toàn không tốn kém chi phí mua nhà cung cấp.
– Tiết kiệm chi phí phát triển vì chi phí này được chia đều trên toàn bộ cộng đồng.
Rủi ro
Mặt khác, rủi ro của nguồn mở không rõ ràng, đôi khi không hiện hữu ngay mà phải đến tận một thời điểm trong tương lai thì mới xuất hiện. Rủi ro tương đối của các thành phần phụ thuộc nguồn mở của ứng dụng sẽ ngày càng tăng khi các thành phần đó càng lâu đời. Những rủi ro có thể bao gồm:
– Khả năng tồn tại các lỗ hổng bảo mật đã biết phổ biến, là mục tiêu dễ dàng đối với tin tặc.
– Rắc rối pháp lý về giấy phép nguồn mở và chi phí tuân thủ các hạn chế không mong muốn.
– Sự phức tạp trong việc nâng cấp các thành phần nguồn mở khi chúng có những thay đổi đáng kể sau nhiều phiên bản.
– Các vấn đề không được giải quyết khi những người đóng góp chính ngừng đóng góp.
– Các thành phần “ổn định” có thể ngừng phát triển tích cực.
Bất kỳ rủi ro nào kể trên đều có thể dẫn đến một khoản nợ kỹ thuật lớn và trở thành thách thức đối với các nhóm phát triển khi phát triển các chức năng mới. Điều này còn trở nên tồi tệ hơn trong trường hợp của những ứng dụng đã cũ và không còn ngân sách phát triển.
Mối quan hệ yêu-ghét với các thành phần
Mối quan hệ của bạn với các thành phần nguồn mở sẽ có hai giai đoạn: trước và sau khi sử dụng. Tuy nhiên, bạn nên tập trung vào rủi ro sau sử dụng trước khi suy nghĩ đến rủi ro trước khi sử dụng.
Trước và sau khi sử dụng
Có hai giai đoạn trong mối quan hệ của bạn với các thành phần mã nguồn mở. Giai đoạn đầu tiên là giai đoạn trước khi sử dụng, khi bạn “đi shopping” thành phần đáp ứng một nhu cầu cụ thể trong ứng dụng của mình. Giai đoạn thứ hai là giai đoạn sau khi sử dụng, khi thành phần này được tích hợp vào ứng dụng và xuất hiện trong bản dựng.
Nói chung, các thực hành hay nhất trước khi sử dụng là so sánh tính hữu dụng của một thành phần với chất lượng và mức độ rủi ro của nó; còn các thực hành hay nhất sau khi sử dụng là giảm thiểu rủi ro hiện có và cân nhắc giữa chi phí và lợi ích của các phương án khắc phục.
Bản năng của bạn có thể nói rằng các ứng dụng thường ở cả hai giai đoạn cùng một lúc. Đúng vậy, tốc độ phát triển phần mềm chóng mặt hiện nay và tầm quan trọng của CI/CD cho thấy rằng các ứng dụng thường ở cả hai giai đoạn trong phần lớn thời gian tồn tại.
Để quản lý rủi ro một cách hiệu quả, bạn cần phải giải quyết cả hai giai đoạn. Việc tập trung hoàn toàn vào giai đoạn trước khi sử dụng là một chiến lược tồi tệ vì không có thành phần nào là không chứa rủi ro. Tương tự, việc tập trung hoàn toàn vào giai đoạn sau khi sử dụng cũng là một chiến lược không hiệu quả vì cách nhanh nhất và có khả năng mở rộng nhất để giảm thiểu rủi ro chính là lựa chọn các thành phần tốt hơn ngay từ đầu. Chiến lược sau khi sử dụng bao giờ cũng tốn kém hơn so với chiến lược trước khi sử dụng.
Bắt đầu với các thực hành hay nhất sau khi sử dụng
Series này tập trung vào việc cung cấp các thực hành hay nhất cho các thành phần bạn đã sử dụng. Lý do là vì, nếu bạn mới bắt đầu thì các thực hành hay nhất sau sử dụng sẽ là giải pháp hiệu quả nhất để giúp bạn tiết kiệm thời gian.
Đôi khi, chiến lược trước khi sử dụng đúng đắn duy nhất là chấp nhận rủi ro, sử dụng thành phần và cam kết khắc phục rủi ro trong tương lai. Quy trình khắc phục là điều bạn sẽ hệ thống hoá khi thảo luận về các phương pháp hay nhất sau sử dụng, vì vậy bạn nên tập trung nỗ lực vào đó trước.
Ngoài ra, bạn sẽ luôn cần nghĩ đến rủi ro thành phần nguồn mở trong ứng dụng của mình, một cách tự nhiên giống như việc đánh răng mỗi sáng và tối. Đó là điều không thể tránh khỏi! Không có sự cẩn trọng, kỹ năng, công cụ hay sự chăm chỉ nào có thể ngăn các thành phần gây ra rủi ro cho ứng dụng của bạn.
Theo Sonatype