版权声明在开源代码中泛滥

还没有读者喜欢这个。
Copyright statements emerging in source code

Opensource.com

有一天,我在查看 OpenStack Ceilometer 文档的源文件时,注意到顶部有一个版权声明。现在,我绝不想挑尼古拉斯的毛病。在 OpenStack 文档和代码中,有数百个这样的版权声明,这只是我碰巧看到的例子。

(请注意,我的雇主在 OpenStack 代码中也有不少版权声明。几乎每个参与 OpenStack 的公司都这样做。我认为我们需要停止这样做。)

我给 OpenStack-docs 列表发送了一份通知,它引发了一系列评论。据我理解,人们被鼓励在贡献的源代码和文档中添加版权声明,并在他们修改的文件中添加版权行。

我认为这样做非常不好,原因如下:

  • 如果我编辑一个文件,并且文件顶部写着版权归 BigCo 所有,我会因为这意味着我侵犯了别人的权利而不敢编辑该文件。文件不应有任何迹象表明它们“归”任何个人或公司所有。(请参阅卡尔·弗格尔的这篇文章,了解更多关于“拥有”代码的信息。)这会积极地阻止人们参与进来并修复问题。
  • 如果有 N 个人为文件做出贡献,我们是否应该在文件中添加 N 个版权声明?这随着时间的推移是不可扩展的。想象一下这些文件 10 年后会变成什么样子,现在就解决这个问题。
  • 在文件中包含作者姓名会鼓励人们出于错误的原因做出贡献。
  • Git 会跟踪谁贡献了哪些更改。没有必要有明确的版权声明。

对我来说,这些原因中最有说服力的是第一个。任何阻止贡献,特别是来自初学者的贡献,都应尽可能避免。

我曾遇到有人在源代码中看到版权声明后问我,他们是否需要在提交补丁之前征得该人的许可。如果我们能避免哪怕有一个人提出这个问题,我们就为项目做了一件好事。

我也担心那些坚持在其贡献中加入版权声明的公司既不了解版权法,也不了解开源。一方面,Git 中的审计跟踪保护了您的贡献记录,从而保护了您的版权。另一方面,如果您的版权对您如此重要,那么您或许不应该将其贡献给开源项目。对一个项目说他们可以拥有您的贡献,但前提是您可以声明这是您的个人财产,这是反社区的。开源是关于社区和协作的。如果建筑物归社区所有,那么坚持认为某块砖是您的,您又能获得什么呢?

在 Apache 软件基金会,我们十年前就对此进行了辩论,并决定源代码中的作者标签是反社区的,因此不鼓励使用。引用当时评论区的一段话,特别是引用 Sander Striker 的话:

在 Apache 软件基金会,我们不鼓励在源代码中使用作者标签。除了法律影响外,还有各种原因。协作开发是关于作为一个团队处理项目,并作为一个团队关心项目。给予荣誉是好的,应该这样做,但方式不应允许虚假归属,即使是暗示性的。何时添加或删除作者标签没有明确的界限。当您更改注释时,您是否添加您的名字?当您进行单行修复时?当您重构代码并使其看起来 95% 不同时,您是否删除其他作者标签?对于那些到处接触每个文件,只做足够多的修改以达到虚拟作者标签配额,以便他们的名字无处不在的人,您该怎么办?

有更好的方法来给予荣誉,我们的偏好是使用这些方法。从技术角度来看,作者标签是不必要的;如果您想找出是谁编写了某段代码,可以查阅版本控制系统来找出答案。作者标签也容易过时。您真的希望因为您五年前编写的一段代码而被私下联系,而您很高兴已经忘记了它吗?

这是一个略有不同的问题(作者标签而不是版权声明),但表达的观点完全相同。当我更正文档中的语法或拼写错误时,我是否添加版权声明?当我添加一个段落或重新排列句子以使其更清晰时呢?在什么程度上,我会因为我已经更改了该文件的太多内容而删除您的版权声明?

然后,当然,您应该考虑更大的问题——您为什么要关心?您想防止什么?如果您想防止您的贡献被社区拿走并用于其他目的,那么贡献给 Apache 许可的代码库可能不是最明智的做法。

最初发布在 页边笔记 上。经许可转载。

标签
Rich Bowen
Rich 是 AWS 的开源倡导者。他是 Apache 软件基金会的董事、成员和会议副总裁。

12 条评论

