Các nhà phát triển hẳn sẽ biết giấy phép phần mềm là gì và nó ảnh hưởng như thế nào đến nhóm của họ khi viết mã nguồn và xây dựng ứng dụng. Họ biết rằng một số giấy phép có nhiều hạn chế hơn, một số “dễ thở” hơn và một số sẽ khiến nhóm pháp lý phải lo lắng. Các nhà phát triển từng đóng góp cho các dự án mã nguồn mở có thể dễ dàng nhận thấy giấy phép nằm ở ngay đầu tiên trong thư mục repo.

Tuy nhiên, việc cấp phép lại là một vấn đề phức tạp. 95% thành phần trong Maven Central thuộc 17 loại giấy phép khác nhau và 5% thành phần còn lại thuộc 307 loại giấy phép khác. Những con số đó cũng nói lên rằng các vấn đề về cấp phép thành phần cũng gai góc như các vấn đề bảo mật thành phần, với rất nhiều rủi ro tiềm ẩn.

Việc hiểu một cách toàn diện về giấy phép thành phần – chúng là gì, tại sao chúng lại quan trọng và rủi ro của chúng – là một phần thiết yếu trong việc giảm thiểu rủi ro chung cho các ứng dụng của bạn. Hãy đọc hướng dẫn này để nắm rõ một số điểm phức tạp của giấy phép thành phần.

Lưu ý, hướng dẫn này chỉ dành cho mục đích giáo dục. Nếu bạn lo ngại rằng tổ chức của mình đang không tuân thủ các điều khoản của một giấy phép, hãy liên hệ với nhóm pháp lý của tổ chức.

Khái niệm cơ bản

Giấy phép phần mềm là gì?

Nói một cách đơn giản, giấy phép phần mềm là một thoả thuận ràng buộc giữa tác giả của phần mềm và người dùng, giải thích cách sử dụng phần mềm. Thông thường, giấy phép cho phép người dùng đọc, sửa đổi và sử dụng thành phần, miễn là họ tuân theo một số quy tắc.

Giấy phép phần mềm mã nguồn mở là gì?

Giấy phép nguồn mở là giấy phép tuyên bố phần mềm là nguồn mở. Một phần mềm là “mã nguồn mở” có nghĩa người khác có thể xem và đọc mã nguồn của phần mềm.

Loại thành phần nào có thể có giấy phép nguồn mở?

Bất kỳ thành phần nào cũng có thể được phát hành dưới dạng nguồn mở và có giấy phép nguồn mở, đồng thời bao gồm các thành phần lấy từ các kho lưu trữ Maven Central và PyPi mà bạn đang sử dụng để xây dựng ứng dụng của mình. Trên thực tế, bạn có thể tự do lấy các thành phần đó vì chúng có giấy phép nguồn mở.

Tại sao các tác giả cấp phép cho các thành phần của họ?

Các tác giả cấp phép cho thành phần của họ để bảo vệ chính họ, mã nguồn, dự án và doanh nghiệp của họ. Trong bối cảnh nguồn mở, các tác giả áp dụng giấy phép để đảm bảo các thành phần của họ vẫn là nguồn mở, bất kể nó được sử dụng như thế nào hoặc ai đang sử dụng nó.

Các tác giả chọn một giấy phép dựa trên mục tiêu của họ. Ví dụ, một nhà phát triển muốn bán mã nguồn sẽ phát hành mã với giấy phép thương mại, yêu cầu người dùng thanh toán để sử dụng, còn nhà phát triển muốn đóng góp cho cộng đồng sẽ chọn giấy phép nguồn mở.

“Phái sinh” nghĩa là gì trong bối cảnh phần mềm?

Đó là một câu hỏi phức tạp, nhưng trong bối cảnh này, chúng ta có thể coi phần mềm là phần mềm phái sinh (derivative) của một thành phần, nếu phần mềm có chứa thành phần đó tại thời điểm phát hành.

