QT的三种协议说明 | 您所在的位置:网站首页 › boost开源协议 › QT的三种协议说明 |
QT 的三种协议说明 关于 Qt 的三种协议以及是否收费,有以下引⽂: 引⽂⼀:
最近⼀直在学习 Qt 。 Qt 有两个许可证: LGPL 和商业协议。这两个协议在现在的 Qt 版本中的代码是完全⼀致的(潜在含义是, Qt 的早期 版本,商业版的 Qt 通常包含有⼀些开源版本所没有的库,⽐如 QtSingleApplication 这个库)。所以现在对于普通开发⼈员和部分商业公司 来说,使⽤ LGPL 版本的 Qt 可以节省很⼤的开销。这两个版本最⼤的区别在于,前者是免费的,后者是收费的。既然代码都是⼀致的,所 以费⽤就要是⽤来购买 Qt 的售后服务和培训等等相关服务。
现在我们是来说⼀下版权的问题。 LGPL 是⼀个开源协议,因此,有⼈会担⼼ LGPL 能否⽤于开发闭源程序,能够拿来卖钱。尽管现在国 内有些公司不是很重视这⽅⾯的问题,不过,如果你违反了协议,某⼀天被别⼈发来⼀纸律师函的时候,真的是欲哭⽆泪了哦。所以,我们 还是先来研究⼀下这个协议, LGPL 究竟能不能⽤于开发闭源程序。
以下内容是我查找了 N 多⽹站总结出来的,因为⾖⼦不是律师,所以 LGPL 协议基本看不懂。究竟怎样去理解这个协议,还是希望能够 有专业⼈⼠说出来。这⾥就算做是⼀种抛砖引⽟吧!尽管没有⼗分的确定,但是这⾥所说的理解基本也是⼋九不离⼗的了。
⾄于什么是 LGPL 协议,这⾥就不再多说了,我们关⼼的是,如果使⽤ LGPL 协议开发商业程序。请注意,这⾥所说的闭源程序,是指不 以某种形式开放源代码,也就是说,⽤户(包括其他开发者)不能获取其源代码的程序。⾸先说明⼀点, LGPL 协议是⼀个商业友好的协 议。这⾥的含义是,你可以⽤ LGPL 协议开发商业程序,当然也可以是⾮商业的闭源程序。但是,它是有⼀些限制的。这就是我们要讨论的 重点。
既然我们已经对其定性,那么我们直接进⼊主题:使⽤ LGPL 协议开发闭源程序,如果你使⽤动态链接的形式,那么,你可以以任何形式 发布你的应⽤程序,商业的、⾮商业的、开源的、⾮开源的,随你。如果你因某种原因必须静态链接⼀个基于 LGPL 协议发布的库(⼀下我 们简称为 LGPL 库),那么,你有义务进⾏下⾯的⼯作: 1. 你必须在你的⽂档中说明,你的程序中使⽤了 LGPL 库,并且说明这个库是基于 LGPL 发布的; 2. 你必须在你的应⽤程序发布中包含⼀份 LGPL 协议,通常就是那个⽂本⽂件; 3. 你必须开放使⽤了 LGPL 库代码的所有代码,例如某些封装器。但是,其他使⽤这些封装器的代码就不需要开放了; 4. 你必须包含你的应⽤程序的余下部分的⽬标⽂件(通常就是我们所说的 .o 等等),或者是其他等价的⽂件。源代码并不是必须的。
是不是很难理解呢?我们详细的说⼀下。
第⼀条很容易理解;第⼆条也很容易理解,你可以在找到 LGPL 协议的内容,复制下来随你的程序⼀起发布就可以了。第三条就不那么好 理解了。简单来说, LGPL 协议要求,如果你的类使⽤了 LGPL 库的代码,那么必须把这个类开源。例如,如果你的程序 app.exe 每个源⽂件 都使⽤了 LGPL 库的代码,那么你的所有源代码都要开源。为了避免这种情况,我们通常编写⼀个封装器,把 LGPL 库的代码封装起来,这 样就只需要开放这个封装器的代码,⽽其他使⽤了这个封装器的代码就不需要开放。第四条是对第三条的⼀种补充:那些使⽤了封装器的程 序不需要开源,但是你必须把你编译的那些中间⽂件开放出来, Windows 下就是那些 .o ⽂件。
你很奇怪,为什么 LGPL 协议要这样规定呢? LGPL 所做的⼯作是,它保证了⽤户能够有这样⼀种能⼒:修改你使⽤ LGPL 库函数的⽅式 (那些封装器就是你使⽤ LGPL 库的⽅式,那些已经开源了),重新编译这些代码,然后重新对程序进⾏连接(连接所需要的⽬标⽂件也是 包含了的,这是第四条规定的),就可以得到⼀个新的可执⾏程序。
好了,如果你还不明⽩如何使⽤,我们来看⼀个例⼦。
假设我们使⽤⼀个名为 Lib 的库,这个库是基于 LGPL 协议发布的。如果你使⽤ Lib.dll 做动态链接( Windows 下),好,⼀切 OK 。⽆论 你的程序怎么样,你都可以做你所做的事情。
我们主要是来看,如果你要使⽤静态链接,那么你需要如何组织你的代码。如果你有⼀个 main.cpp (我们假设所有 Lib 库的函数都是⽤了 lib_ 前缀): // main.cpp int main() { lib_init(); lib_do_something(); lib_done(); lib_close(); return 0; }
现在你已经完成了 main.cpp ,但是你必须把它开源!因为它使⽤了 LGPL 库的代码。这是上⾯第三条规定的。我不想把它开源,怎么办 呢?好,我们建⼀个新的⽂件 lib_wrapper.cpp: |
CopyRight 2018-2019 实验室设备网 版权所有 |