平时查阅 Github 的时候,发现上面好多代码都有开源协议申明,如 MIT、BSD、Apache 等,甚至有些博客都有版权申明,所以最近专门了解了一下开源许可证(Open Source License),结果发现通过OSI(Open Source Initiative)批准的许可证(Licenses by Name)就有接近一百个,如此多的许可证让人眼花缭乱,如何才能选择一个适合自己项目的呢?

本文主要参考其他人的博客成文,对那些博客中的信息做了一个整理总结,方便自己学习,希望对以后的学习者有帮助。

文章主要分开源许可证非软件类许可证两大方面,它们本质上都属于开放内容许可证Open Content License),具体章节如下:

开源许可证

An open-source license is a type of license for computer software and other products that allows the source code, blueprint or design to be used, modified and/or shared under defined terms and conditions.

虽然OSI批准的许可证有接近一百个,但是比较流行的并不多,大概只有五六个,如MIT、BSD、Apache、GPL、LGPL、Mozilla等,所以下面主要介绍这几个协议。

MIT

MIT许可协议之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称“X许可协议”(X License)或“X11许可协议”(X11 License)。

MIT是限制最少的开源许可证!

特点:

  • 可以任意使用、拷贝和修改代码
  • 可以用于商业软件
  • 修改后的代码或者发行包包含原作者的许可信息
  • 使用此协议的项目:jQuery, .NET Core, Rails, Node.js

BSD(Berkeley Software Distribution License)

特点:

  • 可以任意使用、拷贝和修改代码
  • 可以用于商业软件
  • 修改后的代码需包含原代码中的 BSD 许可证
  • 未获书面许可,不可以用开源代码的作者/机构名字和原来产品的名字做市场推广
  • 使用此协议的项目:nginx, Redis

Apache License

特点:

  • 允许使用者修改和重新发布代码(以其他协议形式),允许闭源商业发布和销售
  • 一次授权,永久使用
  • 一国授权,在其他国家也适用
  • 授权不能撤回
  • 使用者需要给代码的用户一份 Apache Lience
  • 如果你修改了代码,需要在被修改的文件中说明
  • 如果再发布的产品中包含了 Notice 文件,则需要在 Notice 文件中带有 Apache Lience
  • 使用此协议的项目:Android, Apache, Swift

GPL(GNU General Public License)

特点:

  • 可以任意使用、拷贝和修改代码
  • 具有“传染性”,只要在一个软件中使用(“使用”指类库引用或者修改后的代码) GPL 协议的产品,则该软件产品必须也采用 GPL 协议,既必须也是开源和免费的
  • 不适合商业软件
  • 使用此协议的项目:Bash, Linux, Git, WordPress

LGPL(GNU Library or “Lesser” General Public License)

由于 GPL 太严格,所有的使用者都必须免费和开源,基于此原因产生了 LGPL。

特点:

  • 允许商业软件通过类库引用(link)方式使用 LGPL 类库而不需要开源商业软件的代码
  • 如果要修改原始组件的代码,则涉及修改部分的代码和基于原来代码衍生的代码都必须采用 LGPL 协议
  • 不适合以 LGPL 协议为基础的代码进行二次开发的商业软件
  • 使用此协议的项目:JBoss, Hibernate, Qt

References

如何选择合适的开源许可证

一图胜千言

俗话说一图胜千言,网上已经有很多流程图来说这个事情,比较清晰的有下面两张:

【图1】: 来自阮一峰老师的博客 如何选择开源许可证?

【图2】: 来自乌克兰程序员 Paul Miller 开源许可协议分析图

【图2】 对应的中文版可查看 陈皓的博客【酷客-COOLSHELL】 狗日的开源软件许可证

Github 官方说明

为了帮助大家为自己的代码选择合适的许可证,Github 专门提供了一个网站来举例说明,对应的中英文链接如下:

网址首页推荐了 MIT、Apache、GPL 三个许可证,并做了简单说明,列出了部分用该许可证的项目,方便大家参考,用户也可进入协议详情页面详细了解每个协议的权利和约束,网址展示很漂亮,如 MIT 许可证说明

总结

  • 若只要求署名,则可选择 MIT、BSD 许可证
  • 若对专利有一定要求,则可选择 Apache 许可证
  • 若想促进代码分享,强制使用者开源、免费,则选择 GPL 许可证
  • 若想促进源码分享,但对类库使用放松限制,则可考虑 LGPL

References

为代码添加开源许可证

以 Github 仓库为例,为 GitHub 仓库添加许可证有两种方式:

  • 创建仓库的同时选择一个许可证,Github 可自动为其创建相关许可证文件
  • 手动创建名为 LICENSE 的文件,并将对应许可证的内容写入该文件,然后将该文件放入仓库根目录即可

为 Github 仓库添加 MIT 许可证

由于我的 Github 仓库 evolution 已经存在,所以只能采用第二种方法,添加 MIT 许可证文件之后的仓库如下图所示:仓库中包含 LICENSE 文件,并且 Github 会识别其中的内容,并在仓库右上角显示出协议名称。

MIT 许可证头部说明

关于 MIT 许可证头部 Copyright (c) [year] [fullname] 中 year、fullname 的含义和填写说明,可参考 What should be written in MIT license (year, full name)?

[year] is the year copyright was applied. If you apply the copyright (which happens automatically when you write the work) in 2015, put in 2015. Some people like to put in a range of years (i.e. 2015-2020) - this isn’t necessary.
[fullname] is the full name of the entity that owns the copyright.

非软件类许可证

除过软件许可证之外,还有 非软件类协议,用于多媒体、文章等内容,其中最常用的就是 知识共享许可证(The Creative Commons Licenses,也称为CC协议)。

知识共享许可证

CC协议为作者提供了四种权利,分别是:

  • 署名(Attribution,简写为BY):必须提到原作者
  • 非商业用途(Noncommercial,简写为NC):不得用于盈利性目的
  • 禁止演绎(No Derivative Works,简写为ND):不得修改原作品
  • 相同方式共享(Share Alike,简写为SA):如果允许修改原作品,那么必须使用相同的许可证发布

上述四种权利的具体含义可参考 许可协议说明-知识共享中国大陆 一文,文章使用具体的场景对其进行说明,简单明了。

对上述权利任意组合可以产生16种权利组合,但去除其中的无效(或没意义)组合,最终只留下了6种组合,绝大多数创作共用许可证都属于这6种组合之一,分别如下表格所示:

协议名称 中文名称 协议图示
CC BY 署名 CC BY
CC BY-SA 署名-相同方式共享 CC BY-SA
CC BY-ND 署名-禁止演绎 CC BY-ND
CC BY-NC 署名-非商业性使用 CC BY-NC
CC BY-NC-SA 署名-非商业性使用-相同方式共享 CC BY-NC-SA
CC BY-NC-ND 署名-非商业性使用-禁止演绎 CC BY-NC-ND

为我的博客添加协议声明

作者可根据自己的意愿选择上述6种协议中的一种用到自己的作品上。

对于本博客而言,我个人倾向于选择 CC BY-NC-SA 4.0 协议,具体的版权声明如下:

本博客所有内容均采用创作共用 [署名-非商业性使用-相同方式共享 4.0 (CC BY-NC-SA 4.0)] 许可证授权。如要查看许可证全文,请访问如下网址 CC BY-NC-SA 4.0

References