Cách đúng đắn để fork / tái sử dụng mã từ một dự án nguồn mở là gì?


22

Giả sử tôi đang làm việc trên một dự án nguồn mở và muốn sử dụng lại một hàm tiện ích tầm thường từ một dự án nguồn mở khác (ví dụ: chức năng tìm kiếm / thay thế tệp). Có hợp pháp để sao chép chức năng và chỉ cần viết một thông báo bản quyền nhỏ ở đầu tệp không? Tôi có nên bao gồm tên của họ với tư cách là chủ sở hữu bản quyền của toàn bộ dự án trong giấy phép?

Tương tự, giả sử tôi rẽ nhánh một dự án nguồn mở. Ở đâu và làm thế nào để tôi xác định rằng bản quyền được chia sẻ giữa cả người giữ bản quyền gốc và bản thân tôi?

Tôi đoán câu trả lời phải thay đổi phần nào theo giấy phép nguồn mở nhưng tôi muốn câu trả lời chung càng nhiều càng tốt.

Tái bút: Tôi chủ yếu quan tâm đến khía cạnh pháp lý, nhưng hãy thoải mái đưa vào quan điểm đạo đức của bạn.


1
Giấy phép của dự án đang được đề cập đến, và dự án bạn đang phát hành là gì? Có, bạn có thể sử dụng mã, nhưng vui lòng cụ thể hơn để chúng tôi có thể thông báo rõ hơn cho bạn về các yêu cầu của bạn theo giấy phép đang được sử dụng.
Tim Post

1
@Tim Post: Đây chủ yếu là một câu hỏi lý thuyết nhưng nếu nó có thể giúp giả sử cả hai dự án đều có giấy phép GPL vì nó rất phổ biến.
Olivier Lalonde

Câu trả lời:


25

Tôi đang cố gắng để làm cho câu trả lời này là 'meta' có thể áp dụng càng tốt.

Sử dụng đoạn / bit từ các dự án khác

Đánh dấu rõ ràng mã với bản quyền của tác giả ban đầu. Đảm bảo rằng giấy phép bạn chọn hoàn toàn tương thích với giấy phép của mã bạn đang sử dụng. Bạn sẽ cần sự cho phép của tác giả để chuyển mã sang một giấy phép khác (trừ khi họ đặc biệt cho phép bạn làm như vậy, tức là "GPL 2 hoặc bất kỳ phiên bản nào mới hơn")

Chương trình của bạn nên có tệp AUTHORS (hoặc tương tự), nơi bạn liệt kê tất cả những người đóng góp và những thứ bạn đã sử dụng từ các dự án khác.

Ngã ba dự án

Đối với mỗi mô-đun mà bạn thay đổi đáng kể , hãy thêm bản quyền của bạn theo tác giả gốc. Điều tương tự cũng xảy ra đối với việc cấp phép, bạn bị ràng buộc bởi các điều khoản của giấy phép có hiệu lực khi bạn rẽ nhánh. Nếu dự án nói "chỉ GPL2", bạn phải tôn trọng điều đó, bạn không thể đến GPL3 mà không có sự cho phép của họ.

Điều này khác nhau, rất nhiều, tùy thuộc vào giấy phép trong tay. Ví dụ, QPL cho biết bạn chỉ có thể phân phối các thay đổi ở định dạng bản vá, vì vậy hãy đảm bảo bạn hiểu các điều khoản cho phép bạn phân phối các phiên bản sửa đổi của phần mềm.

Ngoài ra, luôn giữ bản quyền. Nếu thêm bản quyền của riêng bạn vào nội dung tồn tại, hãy chắc chắn rằng bạn đánh dấu rõ ràng chính xác những gì bạn đang yêu cầu.


Đôi khi, bạn có thể thêm giấy phép. Giả sử bạn muốn sử dụng chức năng BSD trong dự án GPLed: bạn không thể xóa giấy phép BSD, nhưng nó tương thích với GPL, vì vậy bạn có thể phát hành toàn bộ dự án theo GPL và lưu ý rằng chức năng này cũng nằm trong BSD giấy phép. Sẽ là lịch sự khi phát hành bất kỳ thay đổi nào bạn thực hiện đối với mã được cấp phép BSD theo BSD.
David Thornley

@David - OP muốn có một câu trả lời chung chung (do đó tôi thôi thúc nghiên cứu các giấy phép). Bạn khá đúng. TUY NHIÊN, thật tuyệt vời khi cấp phép kép cho bất kỳ thay đổi nào bạn đã thực hiện đối với mã BSD, vì vậy các tác giả ban đầu thực sự có thể sử dụng nó nếu họ muốn.
Tim Post

1
Tại thời điểm nào, tệp giấy phép chính phải có thông báo bản quyền của bạn trên các tác giả gốc? Khi SLOC của bạn vượt quá 200% SLOC dự án ban đầu? 300%? Nếu dự án mà bạn rẽ nhánh kết thúc là một trong nhiều thư viện hoặc mô-đun trong dự án của bạn?
hobs

@hobs imo, thứ tự thông báo bản quyền không phải là một dấu hiệu cho thấy mức độ đóng góp, mà là chi tiết về nguồn gốc theo thứ tự thời gian.

@TechnikEmpire Thứ tự thời gian có ý nghĩa, nhưng đối với một danh sách người đóng góp thay vì thông báo bản quyền? Tôi nghĩ rằng các thông báo bản quyền có thể được sắp xếp tốt hơn theo các phần của mã họ áp dụng và giá trị / số lượng của các phần đó trong gói. Thật hữu ích khi có một danh sách những người bạn cần liên hệ, theo thứ tự ưu tiên, nếu bạn muốn thay đổi điều gì đó về giấy phép. Vì vậy, nếu bạn nhận được sự cho phép từ một vài người đầu tiên, nhưng không phải là người cuối cùng, bạn có một lượng mã nhỏ hơn để tạo lại nếu bạn quyết tâm thực hiện thay đổi. Tôi tự hỏi Linus làm gì?
hobs
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.