【发布时间】:2010-02-16 23:25:23
【问题描述】:
在分发程序(没有 Qt 许可证)方面,我对 LGPL/GPL 了解不多;如果我制作了一个程序,我可以将库静态链接到 exe,这样我就有一个文件可以在以下情况下分发:
该程序不花钱,只是分发(封闭源代码还是开源)?
当你必须为程序付费时,你还能静态链接吗?
【问题讨论】:
在分发程序(没有 Qt 许可证)方面,我对 LGPL/GPL 了解不多;如果我制作了一个程序,我可以将库静态链接到 exe,这样我就有一个文件可以在以下情况下分发:
该程序不花钱,只是分发(封闭源代码还是开源)?
当你必须为程序付费时,你还能静态链接吗?
【问题讨论】:
实际上,只要您满足一些非常具体的要求,LGPL 就允许静态链接。例如,如果所有分发都是从您有 StaticProgram.exe 的网站完成的,那么只要用户也可以下载 StaticProgram.obj 和 就可以了LGPL-library-source.tar.gz。您还可以分发 StaticProgram.exe 并提供书面报价以提供其他文件。
具体来说,静态链接会创建一个衍生自 LGPL 代码的单个可执行文件,因此您必须遵守 LGPL 的第 6 节:
6) 作为上述部分的例外,您还可以组合或链接 “使用图书馆的工作”与 制作包含作品的图书馆 图书馆的一部分,和 根据以下条款分发该工作 您的选择,前提是条款 允许修改工作 客户自用和反向 调试这样的工程 修改。
您必须在显着位置发出通知 图书馆的每一件作品 在其中使用,图书馆和 本许可证涵盖其使用。 您必须提供此副本 执照。如果执行期间的工作 显示版权声明,您必须 包括版权声明 其中的图书馆,还有一个 将用户引导至 本许可证的副本。另外,你必须 做以下其中一件事情:
a) 用完整的对应作品伴随工作 机器可读的源代码 图书馆包括任何变化 在工作中使用(必须是 根据第 1 节和第 2 节分发 多于);并且,如果该作品是 与库链接的可执行文件, 具有完整的机器可读 “使用图书馆的作品”,如 目标代码和/或源代码,所以 用户可以修改库 然后重新链接以生成修改后的 包含修改的可执行文件 图书馆。 (据了解, 更改内容的用户 库中的定义文件将 不一定能重新编译 使用修改后的应用程序 定义。)
b) 使用合适的共享库机制与 图书馆。一种合适的机制是 (1) 在运行时使用 图书馆已经出现在 用户的计算机系统,而不是 将库函数复制到 可执行文件,并且 (2) 将运行 正确使用的修改版本 库,如果用户安装了一个, 只要修改后的版本是 接口兼容版本 这件作品是用来制作的。
c) 附上书面报价,至少有效期 三年,给同一个用户 第 6a 款规定的材料, 以上,收费不超过 执行此分配的成本。
d) 如果作品的分发是通过提供对副本的访问来进行的 从指定地点,提供 复制上述内容的等效访问 相同的指定材料 地方。 e) 验证用户是否已收到这些文件的副本 材料或您已经拥有的 向该用户发送了一份副本。
对于可执行文件,所需的形式 “使用图书馆的作品” 必须包括任何数据和实用程序 复制所需的程序 从中可执行。然而,作为一个 特殊例外,材料是 分布式不需要包含任何东西 是正态分布的(在 源或二进制形式)与 主要组件(编译器、内核、 等等)的操作系统 可执行文件运行,除非 组件本身伴随着 可执行文件。
这个要求可能会发生 违反许可限制 的其他专有库 通常不伴随操作 系统。这样的矛盾意味着你 不能同时使用它们和库 一起在一个可执行文件中 分发。
【讨论】:
不,如果您的程序是封闭源代码并且您想要链接到 Qt 的 LGPL 版本,您必须使用动态链接。如果要静态链接,则必须购买 Qt 许可证。
要在您的闭源项目中使用 LGPL 代码,用户必须能够替换代码的 lgpl 部分。最简单也是迄今为止最常用的方法是将所有 LGPL 代码放在一个 dll 中,然后用户可以选择替换 dll。
您还可以使用您的语言允许的任何技术手段来实现相同的目标。您可以分发目标文件,然后用户可以像其他评论者指出的那样重新链接,但我在实践中从未见过这样做。
您的产品是免费还是付费都没有关系。您可以销售 GPL/LGPL 产品。
【讨论】: