查看原文
其他

不要让你的开源项目「裸奔」,一文了解开源证书...

机器之心 Java面试那些事儿 2020-10-08

选自:choosealicense

机器之心编译

没有开源证书,开源软件和代码就没有相应的保护,可是 MIT 证书、Apache 证书之类的有什么区别呢?这篇文章教你为自己的项目选择合适的证书。

 

在我们现在所处的这个被软件和数字化内容包围的时代,开源证书具有极其重要的价值和意义。但你知道如何为你的项目或工作选择合适的开源证书吗?choosealicense.com 就是为这一任务而生的,能辅助你找到最适合的开源证书。本文总结该网站上的部分内容,介绍了选取开源证书的方式以及部分证书的授权内容,最后还谈到了对于无证书的情况的应对方法。
 
开源证书可以保护贡献者和用户。企业和精明的开发者不会触碰没有这种保护的项目。


# 已有的项目和社区
 
如果你在为一个已有的项目做贡献或做扩展,最简单的方法就是继续使用该项目的证书。要查找这个证书,只需寻找一个名叫 LICENSE 或 COPYING 的文件,另外还要浏览一下 README。如果你无法找到证书,可以询问项目维护者。
 
不同的项目有不同的偏好。对于某些项目而言,使用原项目的证书不仅是因为这样做最简单,而且还是原项目证书规定的一项要求。参见某些证书的「同一证书(same license)」条款。

某些社区非常偏好特定的证书。如果你想要参与其中某个社区,即使当你决定发起一个新项目而且不依赖已有项目时,使用他们偏好的证书会更轻松一些。下面给出一些例子:
 
  • Apache 需要 Apache License 2.0 证书

  • Cloud Native Computing Foundation(云原生计算基金会)默认指定了 Apache License 2.0 证书

  • GNU 建议大多数程序使用 GNU GPLv3 证书

  • NPM 软件包大都使用 MIT 证书或非常相似的 ISC 证书

  • OpenBSD 更偏好 ISC 证书

  • Rust crates 大都使用了 MIT 和 Apache License 2.0 证书

  • WordPress 插件和主题必须使用 GNU GPLv2(或更新的)证书


社区有各种各样的类型和规模,而且多个社区之间还可能存在关联(如果你在某家公司工作,还要注意公司的法律要求)。上面给出的例子都是已经很完善的社区。如果你正在构建项目的社区还没有固定的证书传统,或者你并不认为你的项目属于某个特定的社区,也没有问题:你需要选择自己的开源证书。下面简单介绍几种开源证书。
 
# MIT 证书
 
这是一个简短的许可证,其条款中仅要求保留版权和许可声明。使用该证书的工作、修改和更大型的成果可能会以不同的条款进行分发,也可以不分发源代码。


# GNU 许可证 v3.0
 
GNU 许可证 v3.0 按不同强度 copyleft 许可权限分为三级,分别是最强的 GNU Affero General Public License v3.0(GNU AGPLv3)、GNU General Public License v3.0(GNU GPLv3)和 GNU Lesser General Public License v3.0(GNU LGPLv3)。
 
首先,我们先看看 copyleft 许可强度居中的 GNU GPLv3:这是一种强 copyleft 的许可证,其条件是提供使用该证书的工作和修改的完整源代码,这包括:使用了已有该证书的工作的更大型工作也要使用同一证书。版权和许可声明必须保留。贡献者需明确提供专利权授权。



对于 copyleft 强度更高的 GNU AGPLv3,其要求在使用经过修改的该许可授权的代码在网络上提供服务时,同时也必须公开该服务所用的修改版的完整源代码。
 
而对于 copyleft 强度更低的 GNU LGPLv3,其许可:当通过接口方式提供已有该许可证的软件时,更大型的工作可以基于不同的条款分发,也无需提供该更大型工作的源代码。
 
