我一直在寻找可用于我的开源项目的各种许可证,但是我所见过的所有带有各种许可证的项目似乎都有一个庞大,令人讨厌的(我认为)请注意,每个源文件中都指出该文件已在某个许可证下列出。我不认为我找到了不是公共领域的单个源项目,并且没有这样的通知。

这似乎是在浪费时间和文件空间。我计划在项目中放入@license@author标签,但是如果我不想将代码公开域,我不明白为什么需要在每个文件中列出如此巨大的通知。

我是否有任何理由要在项目中包含这样的通知,或者仅在README@license标签中包含一个通知就足够了?这是否会影响大多数许可证的“明文规定”的规则,还是只是过分杀伤,以至于人们不会争辩?

评论

编辑器应允许您将许可证折叠/隐藏为1行。

实际上,如果有人窃取了您的代码,重命名了一个变量并删除了版权,法院是否会认为这两个文件完全相同?

@埃玛德:不,法院不会说它们是相同的。 (但是它们可能“基本相同”。)是的,法院会说这是侵犯版权的行为。

相关:softwareengineering.stackexchange.com/a/19653/94635

另外:opensource.stackexchange.com/a/322/7022

#1 楼

我见过许多项目在README或LICENSE或COPYING文件中仅提及许可证。

您的软件自动受到国际法同意的版权保护。 (除非您在不适用版权的美国政府或其他组织工作。)

如果有人使用您的软件,则他们必须确保遵守许可协议或遵循合理使用限制他们可以做什么。

假设该人想要使用您的代码分发中的一个文件,这当然需要复制,因此适用版权法。默认情况下,根据版权法,他们无权使用您的软件。只有在他们知道并遵守许可限制后,他们才可以使用该文件。

因此,如果他们使用没有软件许可证的文件,那就违反了版权法。由于所有许可都说类似“以上版权声明和本许可声明应包含在软件的所有副本或重要部分中”,因此它们有义务将该许可放置在某处。

在文件本身中,或者当我将代码用作库时,我将相关部分放入其自己的目录中,并在该子目录中添加了“ README”或“ LICENSE”。

简而言之,无需将许可证放在每个文件中。我认为这太过分了。这样做没有额外的法律保护。它确实对下游用户有所帮助,但并没有太大帮助。

我认为许多基于注释的元数据的传统(许可,每个函数的创建日期,变更日志等)是非常古老的传统。之所以存在它们,是因为它们很容易实现,并且比起有用的保护符更多。

例如,默认的Eclipse模板在每个函数之前添加了我认为是无用的元数据,我认为它可以更好地捕获通过版本控制。但是这种做法在许多商店中很常见。

评论


例如,我完全看不到Rails源文件中与许可相关的任何内容。

–安东·巴尔科夫斯基
2011-12-18 18:49

在顶级Python标准库中的200个文件中,只有34个包含单词“ copyright”,而其中只有4个用于控制Python版权的Python Software Foundation。

–安德鲁·达尔克(Andrew Dalke)
2011-12-18 18:58

是的,我不认为按文件的版权声明会持续下去...太多了..这根本不可能成为未来的方式..考虑一下DRY ...根级别的许可,让我们称它为一天..我认为npm上的几乎所有内容都已经采用这种方式

–ChaseMoskal
19年5月12日在8:23



#2 楼

根据我的理解,GPLv3在每个源文件中强烈建议(甚至可能至少要求我理解如何将文本如何应用于新程序中的文本)版权声明。它说

为此,请在程序上附加以下声明。
将它们附加到每个源文件的开头以最有效地声明保修是最安全的;并且每个文件至少应具有
“ copyright”行以及指向完整通知所在的指针。

<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/>.

还有FSF拥有的GNU项目,例如GCC在每个文件中都有这样的通知。
我也知道一个程序(J.Pitrat的CAIA系统)在自由软件社区网站上被拒绝,因为在每个文件中都没有这样的通知。 >我不是律师,但我认为这样的通知实际上对于GPLv3程序的每个源文件都是强制性的。
对于生成某些(或大部分)源文件的软件项目,这个问题变得更加有趣。例如RefPerSys。
(如果您使用其他许可证,尤其是非FSF许可证,请仔细阅读如何使用它; YMMV;但是AFAIK在每个文件中写入通知不会造成损害。)

