❗本文不是法律建议,如有法律问题,请咨询您的律师或依照利益相关方的法律文本处理。
Qt 是目前较为流行而且功能完备的 C++ 图形化开发框架(GUI Framework),其运营者是商业公司 Qt Group (Nasdaq Helsinki: QTCOM)。出于商业化运营的考虑和拥抱开源的策略,Qt 有两种不同的授权许可协议。同时,作为一个历史悠久的跨平台开发库,Qt 有很多不同的版本。如何选择合适的授权协议以及 Qt 版本,是十分值得讨论的。
Qt 版本的选择
从大版本上,选择主要有三个:
- Qt 4:最老、中文资料极其丰富
- Qt 5:上一代主流 Qt
- Qt 6:Qt 公司当前主推的最新版本
在这里,Qt 5 是最应该选择的。不选择 Qt 4 或 Qt 6 的理由是:
- Qt 4 太过老旧,缺乏对新的 C++ 标准的支持(C++11 之后 C++ 标准迭代速度非常快)
- Qt 4 资料虽然多,但是普遍老旧,很容易把人带到沟里面去
- Qt 6 虽好,但不支持 WIndows 7,考虑到 Win7 极度庞大的用户量,很难理解为什么一个软件为了跨平台选择了 Qt 却不支持 Win7
小版本上,选择有两个:
- Qt 5.12:LTS,保持了离线下载模式
- Qt 5.15:LTS,需要在线下载
这里仁者见仁,智者见智,但总体来讲因为区别不大,Qt 5.12 更值得选择,这样可以免于遭受某些特殊网络环境的困扰。
📍国内下载 Qt 可以去清华大学 TUNA 协会的源。
Qt 协议的选择
下列内容仅供参考,请以 Qt Group 的官方说明为准。
商业协议
这个协议基本上可以概括为:钱是万能的。
这个协议在一定条件下允许:
- 获得授权的组织可以许可成员使用
- 获得授权的组织可以自行修改 Qt 并闭源
- 获得授权的组织使用 Qt 的组件时不需要担心 GPL 的“传染性”
缺点就一个:要钱,还不少。
具体可以参见 Qt Commercial Licensing。
开源协议
微软的经营策略早就告诉我们,拥抱开源就是拥抱市场,拥抱市场才能圈地挣钱,卖许可证这事叫涸泽而渔,不能做大做强。因此,Qt 很贴心地提供了开源授权。
Qt 的部分组件分别以不同的开源组件进行授权,同时 Qt 还使用了数量庞大的开源软件,因此有可能会遇到一些需要遵守第三方开源协议的情况(其实比较困难,主要是因为 GPL 太狠了)。
Qt 主要使用了两个开源协议:
这就意味着:
- 需要为用户提供一份 Qt 和你编写的软件的源代码(或者是明确地书面给出源代码获取方式)
- 对于使用 GPL 的部分,所有你所编写的代码均要如上操作
- 对于 LGPL 的部分,可以通过动态库链接的方式进行调用(可以理解为不删、不加、不改、不打包)而无需开源
因此,在使用 Qt 的开源授权许可的时候,最重要的就是搞清楚对应的模块采用的是何种开源协议,可以去 https://www.qt.io/product/features 处进行查询。
部分使用 LGPL 的组件模块如下:
- Qt Core
- Qt GUI
- Qt Network
- Qt QML
- Qt Quick Dialogs
- Qt Quick Layouts
- Qt D-Bus
- Qt Quick
- Qt Quick Controls
- Qt Quick Tests
- Qt Test
- Qt Widgets
- Qt Multimedia
- Qt Multimedia Widget
- Qt 3D
- Qt Bluetooth
- Qt Concurrent
- Qt Help
- Qt Image Formats
- Qt NFC
- Qt OpenGL
- Qt Positioning
- Qt Print Support
- Qt Quick Widgets
- Qt Remote Objects
- Qt SCXML
- Qt Sensors
- Qt Serial Bus
- Qt Serial Port
- Qt SVG
- Qt UI Tools
- Qt WebChannel
- Qt WebEngine
- Qt WebSockets
- Qt WebView
- Qt XML
- Qt SQL
- Qt State Machine
- Qt PDF