Proprietary kernel modules - the boundary shifts?
[Posted October 22, 2002 by corbet]
The GNU General Public License places strong requirements on anybody who
distributes code derived from GPL-licensed source: the derived code, too,
must be released under the GPL. The Linux kernel's license states
explicitly that programs running in user mode and making use of kernel
system calls are
not derived works, and may thus be proprietary.
The situation with loadable kernel modules has always been a little more
fuzzy, however. The legal status of proprietary Linux kernel modules may
heading toward a long-term resolution, however; the news may not be good
for vendors of such modules.
User-space programs run in a separate address space, in a different
processor mode, and communicate with the kernel via special instructions.
There is a clear boundary between the two. Loadable modules, however, are
linked into the kernel itself; they run in kernel mode, access the kernel
address space, and require (GPL-licensed) header files to build. For all
practical purposes, they look like part of the kernel itself, and thus
should perhaps be seen as derived works.
Linus Torvalds's longstanding policy - never actually written down
anywhere - has been that binary-only kernel modules were permissible
as long as they restricted themselves to the (never really defined) kernel
API. That has been interpreted to mean that modules which use only
explicitly exported symbols can be proprietary, and numerous such modules
have been shipped over the years. Linus is not the only copyright holder
on the Linux kernel, however, and quite a few other kernel developers have
been known to mumble that they had never agreed that their code
could be linked to proprietary modules.
This situation has thus always been a little unstable. It came up again in
recent times when Christoph Hellwig posted a
patch which explicitly made the Linux Security Module functionality
available only to modules licensed under the GPL. People were, says
Christoph, using the LSM hooks to change the behavior of system calls, and
that went further than he thought was appropriate. In a separate posting, Christoph stated:
My argument is that I want this flag as a hint for authors of
proprietary security modules that I'm going to sue them if they use
hooks called from code I have copyright on. This includes such
central parts as vfs_read/vfs_write.
This is, of course, an explicit shot across the bow of anybody who
distributes proprietary kernel modules. Linus, then, sent out his current view on binary-only
modules:
There is NOTHING in the kernel license that allows modules to be
non-GPL'd. The _only_ thing that allows for non-GPL modules is
copyright law, and in particular the "derived work" issue. A vendor
who distributes non-GPL modules is _not_ protected by the module
interface per se, and should feel very confident that they can show
in a court of law that the code is not derived.
This is a more restrictive view than has been seen in the past. Linus
would likely argue that his position has not changed, but he has not been
quite so clear before. One possible reason for a change in attitude
can be seen in another quote from the same posting:
The original binary-only modules were for things that were
pre-existing works of code, ie drivers and filesystems ported from
other operating systems, which thus could clearly be argued to not
be derived works, and the original limited export table also acted
somewhat as a barrier to show a level of distance.
What's different now? Certainly one relevant point is that far more kernel
functionality is exported to loadable modules. Proprietary modules, once,
didn't have the access to kernel internals that they have now. But there
may be a more important message here: years ago, binary-only modules were
useful
for bringing in capabilities that nobody had, yet, been able to write as
free software. As the kernel has developed, the role of this sort of
imported code has diminished.
In other words, we may be seeing a harder line against proprietary kernel
modules for the simple, pragmatic reason that we don't need them anymore.
Linux has evolved from a small, struggling system into one of the most
capable systems available. Proprietary module vendors now have little to
offer the kernel. Over the coming years, it would not be surprising to see
the policy on binary-only modules harden further, until one day they are
explicitly forbidden.
(
Log in to post comments)