现转载http://blog.csdn.net/ojoe/article/details/6283082的文章

查过很多资料了,将商业软件与Qt LGPL的关系归结如下:

1. 必须使用Qt的LGPL许可版本;

2. Qt的库必须是动态链接,否则会有不必要的麻烦;

3. Qt的库最好不与产品同时发布[QT官方建议Qt软件从Qt官方网站下载Qt库,否则会违反为GLPL协议]。

但你会发现Qt提供的下载地址很难打得开。个人觉得这一条基本可以忽略,仅需遵循第2条即可;或者你可以用2张光盘,一张用来发布,另一张用来提供Qt的共享库。

下面是转载的别人的3篇文章,在此感谢他们的知识共享精神。

文章1:

QT的LGPL与闭源程序【转载】
发表于135 天前 ⁄ C/C++ ⁄ 暂无评论

最近一直在学习 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:

  • void my_lib_init()
  • {
  • lib_init();
  • }
  • void my_lib_do_something()
  • {
  • lib_do_something();
  • }
  • void my_lib_done()
  • {
  • lib_done();
  • }
  • void my_lib_close()
  • {
  • lib_close();
  • }

在 main.cpp 中,我们做相应的修改:

  • int main() {
  • my_lib_init();
  • my_lib_do_something();
  • my_lib_done();
  • my_lib_close();
  • return 0;
  • }

现在,main.cpp 不再是直接使用了 LGPL 库的代码了,因此它不需要开源,而我们的封装器 lib_wrapper.cpp 必须开源。

好,编译一下我们的程序,你会得到 main.o(Windows 下)这个目标文件。

在最终程序的发布中,你需要包含一下文件:

  1. 一份文档,其中声明:这个程序使用了 Lib库,这个库是基于 LGPL 协议发布的;
  2. LGPL.txt;
  3. lib_wrapper.cpp
  4. main.o

这样,用户可以通过修改 lib_wrapper.cpp  的内容改变你使用 LGPL 库的方式,例如:

  • void my_lib_done()
  • {
  • lib_done();
  • lib_close();
  • }
  • void my_lib_close()
  • {
  • // lib_close();
  • }

然后编译这个 lib_wrapper.cpp,最终重新链接。一个新的可执行程序诞生啦!

好了,这就是在使用 LGPL库开发闭源程序所需要遵守的东西了。还是建议大家能够遵守协议,尊重作者的劳动成果哦~

文章2

2009年06月27日 星期六 13:55
From:

http://www.qteverywhere.com/

Qt 4.5中提供了三种授权协议,分别是GPL, LGPL和Commercial,可能很多人要问,为什么同样的一个产品要提供三种授权协议,什么情况下使用什么的样的授权协议最合适?在这里我就大致解释一下:

GPL全称是The GNU General Public License,是目前大多数的GNU程序和超过半数的自由软件使用的许可协议。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免 费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。
GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题, 还可以享受免费的优势。

回到LGPL,LGPL的全称是 GNU Lesser General Public License,GNU 较宽松公共许可证,也是由协议是由自由软体基金会发布的许可证,是一个主要为类库使用设计的开源协议,和GPL要求任何使用/修改/衍生之GPL类库的的 软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的 开源代码可以被商业软件作为类库引用并发布和销售。

除了GPL和LGPL两种开源协议之外,Qt还提供了Commercial商业协议,Qt的商业协议是由Nokia定义的,由Nokia和购买方签 订的,具有法律效应的Qt产品授权协议。 Commercial License相教与GPL和LGPL,对于商业客户提供了更多的灵活性,客户可以任意的修改Qt的源代码,开发商业软件,而不需要公开任何源代码。并 且,在Commercial License中,我们还提供了技术支持服务。当然,商业授权协议是需要费用的。

到底什么时候需要选择GPL和LGPL呢?一个最显而易见的理由就是他们都是免费的,使用LGPL和GPL版本的Qt是不需要支付任何费用的,当然 我们也相应的不会提供技术支持。如果你打算开发真正的开源软件,并希望使用者也可以保持开源,那么GPL是更好的选择,因为所有人,不论你自己还是将来基 于你的代码进行再次开发都必须开源。如果你打算开发闭源(不开放源代码)的商业软件,那么LGPL则更适合,但必须满足下面两个条件:
1. 你的应用程序应该动态链接Qt函数库,并使你的应用程序与未做修改的LGPL库分开发布。同时必须确保使用者(接受者)知道应用程序使用了LGPL版本的Qt;
2. 如果你对LGPL版本的Qt进行了任何修改,并发布,则必须遵循LGPL 条款发布。任何使用者有权利得到这些修改(通常情况下是源代码),并且确保使用者可以通过这些修改自己生成相应你修改过的Qt版本。

相信到这里大家已经对Qt提供的这三种协议有了基本的了解,通常大家还会有一个疑问,就是基于这三种授权协议的Qt产品到底由多少功能上的区别,是 不是商业版本的会更完整,性能更好一些?这里我可以负责任的说:99%的代码都是一样的,无论是GPL, LGPL还是Commercial,功能,性能都没有区别,唯一的区别就在于授权协议的不同。

还有一点需要说明的就是,由于LGPL是在Qt4.5这个版本里面才引入的,所以之前的Qt版本,4.4或者3.x的版本,并不提供LGPL协议,是不可逆的。同时未来发布的Qt版本,就一直会提供三种不同的授权协议版本。

下面有一些链接,有兴趣想深入了解这些授权协议的同学,可以学习学习

GPL协议原文 - http://www.gnu.org/copyleft/gpl.html
GPL协议中文译文 - http://bergwolf.googlepages.com/gplv3_zh
LGPL协议原文 - http://www.gnu.org/copyleft/lesser.html
LGPL协议中文译文 - http://www.thebigfly.com/gnu/lgpl/lgpl-v3.php
58种不同的开源协议 - http://www.fsf.org/licensing/licenses/
什么是动态链接 -http://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93
官方声明 - http://www.qtsoftware.com/about/news/lgpl-license-option-added-to-qt
官方Q&A - http://www.qtsoftware.com/about/licensing/frequently-asked-questions

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/changsheng230/archive/2010/07/24/5761519.aspx

Qt GPL, LGPL & Commercial License

qt的LGPL协议开发商业软件相关推荐

  1. Qt的LGPL协议是否意味着可以自由用QT开发商业软件?

    查过很多资料了,将商业软件与Qt LGPL的关系归结如下: 1. 必须使用Qt的LGPL许可版本: 2. Qt的库必须是动态链接,否则会有不必要的麻烦: 3. Qt的库最好不与产品同时发布[QT官方建 ...

  2. 如果使用Qt来开发商业软件,是否需要付费?

    Qt有三种授权方式:GPL协议.LGPL协议以及商业授权.其中GPL协议.LGPL协议是开源社区中广泛使用的两种协议.作为法律条文,最精确的阐述是该条文本身,任何读者都可能是不全面.不准确,下面仅从Q ...

  3. GPL协议 与 LGPL协议

    (以下全文引用自博客"朝闻道",链接:"终于理解了什么是LGPL"http://www.cnblogs.com/findumars/p/3556883.html ...

  4. 关于FFmpeg里的GPL和LGPL协议

    参考博文 谢谢博主的分享:http://www.cnblogs.com/findumars/p/3556883.html GPL介绍 我们很熟悉的Linux就是采用了GPL.GPL协议和BSD, Ap ...

  5. GPL协议,LGPL协议,MPL协议

    本文非本人作品,禁止任何形式的转载和商用 GPL协议 强开源约束授权 GPL(GNU General Public License)1 我们很熟悉的Linux就是采用了GPL.GPL协议和BSD, A ...

  6. 基于QT框架的软件开发

    QT入门科普 初识QT 更新到QT6: QT的许可类型 QT与C++ QT美与丑 技术选型偏重 未来发展趋势 个人发展路线 初识QT Qt 是一个1991年由Qt Company开发的跨平台C++图形 ...

  7. GPL协议、LGPL协议与BSD协议的法律区别

    简 而言之,GPL协议就是一个开放源代码协议,软件的初始开发者使用了GPL协议并公开软件的源程序后,后续使用该软件源程序开发软件者亦应当根据GPL协 议把自己编写的源程序进行公开.GPL协议要求的关键 ...

  8. wireshark编译基于openflow1.3协议开发

    基于wireshark的openflow1.3二次开发(协议拓展) 一.编译 1.1编译前言 本来按照一个中文博客的过程走的,过程本没有错误,只是是多年以前的流程,所需要的软件已经不一样了,,,各种软 ...

  9. GPL和LGPL协议

    一直对GPL.LGPL.GPLV3的细节区别不清楚,今天转了一遍关于GPL和LGPL的文章当做参考资料. 原文:http://simplesys.cn/2010/04/02/gpl%E5%92%8Cl ...

最新文章

  1. [转][小结][三种方法]实现WPF不规则窗体
  2. einsum,一个函数走天下
  3. Visual Studio 快捷键
  4. MySQL Workbench 怎么创建数据库
  5. 用javascript实现一门编程语言-字符输入流
  6. Systemd 入门及常用命令
  7. (转)事务是什么,以及事务四个特性
  8. 用自动阈值话处理SVM棋盘
  9. 【Python基础】字符串专题总结
  10. RESTful API接口文档规范小坑
  11. php引用下级目录文件夹,使用PHP遍历文件夹与子目录的函数代码
  12. java编译找不到符号_关于久违的Javac,编译出现“找不到符号”
  13. 码匠编程:学习Web前端开发时有哪些技术点
  14. linux安装nvidia黑屏,GTX 550 Ti 安装Linux遇到的问题 黑屏 显示器休眠
  15. python—符号 | ^的使用
  16. 实验11 B样条曲面生成
  17. Ubuntu中挂载使用nas服务器
  18. 项目 - Web地图开发【高德地图API】(一)
  19. NetWORK ShortCuts 创建
  20. 五、T100采购应付之应付账款核销管理篇

热门文章

  1. android 分辨率 2k,小米8分辨率是不是2k?
  2. DELL服务器通过BMC进行远程唤醒(1) 服务器端设置
  3. buuoj--easy_tornado
  4. 基于ARM9+Linux2.6.30.4内核mbus总线采集器集中器一体化设备开发
  5. lisp提取长方形坐标_坐标提取lisp程序
  6. jqweui组件,confirm嵌套prompt后调用一个方法中的alert无法关闭掉
  7. RESTful 接口设计
  8. Python 递归函数返回值为 None 的解决办法
  9. html制作宣传页,HTML练习--制作宣传视频
  10. Spark GraphX之ConnectedComponents