首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与专有库链接的GPL代码依赖于先创建的代码吗?

与专有库链接的GPL代码依赖于先创建的代码吗?
EN

Stack Overflow用户
提问于 2009-12-06 17:13:48
回答 5查看 5.9K关注 0票数 17

微软创建了自己的windows和MFC DLL库,等等。一个开源开发人员编写了一个新的MFC应用程序,并以GPL的形式发布了源代码。该应用程序必须链接到MS DLL /库才能在Windows中运行,但我认为任何人都不能争辩说,我们现在有权强迫微软的GPL使用他们的DLL。

这是否意味着GPL许可证真的取决于哪一个是首先“创建”的?如果首先创建了专有库(例如Windows DLL),并且发布时没有链接任何GPL代码,然后再链接一个GPL程序,那么GPL程序不能将专有库转换为GPL,尽管该专有代码与GPL代码是“链接”的。

如果是这样的话,这样的NVidia或RealNetworks公司可以做以下事情吗?让我们假设他们喜欢保留私有的HDDecoding媒体解码引擎库,但他们也想“利用”开源GPLed代码来展示他们的硬件。

  1. 他们创建了一个专有的库来做媒体解码,并发布了一些示例代码。
  2. 某人(开源开发)创建了一个“插件”,它链接到这个专有的GPLed代码库中,比如XBMC、Mplayer或VLC。
  3. 他们可以争辩说,由于他们首先创建了专有库(就像MS首先创建所有all一样),与其专有代码链接的GPL程序不会将它们转换为GPL代码。

从理论上讲,可以认为创建与NVidia专有媒体解码器库链接的GPL vlc.exe文件的开源开发人员违反了GPL许可证。

这是否意味着在Windows中运行的所有GPL程序,如VLC、git、cygwin等都违反了GPL许可证,因为它们肯定需要链接到专有的Microsoft Windows库才能运行。

案例2:这有什么问题:

NVidia可以创建一个新的硬件抽象库,其中隐藏了最新的图形函数。他们还使用这个库创建了一个FreeBSD驱动程序,并发布了BSD驱动程序的源代码,但没有发布库源代码。

某些人(Linux开发人员)可以实现链接到这个库的Linux驱动程序,从而为linux创建一个NVidia图形驱动程序。但由于NVidia没有这样做,他们可以在启用"Linux支持“的同时保持库源的”隐藏“。

这肯定违反了GPL的精神。

这是否意味着在Windows/Mac/Iphone/PSP3中运行任何使用GPLed源代码创建的可执行文件也违反了GPL的精神?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-06 18:04:59

来自GNU GPL常见问题解答:

Can I apply the GPL when writing a plug-in for a non-free program?

如果程序使用fork和exec来调用插件,那么这些插件就是独立的程序,因此主程序的许可证对它们没有任何要求。因此,您可以将GPL用于插件,并且没有特殊要求。

如果程序动态地链接插件,并且它们彼此进行函数调用并共享数据结构,我们认为它们形成了单个程序,该程序必须被视为主程序和插件的扩展。这意味着GPL覆盖的插件与非自由的主程序的组合将违反GPL。但是,您可以通过向插件许可证添加一个例外,允许将其链接到非免费的主程序来解决法律问题。

另请参阅问题I am writing free software that uses a non-free library

和:

What legal issues come up if I use GPL-incompatible libraries with GPL software?

两个版本的GPL都有一个copyleft例外,通常称为系统库例外。如果您要使用的与GPL不兼容的库满足系统库的标准,那么您不需要做任何特殊的事情就可以使用它们;为整个程序分发源代码的要求不包括这些库,即使您分发的是包含它们的链接可执行文件。

在不同的GPL版本中,什么是“系统库”的标准是不同的。GPLv3在第1节中明确定义了“系统库”,以将其排除在“对应的源”的定义之外。在第3节的末尾,GPLv2说了以下内容:

但是,作为特殊例外,分发的源代码不需要包括通常随可执行文件运行的操作系统的主要组件(编译器、内核等)一起分发的任何内容(源代码或二进制形式),除非该组件本身随可执行文件一起发布。

...

票数 9
EN

Stack Overflow用户

发布于 2009-12-06 19:39:34

您对GPL限制生效的方式有一个根本性的误解。您的第一个示例包含在“系统库豁免”中--但即使不是,它也不会产生您假设的效果。

GPL规定,如果您发布GPL的程序或其派生程序,您还必须在GPL等效条款下提供程序或派生程序的源代码(向您分发程序/派生程序的人)。

这意味着,如果我发布你的GPL程序与微软的一些代码链接,我必须提供整个蜡球的源代码,否则就有被你侵犯版权的风险。请注意,只要Microsoft是第三方,这就不会对它们施加任何限制(当然!)。如果我不能访问微软的代码,那么我就不能在不违反您的许可的情况下分发衍生作品。

票数 6
EN

Stack Overflow用户

发布于 2009-12-07 10:56:43

简单地说,这意味着除非应用linking exception,否则不能在非compatible with the GPL的代码或库上应用GPL,也不能分发编译后的组合作品。

链接异常为您提供了一种分发包含非自由位的已编译可执行文件的方法,而以源代码格式分发程序不需要特殊权限。

当然,这一例外取决于允许您分发链接到它的程序的非自由库(尤其是静态的)。

所以,要回答你的第一个问题,不..这不是“鸡还是蛋”的情况。我建议的是,当面对必须编写异常的可能性时,选择一个限制较少的许可证可能更好,比如Apache或3条款BSD许可证。

其次,不能仅仅为了改变你链接到的东西的许可证而将GPL应用到你的代码中。再次,我们回到链接异常,这是您的责任来提供。

通用公共许可证的spririt生活在一个没有专有软件的世界里。RMS在许多场合都将此作为最终目标。剩下的是那些想要在非自由平台上分发自由软件的人必须解决的实用性问题。

这是Linux (如在内核中)仅保留GPL v2的最大原因之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1854843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档