大部分程序员都不了解,各种LICENSE开源许可证的区别

1,379 阅读5分钟

前言

大家好,我是haibin。以前在创建github仓库的时候在License这一项要么选择MIT许可证,要么选择Apache许可证。压根不知道它们到底有啥区别,只是单纯的知道这两种开源许可证比较常用。

当我这一次再来创建github仓库的时候,还是一脸懵逼样😲
感慨之余😤还是决定来好好研究下这里各种开源许可证的功能到底有啥区别,以及我们到底怎么来选择?

有哪些类型的开源许可证?

image.png

创建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

需要关注的点有哪些?

在研究协议之前,我们应该先罗列出协议能提供哪些我们想要关注的信息,或者说我们需要关注的点有哪些?

关注点可以大致分为三大类:

  • 权限 - 源码可以怎么被使用
  1. 商业用途: 可材料和衍生品可用于商业目的。
  2. 分发: 许可材料可以分发。
  3. 修改: 许可材料可能会被修改。
  4. 专利使用: 许可明确授予贡献者的专利权。
  5. 私人使用: 许可材料可以私下使用和修改。
  • 条件 - 使用必须遵守的条件
  1. 披露来源: 分发许可材料时必须提供来源。
  2. 许可和版权声明: 许可和版权声明的副本必须包含在许可材料中。
  3. 网络使用即分发: 通过网络与许可材料交互的用户有权获得源代码的副本。
  4. 使用类似许可证: 分发时必须使用类似或相关的许可证。
  5. 内容变化记录: 必须记录对许可材料所做的更改。
  • 限制 - 不承担的风险
  1. 不负任何责任: 许可包括责任限制。
  2. 不授予商标权: 许可明确声明它不授予商标权。
  3. 不提供任何保证: 许可明确声明它不提供任何保证。

各类许可证的权限对比

协议商业用途分发修改专利使用私人使用
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)提供的图来帮助我们进行选择: image.png

协议简述
Apache允许他人修改源代码后再闭源,但是必须对每个修改过的文件做版权说明
GPL3无论以何种方式修改或者使用代码,都需要开源
MIT允许他人修改源代码后再闭源,不用对修改过的文件做说明,且二次开发的软件可以使用原作者的名字做营销
BSD2/BSD3和上面一条类似,但未经事先书面许可,不得使用版权所有者的姓名或其贡献者的姓名来推广
BSL和GPL类似,但不需要复制版权信息
CCZ放弃创作的作品版权权益,并将其奉献给大众,不对代码做任何担保
EPL与GPL类似,有权使用、修改、复制与发布软件原始版本和修改后版本,但在某些情况下则必须将修改内容一并释出
AGPLGPL拓展,使用在线网络服务的也需要开源
GPL2和GPL3相比,如果使用代码作为服务提供,而不分发软件,则不需要开源
LGPL和GPL相比,LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码
Mozilla与LGPL类似,但是需要对修改过的源码内容做说明
Unlicense与CCZ相似,且开放商标和所用的专利授权