Đưa giấy phép vào mỗi tệp mã? [đóng cửa]


93

Tôi thấy nó bị trùng lặp một cách không cần thiết khi có nó trong mỗi tệp mã, nhưng tôi thấy nó trên hầu hết các dự án nguồn mở. Tôi có nên làm như vậy không hay chỉ bao gồm một giấy phép duy nhất bên ngoài mã?



1
Bạn phải loại trừ bảo hành trong mỗi tệp nguồn, nếu không bạn có thể bị loại. (Lưu ý rằng một trình soạn thảo thích hợp, như Vim, có thể dễ dàng cấu hình để gấp soạn sẵn trừ bảo hành cho bạn ra khỏi tầm nhìn tự động.)
Evgeni Sergeev

Câu trả lời:


74

Xin vui lòng chỉ một cái bên ngoài mã! Tôi không biết về những người khác, nhưng tôi ghét nhìn thấy cùng một thứ trên đầu mỗi tệp.

Tôi nghĩ rằng tôi đã đọc nó một vài lần, chỉ bằng cách page_down-ing qua nó.


10
Tôi không đồng ý với Zifre. Bất kỳ giấy phép lặp lại nào ở trên cùng đều khiến tôi khó chịu.
strager

49
Việc xác định từng tệp nguồn được phát hành theo giấy phép nào là hợp lý và hợp lý, vì tệp có thể được phân tách khỏi phần còn lại của mã (nói chung, được khuyến khích sử dụng lại bởi Nguồn mở) và nếu tệp không chứa thông tin về giấy phép , việc theo dõi lại giấy phép chính xác sẽ phức tạp hơn. Nhưng toàn bộ giấy phép trong mỗi tệp - không; điều đó sẽ là kỳ cục đối với GPL hoặc LGPL. Như đã đề xuất, đối với các giấy phép ngắn hạn, thật phiền toái khi có văn bản giấy phép thực tế trong tệp, nhưng đó là một lời kêu gọi phán xét. Nhưng rất hợp lý để xác định nó được phát hành theo giấy phép nào.
Jonathan Leffler

14
Tôi vừa cập nhật tiêu đề tệp trong dự án của mình để chỉ có ba dòng: bản quyền, tên giấy phép và URL đến văn bản giấy phép. Nó đã rút ngắn tiêu đề của tôi từ 26 dòng (BSD) xuống còn 3 dòng. :)
Esko Luontola

3
@Esko: Bạn có thể đăng mẫu được không? Tôi không biết những gì bạn đã viết cho bản quyền. Cảm ơn.
Joan Venge

6
Câu trả lời này được đánh dấu là giải pháp, nhưng theo quan điểm của tôi, câu hỏi vẫn còn bỏ ngỏ chừng nào chúng ta chưa có evidence for the legal situation. Perhaps a lawyer can add a link to a court decision.
Jonas Stein

25

EULA là thuật ngữ sai ở đây, vì những người xem mã nguồn thường không phải là người dùng cuối.

Về mặt pháp lý, nó cũng không có gì khác biệt; bản quyền không cần phải được tuyên bố rõ ràng.

Về cơ bản, tất cả những gì bạn đạt được là rủi ro thấp hơn về việc mọi người vô tình vi phạm các điều khoản cấp phép của bạn. Bạn sẽ phải quyết định điều đó quan trọng như thế nào đối với bạn.

Tôi muốn nói rằng thỏa hiệp tốt nhất là đặt một tiêu đề rất ngắn có chứa một liên kết (URL tuyệt đối cũng như tương đối trong dự án) đến văn bản giấy phép đầy đủ vào mỗi tệp mã nguồn. Bằng cách đó, bất kỳ ai quan tâm đến giấy phép đều biết nơi để tìm nó (lý tưởng là những người sẵn sàng trả phí cấp giấy phép lớn; bạn chắc chắn muốn những người đó có thể liên hệ với bạn!)


Bản quyền có thể không cần rõ ràng, nhưng sao chép bên trái thì sao?
Kekoa

1
@kekoav: copyleft ít hạn chế hơn bản quyền. Theo mặc định, bạn không thể tạo tác phẩm phái sinh.
Zifre

3
Trong một cuộc tranh cãi, đó sẽ không phải là một lập luận hợp lệ. Nếu được thông báo rằng có giấy phép và cách lấy nó, bạn không thể tìm thấy các rào cản kỹ thuật do lỗi của bạn đã ngăn bạn nhìn thấy giấy phép.
Lasse V. Karlsen

1
"Copyleft" là tiếng lóng để chỉ ý tưởng cơ bản của GPL nhằm "lật đổ" các hạn chế bản quyền từ bên trong, tức là sử dụng quyền của bạn với tư cách là chủ bản quyền để cấp giấy phép cho bất kỳ ai sử dụng mã của bạn một cách tự do, nhưng buộc họ phải phát hành mã CỦA HỌ. dựa trên của bạn theo cùng một giấy phép.
Michael Borgwardt

2
Chính xác; nhưng trong bối cảnh này, như Zifre đã nói, điều đó không thành vấn đề. Nếu bạn không biết giấy phép mà theo đó một đoạn mã cụ thể đã được xuất bản, bạn phải cho rằng mình hoàn toàn không được phép sử dụng nó. Vì vậy, với tư cách là nhà xuất bản, bạn không cần phải cố gắng làm cho mọi người đọc giấy phép.
Michael Borgwardt

14

Không, bạn không phải đặt giấy phép vào mỗi tệp mã nguồn.

Nếu bạn nhìn kỹ hơn, hầu hết các ứng dụng phần mềm nguồn mở cũng không làm được điều đó. Họ đặt một tuyên bố bản quyền ở đầu mỗi tệp và một câu ngắn cho bạn biết tệp đang có giấy phép gì và bạn có thể tìm thấy toàn bộ văn bản của giấy phép ở đâu. Họ thường trỏ bạn đến tệp SAO CHÉP hoặc PHÉP THUẬT chứa toàn bộ văn bản của giấy phép và / hoặc đến một trang web có chứa toàn văn (trong trường hợp tệp SAO CHÉP không còn ở đó nữa).

Giống như Michael Borgwardt đã nói trong câu trả lời của mình, về mặt pháp lý, bạn không cần phải làm điều này. Nhưng nó được khuyến khích đối với mã nguồn mà bạn định phân phối vì mọi người có thể thấy ngay ai có bản quyền và giấy phép là gì.


1
Điều này. Thông báo bản quyền phải bao gồm tham chiếu đến tên giấy phép (nếu đó là giấy phép tiêu chuẩn) và mô tả cách tìm tệp giấy phép trong cây nguồn.
jmucchiello

13

Nó có thể phụ thuộc vào giấy phép. Các GPL phân biệt giữa preamblelicense . Nó tuyên bố rõ ràng rằng phần mở đầu (gây khó chịu) phải là một phần của mã :

Tôi có thể bỏ qua phần mở đầu của GPL hoặc hướng dẫn cách sử dụng nó trên các chương trình của riêng bạn để tiết kiệm dung lượng không?

Phần mở đầu và hướng dẫn là những phần không thể thiếu của GNU GPL và không được bỏ qua. Trên thực tế, GPL có bản quyền và giấy phép của nó chỉ cho phép sao chép nguyên văn toàn bộ GPL. (Bạn có thể sử dụng các điều khoản pháp lý để tạo một giấy phép khác nhưng nó sẽ không phải là GNU GPL.) (1)

Nguồn: 1) http://www.gnu.org/licenses/gpl-faq.html#GPLOmitPreamble

Xem thêm http://softwarefreedom.org/resources/2012/ManagingCopyrightInformation.html

Sách điện tử miễn phí từ ifrOSS giải thích và bình luận GPL 2 bằng tiếng Đức. Có một cái khác cho GPL 3

Để có câu trả lời có cơ sở, bạn nên yêu cầu một lời khuyên pháp lý không có trên sx. Nếu bạn không thể tìm được luật sư cho dự án (nguồn mở) của mình, hãy xem mạng lưới pháp lý của FSFE .


7
Lời mở đầu và hướng dẫn một phần của giấy phép đầy đủ , nhưng không có gì nói rằng bạn phải đưa giấy phép đầy đủ vào mọi tệp. [...] attach the following notices to the program.- những thông báo sau chỉ là một phần nhỏ của giấy phép đầy đủ. safest to attach them to the start of each source file- an toàn nhất nhưng không bắt buộc. each file should have at least the "copyright" line and a pointer to where the full notice is found. - yêu cầu duy nhất là dòng bản quyền với một con trỏ đến phần còn lại. Bạn có thể đặt toàn bộ giấy phép vào một tệp riêng biệt.
toxalot

3
Và tôi tranh luận rằng should ! = Phải .
toxalot

7

Tôi nghĩ lý do đằng sau việc đưa nó vào mỗi tệp là một lý do hợp pháp. Nếu thỏa thuận nằm trong mỗi tệp, sẽ không có khả năng ai đó tình cờ gặp một đoạn mã mà không bị lộ giấy phép.

Nó có thể không phải là một cái hay, nhưng tất cả các ông lớn đều sử dụng nó, vì vậy nếu nó chỉ là nỗi đau về thị giác, tôi sẽ tìm một lý do tốt hơn để không làm như vậy.

Nếu bạn đang sử dụng GPL, đây là vấn đề nhiều hơn, nhưng nếu bạn đang sử dụng giấy phép miền công cộng như BSD hoặc MIT, tôi không nghĩ bạn thực sự quan tâm đến những gì mọi người làm với mã. Tôi cho rằng nó phụ thuộc vào mức độ nghiêm ngặt của giấy phép của bạn.


1
Trong trường hợp đó, chỉ cần chỉ vào mỗi tệp rằng khi tiếp tục với nó, bạn đồng ý với giấy phép trong tệp Licence.txt. Nhưng đừng sao chép / dán cùng một văn bản trong mỗi tệp. Đôi khi tôi tìm thấy các tệp có mã ngắn hơn giấy phép.
Rook

