Qt单个EXE文件是否可以使用LGPL许可证?

12

当涉及到分发程序(没有Qt许可证)时,我对LGPL/GPL并不了解得很多;如果我制作了一个程序,我能否将库静态链接到可执行文件中,以便在以下情况下仅需分发单个文件:

  • 该程序不收取任何费用,仅进行分发(闭源或开源)?

  • 当您必须付费购买该程序时,是否仍然可以静态链接?

2个回答

30
实际上,LGPL允许静态链接,只要你满足一些非常具体的要求。例如,如果所有分发都是从你的网站进行的,其中包括 StaticProgram.exe,只要用户也可以下载 StaticProgram.objLGPL-library-source.tar.gz,那么你就可以了。你还可以通过书面提供其他文件来分发 StaticProgram.exe
具体来说,静态链接会创建一个派生自LGPL代码的单个可执行文件,因此您必须遵守LGPL的第6节:
引用:

6) 作为本章之外的例外情况,您还可以将使用该库的作品与该库结合或链接起来,以产生包含该库部分内容的作品,并以您选择的条款分发该作品,前提是这些条款允许用户修改作品以供其自身使用和进行反向工程以调试此类修改。

您必须在每份作品的显著位置通知读者该库已在其中使用,并且该库及其使用受本许可证的覆盖范围。您必须提供本许可证的副本。如果作品在执行期间显示版权声明,则您必须在其中包括该库的版权声明,以及指向本许可证副本的引用。此外,您必须执行以下一项操作之一:

a)将作品与包含用于作品的“使用该库的作品”的完整机器可读源代码一起提供,包括在工作中使用的任何更改(必须按照上述第1和2节进行分发);如果作品是与库链接的可执行文件,则还应提供完整的机器可读“使用该库的作品”的目标代码和/或源代码,以便用户可以修改该库,然后重新链接以生成包含修改后库的修改版可执行文件。(理解用户更改库中定义文件内容的用户不一定能够重新编译)

a) 如果您修改了库的定义,那么使用该修改后的定义必须保持透明,并且需要将该修改的定义应用到使用该库的应用程序中。

b) 使用适当的共享库机制来链接库。适当的机制是指:(1)在运行时使用用户计算机上已经存在的库副本,而不是将库函数复制到可执行文件中;(2)如果用户安装了与工作版本接口兼容的修改版本,则可以正确地使用修改版本库操作。

c) 随同工作附带一份书面提议,在至少三年的有效期内,以不超过实施此分发所需成本的费用向同一用户提供6a款中指定的材料。

d) 如果通过提供从指定位置访问拷贝来分发工作,则应提供等效的访问方式,以从相同位置拷贝上述指定材料。

e) 验证用户已经收到这些材料的一份副本或者您已经发送给该用户一份副本。

对于可执行文件,“使用库的工作”的要求形式必须包括从中重现可执行文件所需的任何数据和实用程序。然而,作为特殊例外情况,要分发的材料不需要包括通常随操作系统的主要组件(编译器、内核等)以二进制或源代码形式分发的任何东西,除非该组件本身随可执行文件。

可能会发生这个要求与其他不随操作系统一起提供的专有库的许可限制相矛盾的情况。这种矛盾意味着您无法在分发的可执行文件中同时使用它们和库。


12

如果你的程序是闭源的,并且你想要链接LGPL版本的Qt,那么你必须使用动态链接。如果你想要静态链接,那么你就必须购买Qt的许可证。

在闭源项目中使用LGPL代码时,用户必须能够替换代码中的LGPL部分。最简单也是最常见的方法是将所有LGPL代码放入一个dll文件中,然后用户可以根据需要更换该dll文件。

你也可以使用你所使用的编程语言所允许的任何技术手段来实现相同的目标。你可以分发目标文件,然后用户可以重新链接,正如其他评论者所指出的一样,但是我从未见过这种做法在实践中被采用。

无论你的产品是免费还是付费,都不重要。你可以销售GPL/LGPL产品。


7
如果您还要分发目标代码,那么可以使用静态链接。 - P-Nuts
3
请阅读LGPL版本2.1第6节。这个答案是错误的。 - Kevin
1
我同意@Kevin的观点。我认为你可能需要检查和更正你的答案,或者再向我们解释一次。我不理解这句话的意思:“如果你不想使用静态链接,那么你必须购买QT的许可证。”在我看来,这是错误的,会让我们更加困惑,而不是帮助我们。如果我的挑剔让你不舒服,请原谅,但我对你的回答感到困惑。 - zeFree
1
从Qt博客:用户可以开发专有应用程序,动态链接到Qt库,而无需发布其应用程序源代码。http://blog.qt.nokia.com/2009/11/30/qt-making-the-right-licensing-decision/ - Roland Rabien
@FigBug 应该引用的那一行不应该是“如果你不想要动态链接...”吗?我认为他是对的,答案写得有问题。 - JBentley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接