【Qt】用Qt开发需要购买授权吗?——关于(L)GPL证书的详解

news/2024/7/23 10:01:03 标签: qt, GPL, LGPL, 开源协议

目录

  • Qt证书体系
  • 开源证书解读
    • Qt官方对(L)GPL的描述
      • 自由度
      • 要求
    • GPL vs. LGPL
    • 完整条款
  • 总结
  • 参考

Qt证书体系

你在用Qt开发应用的过程中,是否也担心过授权问题?

按照官方说法

The Qt framework is dual-licensed, available under both commercial and open-source licenses
Qt 采用双证书许可,既可以在商业证书许可下使用,也可以开源证书许可下使用。 对于非开源项目,建议选择商业证书许可。

官方描述比较模棱两可,让人不免产生疑问:

  • Qt开源证书许可就不能有任何的商业行为吗?会限制作品售价吗?
  • 满足Qt的开源证书许可要求,就可以任意使用Qt了吗?
  • 什么情况下可以使用Qt开源证书许可?什么情况下需要购买商业证书?

本文将详细解答上述问题。

首先,官方文档中的“建议”两个字就说明,非开源项目并不是必须使用商业证书许可,开源证书也并非不能有任何商业行为。在满足开源证书要求的情况下,基于Qt开发的软件也是可以不开源,并进行商业行为的,Qt主要使用的开源协议(L)GPL明确规定不限制作品售价。

当然,也不是说满足了开源证书许可的要求后,就能随意使用整个Qt了,Qt的部分功能和扩展模块是能在商业证书许可下使用的,好在重要的基本功能以及一些常用扩展模块是支持开源证书许可的,在大多数情况下已经能够满足开发需求了。

那么,Qt的开源证书怎么使用呢? Qt主要的开源许可是LGPL (GNU Lesser General Public License) v. 3,另外还有如下几种许可:

至于功能和模块对应的许可模式,可以在Qt官方功能页面通过筛选的方式查询:

在这里插入图片描述
查询过程中可能有疑问,就是筛选Commercial、LGPL v. 3、GPG v. 3,某些模块都是可用的,那么这个模块到底适用哪种许可呢?

官方网站有这么一句话:

All parts that are licensed under LGPL are also available under GPL
所有适用于LGPL的功能也适用于GPL

LGPL其实算是GPL的一个补充协议,LGPLGPL的基础上放宽了一些要求。

因此,笔者猜测,对于同时适用多种证书的功能、模块,只需要满足任意一个即可,当然我们可以选择满足最宽松的那个。

比如某一模块即适用商业许可也适用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。如果你想使用这些模块,就必须购买商业授权了。

开源证书解读

GPL_73">Qt官方对(L)GPL的描述

Qt官方提供了文档:Obligations of the GPL and LGPL,其中主要是自由度要求两个方面:

自由度

LGPL有4个方面的自由:

  • Freedom to run the program for any purpose. 无论何种用途,都可以自由运行该程序。
  • Freedom to study how the program works & adapt it to specific needs. 学习该程序的运行原理,修改程序以满足特定需求
  • Freedom to redistribute copies so you can help your neighbor. 分发程序副本,帮助他人
  • Freedom to improve the program & release your improvements to the public, so that the whole community benefits. 改进并向公众发布,以帮助整个社区

要求

想要获取上述自由,必须满足如下要求:
(ps:笔者翻译水平有限,仅供参考,具体见官方文档)

  • LGPL库的完整代码(或者修改后的代码)应该与开发的程序一起交付。也可以通过文档说明如何获取库的完整代码
  • 想要程序代码闭源,必须使用动态链接的方式使用LGPL库。
    对于Qt来说,在iOS、Android端,基本无法使用动态链接,此时需要以源码的形式交付
  • 程序需要支持用户重新连接LGPL库,也就是可以支持用户更新LGPL库。并且需要提供相应的安装信息。
  • 不完全满足LGPL的程序,不被允许分发
  • 不能以合同、条款的方式限制LGPL的自由度,如果某些规则与LGPL冲突,应该以LGPL为准
  • 使用LGPL库的程序应该以某种方式告知用户他们的权力
  • LGPL不禁止开发者使用数字版权管理系统Digital Rights Management (DRM) ,但是如果其他人可以突破DRM,他就有权分发程序。具体参考(L)GPLv3 license FAQ
  • LGPL有明确的专利条款,但相对负责,(L)GPLv3 license FAQ

GPL_vs_LGPL_95">GPL vs. LGPL

GPL协议允许:

  • 修改源代码
  • 自由处理衍生作品,也就是基于GPL库开发的软件可以进行商业化销售,

