Closed-source kernel modules
Found a good list of Linus’s comments on non-free Linux kernel modules. Turns out that the policy is a lot harsher than I thought. On the subject of the supposed exception that allows modules to be non-free, Linus states that
Well, there really is no exception. However, copyright law obviously
hinges on the definition of “derived work”, and as such anything can
always be argued on that point.I personally consider anything a “derived work” that needs special hooks
in the kernel to function with Linux (ie it is _not_ acceptable to make a
small piece of GPL-code as a hook for the larger piece), as that obviously
implies that the bigger module needs “help” from the main kernel.Similarly, I consider anything that has intimate knowledge about kernel
internals to be a derived work.What is left in the gray area tends to be clearly separate modules: code
that had a life outside Linux from the beginning, and that do something
self-containted that doesn’t really have any impact on the rest of the
kernel. A device driver that was originally written for something else,
and that doesn’t need any but the standard UNIX read/write kind of
interfaces, for example.
NVidia’s module is apparently OK because it was clearly written for another OS, and then ported to Linux without too many modifications. However, writing a new non-free module specifically for Linux — and making it rely on the idiosyncrasies of the Linux kernel — and then having the temerity to ask the kernel developers to make changes to accomodate your binary module — is likely to arouse flames.
This doctrinaire FSF-like attitude drives almost certainly drives away developers. However, it does ensure that 99% of the drivers in an average Linux system are free, and thus maintanable independent of the drivers’ original authors.