我想使用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的内置版软件。
与GPL相关的主要争议是 是否可以使用非GPL软件 动态链接到GPL库。 GPL明确要求所有 GPL下的衍生代码作品 必须自己在GPL之下。 虽然它被理解为静态 它产生衍生作品 目前尚不清楚是否可执行 动态链接到GPL代码 应被视为衍生作品 (见Weak Copyleft)。该 免费/开源软件社区是 分裂在这个问题上。 FSF声称 这样的可执行文件确实是一个 如果可执行文件和衍生工作 GPL代码“对每个进行函数调用 其他和共享数据结构,“ 与某些人同意(例如 杰里埃普林),而一些(例如 Linus Torvalds)同意这种动态 链接可以创建派生作品但是 不同意这种情况。
我对所有这些法律事务感到困惑。我也会把我的项目放到LGPL并发布源代码,但这不是我的意思。
所以问题是:我可以像现在这样使用它,还是会被一大群律师处决?
答案 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)
如果我错了,请纠正我,但我相信你描述的情况是这样的:
如果是这种情况,那么您实际上并不是将链接到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。