Ví dụ, một công cụ giúp bạn viết hoặc xây dựng ứng dụng, chẳng hạn như IDE hoặc trình quản lý gói, không xuất hiện trong phần mềm, do đó trong bối cảnh này phần mềm của bạn không phải một phần mềm phái sinh. Tuy nhiên, một thành phần framework mà bạn đóng gói cùng với ứng dụng sẽ khiến phần mềm của bạn trở thành phần mềm phái sinh.

Sự phức tạp của việc cấp phép

Giấy phép phần mềm tương tác với bản quyền như thế nào?

Quyền kiểm soát hoàn toàn được tự động cấp cho các tác giả phần mềm, ngay cả khi tác giả không yêu cầu một cách rõ ràng. Theo nghĩa này, giấy phép là cách bạn biết rằng bạn có thể sử dụng phần mềm ngay cả khi tác giả giữ bản quyền. Nếu không có giấy phép, tác giả có thể không cho phép người khác sử dụng hoặc yêu cầu ngừng sử dụng cho dù phần mềm đang được sử dụng như thế nào.

Từ quan điểm cộng đồng, giấy phép nguồn mở cũng giúp ngăn chặn một người đóng góp duy nhất kiểm soát việc sử dụng phần mềm. Mặc dù tác giả ban đầu giữ bản quyền, mỗi người đóng góp cũng sẽ trở thành một tác giả giữ bản quyền. Như vậy, ai sẽ đưa ra quyết định về việc ai có thể sử dụng phần mềm? Câu hỏi hóc búa này đã được giải quyết nhờ giấy phép nguồn mở: mọi người đều có thể sử dụng nó như nhau, miễn là họ tuân theo các quy tắc.

Các tác giả có thể chọn giấy phép nguồn mở nào?

Có rất nhiều loại giấy phép, mỗi loại đều có sự phức tạp và lịch sử riêng. Bạn có thể xem tóm tắt một số giấy phép phổ biến tại đây.

Tất cả các giấy phép nguồn mở có giống nhau không?

Không. Một số giấy phép phức tạp hơn và đặt ra một số yêu cầu lớn hơn đối với người dùng, số khác lại đơn giản và không có nhiều yêu cầu.

Các loại giấy phép chính mà người dùng thành phần nguồn mở nên quan tâm là Copyleft và Liberal. Copyleft License là giấy phép nguồn mở yêu cầu sản phẩm phái sinh phải được phát hành theo cùng một giấy phép. Ngược lại, giấy phép nguồn mở không có yêu cầu nói trên được gọi là Liberal License hoặc Permissive License.

Có phải tất cả thành phần nguồn mở đều có rủi ro như nhau không?

Không. Một số giấy phép, chẳng hạn như GNU General Public License, đưa ra các yêu cầu khắt khe đối với người dùng, bao gồm quy định rằng tất cả phần mềm phái sinh phải là nguồn mở. Bởi vì yêu cầu này có khả năng đặt mã nguồn độc quyền vào tình trạng nguy hiểm, các giấy phép như vậy có mức độ rủi ro cao. Như đã đề cập ở trên, giấy phép yêu cầu phầm mềm phái sinh phải được phát hành theo cùng một giấy phép là Copyleft License.

Các giấy phép khác, chẳng hạn như MIT License, lại cực kỳ đơn giản và dễ dãi, hầu như không đặt ra yêu cầu nào đối với người dùng, do đó có mức độ rủi ro thấp. Như đã nêu trên, giấy phép không yêu cầu phần mềm phái sinh phải được phát hành theo cùng một giấy phép được gọi là Liberal License.

Ngoài ra, vẫn còn những giấy phép khác, chẳng hạn như WTFPL và Beerware chứa đựng những rủi ro tiềm ẩn khó xác định. Như một nguyên tắc chung, người dùng phần mềm nguồn mở nên cảnh giác với những giấy phép như thế này. Các điều khoản của họ có vẻ đơn giản, nhưng luật sư hoặc thẩm phán có thể không đồng ý. Bởi vì các điều khoản của các giấy phép này rất khó dự đoán trong bối cảnh pháp lý nên mức độ rủi ro của chúng là rất cao.

