用 QT 开发软件会吃官司吗?
之前我写过我们现在使用 QT 开发跨平台软件,有朋友留言,QT 虽好,当心收到律师函。今天就来聊聊这个话题。
在开始这个话题之前,我们先把使用盗版 QT 排除在外,只讨论在合法且遵从版权协议的前提下,能否使用 QT 开发商业软件。
首先我们要弄清楚 QT 是分商业版和开源版的。使用商业版没什么好讨论的,既然付过费了,当然可以开发商业软件,也不需要开源。大部分个体开发者和创业公司都是选择的 QT 开源版,所以本文讨论的是使用 QT 开源版开发和销售商业软件是否可行(闭源)。
很多人认为使用开源软件就必须开源,这是早期 GPL 协议产生的刻板印象。其实开源运动在发展过程中,又产生了很多新的开源协议,比如 BSD、MIT、Apache 等等。因为大家发现 GPL 协议并不利于开源软件的发展。
像BSD、Apache 这类的开源协议,限定相当宽松,不仅可以商用,修改了源码也不用公开,可以说基本无限制。
LGPL 的限制稍微多一点,但对商业软件开发还比较友好。
LGPL,即GNU宽通用公共许可证,是一种自由软件许可证,它允许商业软件通过动态链接的方式使用 LGPL 类库而不需要开源商业软件的代码。
重点:采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售。
当然,如果你修改了 LGPL 协议的代码或者衍生了新的代码,就必须按照 LGPL 协议公开源代码。
因此,使用 LGPL 协议的软件不一定必须开源,这取决于你是否修改或者衍生了该软件。如果你只是使用而没有修改该软件,就可以随意使用和销售,而不需要开源你的软件。
咱们再来看看开源版 QT 的版权协议。QT 因为产品众多,并没有采用单一的协议,而是采用了混合版权协议。有的产品采用 GPL,有的产品采用 LGPL 协议,甚至 QT 的开发库的不同模块还采用了不同的版权协议。大家可以去下面的网站去查询:
https://www.qt.io/product/features
下面给张图:

可以看到,QT 的核心库,都是采用 LGPL 协议的。再来看看附加库:

