Sử dụng mã theo Giấy phép Apache 2.0 trong chương trình của tôi bằng Giấy phép MIT


7

Tôi đang sử dụng mã nguồn từ một ví dụ mã được cấp phép theo Giấy phép Apache 2.0 trong chương trình của tôi. Bây giờ tôi muốn xuất bản chương trình và mã nguồn đó trên GitHub bằng Giấy phép MIT. Tôi đã đọc những điều sau trong giấy phép:

Bạn phải khiến bất kỳ tệp sửa đổi nào mang thông báo nổi bật cho biết Bạn đã thay đổi các tệp;

Nhưng tôi đã không thay đổi bất kỳ tệp nào tôi vừa sao chép các phần có liên quan của mã vào các tệp nguồn của mình.

Bây giờ đây là câu hỏi của tôi:

Tôi biết tôi phải thêm một bản sao Giấy phép Apache 2.0 vào dự án của mình nhưng tôi có phải đưa bất cứ thứ gì vào các tệp nguồn của mình để xuất bản chính xác mã chương trình / mã nguồn của mình không?

Vì nó là một chương trình dòng lệnh nên tôi phải thêm một công tắc -license và hiển thị giấy phép hoặc tôi phải thêm nó vào đầu ra "SỬ DỤNG"?

Tôi có phải đưa Giấy phép MIT vào mọi tệp nguồn của mình không hoặc có đủ bản sao của nó trong dự án không?

Cảm ơn trước!


Bạn có thể đặt các phần mà bạn đã lấy từ dự án được cấp phép của Apache vào tệp riêng của mình không? Sau đó, bạn có thể bao gồm các điều khoản giấy phép Apache ở đó. Bạn không phải thêm thông báo vào phần "Cách sử dụng" trong chương trình của mình.
Brandin

Thật không may, tôi không thể bởi vì về cơ bản nó là một thứ máy khách / máy chủ và nó sẽ phá vỡ mã nếu tôi phải.
MemphiZ

Tôi đoán bạn có thể đặt ở đầu tập tin một lời giải thích về phần nào thuộc giấy phép nào. Nhưng điều đó có lẽ sẽ gây nhầm lẫn. Cá nhân tôi sẽ khó khăn hơn trong việc tách mã giấy phép khác sang tệp khác. Đây có lẽ là một câu hỏi kỹ thuật về cách thực hiện điều đó trong ngôn ngữ lập trình bạn đang sử dụng. Ví dụ: nếu Python của nó, bạn có thể dễ dàng đặt nó trong gói riêng và sau đó gọi nó từ mã của riêng bạn.
Brandin

"Nhưng tôi đã không thay đổi bất kỳ tệp nào tôi vừa sao chép các phần có liên quan của mã vào các tệp nguồn của mình." Sau đó, bạn đã thay đổi nó; bạn đã loại bỏ những phần bạn không cần. Do đó, bạn phải làm rõ rằng những đoạn mã đó là phiên bản sửa đổi của mã gốc. Bạn cũng nên làm rõ rằng thư viện của bạn được bảo vệ bởi cả giấy phép MIT và Apache.
David Arno

Có lý do nào bạn không muốn sử dụng Giấy phép Apache cho công việc của mình không? Apache và MIT có chức năng gần giống nhau. (Giấy phép apache có một số quyền cấp bằng sáng chế mà giấy phép MIT bị thiếu). Có một giấy phép duy nhất sẽ giúp mọi thứ dễ dàng hơn cho bạn và bất kỳ người dùng tiềm năng nào.
Craig

Câu trả lời:


3

Vì các phần của các nguồn được cấp phép theo một giấy phép (Apache 2.0) và các phần theo một giấy phép khác (MIT), điều quan trọng là mỗi tệp mang một thông báo cho biết giấy phép nào áp dụng cho nội dung của tệp đó.

Chúng tôi khuyên bạn chỉ nên có một giấy phép duy nhất cho mỗi tệp nguồn, vì vậy bạn nên có mã mà bạn đã sao chép từ thư viện của bên thứ ba trong một tệp nguồn riêng (hoặc nhiều tệp nguồn riêng biệt). Các tệp này phải có thông báo bản quyền liên quan đến giấy phép Apache và nói rằng bạn đã sao chép mã từ thư viện của bên thứ ba.

Đối với mã của riêng bạn mà bạn muốn xuất bản theo giấy phép MIT, bạn nên đặt toàn bộ giấy phép MIT trong một nhận xét ở đầu các tệp của bạn.
Giấy phép MIT không dài như vậy và nó sẽ tránh được mọi sự nhầm lẫn về loại giấy phép nào được cấp ngay cả khi tệp được tách ra khỏi phần còn lại của dự án.


Nếu không thể tách mã theo các giấy phép khác nhau thành các tệp riêng biệt, thì bạn có thể tiến hành như thế này (giả sử một phần nhỏ của tệp nằm dưới giấy phép Apache):

  • Đặt tệp nguồn của bạn theo giấy phép MIT
  • Ngay bên dưới các tuyên bố bản quyền và giấy phép, thêm một nhận xét rằng các phần của tệp nằm dưới một giấy phép khác.
  • Ngay lập tức phía trên mã theo giấy phép Apache, hãy thêm một khối nhận xét cung cấp chi tiết bản quyền và giấy phép cho mã theo sau nó.
    Để tránh gây nhầm lẫn hoàn toàn cho người khác, điều này nên được thực hiện ở mức độ chi tiết của hàm.

Điều gì xảy ra nếu tôi không thể tách mã theo Giấy phép Apache khỏi phần còn lại vì nó sẽ phá vỡ hoàn toàn mã hoặc khiến nó không thể đọc được?
MemphiZ

1
@MemphiZ Ngôn ngữ lập trình là gì? Có lẽ bạn nên đăng câu hỏi lên SO. "Tôi có mã này ở đây - làm cách nào tôi có thể đặt nó vào tệp riêng của mình"
Brandin

@MemphiZ: Đã thêm những gì bạn có thể làm nếu bạn không thể tách các chức năng thành các tệp khác nhau.
Bart van Ingen Schenau
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.