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 explaining:
"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."
From: "Kendall Bennett [email blocked] To: linux-kernel Subject: Linux GPL and binary module exception clause? Date: Wed, 03 Dec 2003 13:31:54 -0800 Hi All, 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. Obviously today there are vendors delivering binary modules (not supported by the kernel maintainers of course), so clearly people believe this to be true. However I was curious about the wording of this exception clause so I went looking for it, but I cannot seem to find it. I downloaded the 2.6-test1 kernel source code and looked at the COPYING file, but found nothing relating to this (just the note at the top from Linus saying user programs are not covered by the GPL). I also looked in the README file and nothing was mentioned there either, at least from what I could see from a quick read. So does this exception clause exist or not? If not, how can the binary modules be valid for use under Linux if the source is not made available under the terms of the GNU GPL? Lastly I noticed that the few source code modules I looked at to see if the exception clause was mentioned there, did not contain the usual GNU GPL preable section at the top of each file. IMHO all files need to have such a notice attached, or they are not under the GNU GPL (just being in a ZIP/tar achive with a COPYING file does not place a file under the GNU GPL). Given all the current legal stuff going on with SCO, I figured every file would have such a header. In fact some of the files I looked at didn't even contain a basic copyright notice!! Regards, --- Kendall Bennett Chief Executive Officer SciTech Software, Inc. Phone: (530) 894 8400 http://www.scitechsoft.com ~ SciTech SNAP - The future of device driver technology! ~
From: Arjan van de Ven [email blocked] Subject: Re: Linux GPL and binary module exception clause? Date: Wed, 03 Dec 2003 22:47:54 +0100 On Wed, 2003-12-03 at 22:31, Kendall Bennett wrote: > Hi All, > > 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. there is no such exception, for example see: http://www.kernelnewbies.org/kernels/rh9/SOURCES/COPYING.modules
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 these standard interfaces tended to be a much stronger argument for not being very tightly coupled with the kernel. That has changed, and the kernel module interfaces we have today are MUCH more extensive than they were back in '95 or so. These days modules are used for pretty much everything, including stuff that is very much "internal kernel" stuff and as a result the kind of historic "implied barrier" part of modules really has weakened, and as a result there is not avery strong argument for being an independent work from just the fact that you're a module. Similarly, historically there was a much stronger argument for things like AFS and some of the binary drivers (long forgotten now) for having been developed totally independently of Linux: they literally were developed before Linux even existed, by people who had zero knowledge of Linux. That tends to strengthen the argument that they clearly aren't derived. In contrast, these days it would be hard to argue that a new driver or filesystem was developed without any thought of Linux. I think the NVidia people can probably reasonably honestly say that the code they ported had _no_ Linux origin. But quite frankly, I'd be less inclined to believe that for some other projects out there.. Linus
From: Jason Kingsland [email blocked]
Subject: Re: Linux GPL and binary module exception clause?
Date: Thu, 4 Dec 2003 10:21:55 -0500
On Wed, 3 Dec 2003, "Linus Torvalds" wrote:
> 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.
> ...
> - 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.
If that is the case, why the introduction of EXPORT_SYMBOL_GPL and
MODULE_LICENSE()?
Specifying explicit boundaries for the module interface has legitimised
binary-only modules.
This was the signal to developers of proprietary code that binary-only
modules are tolerable.
Note that I said tolerable, not acceptable. Ref also the 'tainted' flag
("man 8 insmod")
My personal view is that Linux should mandate GPL for all modules in 2.6 and
beyond.
The Kevin Dankwardt article gives an alternative perspective for Linux
embedded use:
http://www.linuxdevices.com/articles/AT5041108431.html
From: Linus Torvalds [email blocked]
Subject: Re: Linux GPL and binary module exception clause?
Date: Thu, 4 Dec 2003 07:58:30 -0800 (PST)
On Thu, 4 Dec 2003, Jason Kingsland wrote:
> > - 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.
>
>
> If that is the case, why the introduction of EXPORT_SYMBOL_GPL and
> MODULE_LICENSE()?
It is really just documentation.
This is exactly so that it is more clear which cases are black-and-white,
and where people shouldn't even have to think about it for a single
second. It still doesn't make the gray area go away, but it limits it a
bit ("if you need this export, you're clearly doing something that
requires the GPL").
Note: since the kernel itself is under the GPL, clearly anybody can modify
the EXPORT_SYMBOL_GPL() line, and remove the _GPL part. That wouldn't be
against the license per se. But it doesn't make a module that needs that
symbol any less needful of the GPL - exactly because the thing is just a
big cluehint rather than anything else.
Linus
From: Valdis Kletnieks [email blocked] Subject: Re: Linux GPL and binary module exception clause? Date: Fri, 05 Dec 2003 00:13:01 -0500 On Fri, 05 Dec 2003 15:23:10 +1100, Peter Chubb said: > As far as I know, interfacing to a published API doesn't infringe > copyright. Well, if the only thing in the .h files was #defines and structure definitions, it would probably be a slam dunk to decide that, yes. Here's the part where people's eyes glaze over: % cd /usr/src/linux-2.6.0-test10-mm1 % find include -name '*.h' | xargs egrep 'static.*inline' | wc -l 6288 That's 6,288 chances for you to #include GPL code and end up with executable derived from it in *your* .o file, not the kernel's. More to the point, look at include/linux/rwsem.h, and ask yourself how to call down_read(), down_write(), up_read(), and up_write() without getting little snippets of GPL all over your .o. And even if your module doesn't get screwed by that, there's a few other equally dangerous inlines waiting to bite you on the posterior. I seem to recall one of the little buggers was particularly nasty, because it simply Would Not Work if not inlined, so compiling with -fno-inline wasn't an option. Unfortunately, I can't remember which it was - it was mentioned on here a while ago when somebody's kernel failed to boot because a gcc 3.mumble had broken inlining.....
From: David Schwartz [email blocked] Subject: RE: Linux GPL and binary module exception clause? Date: Thu, 4 Dec 2003 22:34:37 -0800 > On Fri, 05 Dec 2003 15:23:10 +1100, Peter Chubb said: > > > As far as I know, interfacing to a published API doesn't infringe > > copyright. > > Well, if the only thing in the .h files was #defines and > structure definitions, > it would probably be a slam dunk to decide that, yes. > > Here's the part where people's eyes glaze over: > > % cd /usr/src/linux-2.6.0-test10-mm1 > % find include -name '*.h' | xargs egrep 'static.*inline' | wc -l > 6288 > > That's 6,288 chances for you to #include GPL code and end up > with executable derived from it in *your* .o file, not the kernel's. I'm sorry, but that just doesn't matter. The GPL gives you the unrestricted right to *use* the original work. This implicitly includes the right to peform any step necessary to use the work. (This is why you can 'make a copy' of a book on your retina if you have the right to read it.) Please tell me how you use a kernel header file, other than by including it in a code file, compiling that code file, and executing the result. > More to the point, look at include/linux/rwsem.h, and ask yourself > how to call down_read(), down_write(), up_read(), and up_write() > without getting little snippets of GPL all over your .o. Exactly, it's impossible. So doing so is a necessary step to using the header file. > And even if your module doesn't get screwed by that, there's a > few other equally dangerous inlines waiting to bite you on the posterior. No problem. If you can't avoid them, then you're allowed to do them. > I seem to recall one of the little buggers was particularly > nasty, because it > simply Would Not Work if not inlined, so compiling with > -fno-inline wasn't an > option. Unfortunately, I can't remember which it was - it was > mentioned on > here a while ago when somebody's kernel failed to boot because a > gcc 3.mumble > had broken inlining..... So you're argument is that it's impossible to use the header file without creating a derived work, hence permission to use the header file is permission to create the derived work. This supports my argument that you can create a derived work without agreeing to the GPL. Thanks. DS
From: Linus Torvalds [email blocked] Subject: RE: Linux GPL and binary module exception clause? Date: Thu, 4 Dec 2003 22:58:09 -0800 (PST) On Thu, 4 Dec 2003, David Schwartz wrote: > > The GPL gives you the unrestricted right to *use* the original work. > This implicitly includes the right to peform any step necessary to use > the work. No it doesn't. Your logic is fundamentally flawed, and/or your reading skills are deficient. The GPL expressly states that the license does not restrict the act of "running the Program" in any way, and yes, in that sense you may "use" the program in whatever way you want. But that "use" is clearly limited to running the resultant program. It very much does NOT say that you can "use the header files in any way you want, including building non-GPL'd programs with them". In fact, it very much says the reverse. If you use the source code to build a new program, the GPL _explicitly_ says that that new program has to be GPL'd too. > Please tell me how you use a kernel header file, other than by including > it in a code file, compiling that code file, and executing the result. You are a weasel, and you are trying to make the world look the way you want it to, rather than the way it _is_. You use the word "use" in a sense that is not compatible with the GPL. You claim that the GPL says that you can "use the program any way you want", but that is simply not accurate or even _close_ to accurate. Go back and read the GPL again. It says: "The act of running the Program is not restricted" and it very much does NOT say "The act of using parts of the source code of the Program is not restricted" In short: you do _NOT_ have the right to use a kernel header file (or any other part of the kernel sources), unless that use results in a GPL'd program. What you _do_ have the right is to _run_ the kernel any way you please (this is the part you would like to redefine as "use the source code", but that definition simply isn't allowed by the license, however much you protest to the contrary). So you can run the kernel and create non-GPL'd programs while running it to your hearts content. You can use it to control a nuclear submarine, and that's totally outside the scope of the license (but if you do, please note that the license does not imply any kind of warranty or similar). BUT YOU CAN NOT USE THE KERNEL HEADER FILES TO CREATE NON-GPL'D BINARIES. Comprende? Linus
From: Erik Andersen [email blocked] Subject: Re: Linux GPL and binary module exception clause? Date: Thu, 4 Dec 2003 17:46:54 -0700 On Thu Dec 04, 2003 at 03:50:55PM -0800, Paul Adams wrote: > Unless actual Linux code is incorporated in a binary > distribution > in some form, I don't see how you can claim > infringement of the > copyright on Linux code, at least in the U.S. A kernel module is useless without a Linux kernel in which it can be loaded. Once loaded, it becomes not merely an adjunct, but an integrat part of the Linux kernel. Further, it clearly "incorporate[s] a portion of the copyrighted work" since it can only operate within the context of the kernel by utilizing Linux kernel function calls. To abuse your earlier metaphor, a kernel module is not comparable to a programmatic musical composition inspired by a novel. It is better comparared with another novel with substantial similarity in the theme, plot, sequence, settings, mood, dialogue, and characters, with the same story being told, with trademarked phrases and taglines, and that makes no sense whatsoever unless you insert it's entire content over the top of page 450, paragraph 4 (of the Linux "novel"), and which thereby changes the ending of the original book... -Erik -- Erik B. Andersen http://codepoet-consulting.com/ --This message was written using 73% post-consumer electrons--
From: Zwane Mwaikambo [email blocked] Subject: Re: Linux GPL and binary module exception clause? Date: Thu, 4 Dec 2003 19:58:18 -0500 (EST) On Thu, 4 Dec 2003, Erik Andersen wrote: > A kernel module is useless without a Linux kernel in which it can > be loaded. Once loaded, it becomes not merely an adjunct, but an > integrat part of the Linux kernel. Further, it clearly > "incorporate[s] a portion of the copyrighted work" since it > can only operate within the context of the kernel by utilizing > Linux kernel function calls. What about software which utilises Linux specific kernel services, such as say some cd writing software?
From: Erik Andersen [email blocked] Subject: Re: Linux GPL and binary module exception clause? Date: Thu, 4 Dec 2003 18:03:49 -0700 On Thu Dec 04, 2003 at 07:58:18PM -0500, Zwane Mwaikambo wrote: > What about software which utilises Linux specific kernel > services, such as say some cd writing software? An ordinary program that uses normal system calls? linux/COPYING says: This copyright does *not* cover user programs that use kernel services by normal system calls - this is merely considered normal use of the kernel, and does *not* fall under the heading of "derived work". -Erik -- Erik B. Andersen http://codepoet-consulting.com/ --This message was written using 73% post-consumer electrons--
From: Larry McVoy [email blocked] Subject: Re: Linux GPL and binary module exception clause? Date: Thu, 4 Dec 2003 17:21:24 -0800 On Thu, Dec 04, 2003 at 06:03:49PM -0700, Erik Andersen wrote: > On Thu Dec 04, 2003 at 07:58:18PM -0500, Zwane Mwaikambo wrote: > > What about software which utilises Linux specific kernel > > services, such as say some cd writing software? > > An ordinary program that uses normal system calls? > > linux/COPYING says: This copyright does *not* cover user programs > that use kernel services by normal system calls - this is merely > considered normal use of the kernel, and does *not* fall under > the heading of "derived work". Yeah, and the GPL specificly invalidates that statement. We're on thin ice here. Linus is making up the rules, which is cool (since I tend to like his rules) but the reality is that the GPL doesn't allow you to extend the GPL. It's the GPL or nothing. Given the GPL rules you have to disregard Linus' rules that are extensions and work off of standard law. When you get there it becomes an issue of boundaries and the law seems to clearly support Linus' point of view, he didn't need to make that clarification, whether he did or not, that's what is true in the eyes of the law. But given that, neither Linus (nor any of you) get to say "well, that's fine for userland but drivers are derived works". I've said this over and over and I'll say it again. If you want the protection of the law you have to live with the law's rules. You DO NOT get to say "user programs are a boundary across which the GPL does not apply but drivers are a boundary across which the GPL does apply". It doesn't, and can't, work that way. Either userland is GPL and drivers are GPL or neither are GPLed. Take your pick. -- --- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm
From: Linus Torvalds [email blocked] Subject: Re: Linux GPL and binary module exception clause? Date: Thu, 4 Dec 2003 17:58:18 -0800 (PST) On Thu, 4 Dec 2003, Larry McVoy wrote: > > > > linux/COPYING says: This copyright does *not* cover user programs > > that use kernel services by normal system calls - this is merely > > considered normal use of the kernel, and does *not* fall under > > the heading of "derived work". > > Yeah, and the GPL specificly invalidates that statement. We're on thin > ice here. Linus is making up the rules, which is cool (since I tend to > like his rules) but the reality is that the GPL doesn't allow you to > extend the GPL. It's the GPL or nothing. Larry, you are wrong. The license _IS_ the GPL. There's no issue about that. The GPL rules apply 100%. But a license only covers what it _can_ cover - derived works. The fact that Linux is under the GPL simply _cannot_matter_ to a user program, if the author can show that the user program is not a derived work. And the linux/COPYING addition is not an addition to the license itself (indeed, it cannot be, since the GPL itself is a copyrighted work, and so by copyright law you aren't allowed to just take it and change it). No, the note at the top of the copying file is something totally different: it's basically a statement to the effect that the copyright holder recognizes that there are limits to a derived work, and spells out one such limit that he would never contest in court. See? It's neither a license nor a contract, but it actually does have legal meaning: look up the legal meaning of "estoppel" (google "define:" is qutie good). Trust me, it's got _tons_ of legal precedent. Linus
Game companies
Game companies need competent stable drivers
There is only one way to get this and it is to open the hardware specs and software source. How else are the game developers gonna learn how to optimize their code..sarcasm mode on.. oh yeah..break out the NDAs sarcasm mode off
Open the hardware specs and software source?
That will not work for many areas (including the video and WiFi) for simple reasons:
1) Non-trivial drivers (unlike the simple ones, like the ones for hard drive controllers and serial ports) usually have third party sources inside. This third party earns living via licensing, so it will never agree to open source.
2) As CPUs are getting faster, chips are getting simpler, and drivers more complicated. It is hard to clone a chip 100%, but with the driver source open, it is enough to clone with 98% accuracy. Hardware manufacturers do not want to lose market to cloners.
3) Legal issues might restrict opening the source (see examples above on DeCSS and FCC compliance).
Not quite.
I'm going to disagree with this. You only need to know the interfaces, the inner workings are entirely irrelevant. Can you figure out the design of the Linux kernel from the POSIX APIs it implements without taking a peek at the source? Hardly.
Unless manufacturers are including all kinds of functionality in drivers that should be handled by firmware, there's really no justification for this sort of behavior.
Not quite not quite
It is simply cheaper to offload some firmware functions onto the Pentium. With the squeeze on the margins that the semiconductor and PC OEM guys are experiencing, expect even more features running on CPU, and even simpler chips - and more drivers with closed source.
Software modems represent a good example - IMO, they would have been supported on Linux, if binary driver interfaces existed there. It is hard to justify maintaining binary interface at the application level while rejecting it at the kernel level by any argument of non-religious type.
Just as there is nothing wrong with the binary applications, there should be nothing wrong with the binary drivers. At the very least, Linus now - after the confusion that is surely be caused by his statements on the thread - owes hardware manufacturers some set of rules, describing how to avoid opening the code if they think it is not possible or simply do not perceive it as beneficial.
It would be much better, of course, if someone would bite the bullet and define binary driver interface for Linux. Otherwise, these interfaces will simply pop up in uncoordinated ad-hoc fashions - just like they already did in X and WiFi areas.
Modem support - Harware specs irrelevent
The modem hardware on most motherboards is merely an A/D and D/A. The actual modem you pay for is implemented in DSP firmware that has been ported to the driver.
If modem companies are forced to release the source of that to support Linux, there will be no Linux modem support for any of these.
So, the community is left a choice of learning to accept supported binaries or no support at all.
Alternatively, you could wait for the GNU Radio project to echo cancel, then equalize, then demodulate QAM, then trellis, then LAPM, then V42bis. Then, you'll be within 8 years of up-to-date.
I am a big believer in open-source. But don't expect every company to give their products away just to make Linux users happy.
Many good companies will take a few extra steps to suppot Linux drivers, but not if they have to give away their own products to do it.
So, the community is left a c
Funny the DRI drivers for 850
Funny the DRI drivers for 8500 run as worse than FIREFLY drivers
Nvidia >> Ati >> DRI...
Can opensource DRI freely implement patented stuff like S3TC, HYPEr-z, SMOOTHievision, TRUEform, PIXIE shaders, UltraShadows, etc.
Can DRI makes textures look more detailed & rainbow-color without S3TC???
Can DRI live up to the HYPE set by Ati without HYPEr-z???
Can DRI makes the game SMOOTH looking without SMOOTHievision????
Can DRI drivers do MAGIC without PIXIE dust?????
Can DRI drivers deliver TRUE human forms without TRUEform???
Does the creepy shadows freezes you to molasses-slow without UltraShadows if you hypothetically have an open-sourcer Nvidia driver in DRI?????
Naive people!!! Ati only release basic 3D cores for R200. Wasted my money thinking it was gonna be great running DRI... Without these, you might as well find a used VOODOO card
Too bad that so far, many of
Too bad that so far, many of these binary drivers are only HALF competant. Try getting 3D acceleration working with a Radeon 9600 using their proprietary drivers...
So far, except perhaps for NVIDIA (and even then, its sometimes a crapshoot whether it'll work), most of these closed source are about as "professional and polished" as a turd.
Have you EVEN tried DRI drive
Have you EVEN tried DRI driver??? Tuxracer's penguin has always leave a plain bluish trails (not snow tracks) on Banshee card (maybe other voodoos too) -- it has been for many years. Last time I check, it is still there on Redhat 9. Quality of DRI???
http://dri.sourceforge.net/old/faq/faq_display.phtml?id=56
Here the DRI driver supposed to support T&L but it ran 14 FPS with DRI (my banshee with no T&L on 400Mhz can run 29FPS) versus 60 FPS with FIREFLY drivers. So dont simply ask something you will regret.
My interpretation...
I was under the impression that you could add non-GPL code to any GPL program, but you weren't allowed to distribute it in that case, since you couldn't satisfy both the proprietary licence of the additional software, and the GPL licence of the original code.
That would mean that, for example, nVidia's binary drivers are acceptable, as long as the end user installs them. A Linux distributor wouldn't be able to ship a distro with the driver installed, because it would be a non-GPL part of GPL software. Once the end-user receives the software, though, as long as they don't give the whole thing to someone else later, they can install and use the binary driver.
You just couldn't ship an entire kernel with the binary driver included as part of it.
Anybody want to disagree with me? IANAL, so I could be wrong....this is just the way I read it.....
Wow! A Good Summary!
A guy at work has been asking me about this. He's always coming up with this FUD about how we can't support Linux because we don't want to release our closed-source IP. Mostly, he acts like a troll, even though he has on occasion installed Linux and he has investigated the Linux community. Mostly, he has a vested interest in Solaris so his opinions are mostly biased thusly. I told him that if we really want to see how our company could tread the Linux waters, we should see how NVidia is able to do what they do with their binary drivers. Well, this explanation is the clearest explanation that I have seen yet. The interface to the NVidia driver is GPL'ed. However, the binary driver is closed source. Since the user loads the driver for their own private use, there's no conflict with the GPL. This is a very nice concise summary.
Please remember
That the Linux community (especially kernel community) isn't going to cry for your blood as soon as you put a foot wrong. Even if you end up distributing something you shouldn't be, you aren't going to be forced to cough up any source code.
The kernel guys are pretty patient even with companies that don't deserve such treatment. Don't believe me though, do a google search:
"GPL violation" group:linux.kernel
Note that if you distribute a hardware solution with GPL infringing code then there could be more pressure on you to release the source. Put your IP in userspace if possible and you're in the clear there.
Sounds right.
This is exactly how SuSE is handling the NVIDIA driver issue. The installer for 9.0 says that it will not activate 3D support because they can't distribute the binary driver. But in your first system update they give you a script that automates the downloading from NVIDIA's site and the installing of the binary driver. No violations, and very easy for the user.
I like it.
I like even more my radeon wi
I like even more my radeon wich does decent 3d with the open source drivers (not yet included in xfree, neither 4.4 release). As a sidenote, for this radeon (igp) there are no binnary drivers, but the open source ones are done with help from ATI. So at last this vendor seems to support OS drivers.
excerpts vs derivation definition and their use.
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.
regards,
W in B-More Town
ownership of the binary
After the pregnant pause for concept seepage:
(I wrote the comment this one is replying to)..
Copyright is on the article of work.
The first person who generates a work is the owner -
Therefore, when kernel 2.6 is released, if Linus
is the -first person- to create the binary (or obj's),
then he is the owner, and others created afterward
are derivative of that by virtue that they contain
the same substantial material regardless how HOW it
was created. It could be argued that two different mechanisms
can create the same work, but for copyright, only the
first one counts.
In the case of the 2.6 kernel, it could be construed to be
either a new work, or a derivation of the 2.4 kernel.
To make this easy, I'll assume that Linus created the first
bin's in the entire line of 2.6 pre-releases. If the bins
are different 'works' by the govt definition, he's the owner.
If they are NOT different, i.e. they look a lot like the 2.4
kernel, then it's a derivative of the 2.4 owned by......
At this point, by inductive reasoning, Linus is the owner of
record of all the binaries in the various kernels.
Please note that this discussion does not include the implication
of any predefined 'works' in the compiler, nor does
it include separately developed GNU material simply stacked or
attached into a software group.
In the same way, we can assume that whoever (by whatever means)
'puts together' source for a module, is then most likely the
first person to create the module bin. From this, we can see a more accurate assessment of who owns
module source, and module binaries. (The same argument should be made
when discussing objs and any other intermediate step process file 'works')
W in B-More Town.......
Re: ownership of the binary
"Copyright is on the article of work. The first person who generates a work is the owner - Therefore, when kernel 2.6 is released, if Linus is the -first person- to create the binary (or obj's), then he is the owner, and others created afterward are derivative of that by virtue that they contain the same substantial material regardless how HOW it was created. It could be argued that two different mechanisms can create the same work, but for copyright, only the first one counts."
Building a piece of executable code has precisely *no* effect on who owns the copyright to that code. From a copyright perspective there is no difference between the source code and the object code you get from compiling it. The person who owns the copyright on a piece of code is the person who fixed it to a tangible medium (the person who wrote it).
In the case of the kernel, Linus owns a copyright on the kernel (as a whole) by virtue of being the original author of what is now a collection of works. Also, everyone else who has code that is included (and hasn't assigned their copyright to someone else) has a copyright on that code.
Copyright for creative contents
Stop using copyright for technical stuff -- give 10000 programmers around the world, ask them to describe linked-list in english-
it wont take long before people start infringing on each others - even when none of them have ever read the same book or have the same teacher. This is because there is only X limited ways to word out the description unlike creative contents. There is nothing creative about textbook. No matter how you word it.
A wooden boy with a nose that grows when he lies - can have infinite incarnations (maybe the wooden boy wants to be a chair in my intrepretation :?o) -- when it comes to imagination, sky is the limit. That clearly makes Pinochio uniquely a Disney's intrepretation!!!
You get the point. Copyright on technical stuff serves nothing but waste public money defending in court, etc.
Copyright law says translations are derived works.
Binaries are translations of source, so they are indeed derived works of the source. If I take the latest Harry Potter novel and translate it to Klingonese (for a silly example), I do hold copyright on the translation, but so does J. K. Rowling, since my work was derived from hers. Further, if somebody else makes their own, independant translation (even using the same automatic translation tool that I used), they get their own copyright (as does Rowling) on that version.
(Actually, with a machine translation, the courts may hold that there's insufficient "original creative contribution" for either of us to have any defensible copyright in the translated versions, so J. K. Rowling remains the sole copyright holder. And of course there might be issues with Warner Bros., who own trademark rights on most of the Harry Potter stuff.)
Using a compiler to create a binary from source probably doesn't give you any copy rights due to the lack of any creative input from you, so copyright remains entirely with the author(s) of the source.
copyright and translations, merged
Agreed. Thats why the copyright office likes to
see both source and object submitted. The translation
to object you speak of should be 'clean' in that no additional
information is injected. This, however, can happen in the link.
In this case, one needs to ask: Is the linker GPL'd ?
(either gcc link, or insmod link - see below).
The linker will add information to create a binary.
For anyone to use GPL source, the link action requires
license agreement between source, linker, and objects
being linked to (libraries). This is a basic Q.
A module has two places for derivative works, only one from
the author: inclusion files and the link process.
The Author makes the determination whether s/he wants to
be proprietary or not by this simple method. If the inclusion
information is weakly substantial, there may be no copyright
derivative; i.. a one line Macro.
The second place is in the link which is done by insmod -
for which the author has no direct control during the actual use
of the module. The author makes
no claims in this step and contributes nothing. At this point,
it becomes a user responsibility. The author may be out of the
loop, and it is the user that 'joins' creating a derivative
work (by the installation process of insmod merging the module with
the kernel) - and becoming a copyright holder; the author is still the owner of his original code, and Linus still owns the kernel merged to.
The same then holds true for the kernel. The source, and
object code rights are held by the author: But one needs to ask;
what inclusion of other 'works' are there in the source,
or final binary ? Again, ignoring the other 'normal' contributing authors or SCO claims for Linux, it rests with the compilers final stage to complete the binary: linker additions and libraries.
I believe if I went to the gcc web site and followed up by
reading their license, this may not be so complicated, and an answer would simply drop out. OTOH, if not GPL'd, that could be another issue needing to be dealt with. One large bone of contention among others
seems to be the API, and related issues. It's merely a Q of how much does it take to constitute a copyrightable work, and then deciding if it's a joining, or a 'merging', and how the GPL applies to -both-. Precedents may be in use of excerpts or titles, as mentioned previously for inclusion data.
regards,
W in B-More Town
Binaries are a little differe
Binaries are a little different...
C code
------
printf ("hello");
Compiler A,B,C,D will all spitout
---------------------------------
move "Hello" 0x2000
No compiler will try to generate inefficient code like below:
nop // insert here gratiously to please copyright. sheezz....
nop
move "Hello" 0x2000
So everybody who has written a simple hello world would have indeed generate almost similar binaries regardless of compilers user to make the translation.
In your case, if you word out Harry Potter in plain-Bob kligonese matching almost word-to-word that even altavista language translator can do if it has the libraries to do so, yours wont have much "original creative contribution" than the mechanical translated version neither, so why would you be any qualified to hold the copyright??? But if you word out harry potter in a passionate, full-of-warrior-spirit kligonese that dont match word-for-word, then you may qualify... But then, who would want read a wacky & redicolous rendition of Harry Potter in kligonese???
Copyrights serves best for creative works - nothing more nothing less.
What a load of Rubbish.
Firstly we have Linux saying that it is impossible to build a non-GPL affected kernel module as it is required to include (though .h includes) GPL covered code, and it is not possible to avoid this.
Then he goes on to say that if a module is developed externally to linux (some filesystems and nvidia video driver) then it somehow magically does not need to comply with this rule.
Come on Linus, which is it? this is obviously a mess, and it cannot be had both ways. Either including the required .h files REQUIRES the GPL, or it does not!
Personally, I feel that it is essential that binary kernel modules are allowed their own license, otherwise there will be a range of functionality linux never sees.
I mean, what if I write a (GPL'd) binary kernel module that then exposes just enough stubs for a user land app (closed license) to do the rest? have I just successfully circumvented all these requirements?
Of course it's Rubbish, it has to do with laws
The bottom line with all these arguments is whether these things will stand in a court of law; until they are tested, no one knows. And they are complex enough that a single suit will not make it all clear.
Legally, although it would seem that the _intent_ of the GPL might be described as straightforward, it's obvious that as the GPL begins to interact with other licenses and copyrights it becomes difficult to understand.
I think the courts would follow the logic that says that the idea was to attempt to prevent someone from absconding with code, tweaking it and then calling it their own, or putting a shiny new module on it and calling the whole thing their own. (Not so much _calling_ it their own, but _selling_ it as their own -- if somebody wants to dress up Linux and call it Susan, who cares?).
Linux does not need to rule the world like MS needs to rule!
RE: "Come on Linus, which is it? this is obviously a mess, and it cannot be had both ways".
There are options:
Linux is only an option... BSD is an option, OS-X, UNIX, etc.
If you wish you can just write stuff for Microsoft and discover that one day they are in your field with 5,000 programmers and you are out of business.
Saddly, the Anti-trust case that was mis-handled by the US gov and others has left MS untouched with their monopoly intact - so there is no other commercial option available to code writers (other than, take your pick - and the pick-in's are slim. Thus the birth of LINUX as the user application folks can still write code and not have the developer of the OS suddenly show up in their field of business!
The creme will always float to the top!
Makes perfect sense. Nvidia d
Makes perfect sense. Nvidia does release the source to their driver. The kernel part of it. The kernel part of it then talks to a seperate closed source binary. The closed source binary does not contain Linux knowledge, but could probably run on Windows as well (it might even be the same code????). This perfectly gets around the GPL, and it is perfectly legal. The code that NVidia made as a deriveted version of linux is in fact open source.
See the fourth comment (coincidentally written by me).
The question is then if a GPL library with a special exception is compatible with the GPL or not...
If it is, then anyone can write a little piece of GPL'ed code with an exception to circumvent the GPL, if it isn't, then a GPL'ed program with an exception isn't really GPL.
My line of thought is as follow:
You cannot copyright an API.
Libraries don't have much else interface with the program than through an API.
Conclusion: If you write your own header files, and load a library dynamically with dlopen (or something similar with modules), then the GPL can not disallow that.
Also, the GPL says:
"Activities other than copying, distribution and modification
are not covered by this License; they are outside its scope."
So how the GPL could disallowing linking to closed source programs (or anything else with a GPL incompatible license) is a bit unclear to me, and yet in the GPL FAQ they say you need to make a special exception for such case.
indeed
Indeed. It seems total hipocracy to me to claim on the one hand MS 'cannot' copyright the API interfaces around Windows and you should be 'free' to duplicate the functionality (a la Wine), and then on the other hand claim that the self-same operation could not be done in order to build compatible binary modules for Linux.
Or is, somehow, the "Copyright (c) Microsoft Corporation. All rights reserved." at the top of windows.h somehow less valid than the GPL?
No wonder it's hard to convince some companies to build Linux drivers.
What is a derivative work?
Neighter the GPL nor Linus or anybody else can define what a derivative work is, though it's ok for Linus to say "I recognize that this and that is definitely not derivative work". Copyright law has to define that.
This in mind, is a kernel module based on a clean-room implementation of the header files a derivative work? IMO no, not at all. It's useless without the kernel? That doesn't make it a derivative work. A DVD is useless without a DVD player, but it's not derived from the player. The module is linked against the kernel? Well, not at time of delivery. It's the end-user who does the linking, not the module. You might also notice that it is the kernel who loads the module, not the module who loads the kernel. It was written with Linux in mind? I can't see why this would make it derived from Linux. Millions of programmers write programs for windows, so they have "Windows in mind". Get the point?
In mind? What I means?
Maybe I am missing something when I have thought possibility to combine closed source with GPLed one. Let’s think about C-code to simplify the case. I have my own code (A.c) whit is own interface. I make header file (B.h) where that interface is defined. It is derived from my own code (A.c).
In GPL side I make wrapping GPL code (C.c). I include B.h in my wrapping code (C.c) and it (B.h) becomes GPLed. However, I am contributor of B.h and I release it also as “closed source” with different license in my own application (A.c). I have combined legally GPL and closed source code? Where the logic failed?
Of course, A.c, or what ever, has a meaningful “independent” functionality. It is not just an extension for the existing functionality.
A DVD is not useless without
A DVD is not useless without your DVD-player, because it also works with mine.
That's the difference. If a module was made to work specifically with Linux, it is likely to be considered a derivative work. However, if it is a Solaris-module that works with Linux with a wrapper, it is unlikely to be considered a derivative work.
Look at it this way: Could people have made the module without access to Linux? If the module was made for Linux, no they could not. If it was made for Solaris, yes they could - and probably did.
Same thing for the Nvidia drivers. Since running "strings" on the driver reveals references to \\HKEY_LOCAL_MACHINE (or something like that), it is clear that the driver was made for windows, and thus clearly not a derivative work.
Specifically made for Linux?
> That's the difference. If a module was made to work specifically with
> Linux, it is likely to be considered a derivative work.
By the same logic, an application that was created to run on linux specifically can be considered a derived work.
The distinction based on userland/kernel, while very meaningfull from a technical poitn of view, simply has no relation to copyright or to the limits of a licence.
Also, it is not unreasonable to argue that ending up with fragments from a Linux .h file in your .o file is covered by the right to quote from copyrighted works.
The intention of what Linus wants is clear, but I do not think that the mix of copyright law and GPL is delivering what he wants or hopes.
linking and wrapping .so libraries
the "true" advocates of free software don't like to mention this because it is against their principles.
however, the techniques described here _are_ in use - by open source programmers - for a different purpose - libdvdread and libdvdcss!
i believe it is possible - and also legally protected (91/EC/250) - to circumvent the GPL license when interaction is not possible "by any other means" - at clearly defined interface points.
in other words, as mentioned here a couple of times, you create a header file which, as the author, you DUAL license: one copy is released GPL, the other is released as-you-like (free, BSD, commercial, whatever). that header file contains the definitions of some functions in a NON-gpl dynamically loaded library.
you also release a "wrapper" loading library which MUST also be released under the GPL, because it will link with the GPL'd code.
the wrapper's job is to dynamically load your non-GPL'd code, IF it exists, and call the functions in it.
in order to comply fully with the GPL you must then perform SEPARATE distributions of the original GPL code (including the wrapper program) and also of the non-GPL code.
now, of course, if the original authors do not wish to include your wrapper-patch (because they don't want to) you cannot force them to do so: you must distribute _your own_ version of the GPL code (including the wrapper program).
if you want to go a little more extreme than this, you define an interface - such as a shared memory, named pipe or other interface (and if we were talking GNU/Hurd not Linux, this entire thread would be a total non-starter. *sigh*) and you communicate between your code and the linux kernel, and you take a performance penalty for having to do some things in userspace.
Please clarify...
What is the consequence of this statement for kernel drivers distributed in source form:
Does this mean that it's illegal for me to write a kernel driver and distribute it in source form (but not redistributing any of the kernel source or header files) under a non-GPL license?
I disagree
I happen to disagree with Linus, with all due respect.
What the code is written for has nothing to do with licensing. "Derived work" does not mean work that is made to talk to the original work. My TV is not derived work of my VCR, even as intemit as my TV's and VCR's relationship is.
The way I understand it, if you use any of existing Linux code in your kernel, then it's clearly derived work. If it doesn't, then it's not. If I create a kernel module that (somehow on Earth) makes X Windows blink every two seconds (for some reason), but I only need my module to *talk* to the kernel, then I can't even imagine it being considered as derived work.
Merely talking to a GPL'ed program, no matter how intemitely, doesn't make you derived work. For example, my e-mail client talks to a GPL e-mail server, and whether it uses a Unix socket, a TCP connection or whatnot, has nothing to do with the license, because none of the code in the e-mail server, is in my e-mail client. The license is about source code, not communication mechanisms.
Respect to Linux, I know the man is a genious and all, but I don't think he's any more of a lawyer than any of us. :) Come to think of it, he couldn't possibly be a lawyer and a genious at the same time.
So my humble answer to your question is simply: No. It does NOT mean that your module needs to be GPL'ed, just because it's designed for Linux. If it uses any, (and I mean *any*) code from Linux, it is definately derived work, however, and thus subject to the GPL.
"Derived Work" is defined in GPL
The GPL itself defines a derived work: it's when you take the original and modify it. Linking with GPLed software is covered under a separate clause. Aggregating content with GPLed software is also covered under yet another clause. They're all distinct actions.
Scenario 1: Build a kernel module that doesn't require changes to the published kernel code. Your module is not a derived work - you haven't changed the kernel. So licensing of the kernel module isn't affected by the licensing of the kernel - you can put any licence on the module you like. You can distribute binary only if you want.
Scenario 2: Take your own module, link it with the kernel, and distribute the compiled kernel. This time, you've created a single work (the new kernel) which contains GPLed code. The whole work now has to be covered under the GPL.
Scenario 3: Build a kernel module and ship it as a binary. Include it on a Linux CD, together with instructions on how an end-user can build their own kernel. This time you've merely aggregated content, which is explicitly permitted by the GPL. (Though as noted by others, if the end user builds a kernel incorporating the .o, they cannot meet the obligations for distributing it.)
If Linus wants something other than this, then so long as he actually owns all the kernel he can put any licence on it he likes. But he can't change the GPL without violating it.
Jon
GPL's definition of 'derived work' is not enforcable
The GPL's definition of a 'derived work' is not enforcable except to the extent of the ability to withdraw distribution rights from a party who does not comply with the terms of the license.
As soon as you want to prosecute someone who is separately distributing what you consider to be a derived work such as a binary only kernel module, it is the legal definition of a derived work that applies. The license's definition has nothing to do with whether you can prosecute someone for a copyright violation, only the legal definition.
The legal definition (USC Title 17 Section 101) is:
A 'derivative work' is a work based upon one or more preexisting works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which a work may be recast, transformed, or adapted. A work consisting of editorial revisions, annotations, elaborations, or other modifications which, as a whole, represent an original work of authorship, is a 'derivative work'.
Is a clean room binary kernel module a translation, arrangement, version, condensation, transformation, annotation, elaboration, or revision of the kernel itself?
Derived Work and Kernel Modules
A module might be considered an "elaboration." Using google's define:elaboration yields this from Princeton.
"addition of extra material or illustration or clarifying detail..."
So to the extent that the module is an "addition of extra [code]" to the kernel it might constitute a derive work. Grey, just as Linus said.
Perhaps it is time to write a MGPL (Module GPL) similar to the LGPL, or at least include some more estoppel statements similar to the "user-land" exception, just to provide clairity of where the border is. The MGPL could just be applied to the headers that provide module hooks or something like that.
Of course you might have to call it MHL (Module Header Licence) or something that didn't contain the letters GPL, and it might be a bit of a trick to make sure that the new licence was GPL compatible. Or maybe you would just have to dual licence the headers (GPL and MHL) as has been described elsewhere.
Legal definition of "elaboration" in copyright law
It is clear, given the legal history of this section, that the word "editorial" is intended to modify all the subsequent terms. In other words, editorial revisions, editorial annotations, editorial elaborations, and editorial modifications make something a derivative work.
Not all elaborations are editorial elaborations. In particular, a binary only kernel module is not generally an editorial elaboration of the kernel itself. An editorial elaboration means you actually have to edit the original work.
If that were not the case, all independent user guides, commentaries, reviews, programs, add ons, etc. would all be derivative works.
header files and userlBut a license only covers what it _can_and
Linus said:
> But a license only covers what it _can_ cover - derived works. The
> fact that Linux is under the GPL simply _cannot_matter_ to a user
> program, if the author can show that the user program is not a derived
> work.
If I want to build myself a libc on top of a linux kernel, I am almost sure to use he kernel's .h files to get proper defines of the interface.
That happens to come with inlined code also.
This simply makes it identical for as far as the law goes to a module based on the same.
If the libc is not a derived work, then neither is the module. If the module is, then for the same logic, the libc is.
I am sorry, but the position taken here is impractical, and contradics itself.
Bart
I'm sort of confused also. C
I'm sort of confused also. Can somebody knowledgable please correct one or more of these facts which appear to come to contradictory conclusions:
1) kernel headers are GPL
1.1) GPLed headers exposing an API requires programs that use those headers also to be considered GPLed
1.1.1) Even if said headers are "trivial", in the eyes of copyright law (or at least the important authors and imprimateurs such as Linus)
1.1.1.1) Meaning that no re-implementation of the headers under a SEPERATE LICENSE will be possible (because any re-implementation will be virtually identical), which forbids 2)
2) I CAN include kernel headers to create a USERLAND program which is "considered" non-derivative and hence does not HAVE to be GPLed.
3) I CANNOT include kernel headers to create a KERNEL MODULE program which is "considered" non-derivative and hence does not HAVE to be GPLed.
I don't really mind either interpretation ("inclusion of headers alone implies derivative work", "inclusion of headers alone does NOT imply derivative work"). What I mind however, is the implicit conclusion 1.1.1.1 which, in the case of headers-implying-derivative works, seems to be effect a "lock-in" in the case of trivial headers, the likes of which Open Source is relied upon to circumvent in the proprietary world. Namely, "trivial" code, which despite its "triviality" is required to work on Linux, can be placed under GPL thereby FORCING people to use GPL because they are no longer free to "re-implement" the header under a seperate license - the triviality of the header implies this (any duplication will necessarily be virtually identical). I am not CHALLENGING the right of authors to MAKE THIS REQUIREMENT. I am merely observing that I do not think it is in the "spirit" of open source to do this.
I would really like to know what people think about the 1.1.1.1 case.
In my opinion this whole issue seems to be due to the special "brokenness" of the language at hand, as other languages have runtime/late-linking, etc, which would apparently avoid this issue by removing the language requirement of inclusion of API specifications in code.
Separate re-implementation is legal
Separate (clean room) re-implementation is legal - under standing law one cannot copyright an interface. (One can patent it, of course, but that is another story). Otherwise WINE, Samba, and Mono would all be violations of Microsoft's copyrights.
Solution: change copyright on headers
Assuming that we *want* non-GPL modules:
Here is one solution: change the copyright on all public header files used by modules -- the API definition -- to public domain, or Lesser GPL, or GPL-with-exceptions. Make sure that all the C files have the right copyright notice in them as well.
Or write an explicit exception to the GPL allowing non-GPL modules to use certain interfaces freely.
(Note that you are allowed to modify the GPL as much as you want, add exceptions, etc. Some comments have implied that it's not posible)
(A stub program that exports all the right kernel interfaces that is public domain might also be useful, since you could "derive" your modules from that -- and it would be a useful debugging tool)
--> But do we really *want* non-GPL modules? <--
Linus seems to be suggesting that SCO may be right...
I happen to disagree with Linus in this case, but if he is right then it would seem that he may be agreeing with SCO. One of SCO's arguments (which I think is bogus) is that the NUMA/SMP/JFS/RCU code that IBM contributed to Linux was written with AIX/Dynix 'in mind' and thus must be bound by the Unix licenses under which those systems are distributed as a 'derivative' work. If the GPL binds dynamically loaded drivers that are written with Linux 'in mind' then I can't see any reason why that wouldn't apply to folks writing Unix (or even Windows) drivers as well. It would also strongly suggest that any attempt to take code written as part of Windows drivers (for example the NVidia drivers) and retargetting it to Linux would be VERY illegal as that code must be presumed to be a derivative work of Windows and thus those using it to support a Linux driver would first need to get Microsoft's permission.
This seems like a very slippery slope. I (as a software developer) have a real problem with any licensing that is this 'viral'. If writing and distributing a Unix/Linux/Windows driver results in the OS vendor (and Linux is actually the most benign option here) acquiring the right to control the distribution of all of the source code that was in any way part of the driver then many people are going to have real problems writing drivers. I strongly suggest that we not go there...
blegh
It's enough to make a person go BSD.
Why not LGPL...
If linking/loading modules is the only issue with the GPL, then why are we using it?
I'd think the Lesser GPL would be the ideal license, especially given that it explicitly allows LGPL and non-LGPL objects to be linked together without infecting everything with inappropriate licensing issues...
Not clear that LGPL would help...
If Linus is right and kernel drivers that are designed for Linux become derivative works of Linux itself then unless the entire kernel was under the LGPL you can't win. Ultimately the suggestion appears to be that the structure of the loadable driver code is so tightly defined by the structural features of the kernel that it is effectively a part of the kernel even if written without direct reference to the kernel code.
I think that the only way out of this is for Linus to rethink his conclusions. If a loadable kernel driver is pretty much automatically a derivative work based on the kernel (and thus subject to any and all kernel licensing constraints) then drivers for other systems are probably subject to similar constraints. Then you've got to figure out where the line is drawn and how broadly the license expands...if your driver links to an FFT library that is otherwise unrealted and your driver is a derivative work of the kernel...that suggests to me that your FFT library must be GPLed in order to distribute any part of the driver.
If this were established as a precedent then it could come back to bite the open source community badly. By the same token, Unix and Windows vendors could take action against folks who've written drivers that were initially deployed on their platforms (and are now derivative works of their operating systems) and force them not to release the code to the open source community (and many of those folks have strong incentives to do so). That would be bad.
Depending on how the ultimate reasoning is worked out it could even impact user space code on proprietary systems that cared to ink their license agreements the right way. Why is a loadable driver a derivative work? Can't be because of the header files...they might be an issue, but that doesn't seem to be what Linus was saying. Must be because the structure of the driver is very much determined by the structure of the operating system that it will support. If this is the case then it sould seem that a UI program that targets a non-open UI environment (Apple and Windows come to mind) also has much of it's operation dictated by the basic design of the UI environment. That suggests to me that a license could be generated that indicates that 'derivative works' of the user interface system may not be open sourced...wouldn't really impact commercial developers much, but would inhibit the flow of code from those environments back into the open source community.
Derived work
I think that a driver thats ported is not derived but adapted.
When ported, what is seeked is to adapt the driver. Maybe for that purpose some basic module specific parts of the kernel code where used, but the point is that the driver is useful for that part which was never GPLed, not for the implementation to Linux part, which is difficult to get around without GPL (I guess).
And anyway, they are binary. And anyway, who cares, they aint doing no bad to nobody.
Keep it up!
Workaround
I didnt read all external comments posted, yet is it me or is everyone missing an obvious workaround?
Make a kernel module that includes the headers and exposes whatever functionality you need. Make it for another operating systems (all if you wish). GPL that.
Then simply make a program with all of your logic and "so important business rules that noone in the world could recreate" (sarcasm) and put whatever license on it.
The fact that you have it running in another operating system should say that the work is not derived and operates independantly.
GPL TOY OS
It reminds me of the language cops deputized by a certain province in some foreign democratic country. These language cops's job is to enforce certain laws regarding public shop-signs which must display LANGUAGE B twice the size of LANGUAGE A (english). Years ago, I think they tried to eliminate LANGUAGE A totaly from public-signs - but that was brought to attention of United Nation - has therefore been scrapped (very shameful act for a so-called democratic people to deny someone their basic human rights - especially when it involved their livelyhood. The same goes for the unjustified banning of hijab in public institutions in some democratic country). Once they reduced Language A in all public-signs, they tried the same sign-enforcement (on language C,D,E...) in Chinese/Greek/Italian/... community (which, ofcourse, contains BIG-signs in their respected native language). Soon, they come to realize by reducing these languages in public-signs, they are essentialy destroying the very same unique charms that make these neigborhoods a tourist attraction. Also, in trying to prevent language B from being lost, they hypocriticaly destroy the very rights of these SMALL ethnic communities who, like them, wants to preserve their heritage & place in this country. So, their leader told these cops - their job is to enforce the law but not to reintrepet the law with finesse... Maybe these is what you guys are doing, reintrepreting GPL with finesse!!!
Dangers of becoming GPL TOY OS
--------------------------------
If your Linux EULA are implying the followings:
1. You can't add proprietary driver source in the kernel (GPL) source & recompile
2. You can't load proprietary driver module into the kernel (GPL kernel header) if driver was written from scratch for Linux in mind & not a port from another OS.
Where is the freedom in GPL (many license takes away your fredom... blah, blah, ...)??? It pretty much takes away the freedom of any company to sell proprietary hard/soft-wares. I really wish they would stop associating the word FREE so liberaly with GPL. If that is what you are implying above, then it smells like a COMMIE OS - how are the hardware/driver companies gonna make money if their driver codes are surrendered to their competitors. Dont give me BS on how opensource companies are making lots of money from technical-support. These are not technical-support companies - not every companies want to change business models neither - leave those to India.
With clauses like these, you are lucky that there are still hardware companies that will support it!!!! Imagine, all proprietary hardware companies suddenly withdrawing supports, what are you gonna do for 3D, network, sound, etc.? Now, you will have to run your Linux on Boch emulator (TOY MACHINE) on Windows to get basic ethernet access!!!! Then it will truly be a GPL TOY OS!!!! If want to split hair, ask the copyright holder of Linux to just SAY IT OUT LOUD - YOU CANNOT MAKE PROPRIETARY DRIVERS MODULES WITH KERNEL HEADERS PERIOD. GO AHEAD, ENFORCED THE GPL IDEALS WITH IRON FIST!!!
Even implication number 2. will only serve to alienate proprietary hardware vendors who wants to use & develop drivers on Linux before porting it to other OS. But I guess Linux cannot be an R & D OS because it risk turning their proprietary modules into GPL?? Another FREEdom squashed... So now, 1st class proprietary driver modules are not good for Linux users??? They would rather have 2nd class drivers ported from other OS, which dont fully take advantage of what Linux architecture has to offered??? So you are want an inferior proprietary drivers????
Besides, the driver source are copyrighted by their authors/companies (hey, they have their rights too - what makes yours, placed above theirs) & may have clauses that will prevent such source from ACCIDENTALY used in a GPL viral environment (I hope so, to protect their ASS). Is this how a NORMAL driver company must protect itself to develop NORMAL proprietary codes on this OS???? Is this how you want history to record this great, so-called, FREEdom-of-speech OS???
#include "anti_viral_clause.h" // first line of defence - condom
#include "possible_viral_kernel.h" // it is included second, so my clause was enforced first.
So, where do you draw the line - OOP languages are by virtue derivations (inheritance).
Conceptually B inherit A, therefore B is_a A
Hence, B inherit KERNEL_OBJ (an overlay mechanism), therefore B is_a
KERNEL_OBJ. So are modern techniques to overcome complexities & modern pratices of levaraging existing codes to lower development time a violation of GPL????
If a browser plugin that makes primary use of an overlay mechanism (a driver module developed with Linux in mind using the GPL kernel headers) but this app doesnt add a lot of code other than fetching data & sending it to the driver (a hardware-assisted mpeg1 decoder - all decoding on driver side), doesn't this make the user-space app a GPL???
What ever happen to "fair-use" - if a propreitary driver source codes uses the GPL kernel headers but because these headers clearly dont contain 1/100 of the total lines of source codes (if it does, it is bad programming pratice), doesnt that count as "fair use" - so of like quoting a small passage form a boring thick book????
GPL war fleets
Let's just say, a country commisions all new-designed fleet of flagships to run on Linux. Because these were new flagships, their drivers are ofcourse specially-tailored & intimately tied to the architecture & software.
When an emergency shortage of fleets from another allied country, requires a lease (distribution in another form) of these fleets. Wouldnt the GPL-kernel-headers in proprietary driver modules (specifically designed for Linux - you wouldn't want to rely on 2nd class ported drivers when lives are at stakes) require loaner to hand over all driver's source?????
Such a lease did happened in WWII, here is an excerpt - "The US Army employed 60 battalions of tank destroyers during World War II. They were used in offensives to destroy enemy armour and in infantry attacks as assault guns. They also were used to augment the firepower of tank battalions and were employed as roving artillery batteries. Through the lend-lease program to aid the Unites States' allies, the Americans provided the British with M10s. The British up-gunned the vehicle, replacing the 3-inch gun with a British 17-pound gun. This improvement made the tank destroyer more lethal, and it extended the service life of the vehicle in the British army beyond World War II."
Ofcourse you can run linux on a submarine without warranty, etc. But can you sleep when your allies have access to your drivers. :-)