【问题标题】:Will adding an open source license to my project apply to the entire project revision history? [closed]向我的项目添加开源许可证是否适用于整个项目修订历史? [关闭]
【发布时间】:2010-01-06 23:04:29
【问题描述】:

假设我拥有一些没有许可证信息的开源项目。此外,假设没有人公开贡献过,所以我拥有该项目的源代码和版权。

  1. 假设源代码已经在线托管。如果我决定通过将相关的 COPYING 文档上传到存储库并相应地调整源文件来授予它开源许可证,那么该项目的先前版本是否也会获得许可?或者当前和未来的版本是否会受到保护,而以前的版本属于公共领域?

  2. 或者,假设我在本地计算机上使用 DVCS(例如 Mercurial)开始了一个新项目。我提交所有更改(本地),然后在以后的更改集中添加许可证信息。如果我要托管项目/存储库,是否会许可整个历史记录或仅许可该变更集之后的版本?

在 (2) 中,项目最初没有托管,因此这似乎不是问题。但是一旦上传,一些项目的历史记录将不包含许可证信息,使得结果看起来几乎与 (1) 完全一样。

我之所以问是因为 Google 代码允许您在新项目中选择许可证,即使您打算在之后导入存储库,这使得许可证看起来在实际源代码之外,而 bitbucket.org 却没有。

【问题讨论】:

  • 我投票结束这个问题,因为它是关于许可和法律问题,而不是编程或软件开发。 See here 了解详情,help center 了解更多信息。
  • @Pang 哦。行。嗯,这也是一个涉及源代码控制的问题,它不像“许可”那么普遍。

标签: version-control open-source licensing dvcs


【解决方案1】:

如果您希望许可证适用于整个历史记录,只需在许可证文件中说明,例如“此文件是在修订版 x 中添加的,但您可能认为许可证也适用于 x 之前的所有修订版'。

您可以将其视为声明其涵盖内容的许可证... legalbol 是代码,如果您愿意,可以明确范围。

【讨论】:

  • 这是有道理的。但这提出了另一个问题:当不包含该文件的较早版本被分叉/克隆时会发生什么,该分叉是否仍属于许可范围?也许通过要求开发人员从以后的版本中复制许可证..?
  • 我认为您必须向律师提出这个问题。鉴于我对版权法的了解,我预计它会属于该范围,但您永远不会知道法律问题。
【解决方案2】:

只要您不使用任何 GPL 库,那么您对代码的处理取决于您自己。你可以说你的代码是追溯 GPL,或者你可以说什么版本是 GPL,什么版本是 BSD,什么版本是 Apache 许可证。你甚至可以提供双重许可:使用 GPL 或支付 100 美元让我使用 BSD(有点像 Qt 人在决定提供 LGPL 之前所做的)。

现在,如果您使用的是 GPL 许可库,那么您的代码已经是 GPL。

【讨论】:

  • 关于使用 GPL 许可库的要点。
  • 我的理解是,如果您拥有源代码的版权,那么您可以根据许可条件等方面将其许可给其他人以供自己使用。您是对的,GPL作为 copyleft 许可证的条件是,如果您使用 GPL 库,则还必须使用 GPL。我对法律对项目存储历史的规定更加好奇,尤其是 Mercurial 风格。
【解决方案3】:

我不是律师,但据我所知,在网络上公开的代码或任何形式的内容并不能真正使其成为公共领域。

关于许可证的时间安排:如果您将许可证附加到版本 100 中的代码,这只会影响版本 100 和未来的变更集,直到您再次更改该许可证。否则,例如,您可以在之后将代码从开源中恢复。

据我了解,您在签出某些代码(具有给定修订版)时获得的许可证是适用于该项目修订版的许可证。 IMO 这也是使从一些 OSI 许可证到使用开源代码的封闭项目的分叉成为可能的原因。

因此,您可能应该创建一个新的存储库, 将许可信息放在适当的位置,然后再将其上线。

【讨论】:

  • +1 "...应该[原文如此] 在将其上线之前创建一个包含许可证信息的新存储库。"
  • 我同意你的观点,因为对修订版进行分叉/克隆将继承许可证,并且不同许可证下的未来版本不应影响这一点。我同意“......在将其上线之前”。但是,当您在本地拥有一个项目并希望通过许可证发布它(包括其历史,例如 Mercurial+bitbucket)时,应该有一种直接的方式来声明“我的所有工作 [到目前为止] 都属于此许可证。”
【解决方案4】:

为什么要公开源历史记录?您的方案最简单的解决方案是简单地复制您的代码并创建一个全新的存储库,然后将这个新存储库与开源许可证一起发布到某个地方。拉出当前在没有许可证的情况下在网上闲逛的源,你就是金子。旧源和新源是完全分开的,应该没有任何问题。如果有人拥有旧源的副本,您可能无法阻止他们对它做任何他们想做的事情,但您已经为接下来的一切准备好了一张白纸。从您的新存储库(具有许可证的存储库)中提取的任何内容都将受到该许可证的保护。

我假设您是当前在线托管的源代码的作者。如果您没有,那么您还有其他问题需要解决,即您是否有权为他人的源代码指定许可 - 可能没有。

【讨论】:

  • 问题是重新创建整个存储库以简单地在“第一次修订”中添加一个文件(COPYING 文档)是很乏味的。您将需要恢复到每个修订版,复制到新存储库,放入新文件,并使用相同的消息/标签/分支/等提交来执行此操作。可能有类似的工具。但是在本地存储库尚未发布并且您拥有代码的情况下,最好只在整个存储库状态上声明许可证。问题是假设性的,代码是我的,位于本地 Mercurial 存储库中。
【解决方案5】:

如果您使用 LGPL(或 Apache 或 Berkeley-Licensed)代码,则最好使用 GPL 代码,这要求所有基于此代码编写的代码都必须作为开源发布。 请参阅http://www.google.com/help/faq_codesearch.html#license,但您可能会从此来源获得有关 Google 代码的更好信息。

【讨论】:

  • 您好,感谢您的回答。虽然在这个问题中,我更好奇如何发布一个项目,声明它及其源代码的每个修订版都具有一定的许可证,而不是我应该使用哪个许可证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多