Khi nào giấy phép thành phần “có hiệu lực”?

Câu trả lời đơn giản là, các điều khoản cấp phép “có hiệu lực” khi phần mềm được phân phối. Tuy nhiên, trong môi trường phát triển phần mềm cực nhanh ngày nay, phân phối là một chủ đề phức tạp.

Nếu bạn lo ngại rằng phần mềm của tổ chức mình không tuân thủ các điều khoản của một giấy phép, hãy liên hệ với nhóm pháp lý của tổ chức.

Rủi ro giấy phép thành phần

Tại sao việc nhận thức các yêu cầu của giấy phép thành phần lại quan trọng?

Nếu bạn không tuân thủ các điều khoản của giấy phép, bạn sẽ khiến tổ chức của mình gặp rủi ro đáng kể. Tác giả của thành phần có thể khởi kiện, yêu cầu bạn gỡ phần mềm xuống hoặc thanh toán để tiếp tục sử dụng.

Điều quan trọng cần lưu ý là, các giấy phép Copyleft có thể yêu cầu ứng dụng được phát hành theo cùng một giấy phép. Mặc dù hiện nay không có biện pháp pháp lý nào bắt buộc một ứng dụng nguồn đóng chuyển thành nguồn mở, chủ sở hữu giấy phép vẫn có thể thực hiện hành động pháp lý.

Tôi nên sử dụng giấy phép thành phần nghiêm túc như thế nào?

Từ lâu nay, các giấy phép nguồn mở đã được sử dụng trước toà như một ràng buộc về mặt pháp lý và có hiệu lực đầy đủ. Trong quá khứ, ngay cả những tổ chức lớn như Cisco cũng bị kiện vì công ty con Linksys của họ không tuân thủ các điều khoản của giấy phép nguồn mở trong các thành phần họ sử dụng.

Cụ thể, tôi cần lưu ý điều gì khi tìm hiểu các giấy phép phần mềm?

