我可以在闭源应用程序中动态调用LGPL / GPL软件吗?

时间:2009-09-08 15:21:55

标签: ffmpeg

我想使用ffmpeg GNU Lesser General Public License, version 2.1下的工具(GNU General Public License (GPL) version 2)来处理某些组件。

为此,我只在我的软件中调用它:

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

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


Wikipedia说:

  

与GPL相关的主要争议是   是否可以使用非GPL软件   动态链接到GPL库。   GPL明确要求所有   GPL下的衍生代码作品   必须自己在GPL之下。   虽然它被理解为静态   它产生衍生作品   目前尚不清楚是否可执行   动态链接到GPL代码   应被视为衍生作品   (见Weak Copyleft)。该   免费/开源软件社区是   分裂在这个问题上。 FSF声称   这样的可执行文件确实是一个   如果可执行文件和衍生工作   GPL代码“对每个进行函数调用   其他和共享数据结构,“   与某些人同意(例如   杰里埃普林),而一些(例如   Linus Torvalds)同意这种动态   链接可以创建派生作品但是   不同意这种情况。


我对所有这些法律事务感到困惑。我也会把我的项目放到LGPL并发布源代码,但这不是我的意思。

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

5 个答案:

答案 0 :(得分:58)

Linking在计算机编程中具有特定含义。你根本没有链接GPL或LGPL代码,你只是产生一个GPL或LGPL的二进制文件,而GPL和LGPL允许这样做。您的用户可以自行使用该二进制文件以满足其作者的预期目的,并且可以自由下载和编译源代码,因此保留所有自由,并且您不会违反GPL或LGPL。 (这就是GPL FAQ通过“沟通”来谈论的内容。“)这甚至没有违反LGPL和GPL的精神;他们容忍专有软件的存在,并假设在某些时候专有程序将产生免费程序,反之亦然。 (否则,我们无法在Windows下运行任何GPL软件。)

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

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

答案 1 :(得分:3)

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

  1. 您有一个GPL或LGPL程序,作为单独的可执行文件构建,不需要您进行任何修改。
  2. 您正在构建一个需要GPL或LGPL程序功能的闭源应用程序。
  3. 在您的程序中,您使用框架或操作系统工具运行另一个单独的可执行文件。
  4. 您正在程序中使用该可执行文件的输出。
  5. 如果是这种情况,那么您实际上并不是链接到GPL或LGPL许可的程序。因此,您不受该计划的许可条​​款的约束。这实际上是一种相当常见的,如果复杂的方法,可以避免此类可执行文件的许可问题。

    然而,它确实违反了GPL和LGPL的精神

答案 2 :(得分:2)

总的来说,这是我认为对GPL真正讨厌的少数事情之一。更糟糕的是它是多么具有传染性。不过,还有办法解决它。

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

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

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

这是解决许可限制的一个技巧,但由于界面只属于您和您的界面,因此GPL将被其阻止。如果以这种方式使用,GPL代码和非GPL代码将是两个不同的程序。

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

答案 3 :(得分:0)

我不是律师,这不是法律建议。有了我们,恕我直言,如果你链接的代码是LGPL,你是明确的。如果从技术上说它是GPL则是一个问题。

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

答案 4 :(得分:0)

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

关于合并作品的

LGPL 2.1 section 6说明了如何在闭源程序中使用该库。 您可以像这样调用LGPL许可程序,甚至可以动态链接到它。

当您使用GPL程序/库作为程序的一部分时,GPL没有此类例外,因此它被视为您程序的一个组成部分,那么您必须在GPL兼容许可下许可所有内容。请参阅this GPL-FAQ entry