前言
大家好,我是haibin。以前在创建github仓库的时候在License这一项要么选择MIT许可证,要么选择Apache许可证。压根不知道它们到底有啥区别,只是单纯的知道这两种开源许可证比较常用。
当我这一次再来创建github仓库的时候,还是一脸懵逼样😲
感慨之余😤还是决定来好好研究下这里各种开源许可证的功能到底有啥区别,以及我们到底怎么来选择?
有哪些类型的开源许可证?
创建git项目时已经开门见山地告诉你License文件的功能:
A license tells others what they can and can't do with your code.
许可证告诉其他人他们可以用您的代码做什么和不能做什么。
我们这里来罗列一下它给的选项
- Apache License 2.0
- MIT License
- GNU General Public License v2.0
- GNU General Public License v3.0
- GNU Affero General Public License v3.0
- GNU Lesser General Public License v2.1
- BSD 2-Clause "Simplified" License
- BSD 3-Clause "New" or "Revised" License
- Boost Software License 1.0
- Creative Commons Zero v1.0 Universal
- Eclipse Public License 2.0
- Mozilla Public License 2.0
- The Unlicense
需要关注的点有哪些?
在研究协议之前,我们应该先罗列出协议能提供哪些我们想要关注的信息,或者说我们需要关注的点有哪些?
关注点可以大致分为三大类:
- 权限 - 源码可以怎么被使用
- 商业用途: 可材料和衍生品可用于商业目的。
- 分发: 许可材料可以分发。
- 修改: 许可材料可能会被修改。
- 专利使用: 许可明确授予贡献者的专利权。
- 私人使用: 许可材料可以私下使用和修改。
- 条件 - 使用必须遵守的条件
- 披露来源: 分发许可材料时必须提供来源。
- 许可和版权声明: 许可和版权声明的副本必须包含在许可材料中。
- 网络使用即分发: 通过网络与许可材料交互的用户有权获得源代码的副本。
- 使用类似许可证: 分发时必须使用类似或相关的许可证。
- 内容变化记录: 必须记录对许可材料所做的更改。
- 限制 - 不承担的风险
- 不负任何责任: 许可包括责任限制。
- 不授予商标权: 许可明确声明它不授予商标权。
- 不提供任何保证: 许可明确声明它不提供任何保证。
各类许可证的权限对比
协议 | 商业用途 | 分发 | 修改 | 专利使用 | 私人使用 |
---|---|---|---|---|---|
Apache License 2.0 | ✔ | ✔ | ✔ | ✔ | ✔ |
MIT License | ✔ | ✔ | ✔ | ✔ | |
GNU General Public License v2.0 | ✔ | ✔ | ✔ | ✔ | |
GNU General Public License v3.0 | ✔ | ✔ | ✔ | ✔ | ✔ |
GNU Affero General Public License v3.0 | ✔ | ✔ | ✔ | ✔ | ✔ |
GNU Lesser General Public License v2.1 | ✔ | ✔ | ✔ | ✔ | |
BSD 2-Clause "Simplified" License | ✔ | ✔ | ✔ | ✔ | |
BSD 3-Clause "New" or "Revised" License | ✔ | ✔ | ✔ | ✔ | |
Boost Software License 1.0 | ✔ | ✔ | ✔ | ✔ | |
Creative Commons Zero v1.0 Universal | ✔ | ✔ | ✔ | ✔ | |
Eclipse Public License 2.0 | ✔ | ✔ | ✔ | ✔ | ✔ |
Mozilla Public License 2.0 | ✔ | ✔ | ✔ | ✔ | ✔ |
The Unlicense | ✔ | ✔ | ✔ | ✔ |
这里可以看出所有许可证都提供除了专利使用以外的权限,我们只需关注这一个关注点即可。
各类许可证的条件对比
协议 | 披露来源 | 许可和版权声明 | 网络使用即分发 | 使用类似许可证 | 内容变化记录 |
---|---|---|---|---|---|
Apache License 2.0 | ✔ | ✔ | |||
MIT License | ✔ | ||||
GNU General Public License v2.0 | ✔ | ✔ | ✔ | ✔ | |
GNU General Public License v3.0 | ✔ | ✔ | ✔ | ✔ | |
GNU Affero General Public License v3.0 | ✔ | ✔ | ✔ | ✔ | ✔ |
GNU Lesser General Public License v2.1 | ✔ | ✔ | ✔ | ✔ | |
BSD 2-Clause "Simplified" License | ✔ | ||||
BSD 3-Clause "New" or "Revised" License | ✔ | ||||
Boost Software License 1.0 | ✔ | ||||
Creative Commons Zero v1.0 Universal | |||||
Eclipse Public License 2.0 | ✔ | ✔ | ✔ | ||
Mozilla Public License 2.0 | ✔ | ✔ | ✔ | ||
The Unlicense |
使用条件这里则是五花八门,我们可以根据自身的需求来挑选。
例如MIT License只需保留许可和版权声明即可,而Apache License 2.0则还需内容变化记录这一项。
各类许可证的限制对比
协议 | 不负任何责任 | 不授予商标权 | 不提供任何保证 |
---|---|---|---|
Apache License 2.0 | ✔ | ✔ | ✔ |
MIT License | ✔ | ✔ | |
GNU General Public License v2.0 | ✔ | ✔ | |
GNU General Public License v3.0 | ✔ | ✔ | |
GNU Affero General Public License v3.0 | ✔ | ✔ | |
GNU Lesser General Public License v2.1 | ✔ | ✔ | |
BSD 2-Clause "Simplified" License | ✔ | ✔ | |
BSD 3-Clause "New" or "Revised" License | ✔ | ✔ | |
Boost Software License 1.0 | ✔ | ✔ | |
Creative Commons Zero v1.0 Universal | ✔ | ✔ | ✔ |
Eclipse Public License 2.0 | ✔ | ✔ | |
Mozilla Public License 2.0 | ✔ | ✔ | ✔ |
The Unlicense | ✔ | ✔ |
哈哈,不出意料不负任何责任、不提供任何保证这两项所有协议都声明了,唯有不授予商标权这一项部分声明了。
总结
这里可以根据一名乌克兰程序员(Paul Bagwell)提供的图来帮助我们进行选择:
协议 | 简述 |
---|---|
Apache | 允许他人修改源代码后再闭源,但是必须对每个修改过的文件做版权说明 |
GPL3 | 无论以何种方式修改或者使用代码,都需要开源 |
MIT | 允许他人修改源代码后再闭源,不用对修改过的文件做说明,且二次开发的软件可以使用原作者的名字做营销 |
BSD2/BSD3 | 和上面一条类似,但未经事先书面许可,不得使用版权所有者的姓名或其贡献者的姓名来推广 |
BSL | 和GPL类似,但不需要复制版权信息 |
CCZ | 放弃创作的作品版权权益,并将其奉献给大众,不对代码做任何担保 |
EPL | 与GPL类似,有权使用、修改、复制与发布软件原始版本和修改后版本,但在某些情况下则必须将修改内容一并释出 |
AGPL | GPL拓展,使用在线网络服务的也需要开源 |
GPL2 | 和GPL3相比,如果使用代码作为服务提供,而不分发软件,则不需要开源 |
LGPL | 和GPL相比,LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码 |
Mozilla | 与LGPL类似,但是需要对修改过的源码内容做说明 |
Unlicense | 与CCZ相似,且开放商标和所用的专利授权 |