1 简介

1.1 概述

License就是版权许可证,开源协议规定了你在使用开源软件时的权利和责任,也就是规定了你可以做什么,不可以做什么。
开源协议虽然不一定具备法律效力,但是当涉及软件版权纠纷时,开源协议也是非常重要的证据之一。
世界上的开源许可证(Open Source License)有上百种,我们常用的开源软件协议大致有GPL、BSD、MIT、Mozilla、Apache和LGPL。

  • MIT、BSD 许可证都源自大学,具有简单、开放和包容的特点。
  • MIT、BSD、Apache 三者都支持闭源的后续开发。
  • GPL、LGPL 传染性开源,动了开源代码,都必须开源。

1.2 分析图

  • 乌克兰程序员Paul Bagwell画的分析图
    在这里插入图片描述
  • 阮一峰制作的中文版分析图
    在这里插入图片描述
  • Fengda Huang(phodal)绘制的分析图
    在这里插入图片描述
  • github–开源协议分析:https://choosealicense.com/
    在这里插入图片描述
  • Dan Bentley制作的分析图
    在这里插入图片描述

1.3 比较

许可证作者最新版本公布日期与使用不同许可证的代码链接在不同的许可证下重新发布
Zope公共许可证Zope基金会2.1?
Zlib授权???
XFree86 1.1版许可证???
XCore Open Source LicenseXMOS?February 2011
W3C Software Notice and License???
Sybase Open Watcom Public License???
Sun Public LicenseSun微系统??
Sun Industry Standards Source LicenseSun微系统??
QPLQt发展框架??
Python软件基金会许可证Python软件基金会2?
PHP许可证PHP开发团队3.01?
OpenSSL许可证OpenSSL项目???
Open Software LicenseLawrence Rosen3.02005
OPaC Free Public LicenseOPaC bright ideas?1998
Mozilla公共许可证Mozilla基金会2.02012年1月3日有限
MIT许可证麻省理工学院不适用[note 1]1988
LaTeX项目公共许可证LaTeX项目1.3c?
ISC许可证ISC?2003年6月
IBM公共许可证IBM1.01999年8月
Hacktivismo Enhanced-Source Software License AgreementHacktivismo
/死牛崇拜?2002年11月26日??
GNU通用公共许可证自由软件基金会3.02007年6月
GNU宽通用公共许可证自由软件基金会3.02007年6月
Fair Licence?不适用2004
Eiffel Forum LicenseNICE22002
Educational Community License?1.0?
Eclipse公共许可证Eclipse基金会1.0February 2004
Cryptix General LicenseCryptix基金会?1995
Common Public LicenseIBM1.02001年5月
Code Project Open LicenseThe Code Project1.02007
CeCILLCEA / CNRS
/ INRIA2.02005年5月21日
BSD许可证加州大学董事会??
Boost许可证Boost.org1.02003年8月17日
Berkeley Database License甲骨文公司?2008年2月7日
Apache许可证Apache软件基金会2.02004
Affero通用公共许可证自由软件基金会32007仅 AGPLv3 + GPLv3
Academic Free LicenseLawrence E. Rosen32002
英特尔开放源代码许可证英特尔??
艺术许可协议拉里·沃尔2.02000带有限制
网景公共许可证网景1.1?有限
通用开发与散布许可证Sun微系统1.02004年12月1日
苹果公共源代码许可证苹果公司2.02003年8月6日
欧洲联盟公共许可证欧洲联盟委员会1.12009年1月有明确的兼容性列表
公有领域不适用不适用不适用
许可证版本包含许可证包含源代码链接状态变化商业使用散布修改专利许可私人使用许可转售无担保责任没有商标
Apache许可证2.0
3句版BSD许可证
2句版BSD许可证
GNU通用公共许可证2.0
GNU通用公共许可证3.0
GNU宽通用公共许可证2.1
GNU宽通用公共许可证3.0
MIT许可证
Mozilla公共许可证2.0
Eclipse公共许可证1.0
Affero通用公共许可证
一般的著作权
[注 1]

2 常用的开源许可

2.1 MIT许可证

