Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Propietary modules within GPL and BSD kernels [closed]

Since the Linux kernel is GPL and not LGPL I suppose that it is illegal to link proprietary code to it. How does the industry circumvents this? I would expect that the GPL license will force any developer to release under GPL driver and/or kernel module.

Maybe I am confused and implementing a new module is not really linking against the kernel code ??? How do companies deal with this? Maybe linking the other way around (from kernel to their binaries)?

On the other hand there is the BSD kernel. Where you are free to link protected IP. Can you get a better design implementing your drivers within a BSD kernel? Is there any design restriction when implementing drivers for GPL kernels?

like image 933
SystematicFrank Avatar asked Apr 27 '10 12:04

SystematicFrank


People also ask

Is Linux kernel proprietary?

The Linux kernel itself is all free software, distributed under the GNU General Public License.

Do kernel modules have to be GPL?

Kernel modules depend on Linux's internal symbols to work, and it's uncertain whether they count as a derivative work of Linux, and therefore must be offered under a GPL-compatible license.

What is Module_license GPL?

MODULE_LICENSE ("GPL"); The license will define how your source code should be shared (or not) with other developers. MODULE_LICENSE() tells the kernel what license our module is under.

What is Export_symbol_gpl?

It is macro to define some symbol (e.g. function) as exportable (seen from kernel loadable modules). If the symbol has no "EXPORT_SYMBOL", it will be not accessible from modules. EXPORT_SYMBOL_GPL will show the symbol only in GPL-licensed modules, and EXPORT_SYMBOL - in modules with any license.


1 Answers

As you said the BSD license as used by the BSD kernel is much more liberal so it is no issue to link whatever licensed modules there.

For the linux case it is correct that the GPL per se forbids the linkage of non-GPL-compatible code which would not allow to link in proprietary modules, or even LGPL modules.

However, the linux copyright holders grant you to link your "LGPL" module with any proprietary code. An example for this is the nvidia driver:

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

This would still be illegal under GPL in general, but is explicitly allowed for the Linux kernel. As a reference, see what Linus Torvalds has to say about the issue here:

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

P.S. Linking is a symmetrical operation in the terms of GPL.

like image 134
ypnos Avatar answered Sep 17 '22 15:09

ypnos