Vâng, tôi đồng ý rằng nó hoạt động tốt theo cách đó, đặc biệt là đối với các giấy phép dài hạn. Mặc dù nó có thể không cần thiết về mặt pháp lý, hoặc thậm chí có thể được hỗ trợ trước tòa, nhưng việc tham chiếu đến giấy phép của bạn ít nhất là tốt nhất để thông báo cho mọi người mà họ không cần phải đi tìm kiếm giấy phép mã đang có.
Kekoa

3

IANAL,

Giả sử bạn đang nói về cấp phép, không phải EULA, bạn có thể đặt giấy phép ở bên ngoài. Điều này hầu như luôn được thực hiện với các giấy phép thực sự dài như GPL. Sẽ là ngớ ngẩn nếu đưa toàn bộ giấy phép GPL vào mọi hồ sơ. Thông thường, bạn sẽ chỉ có một số loại thông báo cho biết bạn có thể tìm thấy giấy phép thực tế ở đâu. Điều này là hoàn toàn hợp pháp. Tuy nhiên, với các giấy phép thực sự ngắn như BSD / Apache / MIT / bất cứ thứ gì, sẽ đơn giản hơn nếu bạn chỉ cần đưa giấy phép vào mọi tệp, vì thông báo cho biết nơi tìm giấy phép sẽ dài như chính giấy phép đó.


2

Nó phụ thuộc vào những gì giấy phép quy định. GPL, ví dụ, hướng dẫn bạn đặt một thông báo ngắn trong mọi tệp nguồn, bao gồm toàn bộ giấy phép ở đâu đó trong bản phân phối nguồn của bạn và cung cấp bản phân phối nguồn của bạn cho bất kỳ ai nhận được bản sao của bản phân phối nhị phân.

Nếu bạn không đồng ý với điều này và đó là mã CỦA BẠN, bạn có thể tự do chọn giấy phép hợp ý hơn hoặc tạo giấy phép của riêng bạn.


1

Nếu mã của bạn sẽ được biên dịch nên bạn chỉ đang phân phối một tệp nhị phân thì điều đó thực sự không thành vấn đề. Bởi vì khi bạn tạo một tệp nhị phân, các nhận xét sẽ bị loại bỏ trước khi quá trình biên dịch diễn ra. Nó chỉ quan trọng nếu bạn sẽ phân phối mã nguồn thực tế là mã nguồn mở hoặc mã nguồn đóng. Điều này điển hình quan trọng nếu bạn sẽ phân phối một ứng dụng bằng ngôn ngữ kịch bản không biên dịch.


Cảm ơn. Nó sẽ là mã nguồn mở.
Joan Venge

Bạn có thể tạo một chuỗi được mã hóa cứng để chứa giấy phép, vì vậy nó sẽ xuất hiện trên tệp nhị phân, nhưng có lẽ là quá nhiều :).
Liran Orevi

1

Bạn không cần nó cho giấy phép, một tệp bên ngoài duy nhất sẽ làm được miễn là nó bao gồm những tệp nào.

Tuy nhiên, đối với Bản quyền, bạn nên có thông báo bản quyền trên mỗi đoạn văn bản.


Cảm ơn, vì vậy bản quyền là khác nhau?
Joan Venge

INAL nhưng giấy phép là hợp đồng giữa bạn và người dùng / khách hàng. Bản quyền là sự khẳng định quyền sở hữu đối với một phần của tác phẩm bằng văn bản. Ai đó có thể lấy một đoạn mã của bạn và tuyên bố hợp lý rằng nó không phải là bản quyền vì thiếu thông báo. Đừng lo lắng mặc dù "Bản quyền Joe Soap (Cleansoft Inc.)" là tất cả những gì bạn cần.
James Anderson

10
Bạn đã sai về điều đó. Mặc dù thực sự tốt nếu bạn thực sự thêm thông báo bản quyền ở mọi nơi chỉ để rõ ràng, nhưng điều đó không làm cho trò chơi công bằng khi "cho rằng nó không có bản quyền" Bởi vì bạn biết MỌI THỨ đều có bản quyền. Khi ai đó lấy được mã nguồn, anh ta có thể tìm thấy một tuyên bố cấp phép cho phép anh ta sử dụng nó hoặc anh ta có thể phát hiện ra rằng nó nằm trong miền công cộng vì lý do này hay lý do khác. Nếu anh ta không, mặc dù nó có bản quyền và không thể sao chép. Bản quyền là một điều tự động và nó tốt để đề cập đến nó, nhưng không phải làm như vậy không có nghĩa là bạn đánh mất nó ...
Jasper

1

Những gì tôi làm là đặt một nhận xét hai dòng ở đầu tệp, nêu rõ tên công ty của tôi, ngày sửa đổi cuối cùng và tên của giấy phép mà tệp nguồn có, sau đó ở cuối tệp là một phiên bản ngắn của giấy phép.

Tất nhiên, giấy phép đầy đủ (tất cả chúng trong trường hợp có nhiều giấy phép) luôn được đính kèm trong tệp nguồn và thư mục phát hành.


3
làm thế nào để bạn tự động hóa ngày sửa đổi cuối cùng?
Dustin Getz
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.