Qt License分析、开源版与商业版的区别
一、Qt License 分析
1.1 LGPL V2 与 LGPL V3
GPLv3 协议中讨论最为广泛的新要求,即要求在"用户产品"中提供 GPLv3 代码的"安装信息”。
提供"安装信息"要求旨在保护用户权利,让用户可以修改其所购买和使用的产品中嵌入的 GPLv3 代码,并运行修改后的版本。
如果没有此条款,则"锁定"设备以阻止法定持有人修改软件便会损害 GPL 许可证作者希望用户拥有的自由权利。如果所有嵌入式设备都执行此类锁定,则如美国最高法院曾经说过的一样,GPL 所保证的自由权就会变成"空头支票”。
"用户产品"指"消费品",即通常用于个人、家庭或日常使用的有形个人财产,任何为了安装到住所而设计或销售的产品。
“用户产品"在通过永久转让所有权或控制权,或者基于固定期限出借或出租时,产品中 GPL 程序的非源码形式副本便已向用户发布。向用户提供对应源码时应随附足够的技术信息,方法、过程、授权密匙,或安装和执行用户产品中的修改版 GPL 软件所需的其他信息。这些信息必须足以保证修改后的目标码不会仅因遭到修改而无法继续执行,除非设备中采用了技术措施来阻止修改版本的安装和执行,否则此要求无关紧要。
因此从 2007 年以来的经验可以看出,如果生产厂商想要锁定其产品,则应避免使用 GPLv3软件。(注:锁定产品的意思,就是禁止用户可以修改软件)
1.2 LGPL 开发闭源程序
LGPL 协议是一个商业友好的协议,使用 LGPL 开发闭源程序,有以下两种情况:
- 使用动态链接的形式,那么可以以任何形式发布你的应用程序,商业的、非商业的、开源的、非开源的。
- 因某种原因必须静态链接一个基于 LGPL 协议发布的库,那么,你有义务进行下面的工作
- 你必须在你的文档中说明,你的程序中使用了 LGPL 库,并且说明这个库是基于 LGPL 发布的
- 你必须在你的应用程序发布中包含一份 LGPL 协议,通常就是那个文本文件
- 你必须开放使用了 LGPL 库代码的所有代码,例如某些封装器。但是,其他使用这些封装器的代码就不需要开放了
- 你必须包含你的应用程序的余下部分的目标文件(通常就是我们所说的 .o 等等),或者是其他等价的文件。源代码并不是必须的
但是对于嵌入式来说,如果生产厂商想要锁定其产品,不允许用户修改,则应避免使用 LGPLv3 协议发布的软件。
1.3 Qt 的 License 变化历程
Qt 2 后源码授权许可证开始使用GPL,Qt 4.0 发布时它拥抱了 GPLv2,2009年收购 Trolltech 诺基亚为 Qt 加入了 LGPLv2.1,LGPLv2.1 存在漏洞,没有澄清使用修改库的问题,这个漏洞被企业广泛利用开发锁定的设备,开发者认为,使用 LGPLv2.1 授权的修改版 Qt 去创建锁定设备伤害了 Qt 的生态系统。
因为设备不对第三方公开,对生态系统没有任何贡献。LGPLv2.1 没有保护用户的自由,自由软件基金会的 LGPLv3 解决了这个问题。LGPLv3 开源许可证将能在用户使用开源版的 Qt 时确保用户自由,LGPLv3 明确禁止封闭嵌入式设备分发 LGPLv3 授权的软件。
从 5.4 开始 Qt 将采用 LGPL v2.1、LGPL v3 和商业许可证授权,而新的附加模组将只在 LGPL v3 和商业许可证发布。在 Qt 4.0 到 Qt 5.3 的版本使用 LGPLv2.1,并且随着版本的更新越来越多的模块不再使用 LGPLv2.1。
Qt License 更改的官方新闻:https://www.qt.io/blog/2014/08/20/adding-lgpl-v3-to-qt
二、Qt 开源版与商业版的区别
2.1 桌面端
对于桌面应用,不管是 Window,还是 Linux 上的桌面应用,只要不用静态编译别修改 Qt 源码就可以了,就一堆 dll 或者 .so 加上 exe 这种方式就是合法的。默认你用 windeployqt 生成的那个打包下就可以了。这个理论上还要求你写软件说明的时候声明下用了 Qt 程序库,Qt 程序库是 LGPL 协议的,把 LGPL 协议的文档弄个文本文件跟你的程序放一起。就类似下面这种,exe 跟 dll 一起,有个 LGPL 文档说明,软件的帮助或者配套文件里说下用了 LGPL 协议的 Qt 就行了。国内用 Qt 商用的很多,商业完全没问题的。Qt 的 Python 绑定特意出了个 PySide 就是为了支持 LGPL 好支持商用,PyQt 不支持LGPL,商用不友好。
2.2 嵌入式
由于从 5.4 开始 Qt 主要采用 LGPL v3 授权,而 LGPLv3 明确禁止封闭嵌入式设备分发 LGPLv3 授权的软件,所以在嵌入式下不能使用 Qt 5.4 以及以上的版本进行商用,当然 Qt 5.3 以及以下的版本还是可以。
2.3 Qt 开源版 VS 商业版
参考: