首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GPL内核模块的非GPL内核模块

使用GPL内核模块的非GPL内核模块
EN

Stack Overflow用户
提问于 2009-04-10 07:34:43
回答 5查看 7K关注 0票数 11

我工作的公司正在开发一个封闭源代码的内核模块(.ko文件)。此模块必须调用包含在gpl2模块中的函数。基本上,我们有这样的情况:

代码语言:javascript
复制
// GPL 2 kernel module  (gpl.c -> gpl.ko)
void a_function(void)
{
// ...
}
EXPORT_SYMBOL(a_function)


// Closed Source module (closed.c -> closed.ko)
a_function();

这合法吗?在本例中,我们是否违反了GPL2许可证?请注意,closed.c不包含任何gpl2头文件。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-10 08:15:08

模块有GPL_ONLY标志,不应该在非GPL模块中使用。因此,如果您所讨论的模块不是GPL_ONLY,那么您可以使用它。

但是,如果您通过 drivers, which are possible in 2.6.23访问它们,即使是GPL_ONLY也可以使用它们。这正是USB子系统所发生的事情。http://www.linux-magazine.com/online/news/linux_2_6_25_without_closed_source_usb_drivers

没有确切地解决法律问题,但给了你一些想法:http://www.cyberciti.biz/tips/linus-rejects-the-idea-of-non-gpl-kernel-modules.html

票数 8
EN

Stack Overflow用户

发布于 2009-04-13 11:38:12

所以你真的应该寻求合格的法律意见。然而,这种方法肯定与许可证的精神背道而驰,并且不会在内核领域赢得任何朋友。

但是,您可以考虑不同的拆分方式。一种方法是拥有一个完全GPL的模块,并将所有“秘密公司IP”放在一个用户空间驱动程序中。当我工作的公司不热衷于将我们的FPGA的细节公之于众时,我采取了这种方法。所有的决定和寄存器设置都是在用户空间中决定的,而驱动程序的内核端只是在IRQ上加载值。通过仔细的设计,你可以管理你可能遇到的任何实时问题,并在你封闭的驱动程序和内核之间有一个很好的干净的分离。我相信使用支持用户空间驱动程序的较新内核会更容易,尽管我认为它们还不能很好地支持DMA (我不得不编写一个用户空间DMA内核模块来直接在芯片组和用户空间之间支持DMA )。

然而(再一次)我真的建议你考虑你想要保护的是什么。封闭的驱动程序可能适合嵌入式应用程序,因为您可以严格控制内核版本和硬件。但是,如果这个驱动程序被认为是更通用的(例如,销售硬件的人将插入他们自己的系统中),那么封闭源代码驱动程序只会被证明是持续痛苦和维护头痛的来源。

票数 7
EN

Stack Overflow用户

发布于 2009-04-10 08:02:06

1:你需要和律师谈谈这件事,可能是你公司的法律部。

2:重要的问题是哪段代码是从哪些其他代码派生而来的。

不幸的是,这个问题的答案几乎有很多种。

有些人会认为所有的内核模块都是内核的衍生作品,所以无论头部是否包含,都必须是GPLed的。

或者,您的封闭模块派生自GPL模块,而GPL模块派生自内核,因此封闭模块也必须是GPL。

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

https://stackoverflow.com/questions/736972

复制
相关文章

相似问题

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