大部分都是使用 LGPL 协议的。
QT 核心库,加上这些常用的附加组件库,对于大部分开发足够了。至于修改 QT 组件源码,我想大部分开发者没这么厉害吧。我们需要注意的是,不要为了省事,把 QT 动态库一股脑打包到应用程序安装包中。只打包自己用到的组件,一来减少法律风险,二来也可以减少安装包的大小。
如果你收到了 QT 公司的律师函,首先要恭喜你,说明你做的产品至少小有名气,也有不错的盈利,一般来说,无名小卒人家都懒得理你。如果真收到了,也不用慌,先分析一下是否真的违反开源协议。即使真的有问题,购买商业版就解决问题。
最后,延伸一个话题,使用开源软件盈利是否道德。在国内,经常有开发者嘲讽,某某软件只是在开源软件上套个壳,就向用户收费,简直厚颜无耻至极。很多国产软件也被骂的很惨,xxx 浏览器就是套个壳,xxx 操作系统就是套个壳。
这个就需要具体情况具体分析,要看开源协议是怎么定的。像 Chromium、Android,其实采用的都是非常宽松的授权协议,售卖、修改、闭源都没问题。连微软这么大的公司,和谷歌又是竞争对手,其 Edge 浏览器不是一样选择了 Chromium 内核,也没开源,人家 Google 还高兴得很呢。
另外,基于开源软件套个壳,甚至简单打个包,那也是付出了劳动,拿出去售卖,只要不违反开源协议,也没问题。你要是觉得简单,你去做一下试试,看看是不是那么简单。
各种开源协议,都是法律术语,写得又臭又长,一般人没耐心看,也看不懂。以上只是我收集网上的一些资料,也咨询了 GPT,得出的一点看法。我不是专业人士,不能保证上述的分析一定准确无误。如果你真的担心,还是咨询专业的法律人员。
相关文章:
用 QT 开发软件会吃官司吗?
之前我写过我们现在使用 QT 开发跨平台软件,有朋友留言,QT 虽好,当心收到律师函。今天就来聊聊这个话题。 在开始这个话题之前,我们先把使用盗版 QT 排除在外,只讨论在合法且遵从版权协议的前提下,能否使用…...
远程运维用什么软件?可以保障更安全?
远程运维顾名思义就是通过远程的方式IT设备等运行、维护。远程运维适用场景包含因疫情居家办公,包含放假期间出现运维故障远程解决,包含项目太远需要远程操作等等。但远程运维过程存在一定风险,安全性无法保障,所以一定要选择靠谱…...
数据结构与算法C语言版学习笔记(2)-线性表、顺序存储结构的线性表
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 数据结构部分的知识框架一、线性表的定义和特点1.定义2.特点 二、线性表的实际案例引入1.案例一:多项式的加减乘除2.案例二:当多项式是稀疏多…...
【vite】vite.defineConfig is not a function/npm无法安装第三方包问题
当使用vite命令 npm init vite-app 项目名称时配置 import vue from vitejs/plugin-vueexport default defineConfig({plugins: [vue()] })会报错vite.defineConfig is not a function 还有就是npm下载的时候也会报错 原因vite插件vitejs/plugin-vue和vite版本问题 解决 调…...
234. 回文链表 --力扣 --JAVA
题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 解题思路 判断链表是否为回文链表取决于链表中各个节点的值,所以可以通过存储各节点的值进行对比判断&…...
【JAVA学习笔记】65 - 文件类,IO流--节点流、处理流、对象流、转换流、打印流
项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter19/src/com/yinhai 文件 一、文件,流 文件,对我们并不陌生,文件是保存数据的地方,比如大家经常使用的word文档,txt文件,excel文件..都是文件。它既可以保存一张图片…...
R语言 复习 习题图片
这是日天土申哥不知道从哪淘来的R语言复习知识点图片,大部分内容都是课后习题的答案 加油吧,骚年,考个好分数...
c语言 结构体 简单实例
结构体 简单例子 要求: 结构体保存学生信息操作 代码 #include <stdio.h>//定义结构体 struct student{int ID;char name[20];char sex;char birthday[8];int grade; };int main(){int number;printf("请输入学生个数:");scanf(&quo…...
【ChatGPT】ChatGPT的自定义指令
ChatGPT的自定义指令 关于ChatGPT自定义指令的常见问题解答概述可用性如何使用您的数据自定义指令设置将应用于所有新聊天。启动新聊天可查看更改iOS & AndroidWeb 示例常见问题使用自定义指令的好处字符限制我的ChatGPT数据导出中是否包含自定义指令?当我删除我…...
《哥德尔、艾舍尔、巴赫——集异璧之大成》阅读笔记1
1、谁也不知道非智能行为和智能行为之间的界限在哪里。事实上,认为存在明显界限也许是愚蠢的。但是智能的基本能力还是确定的,它们是: 对于情境有很灵活的反应充分利用机遇弄懂含糊不清或彼此矛盾的信息认识到一个情境中什么是重要的因素&am…...
稳定细胞系构建技术介绍
抗体药物的开发是一个非常复杂的过程,构建适用于工业生产的高表达的稳定细胞株是抗体药工艺开发的起点和基础。一株稳定高产的工程细胞株不仅能显著增加单位体积产量,降低生产成本,还可以降低下游纯化工艺复杂度,确保获得安全&…...
k8s部署srs服务
k8s部署srs服务 项目需要把srs纳入k8s进行管理,需要通过k8s来部署srs服务然后原本的srs可以支持rtmp与webrtc两种,官网查了部署方式,k8s只有最基本的部署方式于是开始研究k8s部署能够正常推拉流的webrtc版本的srs 首先肯定是去官网查有无相关…...
使用Java分割PDF文件
在Java中,我们可以使用iText库来处理PDF文件。iText是一个流行的Java库,用于创建和处理PDF文件。在本篇博客中,我们将介绍如何使用Java分割一个PDF文件为多个小的PDF文件。 1. 引入iText依赖 首先,我们需要在项目中引入iText库的…...
LLM时代中的分布式AI
深度学习相较传统机器学习模型,对算力有更高的要求。尤其是随着深度学习的飞速发展,模型体量也不断增长。于是,前几年,我们看到了芯片行业的百家争鸣和性能指标的快速提升。正当大家觉得算力问题已经得到较大程度的缓解时…...
Zinx框架-游戏服务器开发003:架构搭建-需求分析及TCP通信方式的实现
文章目录 1 项目总体架构2 项目需求2.1 服务器职责2.2 消息的格式和定义 3 基于Tcp连接的通信方式3.1 通道层实现GameChannel类3.1.1 TcpChannel类3.1.2 Tcp工厂类3.1.3 创建主函数,添加Tcp的监听套接字3.1.4 代码测试 3.2 协议层与消息类3.2.1 消息的定义3.2.2 消息…...
如何使用Pyarmor保护你的Python脚本
目录 一、Pyarmor简介 二、使用Pyarmor保护Python脚本 1、安装Pyarmor 2、创建Pyarmor项目 3、添加Python脚本 4、配置执行环境 5、生成保护后的脚本 三、注意事项与未来发展 四、未来发展 五、总结 本文深入探讨了如何使用Pyarmor工具保护Python脚本。Pyarmor是一个…...
【c++】搜索二叉树的模拟实现
搜索二叉树的模拟实现 k模型完整代码 #pragma once namespace hqj1 {template<class K>struct SBTreeNode{public://这里直接用匿名对象作为缺省参数SBTreeNode(const K& key K()):_key(key), _cleft(nullptr), _cright(nullptr){}public:K _key;SBTreeNode* _cle…...
Kubeadm - K8S1.20 - 高可用集群部署(博客)
这里写目录标题 Kubeadm - K8S1.20 - 高可用集群部署一.环境准备1.系统设置 二.所有节点安装docker三.所有节点安装kubeadm,kubelet和kubectl1.定义kubernetes源2.高可用组件安装、配置 四.部署K8S集群五.问题解决1.加入集群的 Token 过期2.master节点 无法部署非系…...
515. 在每个树行中找最大值
描述 : 给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。 题目 : LeetCode 在每个树行中找最大值 : 515. 在每个树行中找最大值 分析 : 这里其实就是在得到一层之后使用一个变量来记录当前得到的最大值 , 懂了前面的几道这就是小菜 解析 : /…...
基于springboot+vue的图书馆管理系统
图书馆管理系统 springboot32阿博图书馆管理系统 源码合集: www.yuque.com/mick-hanyi/javaweb 源码下载:博主私 摘 要 随着社会的发展,计算机的优势和普及使得阿博图书馆管理系统的开发成为必需。阿博图书馆管理系统主要是借助计算机&…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...
