Bạn có phải bao gồm một thông báo giấy phép với mỗi tệp nguồn không?


111

Tôi đã tìm kiếm các giấy phép khác nhau mà tôi có thể sử dụng cho một dự án nguồn mở của tôi, nhưng tất cả các dự án mà tôi đã thấy, với tất cả các loại giấy phép, dường như có một thứ khổng lồ, đáng ghét (theo ý kiến ​​của tôi) thông báo trong mỗi tệp nguồn nói rằng tệp được liệt kê theo một giấy phép nhất định. Tôi không nghĩ rằng tôi đã tìm thấy một dự án nguồn duy nhất không thuộc phạm vi công cộng mà không có thông báo như thế.

Điều này chỉ có vẻ như lãng phí thời gian và không gian tập tin. Tôi dự định đặt @license@authorgắn thẻ vào các dự án của mình, nhưng tôi không hiểu tại sao tôi cần liệt kê một thông báo khổng lồ như vậy trong mỗi tệp riêng lẻ nếu tôi không muốn đặt mã của mình thành miền công khai.

Có bất kỳ lý do tại sao tôi muốn bao gồm một thông báo như vậy trong các dự án của tôi, hoặc chỉ đơn giản là bao gồm một thông báo trong READMEvà một @licensethẻ là đủ tốt? Điều này có ảnh hưởng đến quy tắc "được nêu rõ" của hầu hết các giấy phép hay chỉ là quá mức cần thiết để mọi người không tranh luận?


10
Trình chỉnh sửa của bạn sẽ cho phép bạn gấp / ẩn giấy phép thành 1 dòng.
Pubby

1
Trên thực tế, nếu ai đó luyện mã của bạn, đổi tên một biến và xóa bản quyền, liệu tòa án có xem xét 2 tệp này giống hệt nhau không?
NoChance

5
@Emmad: Không, một tòa án sẽ không nói họ giống hệt nhau. (Nhưng chúng có thể "về cơ bản giống hệt nhau".) Vâng, một tòa án sẽ nói đó là vi phạm bản quyền.
Andrew Dalke


Câu trả lời:


39

Theo hiểu biết của tôi, GPLv3 khuyến nghị mạnh mẽ (hoặc thậm chí có thể yêu cầu, ít nhất là cách tôi hiểu văn bản Cách áp dụng các Điều khoản này cho các Chương trình mới của bạn , sau phần 17) thông báo bản quyền trong mọi tệp nguồn. Nó nói rằng

Để làm như vậy, đính kèm các thông báo sau vào chương trình. An toàn nhất là gắn chúng vào đầu mỗi tệp nguồn để nêu rõ nhất việc loại trừ bảo hành; và mỗi tệp nên có ít nhất dòng Dòng bản quyền và một con trỏ tới nơi tìm thấy thông báo đầy đủ.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year>  <name of author>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

Và các dự án GNU thuộc sở hữu của FSF, như GCC, có một thông báo như vậy trong mọi tệp.

Tôi cũng biết về một chương trình (hệ thống CAIA của J.Pitrat) đã bị từ chối trên một trang web cộng đồng phần mềm miễn phí vì nó không có thông báo như vậy trong mỗi tệp.

Tôi không phải là luật sư , nhưng tôi tin rằng thông báo như vậy thực tế là bắt buộc trong mọi tệp nguồn của chương trình GPLv3 .

(nếu bạn sử dụng giấy phép khác, đặc biệt là giấy phép không phải là FSF, hãy đọc kỹ về cách áp dụng; YMMV; tuy nhiên AFAIK viết thông báo trong mỗi tệp sẽ không gây hại.)


16
Không thể bắt buộc vì có các hệ thống, như hình ảnh Smalltalk, không thể hiện mã nguồn dưới dạng tệp. Họ nói "an toàn nhất" và "nên", chứ không phải "phải". Những gì họ đề xuất là một hướng dẫn dễ hiểu với rất ít khả năng ai đó mắc lỗi, nhưng nó chắc chắn không phải là "thực tế bắt buộc".
Andrew Dalke

Tôi đồng ý và tôi đã nói "tập tin nguồn" có chủ đích. Trên thực tế, hệ thống của CAIA hơi giống với Smalltalk: hình ảnh nằm trong các tệp dữ liệu và "tệp nguồn" CAIA mà tôi đã đề cập là các tệp C được tạo. Tuy nhiên, GCC MELT của tôi (một nhánh của GCC, thuộc bản quyền của FSF) cũng được lập trình meta và tôi rất cẩn thận để tạo nhận xét thông báo bản quyền trong các tệp C được tạo (và tôi đặt chúng vào mã C & MELT viết tay).
Basile Starynkevitch

Điểm lấy. Bây giờ tôi biết một đoạn về MELT. Nói chung, tốt nhất là các tệp được tạo bao gồm thông báo bản quyền vì rất khó để "đính kèm" giấy phép. Ví dụ: "yacc" và "lex" bị hạn chế trong những gì họ có thể làm.
Andrew Dalke

1
Từ kinh nghiệm cá nhân: để có một dự án được chấp nhận trên Savannah, bạn phải có giấy phép trong mỗi tệp.
Mael

1
Chỉ cần làm rõ, theo GPL FAQ, #LicenseCopyOnly#NoticeInSourceFile tại thời điểm viết bài này, nó không yêu cầu phải bao gồm việc Làm thế nào để Áp dụng ... văn bản cho tất cả các tập tin nguồn; chú ý ngôn ngữ sử dụng "nên" và không "phải". Tuy nhiên, họ mạnh mẽ khuyên bạn nên theo thói quen này.
ZeroKnight

37

Tôi đã thấy nhiều dự án chỉ đề cập đến giấy phép trong README hoặc trong tệp LICENSE hoặc SAO CHÉP.

Phần mềm của bạn được tự động bảo vệ theo bản quyền, theo thỏa thuận trong luật pháp quốc tế. (Trừ khi bạn đang làm việc cho chính phủ Hoa Kỳ hoặc một số tổ chức khác không áp dụng bản quyền.)

Nếu ai đó sử dụng phần mềm của bạn thì họ phải đảm bảo tuân theo thỏa thuận cấp phép hoặc tuân theo các hạn chế sử dụng hợp lý đối với những gì họ có thể làm.

Giả sử rằng người đó muốn sử dụng một trong các tệp trong phân phối mã của bạn, tất nhiên cần phải có bản sao và do đó luật bản quyền được áp dụng. Theo mặc định, họ KHÔNG có quyền sử dụng phần mềm của bạn theo luật bản quyền. Chỉ khi họ biết và tuân theo các giới hạn giấy phép thì họ mới được phép sử dụng nó.

Vì vậy, nếu họ sử dụng một tệp mà không có giấy phép phần mềm thì họ đang vi phạm luật bản quyền. Vì tất cả các giấy phép đều có nội dung như "Thông báo bản quyền ở trên và thông báo cấp phép này sẽ được bao gồm trong tất cả các bản sao hoặc các phần quan trọng của Phần mềm", nên họ có nghĩa vụ phải đặt giấy phép đó ở đâu đó.

Đó có thể là trong chính tệp hoặc khi tôi sử dụng mã làm thư viện, tôi đặt các phần có liên quan vào thư mục riêng của mình và thêm "README" hoặc "LICENSE" vào thư mục con đó.

Nói tóm lại, bạn không cần phải đặt giấy phép trong mỗi tệp. Tôi nghĩ đó là quá mức cần thiết. Không có sự bảo vệ pháp lý bổ sung trong việc làm như vậy. Nó giúp người dùng xuôi dòng phần nào, nhưng không nhiều.

Tôi nghĩ rằng truyền thống của rất nhiều siêu dữ liệu dựa trên nhận xét (giấy phép, ngày tạo của từng chức năng, thay đổi, v.v.) là những truyền thống rất cũ tồn tại bởi vì chúng dễ làm và là một lá bùa hơn là hữu dụng.

Ví dụ, mẫu Eclipse mặc định bổ sung những gì tôi nghĩ là siêu dữ liệu vô dụng trước mỗi chức năng, mà tôi nghĩ là được kiểm soát phiên bản tốt hơn nhiều. Nhưng thực tế đó là phổ biến ở nhiều cửa hàng.


2
Ví dụ: tôi không thấy bất cứ điều gì liên quan đến cấp phép trong các tệp nguồn Rails cả.
Anton Barkovsky

3
Và trong số 200 tệp trong thư viện chuẩn Python cấp cao nhất, chỉ có 34 tệp chứa từ "bản quyền" và chỉ có 4 tệp dành cho Python Software Foundation, nơi kiểm soát bản quyền đối với Python.
Andrew Dalke

vâng, tôi không nghĩ rằng các thông báo bản quyền trên mỗi tệp sẽ kéo dài ... nó chỉ là quá nhiều .. nó không thể là cách của tương lai .. nghĩ DRY ... GIẤY PHÉP cấp độ gốc, và hãy gọi nó là một ngày .. tôi nghĩ rằng hầu hết mọi thứ trên npm đã được thực hiện theo cách này
ChaseMoskal

13

Vấn đề là rất dễ dàng để tổng hợp một tệp mã nguồn duy nhất từ ​​dự án lớn hơn của nó, chẳng hạn như ai đó chỉ kiểm tra, gửi email, tải xuống một tệp, mà không có phần còn lại chứa bản quyền đầy đủ. Và sau đó, tệp đó có thể được chuyển qua quảng cáo theo thời gian, cho các bên thứ N, những người có thể không biết gì về nguồn gốc của tệp.

