14

由于 Linux 内核是 GPL 而不是 LGPL,我认为将专有代码链接到它是非法的。业界如何规避这种情况?我希望 GPL 许可证将迫使任何开发人员在 GPL 驱动程序和/或内核模块下发布。

也许我很困惑,实现一个新模块并没有真正链接到内核代码???企业如何应对这种情况?也许以相反的方式链接(从内核到他们的二进制文件)?

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

4

3 回答 3

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

PS Linking 是 GPL 术语中的对称操作。

于 2010-04-27T13:43:49.630 回答
1

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

激活限制的是 GPL 作品的“派生作品”的分发——您必须将您提供“派生作品”的任何人提供给重新创建“派生作品”所需的源代码。

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

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

于 2010-04-28T00:46:45.097 回答
0

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

确实,任何链接到 GPL 代码的代码本身都必须是 GPL 代码。然而,基于 GPL 的代码可以链接到封闭源代码库,而无需更改这些库的许可(否则,我们可以通过编写 GPL 程序并将其链接到库来使现有的每个库都是开源的)。因此,基于 GPL 的 Linux 内核可以毫无问题地链接到您的闭源驱动程序。

话虽如此,这需要编写驱动程序以使其完全独立或仅链接到允许无限制链接的库(LGPL、MIT 等)。这也意味着您的驱动程序需要是可加载的内核模块,而不是静态编译到内核中。

于 2010-04-27T20:37:23.163 回答