Qt开发授权详解:开源许可(L)GPL使用指南
Qt开发授权详解:开源许可(L)GPL使用指南
Qt是一个广泛使用的跨平台应用程序开发框架,其开源许可(L)GPL的使用规则和限制一直是开发者关注的重点。本文将详细解读Qt的证书体系、开源证书的具体要求、GPL与LGPL的区别等内容,帮助开发者更好地理解和使用Qt进行开发。
Qt证书体系
在使用Qt进行应用开发的过程中,授权问题是一个绕不开的话题。Qt采用双证书许可模式,既可以在商业证书许可下使用,也可以在开源证书许可下使用。对于非开源项目,官方建议选择商业证书许可。
然而,官方的描述往往模棱两可,容易引发疑问:
- Qt开源证书许可是否完全禁止商业行为?
- 满足Qt的开源证书许可要求是否就意味着可以任意使用Qt?
- 在什么情况下需要购买商业证书?
本文将详细解答这些问题。
首先,需要明确的是,非开源项目并非必须使用商业证书许可,开源证书也并非完全禁止商业行为。在满足开源证书要求的情况下,基于Qt开发的软件是可以不开源并进行商业行为的,且Qt的主要开源协议(L)GPL明确规定不限制作品售价。
需要注意的是,并不是所有Qt的功能和扩展模块都能在开源证书许可下使用。部分功能和扩展模块仅在商业证书许可下可用,但重要的基本功能以及一些常用扩展模块是支持开源证书许可的,在大多数情况下已经能够满足开发需求。
Qt开源证书使用指南
Qt主要的开源许可是LGPL (GNU Lesser General Public License) v. 3,另外还有以下几种许可:
- LGPL v. 2.1
- GPL v. 3
- GPL v. 2
- BSD Clause 3
要查询具体功能和模块对应的许可模式,可以访问Qt官方功能页面进行筛选查询。
在查询过程中可能会发现,某些模块同时适用于Commercial、LGPL v. 3、GPL v. 3等多种许可。根据Qt官方文档的说明:
"All parts that are licensed under LGPL are also available under GPL"
这意味着所有适用于LGPL的功能也适用于GPL。LGPL可以看作是GPL的一个补充协议,在GPL的基础上放宽了一些要求。
因此,对于同时适用多种证书的功能、模块,只需要满足任意一个即可,当然我们可以选择满足最宽松的那个。比如某一模块即适用商业许可也适用LGPL,那么我们在满足LGPL证书要求的情况下,就可以随意使用。
在较为宽松的LGPL v. 3证书下,我们可以使用:
- 所有的设计工具
- 所有的开发工具(除了Quick Ultralight相关)
- 所有重要Qt功能
- 一半的扩展模块
包括:
- Qt for Python
- Qt Multimedia
- Qt Webview
- Qt SQL
- Qt Bluetooth
- Qt Serial Port
等等很多常用扩展模块
这些工具、功能和模块在多数情况下都能满足开发需要。
当然有些模块是要满足严格一些的GPL v. 3的,比如:
- Qt Charts
- Qt Lottie Animation
- Qt gRPC
- Qt Protobuf
少数模块只支持商业证书,比如Qt Digital Advertising。如果你想使用这些模块,就必须购买商业授权。
开源证书解读
Qt官方对(L)GPL的描述
Qt官方提供了详细的文档《Obligations of the GPL and LGPL》,主要涉及两个方面:自由度和要求。
自由度
LGPL提供了四个方面的自由:
- 无论何种用途,都可以自由运行该程序。
- 学习该程序的运行原理,修改程序以满足特定需求。
- 分发程序副本,帮助他人。
- 改进并向公众发布,以帮助整个社区。
要求
想要获取上述自由,必须满足如下要求:
- LGPL库的完整代码(或者修改后的代码)应该与开发的程序一起交付。也可以通过文档说明如何获取库的完整代码。
- 想要程序代码闭源,必须使用动态链接的方式使用LGPL库。对于Qt来说,在iOS、Android端,基本无法使用动态链接,此时需要以源码的形式交付。
- 程序需要支持用户重新连接LGPL库,也就是可以支持用户更新LGPL库。并且需要提供相应的安装信息。
- 不完全满足LGPL的程序,不被允许分发。
- 不能以合同、条款的方式限制LGPL的自由度,如果某些规则与LGPL冲突,应该以LGPL为准。
- 使用LGPL库的程序应该以某种方式告知用户他们的权力。
- LGPL并不禁止开发者使用数字版权管理系统Digital Rights Management (DRM) ,但是如果其他人可以突破DRM,他就有权分发程序。
- LGPL有明确的专利条款,但相对负责,具体参考(L)GPLv3 license FAQ。
GPL vs. LGPL
GPL协议允许:
- 修改源代码
- 自由处理衍生作品,也就是基于GPL库开发的软件可以进行商业化销售,
同时GPL协议有一个比较苛刻的要求,就是使用GPL库的软件自身也必须遵守GPL协议,也就是基于/使用GPL库开发的软件必须开源,别人也可以在你作品的基础上修改、分发甚至销售。
LGPL 是 GPL 的变种,也是 GNU 为了得到更多的甚至是商用软件开发商的支持而提出的。它与GPL最大的不同在于,使用LGPL库开发的软件在满足要求的情况下可以闭源。所谓要求可以简单理解为,需要通过动态链接的方式使用LGPL库,并且允许用户更新LGPL库的版本。
完整条款
完整条款可以参考:
- GPL v. 2
- GPL v. 3
- LGPL v. 2.1
- LGPL v. 3
- BSD Clause 3
总结
对于个人开发者或者小公司来说,可以在不购买商业授权的情况下基于Qt开发软件,也可以以任意价格销售开发的软件,只要注意证书协议的要求,尽可能做到满足要求就可以。
但由于开源协议的复杂性、实际应用中的不同情况,以及回馈社区,大家发展壮大后还是应该购买商业授权,支持社区发展。
参考
- https://www.qt.io/licensing/open-source-lgpl-obligations
- https://opensource.org/license/gpl-2-0
- https://opensource.org/license/gpl-2-1
- https://opensource.org/license/lgpl-2-1
- https://opensource.org/license/lgpl-3-0
- https://www.gnu.org/licenses/gpl-faq.html
- Can I use LGPL liscened library in my commercial app
- https://opensource.stackexchange.com/questions/8804/do-i-need-a-commercial-license-for-the-qt-framework
- https://softwareengineering.stackexchange.com/questions/47323/can-i-use-an-lgpl-licenced-library-in-my-commercial-app
- https://www.oschina.net/question/12_2663