Thông báo bản quyền ở trên cùng nhắc nhở bất kỳ ai chạy qua tệp đơn độc đó rằng thực tế nó có bản quyền, không phải miền công cộng và do đó, một số giấy phép có thể hoặc không thể tham gia vào việc phân phối hoặc sử dụng. Versus cho phép người tìm thấy giả định ngẫu nhiên của riêng họ.


21
Không phải là dễ dàng tổng hợp thông qua sao chép-dán các đoạn khác nhau của một tệp nguồn sao? Sau đó thì sao? Lập luận này có vẻ không phù hợp với tôi.
Travis Griggs

10
Giả sử miền công cộng cho một tác phẩm mà không có thông báo bản quyền là vấn đề. Nếu bạn gặp một tệp mà không có thông báo bản quyền, thì bạn không nên sao chép nó và gửi nó cho người khác.
Giàu Remer

tất nhiên sau đó có vấn đề là hợp pháp khi "sao chép và sở hữu" một tệp, chúng tôi đã trực tiếp đưa nguồn mở vào repo dự án của chúng tôi vì đôi khi rất khó để sửa một lỗi bên ngoài dự án ngược dòng, nhưng bạn không thể chờ đợi họ để phát hành một trong hai. Không nói rằng đây là một ý tưởng tốt, nhưng chúng tôi đã thực hiện nó.
xenoterracide

8

Không có cuộc họp siêu cường bí mật nào trong một hầm ngầm nói rằng bạn phải đặt nó trong mỗi tệp nguồn.

Nó cho người dùng thấy rõ rằng tệp này thuộc bất kỳ giấy phép nào và trên thực tế, hầu hết các phần mềm GPL đều có phần mở đầu ngắn để đọc License.txt. Hãy nhớ rằng các dự án được chia ra và các tệp được sử dụng lại để chỉ đưa thông điệp vào một tệp có thể không phải là một ý tưởng hay.

Nếu trong trường hợp không thể xảy ra, nó có thể ra tòa bạn có thể yêu cầu bồi thường nhiều hơn nếu bạn đã đánh dấu rõ ràng từng tệp là công việc của bạn và giấy phép đó thuộc về ai - thì không ai có thể tuyên bố rằng họ nghĩ rằng tệp prticular này không được bảo hiểm


6

Tôi gần như đã đăng một câu hỏi tương tự đáng chú ý. Ít về những phiền toái và nhiều hơn về kỹ thuật. TL; DR: Tôi tin rằng câu trả lời là vấn đề ưu tiên của tác giả. Có lẽ ý định sẽ chính xác hơn các ưu tiên ...

Tôi tin rằng việc tham khảo giấy phép trong nguồn của bạn là ổn, tùy thuộc vào định nghĩa của bạn về "được". Hãy đồng ý rằng thuật ngữ "không đồng hành" chỉ ra một tệp nguồn là một phần của dự án đã bị tách ra một cách tàn nhẫn khỏi cơ sở mã yêu thương của nó. Tệp đã nói chứa một dòng như thế này:

# This file is covered by the LICENSING file in the root of this project.

Hoặc một dòng mát hơn nhiều như thế này:

* @license OMGBBQ <http://goodlics.com/bbq>

"Nhưng đợi đã!" , bạn thốt lên, "bạn vừa nói rằng tập tin đã được tách ra khỏi dự án của nó! Và goodlics.com chuyển hướng đến một người ngồi xổm tên miền! Hãy dừng việc trixy!" Bạn đã đúng, tôi đã nói như vậy, nhưng điều đó thể ổn, và ngừng la hét với tôi. Đây là lý do không phải là một luật sư của tôi:

  • Hầu như mọi quốc gia đã đồng ý với [cảm nhận] Công ước Berne, mà AFAIK có nghĩa là nếu bạn tạo ra một cái gì đó, bạn có bản quyền về nó, theo thời gian. Bạn không cần một dòng (c) hoặc bất kỳ thứ nhảm nhí nào như vậy, nhưng những thứ đó (cộng với một VCS bên thứ ba như GitHub) sẽ giúp bạn dễ dàng chứng minh rằng bạn đã tạo ra nó và khi bạn tạo ra nó.
  • Do đó, nếu bạn đăng một số mã 1337 ngon ngọt trực tuyến mà bạn đã tạo, bạn có bản quyền về nó. Không ai được phép (hợp pháp) sao chép nó. Thật hiếm, và gây sốc, tôi biết, nhưng đôi khi tôi đã nghe nói rằng mọi người vi phạm pháp luật. Điều đó vẫn có thể.
  • nyancat-bcminer-algo.qbasicTập tin tuyệt vời mà bạn đã viết và đăng trên LiveJournal là, tin hay không, không phải miền công cộng. Không, trừ khi bạn nói đó là miền công cộng. Theo mặc định, nó là của riêng bạn và của bạn. Đó là ... Quý giá . (Ít nhất trong 25-50 + năm, trừ khi bạn là Disney.)
  • Mọi người thường truyền đạt ý định này (thực hiện một số hoặc tất cả các quyền không phải của riêng bạn và của bạn) thông qua các cam kết, nhưng bạn cần thông báo ý định đó; đó là chọn không tham gia (HAHA NHẬN CNTT? chọn tham gia từ chối bản quyền của bạn? TUYỆT VỜI). Lấy vé của bạn ra, chúng tôi gần như ở đó!
  • Nếu không sao thì các tệp không được đề cập ở trên là miền riêng - nghĩa là không thể sao chép về mặt pháp lý, thì sử dụng tham chiếu có khả năng bị hỏng là hoàn toàn tốt. Tuy nhiên, nếu nó không ổn , thì tôi nghĩ bạn cần bao gồm văn bản giấy phép trong mỗi tệp nguồn. Bằng cách đó, các tệp không có người đi kèm vẫn chắc chắn được cấp phép theo cách bạn ưu tiên - dự định . Vâng, điều đó tốt hơn.

Lý do này làm cho hai giả định sử thi và có thể không hợp lệ:

  • Tham chiếu giấy phép "bị hỏng" rơi vào hành vi mặc định (có bản quyền), có thể không phải là một giả định hợp lệ.
  • Trang web mà bạn đã đăng trên không có một số chính sách đăng bài (như StackExchange) khiến mọi thứ trở thành miền công cộng.

Cảm ơn bạn đã cưỡi đường thở khỉ.

Tuyên bố miễn trừ trách nhiệm: Điều này có vẻ hợp lý với tôi với tôi chắc chắn 90% rằng tôi sai 100%.


6

Có một sự khác biệt giữa giấy phéplời mở đầu .

Trong một số dự án của tôi, tôi đang sử dụng Giấy phép Công cộng GNU, Phiên bản 3.0 . GNU GPL làm cho cần có một lời mở đầu trên mọi tệp mã nguồn:

Lời mở đầu và hướng dẫn là các phần không thể thiếu của GPL GNU và không được bỏ qua.

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

Vì vậy, đây là những gì tôi làm:

1. Thêm License.txt

Để tuân theo các quy tắc, tôi đặt LICENSE.txt vào thư mục gốc của kho lưu trữ của dự án. Điều này cũng được đề xuất bởi GitHub (xem " Giấy phép sống ở đâu" ).

2. Thêm lời mở đầu bằng cách sử dụng tự động gấp

Tiếp theo tôi bao gồm phần mở đầu GPL trên đầu mỗi tệp mã nguồn NHƯNG để làm cho nó hầu như không làm phiền tôi ẩn nó trong IDE. Hầu hết các IDE đều có tính năng tự động gập các khối mã. NetBeans có hỗ trợ cho Mã gấp tùy chỉnh và WebStorm cũng hỗ trợ nhận xét gấp .

Vì vậy, đây là cách nó trông như thế nào:

//<editor-fold desc="Preamble">
/*
 * Company Name
 * Copyright (C) 2016 Company Name
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * ...
 */
//</editor-fold>

console.log('Here is my licensed JavaScript code.');

Tôi nghĩ rằng đây là một sự thỏa hiệp rất tốt giữa sự thoải mái và an ninh pháp lý.

Nếu bạn có nhiều dự án cần thêm giấy phép, thì http://www.addalicense.com/ có thể giúp ích.

Xin lưu ý: Lời khuyên của tôi đề cập đến GPLv3. Các loại giấy phép khác có thể không yêu cầu một lời mở đầu.


7
«GNU GPL làm cho cần phải có một lời mở đầu trên mọi tệp mã nguồn:» Không. Phần bạn trích dẫn chỉ ngăn bạn xóa phần mở đầu khỏi LICENSEtệp, tức là bạn không thể thay đổi văn bản của GPL bằng cách loại bỏ nó.
Andrea Lazzarotto

6

Có một cách thực tế khác chưa được đề cập ở đây.

SPDX-License-Identifiernhãn. https://spdx.org/USE-spdx

Sử dụng nó, "bản tóm tắt hợp pháp" của bạn trong mọi tiêu đề tệp nguồn giảm xuống chỉ còn hai dòng:

/* SPDX-License-Identifier: (GPLv3-or-later AND LGPL-2.0-only) WITH bison-exception */
/* Copyright © 1234 Project Author */

Hơn nữa, những người tự động hóa các phân tích chuỗi cung ứng phần mềm sẽ rất biết ơn vì bạn đã tuân thủ một tiêu chuẩn chung về mô tả giấy phép có thể đọc được bằng máy.

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.