除此之外,软件项目常用的开源证书还有 Mozilla Public License 2.0、Apache License 2.0、Boost Software License 1.0、The Unlicense 等,它们都有各自不同的许可权限范围以及要求。

# 非软件证书
 
除了用于开源软件项目的证书之外,也有针对非软件工作的证书。当然,开源软件证书基本也都可以用于非软件的工作,而且也往往也是最好的选择,尤其是当证书许可的工作是可以编辑或制作不同的版本时(比如开源硬件设计)。下面介绍一些针对不同类型的非软件工作的证书:
 
数据、媒体内容等
 
CC0-1.0、CC-BY-4.0 、CC-BY-SA-4.0 是可用于从数据集到视频等非软件材料的开放证书。注意,CC-BY-4.0 和 CC-BY-SA-4.0 不应该用于软件。
 
文档
 
任何开源软件证书或用于媒体内容的开放证书都可用于软件文档。如果你为你的软件和文档使用不同的证书,一定要确保文档中给出的源代码示例是用软件证书授权的。
 
字体
 
SIL Open Font License 1.1 能够保证字体开放,但同时也让它们可以在其它工作中被自由地使用。
 
混合项目

如果你的项目包含软件和其它材料,你可以包含多个证书,只要你明确指定哪个证书适用于该项目的哪些部分。

# 不使用证书

当你在做一项创意工作(包括代码)时,该工作默认是有专属版本的。除非你使用一个证书明确说明许可权限,那么其他人都不能复制、分发或修改你的工作,因为这可能面临着被下架、索赔和起诉的风险。如果该工作还有其他贡献者(每个人都是一个版权所有者),那么就没人能用它了,包括你自己。

即使在缺少证书文件时,你也可能会授予一些权限,因为当你在某些网站上发布源代码时需要接受一些服务条款。举个例子,如果你在 GitHub 的一个公共库中发布你的源代码,那么你就接受了该网站的服务条款,也就是说你允许其他用户查看和分叉你的库。如果在特定情况中使用了版权限制和例外,那么其他人可能还需要你的许可。但是,不管是网站服务条款还是法律指定的版权限制,都不足以支持人们希望在公共代码托管方面所寻求的合作,比如开源证书所提供的那种实验、修改和共享授权。

不提供证书完全无需任何操作。但是,你也许需要在显眼的位置(比如 README)添加一个版权注意和声明,表明你不提供任何证书,这样用户就不会认为你忽视了这一点。如果你希望在你的无证书项目中接受其他人的贡献,你可能还需要和你的律师谈谈,添加一个贡献者声明,以便你能够维护来自贡献者的版权许可,即便你并不提供同样的权限。

你选择「无证书」的意图可能并不是禁止人们使用你的代码。有的开源证书允许人们在使用你的代码时维持你的版权。如果你的目标是完全抛弃版权限制,那么试试公共领域专用的证书:The Unlicense

用户该如何应对无证书的情况?

如果你发现某个软件没有证书,那么这通常意味着你无权使用、修改和共享该软件。尽管 GitHub 上的代码托管可能让你可以查看和分叉代码,但这并不意味着你有权以任何目的使用、修改和共享该软件。

你有如下选择:

  • 恳请维护者添加一个证书。除非该软件明确说明不允许使用,否则缺少证书多半是因为疏忽。如果该软件托管在 GitHub 这样的网站上,那么可以开一个问题,要求其提供一个证书。如果你胆子够大,而且你知道什么证书是最合适的,那么可以提出一个 pull 请求来添加证书。

  • 不要使用这个软件。寻找或创建有开源证书的替代软件。

  • 协商获取私人授权。叫上你的律师。


参考链接:
https://choosealicense.com/
https://github.com/github/choosealicense.com


热文推荐

写出一手烂代码的19条准则

推荐:一份不错的Java就业指导

谁告诉你Java不能做爬虫,我就用它爬取并下载了酷狗TOP500歌曲...


点我,查看更多精彩文章。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存