Linux: the GPL and Binary Modules
An anonymous reader writes "When first made available in September of 1991, the Linux kernel source code was released under a very restrictive non-GPL license requiring that the source code must always be available, and that no money could be made off of it. Several months later Linus changed the copyright to the GPL, or GNU General Public License, under which the kernel source code has remained ever since. Thanks to the GPL, any source code derived from the Linux kernel source code must also be freely released under the GPL. This has led many to question the legality of 'binary only' kernel modules, for which no source code is released. Linux creator Linus Torvalds talks about this issue in a recent thread on the lkml."
From: Linus Torvalds [email blocked]
Subject: Re: Linux GPL and binary module exception clause?
Date: Wed, 3 Dec 2003 16:00:21 -0800 (PST)
On Wed, 3 Dec 2003, Kendall Bennett wrote:
>
> I have heard many people reference the fact that the although the Linux
> Kernel is under the GNU GPL license, that the code is licensed with an
> exception clause that says binary loadable modules do not have to be
> under the GPL.
Nope. No such exception exists.
There's a clarification that user-space programs that use the standard system call interfaces aren't considered derived works, but even that isn't an "exception" - it's just a statement of a border of what is clearly considered a "derived work". User programs are _clearly_ not derived works of the kernel, and as such whatever the kernel license is just doesn't matter.
And in fact, when it comes to modules, the GPL issue is exactly the same. The kernel _is_ GPL. No ifs, buts and maybe's about it. As a result, anything that is a derived work has to be GPL'd. It's that simple.
Now, the "derived work" issue in copyright law is the only thing that leads to any gray areas. There are areas that are not gray at all: user space is clearly not a derived work, while kernel patches clearly _are_ derived works.
But one gray area in particular is something like a driver that was originally written for another operating system (ie clearly not a derived work of Linux in origin). At exactly what point does it become a derived work of the kernel (and thus fall under the GPL)?
THAT is a gray area, and _that_ is the area where I personally believe that some modules may be considered to not be derived works simply because they weren't designed for Linux and don't depend on any special Linux behaviour.
Basically:
- anything that was written with Linux in mind (whether it then _also_
works on other operating systems or not) is clearly partially a derived
work.
- anything that has knowledge of and plays with fundamental internal
Linux behaviour is clearly a derived work. If you need to muck around
with core code, you're derived, no question about it.
Historically, there's been things like the original Andrew filesystem module: a standard filesystem that really wasn't written for Linux in the first place, and just implements a UNIX filesystem. Is that derived just because it got ported to Linux that had a reasonably similar VFS interface to what other UNIXes did? Personally, I didn't feel that I could make that judgment call. Maybe it was, maybe it wasn't, but it clearly is a gray area.
Personally, I think that case wasn't a derived work, and I was willing to tell the AFS guys so.
Does that mean that any kernel module is automatically not a derived work? HELL NO! It has nothing to do with modules per se, except that non-modules clearly are derived works (if they are so central to the kenrel that you can't load them as a module, they are clearly derived works just by virtue of being very intimate - and because the GPL expressly mentions linking).
So being a module is not a sign of not being a derived work. It's just one sign that _maybe_ it might have other arguments for why it isn't derived.
Linus
From: Linus Torvalds [email blocked]
Subject: Re: Linux GPL and binary module exception clause?
Date: Wed, 3 Dec 2003 16:23:33 -0800 (PST)
On Wed, 3 Dec 2003, Linus Torvalds wrote:
>
> So being a module is not a sign of not being a derived work. It's just
> one sign that _maybe_ it might have other arguments for why it isn't
> derived.
Side note: historically, the Linux kernel module interfaces were really quite weak, and only exported a few tens of entry-points, and really mostly effectively only allowed character and block device drivers with standard interfaces, and loadable filesystems.
So historically, the fact that you could load a module using nothing but the
"Maybe it was, maybe it wasn't, but it clearly is a gray
area." -Linus Torvalds
Several issues need to be more clearly defined before the forest is seen for the trees.
The phrase "Her bosom heaved..." can probably be found in 152,234 fictional books. If I add a few more words, it becomes a sentence and can probably be found in 1,289 books.
Derivation means you take the original work which has some 'body' of substance and add or subtract to it. Using less than that results in an excerpt. We know that excerpts can be used all over the place. There is also a difference in whether the material is 'instructional' in nature. Significantly more leeway is given. The kernel and associates aren't 'instructional'.
Simply including one line of a system or function call will not make a work a derivation. Including a file (or, even if not a 'file') of substantial body will make a work derivative. Two people writing a play may write separate acts which are then combined and published. Their final work is not one derived from another, but a shared work - joint equal ownership. If they individually copyright their own 'act', the joining would be derivative - the former not.
Binary code is a derivative work. It could not have occurred without the source file. But is it a copyright derivative? Colorization of B&W films results in new copyright, but also contains information for the 'source' that is identifiable. Binary code doesn't except for strings which might appear.
If I use a proprietary compiler on a GPL code, I get a binary. In one sense, it's derivative. In another, it's not. If I create my own scrambler, and process the novel Gone with the Wind text, is that new work a copyright derivative? I think not. This may even imply that using a GPL compiler on GPL source may result in a work that is -not- GPL because it could only be created via the creators unique use of the tools.
Joining a transmission to a motor will not result in copyright infringment over either the motor or tranmission, without regard that they have complex connectivity, assuming there were only separate copyrights beforehand. Patents aren't an issue either provided there is one for the motor and one for the transmission.
Whoever put the two together can sell it or use it as they wish.
Titles cannot be copyrighted. For more protection over things like system or function calls which may be specific to Linux, it may be necessary to do more legal legwork. For example, it may be necessary to assign a trademark to the function one-liner. Overkill? Not in todays legal world. Perhaps a GPL for trademarks used in Linux will become necessary.
Show FirBee some love.
>If you are doing it and it feels wrong
>then you are an asshole for doing it
>in the first place.
I don't know the meaning of the word 'don't' - J
I agree with you 100%, but... I can see a fairly good business reason for a company not to want to release their driver as Free software. Imagine you are FooCard manufacturer. Your FooCard uses the BarChip and is basically built to the BarChip company's reference board design. You write a driver for it and put a check in the init code to look for your card's special signature and abort if that isn't present. If the driver is Free, your competitors (also building cards using BarChip's reference board design) will just hack the signature part and, voila! they have full Linux support too. If you keep the source closed (and proprietary, no license) they have no driver (and can't use yours because of the signature check) so they have no Linux support and you have a competitive advantage.
No - GPL is about copying and modifying code (and distribution). If you wrote module from scratch - all the code is yours and you are free to put it under any license you want. Well, especially if you do not use even Linux's header files ;).
In GPL word "derived" applies only to copied or modified program. You can't say it derived just because you intended to use it with Linux kernel first.