在我的项目中添加开源许可证是否适用于整个项目修订历史记录?

时间:2010-01-06 23:04:30

标签: version-control open-source licensing dvcs

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

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

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

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

    我问,因为谷歌代码允许您在新项目上选择许可证,即使您打算以后导入存储库,使得许可似乎在实际源代码之外,而bitbucket.org则不然。

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

我不是律师,但据我所知,代码或网上任何形式的内容都不会真正成为公共领域。

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

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

因此,在将其置于联机状态之前,您应该使用创建一个新的repo 许可证信息。

答案 3 :(得分:0)

您为什么要公开源历史记录?对您的方案最简单的解决方案是简单地复制代码并创建一个全新的存储库,然后将此新存储库与开源许可证一起发布。在没有许可证的情况下拉出当前正在网上闲逛的来源,你就是金色的。旧的源和新的源是完全分开的,不应该有任何问题。如果某人有旧源的副本,你可能无法做任何事情来阻止他们用它做任何他们想做的事情,但是你已经为今后的一切做了一个干净的事。从您的新仓库(带有许可证的仓库)撤出的任何东西都将由该许可证承保。

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

答案 4 :(得分:0)

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