同时GPL协议有一个比较苛刻的要求,就是使用GPL库的软件自身也必须遵守GPL协议,也就是基于/使用GPL库开发的软件必须开源,别人也可以在你作品的基础上修改、分发甚至销售。

LGPLGPL 的变种,也是 GNU 为了得到更多的甚至是商用软件开发商的支持而提出的。1

LGPL算是GPL的补充协议,拥有GPL协议规定的自由度。
它与GPL最大的不同在于,使用LGPL库开发的软件在满足要求的情况下可以闭源
所谓要求可以简单理解为,需要通过动态链接的方式使用LGPL库,并且允许用户更新LGPL库的版本。

完整条款

完整条款可以参考:

总结

总的来说,对于个人开发者或者小公司来说,可以在不购买商业授权的情况下基于Qt开发软件,也可以以任意价格销售开发的软件,只要注意证书协议的要求,尽可能做到满足要求就可以。

但由于开源协议的复杂性、实际应用中的不同情况,以及回馈社区,大家发展壮大后还是应该购买商业授权,支持社区发展

参考

  1. https://www.qt.io/licensing/open-source-lgpl-obligations
  2. https://opensource.org/license/gpl-2-0
  3. https://opensource.org/license/gpl-2-1
  4. https://opensource.org/license/lgpl-2-1
  5. https://opensource.org/license/lgpl-3-0
  6. https://www.gnu.org/licenses/gpl-faq.html
  7. Can I use LGPL liscened library in my commercial app
  8. https://opensource.stackexchange.com/questions/8804/do-i-need-a-commercial-license-for-the-qt-framework
  9. https://softwareengineering.stackexchange.com/questions/47323/can-i-use-an-lgpl-licenced-library-in-my-commercial-app

  1. https://www.oschina.net/question/12_2663 ↩︎


http://www.niftyadmin.cn/n/5435732.html

相关文章

CRON 定时任务

检测是否安装了 cron systemctl status crond 如果没有安装使用 sudo yum install cronie 编辑 crontab -e * * * * * php /path/your.php Esc键 然后输入 :q 退出 :wq 保存并退出 第一个 * 表示分钟,表示每分钟执行一次。第二个 * 表示小时,表示每…

c语言大小写字母的转换

通过ascll码表我们可以知道大写字母与小写字母相差32个数&#xff08;小写字母比大写字母大&#xff09;。因此&#xff0c;通过相加减32即可转换大小写字母。 #include <stdio.h>int main() {char ch c;char CH A;printf("%c\n", ch - 32);printf("%c…

Zinx框架的高级用法

一、使用框架提供的实用类 zinx框架已经提供了常用的IO通道类-TCP。 阅读Tcp相关类的使用文档&#xff0c;将之前的3个案例用TCP的方式实现。 步骤&#xff1a; 创建Tcp数据通道类继承ZinxTcpData&#xff0c;重写GetInputNextStage函数&#xff0c;内容跟之前标准输入通道类…

C语言—计算输入的字符串中数字、字符等的数量

比如&#xff1a;输入&#xff1a;123abc 4 \?* 输出 &#xff1a;letter3,digit4,space2,other3 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<ctype.h>int main() {char s[50];gets(s);int i;int letter0, digit0, space0, other0;for (i 0; …

Spring MVC相关

Spring MVC是Spring框架中的一个重要模块&#xff0c;它实现了MVC设计模式&#xff0c;为Web应用提供了请求驱动类型的轻量级Web框架。通过Spring MVC&#xff0c;开发者可以将Web应用的业务逻辑、数据模型和视图展示进行清晰的分离&#xff0c;从而简化开发过程&#xff0c;提…

程序员如何规划职业赛道?

在快速发展的信息技术时代&#xff0c;程序员作为数字世界的构建者&#xff0c;面临着前所未有的职业选择和发展机会。选择合适的职业赛道&#xff0c;不仅关乎个人职业发展的高度和速度&#xff0c;更影响着个人职业生涯的满意度和幸福感。本文将从自我评估与兴趣探索、市场需…

网络安全主题

网络安全主题 Python信息安全库之fsociety使用详解 https://blog.csdn.net/Rocky006/article/details/136040500 VULNCMS靶机 https://blog.csdn.net/m0_66299232/article/details/128780619 渗透测试框架-Fsociety https://blog.csdn.net/andiao1218/article/details/10119…

NFT数字藏品推广途径有哪些?CloudNEO免费个性定制方案,推广您的NFT

NFT&#xff08;Non-Fungible Token&#xff0c;非同质化代币&#xff09;作为近年来崭露头角的数字艺术品和收藏品形式&#xff0c;已经吸引了全球范围内的关注。与传统艺术品不同&#xff0c;NFT的独特之处在于它们的不可替代性和可追溯性&#xff0c;使得它们成为了独一无二…