评论


这不是强制性的,因为某些系统(例如Smalltalk图像)不会将源代码表示为文件。他们说“最安全”和“应该”,而不是“必须”。他们推荐的是容易理解的准则,很少有人犯错,但这绝对不是“实际上是强制性的”。

–安德鲁·达尔克(Andrew Dalke)
2011-12-18 18:33

我同意,并且我故意说了“源文件”。实际上,CAIA的系统有点像Smalltalk:图像位于数据文件中,而我提到的CAIA“源文件”是生成的C文件。但是,我的GCC MELT(属于FCC版权的GCC分支机构)也是经过元编程的,并且我确实注意在生成的C文件中生成版权声明注释(并将它们放入手写的C&MELT代码中)。

–Basile Starynkevitch
2011-12-18 18:36

点了。我现在知道一段有关MELT的内容。通常,最好将生成的文件包含版权声明,因为否则很难“附加”许可证。例如,“ yacc”和“ lex”的作用受到限制。

–安德鲁·达尔克(Andrew Dalke)
2011-12-18 18:57



根据个人经验:要在Savannah上接受项目,您必须在每个文件中都有一个许可证。

–麦尔
17年4月4日13:00

根据GPL常见问题解答,在本文撰写之际,只是为了澄清#LicenseCopyOnly和#NoticeInSourceFile,不需要在每个源文件中包含“如何应用...”文本;注意该语言使用“应该”而不是“必须”。但是,他们强烈建议您遵循此做法。

–零骑士
19年7月13日在8:29



#3 楼

这里还没有提到另一种实用的方法。

SPDX-License-Identifier标签。 https://spdx.org/ids

使用它,您在每个源文件头中的“合法样板”都减少到仅两行:
/* SPDX-License-Identifier: (GPL-3.0-or-later AND LGPL-2.0-only) WITH bison-exception */
/* Copyright © 1234 Project Author */

使软件供应自动化的人们链分析将感谢您坚持使用机器可读许可证描述的通用标准。

#4 楼

问题在于,很容易将单个源代码文件从其较大的项目中分解出来,例如仅签出,通过电子邮件发送,下载一个文件的人,而没有包含完整版权的人。然后,该文件可以按时间顺序无限次传递给可能不知道文件来源的第N个参与者。

顶部的版权声明提醒所有在该单独文件中运行的人它实际上是受版权保护的,而不是公共领域的,因此某些许可证可能会或可能不会涉及其分发或使用。与让发现者自己做出随机假设相对。

评论


通过复制粘贴源文件的各个片段来分解汇总不是很容易吗?然后怎样呢?这种说法对我来说似乎前后矛盾。

–特拉维斯·格里格斯(Travis Griggs)
2015年2月19日在23:59

问题是假定作品的公共领域没有版权声明。如果遇到没有版权声明的文件,则不应复制该文件并将其发送给其他人。

– Rich Remer
17年3月22日在22:51

当然,存在一个问题是“克隆并拥有”文件是合法的,我们将开源直接放入了我们的项目仓库中,因为有时很难在上游项目之外修复错误,但是您迫不及待他们释放。并不是说这是一个好主意,但是我们已经做到了。

– xenoterracide
17年6月12日在13:53

如果我获得的源文件没有任何版权和/或许可说明,则唯一安全的假设是该文件已由我不认识的人拥有版权,并且如果我违反版权法可以起诉我,并且我没有任何许可这使我可以做版权法不允许我做的任何事情。

– gnasher729
20/12/31在14:24

您假设大多数人都做出了“安全的假设”。我的猜测是错误的。实际上,很少有人阅读有关此发布代码的所有详细信息(在此站点上)。

– hotpaw2
20/12/31在16:40



#5 楼