Hãy ghi nhớ bốn điều sau đây khi bạn nghĩ về những rủi ro đi kèm với giấy phép thành phần.

    • Phân phối: Như đã đề cập ở trên, các điều khoản cấp phép “có hiệu lực” khi phần mềm được phân phối và việc phân phối là một chủ đề phức tạp. Hãy nghĩ xem liệu phần mềm của tổ chức bạn có bao giờ được phân phối không, hay phần mềm đó sẽ chỉ được lưu trữ hoặc triển khai trong mô hình SaaS (Software-as-a-Service). Nếu nó sẽ được phân phối trong tương lai, hãy xác định chính xác thời điểm phân phối trong vòng đời phát triển của bạn.

    • Quyền bằng sáng chế: Khi một tổ chức quyết định phát hành phần mềm theo giấy phép nguồn mở hoặc khi họ quyết định sử dụng một thành phần nguồn mở trong phần mềm thương mại độc quyền, họ có thể câp một số quyền bằng sáng chế (patent right) nhất định cho người nhận phần mềm. Đây là một trường hợp phức tạp, nhưng nói một cách đơn giản, giấy phép nguồn mở cấp cho người dùng các đặc quyền có thể không phù hợp với mục tiêu của tổ chức bạn. Bạn có thể đọc thêm về chủ đề này trong một bài báo xuất sắc của Laura Majerus.
    • Yêu cầu thông báo: Một số giấy phép nguồn mở yêu cầu bạn thông báo cho người dùng hoặc khách hàng về giấy phép, quyền của họ, nghĩa vụ của bạn và các vấn đề khác. Việc tuân thủ yêu cầu này thường đơn giản như sao chép/dán một tập tin văn bản vào phần mềm của bạn, nhưng đôi khi có thể phức tạp hơn như trong trường hợp hàng tiêu dùng.
    • Sản phẩm phái sinh: Như đã đề cập ở trên, các ứng dụng chứa một thành phần có giấy phép Copyleft phải được phát hành theo cùng một giấy phép với thành phần. Điều này có thể không tương thích với các mục tiêu của tổ chức bạn.

    Việc một giấy phép yêu cầu sản phẩm phái sinh phải được phát hành theo cùng một giấy phép gây ra rủi ro gì?

    Trong trường hợp này, rủi ro là tổ chức của bạn sẽ buộc phải phát hành nhiều mã nguồn cho người dùng. Các ứng dụng của tổ chức bạn là duy nhất và có được chỗ đứng trên thị trường nhờ mã nguồn độc quyền, do đó có thể mất lợi thế chính trên thị trường nếu mã nguồn đó được công khai.

    Còn các thành phần không có giấy phép thì sao? Chúng có tồn tại không?

    Chúng tồn tại, nhưng người dùng các thành phần nguồn mở không giấy phép cũng nên cảnh giác. Như đã đề cập ở trên, các tác giả giữ toàn quyền kiểm soát bản quyền đối với các tác phẩm của họ. Hơn nữa, giấy phép có thể được xem là hợp đồng giữa tác giả và người dùng, trong đó tác giả cho phép người dùng sử dụng thành phần, miễn là họ tuân theo các quy tắc nhất định. Điều này có nghĩa là một thành phần không có giấy phép sẽ mang đến nhiều rủi ro vì tác giả có thể không cho phép sử dụng nó bất kỳ lúc nào mà không cần cảnh báo gì, bất kể thành phần đó đang được sử dụng như thế nào.

    Như một nguyên tắc chung, bạn không nên sử dụng các thành phần không có giấy phép.

    Tôi có phải tuân theo một yêu cầu nào đó nếu tôi chỉ lưu trữ phần mềm không?

    Có thể. Bối cảnh là rất quan trọng đối với giấy phép thành phần. Như đã đề cập ở trên, giấy phép “có hiệu lực” khi ứng dụng của bạn được phân phối. Nếu ứng dụng bạn đang xây dựng sẽ chỉ được lưu trữ và không bao giờ được phân phối, thì một số yêu cầu của giấy phép có thể không hiệu lực. Và một số yêu cầu khác cũng có thể không hiệu lực nếu ứng dụng của bạn chỉ được sử dụng nội bộ.

    Hãy đọc kỹ giấy phép, thảo luận với nhóm pháp lý và đảm bảo rằng bạn hiểu về ngữ cảnh của ứng dụng. Lifecycle và Firewall là các giải pháp tuỳ theo ngữ cảnh, hỗ trợ bạn chặn hoặc cho phép các thành phần dựa trên ứng dụng mà chúng xuất hiện.

    Chọn thành phần và điều tra các giấy phép

    Tôi nên xử lý rủi ro đi kèm với giấy phép thành phần nguồn mở như thế nào?

    Các chiến lược chính để xử lý rủi ro đi kèm với giấy phép thành phần nguồn mở là xem xét thường xuyên, cân nhắc sớm và nắm bắt ngữ cảnh.

        • Xem xét thường xuyên: Các báo cáo tự động về giấy phép thành phần, chẳng hạn như báo cáo do Lifecycle tạo ra, giúp bạn thường xuyên đánh giá được các rủi ro ứng dụng của mình và lập kế hoạch khắc phục chúng.

        • Cân nhắc sớm: Lý tưởng nhất là bạn và nhóm phát triển của bạn giải quyết các rủi ro về giấy phép thành phần khi bạn lựa chọn các thành phần. Nexus Lifecycle có thể xác định các sự cố có thể xảy ra ngay khi các thành phần vào ứng dụng và Nexus Firewall có thể chặn các thành phần có giấy phép rủi ro xâm nhập vào môi trường của bạn.

        • Nắm bắt ngữ cảnh: Nếu ứng dụng của bạn là ứng dụng nội bộ hoặc sẽ chỉ được lưu trữ mà không phân phối, thì một số yêu cầu có thể không hiệu lực đối với bạn. Điều này có thể làm giảm rủi ro của tổ chức và mở rộng số lượng thành phần tương thích với mục tiêu của bạn. Cả Lifecycle và Firewall đều cho phép bạn đặt ra các quy tắc gắn cờ (flagging) theo ngữ cảnh của ứng dụng đang được scan.

      Khi nào tôi nên điều tra giấy phép trên các thành phần tôi muốn sử dụng?

      Lý tưởng nhất là bạn nên điều tra các giấy phép thành phần khi bạn đang lựa chọn chúng. Việc xác định sớm các thành phần có giấy phép rủi ro hoặc không tương thích với mục tiêu của tổ chức sẽ ngăn chúng xâm nhập vào môi trường của bạn. Nếu những thành phần đó không xâm nhập vào môi trường của bạn, bạn sẽ không gặp rủi ro.

      Làm thế nào để tìm hiểu thêm về các giấy phép trong các thành phần tôi muốn sử dụng?

      Như đã đề cập ở trên, một số giấy phép yêu cầu phải có thông báo và/hoặc toàn văn giấy phép kèm theo thành phần. Trong trường hợp này, chỉ cần mở một tập tin văn bản và xem xét tập tin đó với nhóm pháp lý của bạn.

      Tuy nhiên, hầu hết các giấy phép lớn thường có trang web riêng. Bạn có thể truy cập trang web của từng giấy phép để tìm hiểu thêm.

      Hãy nhớ rằng, để khuyến khích việc sử dụng, các giấy phép nguồn mở phải dễ đọc và dễ hiểu.

      Làm sao để tôi có thể biết được các thành phần trong ứng dụng của mình?

      Trong các ứng dụng lớn, việc xác định chính xác những thành phần nào được sử dụng có thể là một thách thức phức tạp. Việc xem xét thường xuyên là rất quan trọng, nhưng nếu bạn đang bắt đầu từ những bước đầu tiên, hãy suy nghĩ đến những điều sau:

          • Hãy cố gắng tạo danh sách các thành phần trong ứng dụng của mình một cách tự động. Nexus Lifecycle chính là lựa chọn dành cho nhiệm vụ này. Nếu bạn chưa phải khách hàng của Sonatype, hãy dùng thử trình quét lỗ hổng Nexus Vulnerability Scanner để có được một ảnh chụp nhanh (snapshot) về ứng dụng của mình.

          • Hãy phân loại các rủi ro của bạn theo mức độ nghiêm trọng của chúng. Lifecycle và Nexus Vulnerability Scanner sẽ tự động thực hiện việc này giúp bạn. Hãy suy nghĩ về hậu quả của việc không tuân thủ từng giấy phép.

          • – Hãy phân chia các giấy phép của bạn theo loại. Nếu bạn có hàng tá thành phần có giấy phép Liberal và không có thành phần nào có giấy phép Copyleft, thì hồ sơ rui ro của bạn về cơ bản sẽ khác so với trường hợp ngược lại. Một lần nữa, Lifecycle và Vulnerability Scanner sẽ giúp việc phân loại này trở nên dễ dàng.

          • Hãy tìm kiếm các chiến lược khắc phục. Các thành phần có thể được nâng cấp, gỡ bỏ hoặc thay thế không? Liệu một thành phần thương tự có tồn tại với giấy phép dễ dàng hơn? Hãy thực hiện nghiên cứu của bạn và nhắm mục tiêu tới những kẻ phạm tội tồi tệ nhất trước tiên. Lifecycle có thể giúp so sánh các thành phần và xác định những thành phần có ít hoặc không có rủi ro.

        Tài nguyên bổ sung

        Bạn có thể xem thêm khoá học của Sonatype để nghe Jerry Gergel thảo luận chi tiết hơn về chủ đề này và đọc bài luận xuất sắc của Laura Majerus để hiểu sâu hơn về giấy phép thành phần.

        Ngoài ra, để tìm hiểu thêm về Advanced Legal Pack – một tiện ích bổ sung cho Lifecycle giúp bạn hiểu rõ hơn về rủi ro cấp phép, hãy truy cập tài liệu của Sonatype tại đây.

        Theo Sonatype

        Menu