GPL和BSD内核中的专有模块

时间:2010-04-27 12:53:54

标签: licensing kernel driver gpl bsd

由于Linux内核是GPL而不是LGPL,我认为将专有代码链接到它是违法的。该行业如何规避这一点?我希望GPL许可证会强制任何开发人员在GPL驱动程序和/或内核模块下发布。

也许我很困惑并且实现一个新模块并没有真正链接内核代码???公司如何处理这个问题?也许链接相反(从内核到他们的二进制文件)?

另一方面,有BSD内核。您可以自由链接受保护的IP。你能在BSD内核中实现更好的驱动程序设计吗?在为GPL内核实现驱动程序时是否有任何设计限制?

3 个答案:

答案 0 :(得分:15)

正如您所说,BSD内核使用的BSD许可证要宽松得多,因此链接任何许可模块都没有问题。

对于linux情况,GPL本身禁止链接非GPL兼容代码是正确的,这些代码 不允许在专有模块或甚至LGPL模块中链接。

但是,linux版权所有者授予您将“LGPL”模块与任何专有代码链接的权限。一个例子是nvidia驱动程序:

/------------.-\
| Kernel       |
|              |
|   /--------\ |
|   | Module | |     /-------------------\
|   | (LGPL) <========> proprietary code |
|   \--------/ |     \-------------------/
\--------------/

这通常在GPL下仍然是非法的,但明确允许Linux内核。作为参考,请参阅Linus Torvalds在此处对此问题的评论:

http://linuxmafia.com/faq/Kernel/proprietary-kernel-modules.html

P.S。链接是GPL方面的对称操作。

答案 1 :(得分:1)

激活GPL限制不是连接自身的行为。

GPL工作的“派生作品”的发行版激活了这些限制 - 您必须将您提供“衍生作品”的任何人给予重新创建“所需的源代码”衍生作品“。

现在,问题变成了“衍生作品”界线的一个问题 - 这远非透明(并且在不同的司法管辖区可能会有所不同!)。例如,如果您使用静态链接的代码分发已编译的Linux内核二进制文件作为其中的一部分,则很明显整个二进制文件是“派生的工作”。另一方面,如果您只分发只使用内核的“已发布接口”的模块,那么它可能不是“派生工作”。

但这两个位置之间有很多空间。例如,如果您分发的设备包含包含Linux内核和已编译二进制驱动程序的闪存,那么闪存的完整内容是“派生工作”吗?这对我来说确实如此 - 但意见不同,只有在法庭上进行测试时才能得出明确的答案(即使那时,只有法院的管辖权)。

答案 2 :(得分:0)

我无法从你的问题中说出来,但你可能正在考虑这个问题。如果您尝试在Linux上使用专有驱动程序,那么是的,应该允许这样做。

任何链接GPL编码的代码都必须是GPL编辑的。但是,GPL编辑的代码可以链接到封闭源库而不改变这些库的许可证(否则,我们可以通过编写GPL程序并将其与图书馆)。因此,GPL-ed Linux内核可以链接到您的闭源驱动程序而没有任何问题。

话虽这么说,但这要求编写驱动程序,使其完全独立,或仅链接到允许不受限制的链接(LGPL,MIT等)的库。这也意味着你的驱动程序需要是一个可加载的内核模块,而不是静态编译到内核中。