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

目录

  • 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,另外还有如下几种许可:

  • LGPL v. 2.1
  • GPL v. 3
  • GPL v. 2
  • BSD Cluase 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的一个补充协议,LGPL在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有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

GPL协议允许:

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

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

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

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

完整条款

完整条款可以参考:

  • GPL v. 2
  • GPL v. 3
  • LGPL v. 2.1
  • LGPL v. 3
  • BSD Cluase 3

总结

总的来说,对于个人开发者或者小公司来说,可以在不购买商业授权的情况下基于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.mzph.cn/news/747872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 3.15

Leetcode hot100 二叉树1.二叉搜索树中第K小的元素2.二叉树展开为链表3.从前序与中序遍历序列构造二叉树 二叉树 1.二叉搜索树中第K小的元素 二叉搜索树中第K小的元素 最重要的知识点:二叉树搜索树的中序遍历是升序的。 方法一:我们只需存储升序遍历&…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ListItemGroup)

该组件用来展示列表item分组,宽度默认充满List组件,必须配合List组件来使用。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。该组件的父组件只能是List。 使用说明 当List…

Docker使用(四)Docker常见问题分析和解决收集整理

Docker使用(四)Docker常见问题分析和解决收集整理 五、常见问题 1、 启动异常 【描述】: 【分析】:[rootlocalhost ~]# systemctl status docker 【解决】: (1)卸载后重新安装,不能解决这个问题。 …

Android cmdline tools安装

打开AS 进入SDK Tools 看到了吗?那个打着勾的就是

如何将图片无损放大?

如何将图片无损放大? 在处理图片时,我们经常会遇到需要放大图像而又不损失图像质量的情况。这种操作被称为“图片无损放大”,它可以帮助我们保持图像的清晰度和细节,同时满足对更大尺寸图像的需求。传统的图像放大方法往往会导致…

重要表格比较多 不想被别人查阅 怎样批量加密?excel批量加密

批量给Excel工作表加密是一个既实用又具挑战性的任务。对于需要在多个工作表中保护敏感信息的用户来说,掌握这一技能尤为重要。下面,我们将详细介绍如何批量给Excel工作表加密 首先,我们要选择合适的加密方法,在这里小编给大家推荐…

Spring MVC(一)— DispatcherServlet

DispatcherServlet 是Spring MVC框架的HTTP 请求处理器的中央调度器。它具有以下的功能: 1)基于IoC容器JavaBean配置机制。 2)使用HandlerMappingl来实现请求到处理器的路由映射。 3)使用HandlerAdapter 来处理不同的处理器。 …

【自动驾驶可视化工具】

自动驾驶可视化工具 自动驾驶可视化工具1.百度Apollo的Dreamview:2.Cruise的Worldview:3.Uber的AVS:4.Fglovex Studio: 自动驾驶可视化工具 介绍一下当前主流的自动驾驶可视化工具。 1.百度Apollo的Dreamview: Dreamview是百度Apollo平台开发的一种可视化工具,用…

使用Spark清洗统计业务数据并保存到数据库中

1、打开前面创建的项目“BigData-Etl-KongGuan”,创建一些数据库访问的工具类和辅助类。 1)打开SpringBoot项目:BigData-Etl-KongGuan 2)创建数据库访问的工具类和辅助类: com.qrsoft.etl.dao.IBaseDao数据库访问的通…

基于正点原子潘多拉STM32L496开发板的简易示波器

一、前言 由于需要对ADC采样性能的评估,重点在于对原波形的拟合性能。 考虑到数据的直观性,本来计划采集后使用串口导出,并用图形做数据拟合,但是这样做的效率低下,不符合实时观察的需要,于是将开发板的屏幕…

部署prometheus+Grafana可视化仪表盘监控服务

一、部署prometheus及监控仪表盘 简介 Prometheus是开源监控报警系统和时序列数据库(TSDB)。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控,输出被监控组件信息的HTTP接口被叫做expo…

Node.js(1)

跨平台的node.js运行环境,使开发者可以搭建服务器端的js应用程序 它可以编写服务器端程序; 编写数据接口;提供网页资源浏览功能 前端工程化:开发集成的所有工具和技术 与浏览器环境的区别 node.js环境中没有DOM和BOM fs模块-读…

5 个适用于 Windows 10 和 11 的最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式,但是此类文件存在一些限制,导致难以修改或编辑。因此,您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器,每种转换器提供的功能略有不同。本…

多人聊天室 (epoll - Linux网络编程)

文章目录 零、效果展示一、服务器代码二、客户端代码三、知识点1.bind() 四、改进方向五、跟练视频 零、效果展示 一个服务器作为中转站&#xff0c;多个客户端之间可以相互通信。至少需要启动两个客户端。 三个客户端互相通信 一、服务器代码 chatServer.cpp #include <…

【unity与android的交互(一)】安卓打包相关的常见参数详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

【解读】Synopsys发布2024年开源安全和风险分析报告OSSRA

软件供应链管理中&#xff0c;许可证和安全合规性至关重要。开源组件和库可降低风险&#xff0c;但需了解许可证内容。Synopsys 2023年审计发现&#xff0c;超过一半的代码库存在许可证冲突。MIT许可证是最常用的宽松许可证&#xff0c;但也与其他许可证存在不兼容风险。点此获…

AI新工具(20240315) 用户通过点击图像的特定部分实现域区图像动画; 先进的机器人操作框架

✨ 1: Follow-Your-Click 用户通过点击图像的特定部分实现域区图像动画 Follow-Your-Click 是一个开放领域的区域性图像动画创作工具&#xff0c;它可以通过简短的提示语实现图像中特定区域的动画效果。这种功能允许用户通过点击图像的特定部分并输入简短的指令&#xff08;例…

ViT学习笔记

一、Embedding层 对于标准的Transformer 模块&#xff0c;要求输入的是 token (向量 ) 序列&#xff0c;即二维矩阵 [num_token, token_dim] 在代码实现中&#xff0c;直接通过一个卷积层来实现以ViT- B/16为例&#xff0c;使用卷积核大小为 16x16 &#xff0c; stride 为 16 …

【Streamlit学习笔记】实现包含多个sheet的excel文件下载

1、什么是Streamlit Streamlit是一个免费的开源框架&#xff0c;用于快速构建和共享漂亮的机器学习和数据科学Web应用程序&#xff0c;官网链接 Streamlit Streamlit API链接 API reference 实际项目中遇到的问题&#xff1a;包含多个sheet的excel文件下载&#xff0c;下面将给…

传输层的UDP协议

1. UDP协议报文格式 1.1 16位端口号 UDP协议报文中&#xff0c;端口号占2个字节&#xff0c;包括 源端口号 和 目的端口号。 1.2 16位UDP长度 UDP报文长度为2个字节 &#xff0c;即UDP数据报长度为0~65535&#xff0c;也就是64kb。 1.3 16位UDP检验和 数据在网络传输的…