地下掩体中没有秘密的超级大国会议,没有说您必须在每个源文件中放置什么。该软件包含一个简短的前言,说要阅读license.txt。请记住,项目会被拆分,文件会被重用,因此仅将消息放在一个文件中可能不是一个好主意。

如果在极少数情况下,它曾被提起诉讼,您可能会有更多主张清楚地将每个文件标记为您的工作以及其使用的许可证-然后没有人可以声称他们认为该特殊文件未被保护

#6 楼

我几乎贴出了一个非常相似的问题。更少的烦恼,更多的是技术。 TL; DR:我相信答案是作者的优先事项。也许意图会比优先顺序更准确...

我相信可以在您的来源中引用许可证,这取决于您对“确定”的定义。让我们同意,术语“无人陪伴”表示源文件是属于项目的一部分,该项目已从其喜爱的代码库中进行了无情的分离。所述文件包含这样的一行:

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


或更酷的一行是这样的:

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


“但是,等一下!”,您惊叫道,“您只是说该文件已从项目中分离出来!而且goodlics.com重定向到域名抢注者!别再麻烦了!”你是对的,我确实是这么说的,但这可能没关系,不要再对我大吼大叫了。这是我的非律师推理:


几乎每个国家都同意[感觉]伯尔尼公约,AFAIK的意思是,如果您创造某些东西,那么您就拥有版权,期间。您不需要(c)行或类似的废话,但是这些东西(加上诸如GitHub之类的第三方VCS)确实使您更容易证明创建它以及创建它的时间。
因此,如果您在线发布了一些创建的多汁的1337代码,则该内容具有版权。不允许任何人(合法)复制它。我知道这种情况很少见,而且令人震惊,但我听说人们有时会触犯法律。仍然有可能。
无论您相信与否,您在LiveJournal上撰写并发布的nyancat-bcminer-algo.qbasic文件都是公共领域。除非您说这是公共领域,否则不行。默认情况下,它是您的和您自己的。真是的(除非您是迪士尼,否则至少25至50年以上。)
人们通常会通过许可来传达此意图(单独获得某些或所有权利,而不是您本人和您自己),但是您需要宣布该意图;选择退出(HAHA GET IT?选择退出您的版权?真棒)。拿出您的票,我们就快到了! 。但是,如果这样做不行,那么我认为您需要在每个源文件中包括许可证文本。这样,无伴奏文件仍然可以按照您的预定意图获得许可。是的,这样更好。

这种推理提出了两个史诗性且可能无效的假设: ,这可能不是一个有效的假设。
您发布的网站没有某种发布政策(例如StackExchange),该政策将所有内容都设为公共域。 -大脑气道。

免责声明:对我来说,这很合逻辑,因为我90%确信自己100%错误。

#7 楼

许可证和序言之间有区别。

在我的某些项目中,我使用的是GNU通用公共许可证,版本3.0。 GNU GPL使得必须在每个源代码文件上都有一个序言:


该序言和指令是GNU GPL的组成部分,不能省略。


来源:http://www.gnu.org/licenses/gpl-faq.html#GPLOmitPreamble

所以这是我的工作:

1。添加License.txt

要遵循规则,我将LICENSE.txt放在项目存储库的根目录中。 GitHub也建议这样做(请参阅“许可证在哪里存放”)。

2。使用自动折叠添加序言

接下来,我将GPL序言包含在每个源代码文件BUT的顶部,以使其几乎不会打扰我将其隐藏在IDE中。大多数IDE具有自动折叠代码块的功能。 NetBeans支持自定义代码折叠,而WebStorm也支持折叠注释。

所以它是这样的:

//<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.');


我认为这是

如果在很多项目中需要添加许可证,那么http://www.addalicense.com/可能会有所帮助。 br />
请注意:我的建议涉及GPLv3。其他许可证类型可能不需要序言。

评论


«GNU GPL使得必须在每个源代码文件上都有一个序言:»并非如此。您引用的部分只是阻止您从LICENSE文件中删除序言,即您无法通过删除GPL来更改其文本。

– Andrea Lazzarotto
16-10-25在18:05