也许源代码控制系统会跟踪这一点 - 但我是老派。我源代码文件中每一行更改都会进入更改日志:更改了什么,谁更改的以及何时更改的。当我挠头思考为什么某些代码会这样做 - 以及为什么这样做时,我发现它非常宝贵。在某些情况下,我认为“作者身份”是有价值的。正如您正确指出的那样:作者身份和版权之间存在差异。就我而言,我的项目中每一项更改都属于我 - 无论谁做的。如果您想完全拥有某个更改的作者身份,请 Fork 该项目。

“也许源代码控制系统会跟踪这一点 - 但我是老派。我源代码文件中每一行更改都会进入更改日志:更改了什么,谁更改的以及何时更改的。”

那不是老派,那简直是*糟糕*。SCM 的存在是为了让您不必做那些事情。去查看一个 git 代码库并运行 'git blame' - 您看起来会像人们一直在传播的那些动画 GIF...

不,那不是糟糕,那是纪律。当您看到一些程序员在 CVS、SVN 或 GIT 中输入的内容时,他们完全缺乏纪律,因为他们认为 SCM “会处理好这一切”。好吧,它不会 - 只有在有纪律的情况下才会。更重要的是,更改日志将始终与源代码一起保留(当然,当它不是手动删除的时候)。GIT 是否以清晰的方式与代码保持一致还有待观察。您是否也认为 Doxygen 会自动创建适当的文档?

git 永远都知道是谁提交了什么。它不可能*不知道*这一点。

“为什么”需要您编写好的提交消息,但那是纪律的适当级别/目的。跟踪谁将什么更改为什么不是富有成效的工作,如果可以将它外包给工具,您应该这样做。

您真的玩过一下午的 git 吗?它真的是自切片面包以来最好的东西。

我真正想要的是给 git log 提供一些参数,除了文件路径之外,还有一个行号范围,然后它将显示此代码块的历史记录。

我可以执行“grep <函数名> <源文件>”,它就是这样做的。请注意,日期和开发人员姓名大约占 16 个字符。对于 SCM 来说,这节省的幅度相当小 - 这不是我使用它的原因。SCM 比仅仅“记账”还有其他巨大的优势。

您的意思是您希望 git log 有一个快捷方式来运行 <u>git blame -L$start,$end -- $path</u> 吗?您的手动更改日志能否与 git blame 功能相匹配,使用正则表达式作为 $start/$end 而不是字面行号?当代码从一个文件移动到另一个文件时,您能多么容易地跟踪代码,可能在首次编写代码和现在的位置之间多次移动?Git blame 会自动为完整文件重命名执行此操作,并且可以通过使用 -C 和 -M 来要求它为更细粒度的块执行此操作。

开源不是公共领域。开源应用程序是受版权保护的 - 或者更确切地说,是受 Copyleft 保护的。如果删除了版权声明,代码将成为公共领域。公共领域几乎与开源 [或 Copyleft] 代码相反。任何人都可以随时随地,无需参考、尊重甚至点头,即可将公共领域代码合并到任何类型的项目中,无论是专有的、开源的还是其他的。对于 Copyleft 声明(例如 GPL),代码的作者并没有将代码给您,让您随意处置。这被很多人严重误解了...

抱歉,但这条评论几乎完全是错误的。除非您恰好身处未签署伯尔尼公约的国家/地区,否则作品的版权有效绝对不需要署名版权所有权。未经署名不会变成公共领域,并且假设未经署名的作品属于公共领域是完全错误的。

此外,虽然说开源许可文件不在公共领域是正确的,因为公共领域文件已放弃(或已过期)其版权,但它们与开源许可作品完全兼容。

理解公共领域相当困难(并且在世界许多地方,由于精神权利,可能不是一个有效的选择),因此我们拥有像 Creative Commons Zero 这样的许可证。

您没有看到版权评论的真正含义。正如 Fossman 所说,版权不仅仅是关于作者身份,而是关于保护您的代码并能够保护您附加到它的自由。

软件自由法律中心有一份出版物讨论了文件范围的版权声明与集中式版权声明:http://www.softwarefreedom.org/resources/2012/ManagingCopyrightInformation.html

我认为,拥有每个文件的许可证归属比每个文件的版权所有者和日期更有价值。通常情况下,删除前者的努力也会删除(或禁止)后者,当该代码迁移到其他项目时,会让每个人都感到困惑。

我完全同意您的观点。
这种做法往往与 XP 规则(http://www.jamesshore.com/Agile-Book/collective_code_ownership.html)中描述的集体代码所有权背道而驰。

感谢您鼓励开源协作。

© . All rights reserved.