当前位置: 首页 > news >正文

用 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

下面给张图:

d7aeda75febd4cf518132660cea123bc.png

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

bc7df1ffc09b7733eb94048a76a3fba0.png

大部分都是使用 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语言 结构体 简单实例

结构体 简单例子 要求&#xff1a; 结构体保存学生信息操作 代码 #include <stdio.h>//定义结构体 struct student{int ID;char name[20];char sex;char birthday[8];int grade; };int main(){int number;printf("请输入学生个数&#xff1a;");scanf(&quo…...

【ChatGPT】ChatGPT的自定义指令

ChatGPT的自定义指令 关于ChatGPT自定义指令的常见问题解答概述可用性如何使用您的数据自定义指令设置将应用于所有新聊天。启动新聊天可查看更改iOS & AndroidWeb 示例常见问题使用自定义指令的好处字符限制我的ChatGPT数据导出中是否包含自定义指令&#xff1f;当我删除我…...

《哥德尔、艾舍尔、巴赫——集异璧之大成》阅读笔记1

1、谁也不知道非智能行为和智能行为之间的界限在哪里。事实上&#xff0c;认为存在明显界限也许是愚蠢的。但是智能的基本能力还是确定的&#xff0c;它们是&#xff1a; 对于情境有很灵活的反应充分利用机遇弄懂含糊不清或彼此矛盾的信息认识到一个情境中什么是重要的因素&am…...

稳定细胞系构建技术介绍

抗体药物的开发是一个非常复杂的过程&#xff0c;构建适用于工业生产的高表达的稳定细胞株是抗体药工艺开发的起点和基础。一株稳定高产的工程细胞株不仅能显著增加单位体积产量&#xff0c;降低生产成本&#xff0c;还可以降低下游纯化工艺复杂度&#xff0c;确保获得安全&…...

k8s部署srs服务

k8s部署srs服务 项目需要把srs纳入k8s进行管理&#xff0c;需要通过k8s来部署srs服务然后原本的srs可以支持rtmp与webrtc两种&#xff0c;官网查了部署方式&#xff0c;k8s只有最基本的部署方式于是开始研究k8s部署能够正常推拉流的webrtc版本的srs 首先肯定是去官网查有无相关…...

使用Java分割PDF文件

在Java中&#xff0c;我们可以使用iText库来处理PDF文件。iText是一个流行的Java库&#xff0c;用于创建和处理PDF文件。在本篇博客中&#xff0c;我们将介绍如何使用Java分割一个PDF文件为多个小的PDF文件。 1. 引入iText依赖 首先&#xff0c;我们需要在项目中引入iText库的…...

LLM时代中的分布式AI

深度学习相较传统机器学习模型&#xff0c;对算力有更高的要求。尤其是随着深度学习的飞速发展&#xff0c;模型体量也不断增长。于是&#xff0c;前几年&#xff0c;我们看到了芯片行业的百家争鸣和性能指标的快速提升。正当大家觉得算力问题已经得到较大程度的缓解时&#xf…...

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 创建主函数&#xff0c;添加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&#xff0c;kubelet和kubectl1.定义kubernetes源2.高可用组件安装、配置 四.部署K8S集群五.问题解决1.加入集群的 Token 过期2.master节点 无法部署非系…...

515. 在每个树行中找最大值

描述 : 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 题目 : LeetCode 在每个树行中找最大值 : 515. 在每个树行中找最大值 分析 : 这里其实就是在得到一层之后使用一个变量来记录当前得到的最大值 , 懂了前面的几道这就是小菜 解析 : /…...

基于springboot+vue的图书馆管理系统

图书馆管理系统 springboot32阿博图书馆管理系统 源码合集&#xff1a; www.yuque.com/mick-hanyi/javaweb 源码下载&#xff1a;博主私 摘 要 随着社会的发展&#xff0c;计算机的优势和普及使得阿博图书馆管理系统的开发成为必需。阿博图书馆管理系统主要是借助计算机&…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…...