目前限制最少的开源许可协议之一(比 BSD 和 Apache 的限制都少),只要程序的开发者在修改后的源代码中保留原作者的许可信息即可,因此普遍被商业软件所使用。

使用 MIT 协议的软件有 PuTTY、X Window System、Ruby on Rails、Lua 5.0 onwards、Mono 等。

来源于大学,MIT 许可证是史上最为简洁和慷慨(permissive)的开源协议之一。作者只想保留版权,而无任何其他了限制。也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。

特点

  • 用户可以拿代码做任何想做的事情
  • 用户在项目副本中要包含版权声明和许可声明
  • 无需承担任何责任

应用

  • JQuery、Rails
  • PuTTY、X Window System、Ruby on Rails
  • Lua 5.0 onwards、Mono
  • Node.js

2.2 BSD许可证(original BSD license、FreeBSD license、Original BSD license)

在这里插入图片描述
BSD(Berkeley Software Distribution,伯克利软件发布版)协议来源于大学,BSD许可证与MIT差不多,也非常简单、慷慨。
BSD 对商业比较友好,很多公司在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些第三方的代码,甚至在必要的时候可以修改或者二次开发。

特点

BSD 协议基本上允许用户“为所欲为”,用户可以使用、修改和重新发布遵循该许可的软件,并且可以将软件作为商业软件发布和销售,前提是需要满足下面三个条件:

  • 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
  • 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
  • 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

应用

  • Ruby(2句版BSD和自定义许可证)

2.3 Apache Licence 2.0(Apache License, Version 2.0、Apache License, Version 1.1、Apache License, Version 1.0)

在这里插入图片描述
Apache 和 BSD 类似,都适用于商业软件。Apache 协议在为开发人员提供版权及专利许可的同时,允许用户拥有修改代码及再发布的自由。

特点

  • 该软件及其衍生品必须继续使用 Apache 许可协议。
  • 如果修改了程序源代码,需要在文档中进行声明。
  • 若软件是基于他人的源代码编写而成的,则需要保留原始代码的协议、商标、专利声明及其他原作者声明的内容信息。
  • 如果再发布的软件中有声明文件,则需在此文件中标注 Apache 许可协议及其他许可协议。

应用

  • 安卓(ASL v2.0,某些情况例外)
  • Spring Framework(ASL v2.0)
  • Hadoop
  • Apache HTTP Server
  • MongoDB
  • Apache 家族、SVN、NuGet 等等。

2.4 GNU GPL(GNU General Public License,GNU通用公共许可证)

在这里插入图片描述
来源自由软件联盟GNU,GPL/LGPL侧重于代码及衍生代码的开源与免费使用。

特点

特点说明
复制自由允许把软件复制到任何人的电脑中,并且不限制复制的数量。
传播自由允许软件以各种形式进行传播。
收费传播允许在各种媒介上出售该软件,但必须提前让买家知道这个软件是可以免费获得的;因此,一般来讲,开源软件都是通过为用户提供有偿服务的形式来盈利的。
修改自由允许开发人员增加或删除软件的功能,但软件修改后必须依然基于GPL许可协议授权。

由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,既必须也是开源和免费,这就是所谓的”传染性”。
对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

应用

  • Linux
  • GCC
  • MySQL(GPL+商业许可证)

2.5 LGPL许可证(GNU Lesser General Public License)

来源自由软件联盟GNU,可以翻译为更宽松的GPL协议,也属于传染性开源。LGPL 是 GPL 的一个衍生版本,也被称为 GPL V2,该协议主要是为类库设计的开源协议。Lesser表明比GPL更宽松。

版本历史

2.0版:LGPL原本被称为GNU Library General Public License,最初于1991年发布,为与GPLv2保持一致而采用2.0版的编号;
2.1版:在1999年经过修订后发布,与此同时,它被重命名为GNU Lesser General Public License,以显示自由软件基金会(Free Software Foundation)认为并不是所有程序库都应当采用该许可证的态度;
3.0版:在2007年发布,它以在GPL第3版之上附加应用一系列许可的方式表现。

特点

  • LGPL 允许商业软件通过类库引用(link)的方式使用 LGPL 类库,而不需要开源商业软件的代码。这使得采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售。
  • 但是如果修改 LGPL 协议的代码或者衍生品,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用 LGPL 协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以 LGPL 协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
  • GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。

应用

  • Qt
  • OpenOffice.org 3 (LGPL v3)

2.6 Mozilla(Mozilla Public License)

MPL开源协议由Mozilla基金会开发并维护。
该协议融合了BSD许可与GNU通用公共许可协议的特性,追求平衡专有软件和开源软件开发者之间的顾虑(平衡开发者对源代码的需求和他们利用源代码获得的利益)。

Mozilla允许使用者在自己已有的源代码库上加一个接口,除了对接Mozilla Public License开源库的接口程序源代码以MPL许可的形式对外许可外,源代码中的其他源码可以不用MPL许可证的方式强制对外许可。

特点

  • 版权约束较弱(受限于单个文件)
  • 项目作品适合商业用途。
  • 被许可方可以修改项目。
  • 被许可方必须提供引用说明。
  • 被许可方可以根据不同条款重新发布衍生作品
  • 被许可方不得重新许可MPL许可的资源
  • 被许可方必须将其衍生作品与MPL许可的源代码一起分发。

应用

  • 火狐浏览器
  • LibreOffice(MPL v2.0)
  • 2D图形引擎Cairo(MPL v1.1)

3 示例

3.1 Qt(LGPL v3协议下,不动源码,动态库使用,不用开源)

Qt公司宣布改变Qt跨平台应用开发框架的许可证授权。新版的Qt将在一个商业许可证、GPLv2、GPLv3和LGPLv3下授权,不再使用LGPLv2.1授权。Qt公司称,更新的开源许可证将能在用户使用开源版的Qt时确保用户自由,LGPLv3明确禁止封闭嵌入式设备分发LGPLv3授权的软件,在LGPLv3下分发的软件还向所有软件的接收者给予了专利许可。

  • 16年的图,如下显示了使用开源版本时各种Qt模块将提供的许可的细分。
    https://www.ics.com/blog/changes-qt-licensing
    在这里插入图片描述
  • 21年开源版与商业版对比
    在这里插入图片描述
    使用开源版本 Qt 需要使用动态库连接,不能修改代码,不能使用静态库。使用默认工具windeployqt生成的打包就行。

Qt 1,X源代码仍然是在相当严格的许可下发布的。
Qt 2,转向了QPL。
Qt 4.0,开始拥抱GPL v2,以消除基于GPL的应用程序和QPL之间的许可冲突。
在创建GPL v3的时候,Trolltech就参与了与自由软件基金会(FSF)的谈判,在FSF发布Qt之后,我们添加了这个许可作为一个可选的许可。
在2009年,诺基亚添加了LGPL v2.1作为Qt的授权选项。
从Qt 5.4开始,Qt 将在LGPL v2.1、LGPL v3和商业许可下发布,而新的附加模组将只在LGPL v3和商业许可证发布。
从Qt 5.7开始,大多数Qt模块(称为Qt Essentials)将在LGPLv3许可下提供,但不再在LGPLv2.1下提供。在此之前,Qt在两个LGPL版本(以及GPL)下都有提供,尽管有些模块只支持LGPLv3(大部分是自Qt 5.4以来最新版本中添加的新模块)。基本模块也将继续在GPLv2和商业许可下提供。

Qt 开源版不再支持LTS版本,商业版支持LTS版本,详见https://www.zhihu.com/question/368694292/answer/997013730

开源版本策略

使用 Qt 的动态库,并一起打包到项目里,但是要带上 Qt 的LICENSE 文件。

商业版本策略

参考

1、百科–开源协议
2、 阮一峰–如何选择开源许可证?
3、【开源协议】BSD、Apache2、GPL、LGPL、MIT
4、Fengda Huang(phodal)绘制的分析图
5、github–开源协议分析
6、C语言中文网–开源协议是什么?有哪些?如何选择?
7、wiki–自由及开放源代码软件许可证比较
8、Qt发布版权问题,是否需要公开源码?开源版与商业版的区别?
9、Adding LGPL v3 to Qt
10、qt-licensing

Logo

加入「COC·上海城市开发者社区」,成就更好的自己!

更多推荐