54

对于某些组件,我想使用GNU 宽松通用公共许可证版本 2.1 GNU 通用公共许可证 (GPL) 版本 2下的工具 ( ffmpeg ) 。

为此,我只在我的软件中这样称呼它:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo("lgplSoftware.exe", myParams);
p.Start();

我没有更改它,我只使用 Windows 软件的内置版本。


维基百科说:

与 GPL 相关的一个关键争议是非 GPL 软件是否可以动态链接到 GPL 库。GPL 明确要求 GPL 下的所有衍生代码作品本身必须在 GPL 下。虽然静态链接会产生衍生作品,但目前尚不清楚动态链接到 GPL 代码的可执行文件是否应被视为衍生作品(请参阅弱 Copyleft)。自由/开源软件社区在这个问题上存在分歧。FSF 断言,如果可执行文件和 GPL 代码“相互调用函数并共享数据结构”,并且某些其他人同意(例如 Jerry Epplin),而有些人(例如


我真的对所有这些合法的事情感到困惑。我也会制作我的项目 LGPL 并发布源代码,但这不取决于我。

所以问题是:我可以像现在一样使用它,还是会被一大群律师处决?

4

5 回答 5

62

链接在计算机编程中具有特定的含义。您根本没有链接 GPL 或 LGPL 的代码,您只是生成 GPL 或 LGPL 的二进制文件,而 GPL 和 LGPL 允许这样做。您的用户可以根据作者的预期目的自行使用该二进制文件,并且可以自行下载和编译源代码,因此他们的所有自由都得到了保留,并且您不会违反 GPL 或 LGPL。(这就是GPL 常见问题解答中所说的“保持距离通信”。)这甚至不违反 LGPL 和 GPL 的精神;他们容忍专有软件的存在,并假设在某些时候专有程序会产生免费程序,反之亦然。(否则,我们无法运行任何 GPL'

GPL 确实要求专有程序和 GPL 程序“不能以使它们有效地成为单个程序的方式组合在一起”。如果您的程序完全依赖于 GPL 的可执行文件,即使它是一个独立的二进制文件,如果没有它们,它也无法使用,那么这可能会让您陷入更不稳定的境地。(现在可能是时候咨询你的律师以确定答案了。)

此外,尽管您没有具体询问此问题,但请记住,将 GPL 或 LGPL 软件与您的软件一起分发意味着您需要在安装程序中包含许可证副本并分发源代码代码。例如,如果您将应用程序打包在安装程序中,并在安装程序中包含 GPL 或 LGPL 可执行文件的副本,那么您正在分发 LGPL 或 GPL 代码,并且必须提供源代码的副本(在线、邮寄或 CD,取决于您分发应用程序的方式)。包括一个到上游项目的链接是不够的(至少对于 GPL 的第 2 版)。阅读 GPL 和 LGPL 了解详细信息。

于 2009-09-08T16:12:35.080 回答
4

如果我错了,请纠正我,但我相信你描述的情况是这样的:

  1. 您有一个 GPL 或 LGPL 程序,构建为单独的可执行文件,您没有进行任何修改。
  2. 您正在构建一个需要 GPL 或 LGPL 程序功能的闭源应用程序。
  3. 在您的程序中,您使用您的框架或操作系统工具来运行另一个单独的可执行文件。
  4. 您正在程序中使用该可执行文件的输出。

如果是这种情况,您实际上并没有链接到 GPL 或 LGPL 许可程序。因此,您不受该程序的许可条款的约束。这实际上是避免此类可执行文件的许可问题的一种相当常见的方法,即使很复杂。

但是,它确实违反了 GPL 和 LGPL 的精神

于 2009-09-08T15:39:14.493 回答
4

总的来说,这是我认为对 GPL 真正讨厌的少数几件事之一。更糟糕的是它的传染性。尽管如此,还是有办法绕过它。

首先,首先定义您自己的接口来发送数据。这将在您的应用程序和您将创建的单独库之间使用。不要重复使用 GPL 代码中的任何内容,因为这属于 GPL 许可。但是,使用类似的结构并没有错。由于此接口是您自己创建的,因此它属于您自己的许可证。您可以随意使用它。

接下来,围绕 GPL 代码创建一个包装库,该库也将实现您的个人界面。该库将属于 GPL 许可,因此会受到污染。但是,尽管它会将您的界面暴露给外界,但您的界面不会被污染。它不是派生的或其他的。它 100% 是您自己的代码,您可以使用相同的接口连接到不同的库。

这个包装库将充当您自己的专有代码和 GPL 代码之间的保护缓冲区。您自己的代码永远不会是 GPL,因为它没有直接使用任何 GPL 代码。该接口还将作为通过不同解决方案更改 GPL 代码的解决方案。

绕过许可证限制是一个技巧,但由于接口是你的,而且只有你的,GPL 将被它阻止。如果以这种方式使用,GPL 代码和非 GPL 代码将是两个不同的程序。

不过,请注意,您可能需要一些法律建议。SO的律师不多。但这是一个可以绕过这个 GPL 许可证的技巧。

于 2009-09-08T16:18:07.083 回答
2

您可以使用 LGPL 软件执行此操作,但您无法使用 GPL 许可软件执行此操作。

关于组合作品的LGPL 2.1 第 6 节说明了如何在封闭源程序中使用该库。您可以像您一样调用 LGPL 许可程序,甚至可以动态链接到它。

GPL 没有这样的例外,当您使用 GPL 程序/库作为程序的一部分时,因此它被视为程序的一个组成部分,那么您必须根据 GPL 兼容许可对所有内容进行许可。请参阅此 GPL-FAQ 条目

于 2009-09-08T15:40:03.167 回答
1

我不是律师,这不能作为法律建议。有了这些,恕我直言,如果您链​​接的代码是 LGPL,那么您就很清楚了。如果它在技术上是 GPL,那是一个问题。

GPL 和 LGPL 之间的区别在于,链接到 LGPL 代码不会触发共享的需要。

于 2009-09-08T15:28:20.710 回答