Khai báo nhiều giấy phép trong dự án GitHub


28

Trong nhiều năm, tôi là một người hâm mộ tuyệt vời của việc cấp giấy phép cho những thứ được chia sẻ trực tuyến để giúp người khác dễ dàng xác định xem họ có thể tái sử dụng những điều đã nói hay không. Trước khi GitHub bắt đầu nhẹ nhàng 'thúc đẩy' người dùng của mình đưa các tệp LICENSE vào kho của họ, tôi không thực sự biết cách làm điều này tốt nhất với mã - đặc biệt là mã được chia sẻ công khai trên GitHub! - nhưng tôi đã cố gắng sử dụng tốt các tệp LICENSE kể từ đó.

Bây giờ tôi đang ở trong tình huống tôi đã làm việc trong một dự án nhỏ với một số người khác, trong đó yêu cầu đề cập đến một số giấy phép (do mã & thư viện của bên thứ 3 cũng như các tệp không phải mã). Trong khi các đối tác của tôi giải quyết vấn đề khá 'chậm chạp' - có ý kiến ​​cho rằng tôi 'chỉ cần đặt mã trực tuyến, không ai sẽ quan tâm' -, tôi muốn làm điều này đúng cách. Vấn đề là: Tôi không biết người ta phải đề cập đến một số giấy phép (khác nhau) trên GitHub như thế nào.

Tôi đã thấy một số giải pháp khác nhau trên GitHub, đó là lý do tại sao tôi khó đánh giá nếu câu trả lời cho một câu hỏi hơi khác này là có thẩm quyền. Những gì tôi muốn biết là cái nào sau đây - nếu có - là phổ biến nhất, hoặc nếu có những cách khác, bổ sung để làm điều này.

  1. Tạo một tệp LICENSE duy nhất và đặt các mô tả của tất cả các giấy phép khác nhau trong đó. ( Câu hỏi : Có nên đặt chúng theo một thứ tự cụ thể không? Tôi có thể bắt đầu tập tin với đề cập đến tên của tất cả các giấy phép có trong, để có cái nhìn tổng quan hơn)?
  2. Tạo một tập tin PHÉP mỗi giấy phép sử dụng và đặt tên cho chúng LICENSE.md, LICENSE.LibNameA.md, LICENSE.AssetsB.mdvv như gợi ý trong câu trả lời liên quan. ( Câu hỏi : Việc đặt tên sẽ dựa trên tên dự án? Không phải tên giấy phép? Nếu tôi sử dụng nhiều giấy phép cho tài liệu tự đóng góp, tôi sẽ đề cập tất cả chúng trong 'chính' LICENSE.mdchứ? Nếu không, tôi sẽ làm gì thay thế?)
  3. Tạo hai tệp LICENSE : một tệp liệt kê (các) giấy phép cho nội dung 'chính', tức là tất cả các mã / tài sản mà chính chúng đã tạo; một cho tất cả các tài liệu bên thứ 3. ( Câu hỏi như trên : có một sơ đồ đặt tên cụ thể nào mà người ta sẽ sử dụng và sắp xếp thứ tự nào sẽ liệt kê các tài liệu của bên thứ 3 không?)

Cuối cùng, nếu tôi hiểu chính xác các giải thích và dự án GitHub khác nhau về API Giấy phép của họ, chỉ có tệp LICENSE 'chính' sẽ được xem xét khi xác định giấy phép repo (mặc dù tôi không thể tìm ra giấy phép nào sẽ được chọn nếu một số đã được đề cập).


2
Vì vậy, có một README và một hoặc nhiều tệp LICENSE sau đó. Đây không phải là khoa học tên lửa.
Robert Harvey

4
Về trang được liên kết: nó không liên quan gì đến việc phân phối tệp giấy phép, nó phải liên quan đến API Giấy phép của GitHub xác định / báo cáo lại về giấy phép của repo. Như tôi đã hỏi về việc cấp phép / sử dụng các tệp LICENSE trên GitHub một cách cụ thể, không phải là nguồn mở hay git nói chung, cách một dự án nguồn mở được 'miêu tả' cũng được cấp phép trên đó cũng có liên quan. "Đây không phải là khoa học tên lửa" không đặc biệt hữu ích, btw., Đặc biệt. không phải trong bối cảnh câu hỏi tập trung vào GitHub của tôi.
Kay

2
Tôi có thể đề nghị README của bạn có một phần về cấp phép, chỉ cần nêu rõ rằng có nhiều giấy phép và thông báo cho mỗi giấy phép, tên của tệp LICENSE có trong đó không?
Erik Eidt

3
@immibis Tôi biết điều đó và hoàn toàn không phải câu hỏi của tôi. Tôi đặc biệt yêu cầu một câu trả lời liên quan đến "cách nào có ý nghĩa nhất đối với con người" (trên: GitHub).
Kay

3
@immibis: "Không có trình biên dịch nào sẽ đọc nó" - vấn đề là nói đúng ra, điều này không đúng với Github. Github sử dụng một công cụ tự động để xác định "giấy phép" được áp dụng cho nội dung của kho lưu trữ. Tên của giấy phép được xác định như vậy sau đó sẽ được hiển thị trong thanh tiêu đề của kho lưu trữ, cùng với một số thông tin rất chung khác cung cấp cho khách truy cập một ấn tượng cơ bản về dự án (ví dụ: số lượng người đóng góp và phát hành).
HOẶC Mapper

Câu trả lời:


15

Bạn có thể sử dụng bất kỳ cơ chế nào để bao gồm các giấy phép mà bạn thích, miễn là nó trở nên rõ ràng đối với khách truy cập dự án của bạn, giấy phép nào áp dụng cho phần nào của dự án.

Sở thích của tôi sẽ là:

  • Đặt mỗi thư viện của bên thứ ba mà bạn sử dụng trong một thư mục của riêng mình. Thư mục này nên chứa tất cả các tệp là một phần của bản phân phối của thư viện, bao gồm các tệp giấy phép và readme.
  • Trong tệp giấy phép của riêng bạn, chỉ tham khảo giấy phép mã của riêng bạn
  • Trong tệp readme của dự án của bạn, hãy đề cập đến thư viện bên thứ ba nào bạn sử dụng và giấy phép mà mỗi thư viện được phân phối. Để biết chi tiết giấy phép đầy đủ, hãy tham khảo tệp giấy phép trong thư mục của thư viện.

1
Làm thế nào bạn sẽ xử lý tệp LICENSE của riêng bạn trong trường hợp cấp phép kép cho nội dung của chính họ trong kịch bản này? Tức là nếu bạn đã sử dụng các giấy phép khác nhau cho các phần khác nhau của dự án (mã so với tệp phương tiện) hoặc nếu bạn muốn phân phối mã của mình theo hai (hoặc nhiều) giấy phép phần mềm khác nhau? Đưa thông tin bổ sung vào README rất có ý nghĩa và là điều tôi cũng sẽ làm, nhưng tôi đặc biệt quan tâm đến cách xử lý các tệp LICENSE trên GitHub (trong mắt tôi, được khuyến khích cung cấp cho khách truy cập / người xem dự án tổng quan nhanh).
Kay

1
Nếu (một phần) mã của riêng tôi được cấp phép kép, tôi sẽ thêm hai (hoặc nhiều) tệp giấy phép vào dự án, một cho mỗi giấy phép và làm rõ trong tệp readme áp dụng giấy phép nào trong trường hợp đó.
Bart van Ingen Schenau

1
Bart, cảm ơn vì đã chia sẻ cách bạn làm điều đó - điều đó hữu ích hơn rất nhiều so với một số ý kiến ​​tôi nhận được. :) Trong khi đó tôi thực sự đã liên lạc với GitHub về nó và sẽ bỏ ngỏ câu hỏi này trong trường hợp có bất cứ điều gì phát sinh từ đó.
Kay

2
Khi bạn nhận được câu trả lời từ Github, vui lòng đăng thông tin đó dưới dạng tự trả lời cho câu hỏi này.
Bart van Ingen Schenau

1
Tôi chắc chắn sẽ làm được nếu họ đồng ý với họ vì điều đó có thể thú vị khi biết cho những người khác!
Kay

12

Trong phần trình bày về người tạo SPDX ( slide 12 ), rất rõ ràng:

Nội dung của LICENSE:

Apache-2.0 OR GPL-2.0-or-later

Bạn có thể thêm hai tệp LICENSE bổ sung sau đó: LICENSE.Apache-2.0LICENSE.GPL-2.0-or-later.

Trong mọi trường hợp, README.mdnên chứa một định danh giấy phép SPDX :

SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later

Bạn có thể làm như thế:

## License

This work is dual-licensed under Apache 2.0 and GPL 2.0 (or any later version).
You can choose between one of them if you use this work.

`SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later`

Lưu ý rằng Apache-2.0 OR GPL-2.0-or-laterApache-2.0 AND GPL-2.0-or-laterlàm cho một sự khác biệt lớn. Cái trước có nghĩa là người dùng có thể chọn giữa cả hai (đó là trường hợp thông thường!) Và cái thứ hai biểu thị rằng người dùng phải tuân thủ cả hai giấy phép. Xem thêm đa cấp phép trên Wikipedia.

Lưu ý rằng tôi đang sử dụng Danh sách cấp phép SPDX mới (kể từ 2017-12-28 ) 3.0 tại đây. Các phiên bản 2017 đã GPL-2.0là định danh cho GPL 2.0, nhưng không rõ điều đó có nghĩa là "chỉ GPL 2.0" hay "GPL 2.0 hay bất kỳ phiên bản nào mới hơn".


4

Cuối cùng tôi đã liên hệ trực tiếp với bộ phận hỗ trợ của GitHub liên quan đến câu hỏi của tôi và họ nói rằng họ có thể trích dẫn họ nếu tôi nói rõ câu trả lời của họ chỉ mang ý nghĩa như đề xuất chứ không phải đề xuất.

Nhóm của chúng tôi không có bất kỳ đề xuất cụ thể nào để cung cấp tại thời điểm này, nhưng chúng tôi sẽ đảm bảo hỏi xung quanh và cập nhật cho bạn nếu chúng tôi có bất cứ điều gì khác để chia sẻ!

Câu trả lời ban đầu của họ có những điều sau đây để cung cấp:

Một đề xuất là có một tệp LICENSE cho phần lớn mã của bạn và thêm văn bản của giấy phép cho phần còn lại của tài liệu bên thứ 3 trong tệp README của bạn.

Một cách khác là cho mỗi đường dẫn có tệp LICENSE riêng khi nó có ý nghĩa. Vì vậy, nếu, ví dụ, kho lưu trữ của bạn có đường dẫn sau: libs / awesome-lib-v2 / bạn có thể có libs / awesome-lib-v2 / LICENSE.

Trong trường hợp sau, bạn có thể muốn đề cập rằng trong tệp README và / hoặc tệp LICENSE trong thư mục gốc của bạn.

Bạn cũng có thể xem xét chỉ sử dụng một tệp LICENSE trong thư mục gốc của kho lưu trữ của mình và thêm các phần phụ cho bất kỳ tài liệu, mã, et cetera của bên thứ 3 nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.