Index Home About Blog
Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312031533530.2055@home.osdl.org>
Date: Thu, 4 Dec 2003 00:03:11 GMT
Message-ID: <fa.j5s4qd8.1ei8k8u@ifi.uio.no>

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 kernel 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


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312031614000.2055@home.osdl.org>
Date: Thu, 4 Dec 2003 00:24:47 GMT
Message-ID: <fa.j3c0pt9.1c28kop@ifi.uio.no>

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


Newsgroups: fa.linux.kernel
From: viro@parcelfarce.linux.theplanet.co.uk
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <20031204192452.GC10421@parcelfarce.linux.theplanet.co.uk>
Date: Thu, 4 Dec 2003 19:26:12 GMT
Message-ID: <fa.n2spa2m.1h1mpj2@ifi.uio.no>

On Wed, Dec 03, 2003 at 04:23:33PM -0800, Linus Torvalds wrote:

> 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.

	FWIW, it would be very nice if somebody did hard and messy work and
produced lists of in-tree modules using given symbols.  Ideally - automated
that, but that won't be easy to do (quite a few are used only via inlined
wrappers and in some cases - under an ifdef; many arch-specific exports
are of that sort).

	Aside of "hey, nothing uses that at all" and "only core uses it"
we'd get a bunch of "hmm, we really should've exported higher-level function
instead" and "WTF does that lone driver use this function?".  I'd played
with that for fs/* exports and so far results look interesting.  I'm using
grep, but that's pretty much hopeless - we have literally thousands of
exported symbols and any manual approach will break on that.

	Some approximation might be obtained by building all modules and
doing nm on them, with manual work for non-obvious cases.  I've done that
on x86 (allmodconf + enabling whatever could be enabled, even if broken).
Statistics is interesting, to put it mildly.

	First of all, there are ~3600 symbols used by some in-tree drivers.
~600 of them are have 10 users or more.  ~2000 have only one or two users.
And we have ~7500 EXPORT_... in the tree.  Now, that number is inflated by
duplicates between architectures (and other stats are deflated by incomplete
coverage).  And yes, there are things that have every reason to be exported,
but only a few modules care to use them.

	However, it certainly looks like a large fraction of export list
should go away.  Moreover, we probably should introduce
EXPORT_FOR(symbol, module list)
and use it for stuff like jbd poking very deep in buffer.c guts - deeper
than anybody else.  Ditto for ipv6 / ipv4 interaction - they really have
a special relationship and it makes no sense whatsoever to treat everything
in TCPv4 guts that happens to be shared with TCPv6 as public export.  There's
a lot of cases like that and I suspect that they cover ~50-60% of the in-tree
imports.

	Real interface is somewhere around 400-500 symbols and it can be
split into several more or less compact parts.  Having more than an order
of magnitude more than that, and having it as a big pile...  Not a good
thing(tm), IMO.


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312040753550.2055@home.osdl.org>
Date: Thu, 4 Dec 2003 15:59:35 GMT
Message-ID: <fa.j5ccqt9.1e20lop@ifi.uio.no>

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


Newsgroups: fa.linux.kernel
From: "Theodore Ts'o" <tytso@mit.edu>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <20031206153845.GA8552@thunk.org>
Date: Sat, 6 Dec 2003 15:41:03 GMT
Message-ID: <fa.e6sdcpa.g6e0ie@ifi.uio.no>

On Fri, Dec 05, 2003 at 09:14:33PM -0800, Larry McVoy wrote:
> Your view that "(b) is compiled into a Linux kernel module, then it
> _is_ part of (a+b) whether (a) is physically present or not." is not
> something that I have managed to seen in any caselaw.  On the other hand,
> it is widely held that you can't force licenses across an API and it's
> perfectly reasonable to see the loadable module interface as an API.

Well, whether or not you can force licenses across an API is not well
settled, as far as I know (IANAL) Microsoft and Apple still have
licenses that try to claim ownership across API's.  And to the extent
that the FSF still tries to claim that programs written to use the GNU
readline library must fall under the GPL, when two other BSD-licensed
implementations of the readline interface exist, they are claiming
exactly the same thing (although the FSF has been known to call for
boycotts of companies that try to claim interfacde copyrights; heh).

Which brings up an interesting point.  The moment someone implements
BSD-licensed code which implements a particular interface, it very
strongly weakens the case that anyone implementing code to that
interface is a derived work of the GPL'ed interface.  This is one of
the reasons why claiming that the GPL can infect across an interface
(whether it is a module interface, a system call interface, or
dynamically linked shared library interface) is bizarre at best.

For example, let me give the following example.  Debugfs of the
e2fsprogs library uses libss, which I recently enhanced to attempt to
dynamically load one of the following libraries via dlopen: readline
(GPL'ed), editline (BSD licensed), or libedit (BSD licensed), which
all export the same interface.  Libss dates back to 1985 or so, and
has a BSD-style license.  It is also used in Kerberos V5 (which is
also BSD licensed), and so Solaris has a proprietary derived version of
Krb5 whose administration client uses libss.  So if you compile the
latest version of e2fsprogs on Solaris, and Solaris' krb5 admin client
manages to use the new version of libss, then you could potentially
have in the single address space:

	* Solaris's proprietary admin client
	* The libss shared library (BSD)
	* The GPL'ed readline library

OK, riddle me this: is there a GPL violation, and if so, who committed
it?  The user, for running the admin client in this configuration?
But the GPL explicitly says that it's only about distribution, and
doesn't restrict usage in any way, and the end-user is only using the
code.

Solaris, the owner of the proprietary admin client?  But they weren't
involved in my enhancing the libss shared library to dynamically load
either a GPL'ed or a BSD-licensed library, and they created the admin
client before I added the libss enhancement.  And heck, the original
admin client was created by me while I was working at MIT, and is part
of the original MIT Kerberos V5 disitribution (although Sun has
modified it extensively since then).

Me, for modifying a BSD-licensed library to try to dynamically load a
GPL'ed library?  But I was trying to make a perfectly legitimate stack
work:

	* Debugfs (which is GPL'ed)
	* The libss shared library (BSD)
	* The GPL'ed readline library

and the reason why I used dynamic linking was because I wanted debugfs
to only optionally depend on readline library, since the readline
library is a monster (over 600k) and so it wouldn't fit on a rescue
floppy.

So trust me, you really don't want to claim that just because a
program was written to use a particular interface, the license infects
across the API.  Apple and Microsoft are playing that game, and a very
unsavory game it is.  And it leads to all sorts of paradoxes, such as
the one I described above.

						- Ted


Newsgroups: fa.linux.kernel
From: "Theodore Ts'o" <tytso@mit.edu>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <20031206211900.GA9034@thunk.org>
Date: Sat, 6 Dec 2003 21:21:45 GMT
Message-ID: <fa.e6btb19.gme1a9@ifi.uio.no>

On Sat, Dec 06, 2003 at 09:50:41AM -0800, Larry McVoy wrote:
> The sticky one is the one where we started, kernel modules.  Linus is
> saying that kernel modules are covered by the GPL because they are
> combined with the kernel.  I think his reasoning is weak and unlikely
> to be upheld by the courts.  If we remove the issue of inline functions
> for a moment then we are talking about pure API's and there is no way
> that the courts are going to uphold that a copyright license can cross a
> pure API (famous last words).  Well, no way if both sides of the dispute
> have equally good lawyers, without that who knows.

I had a law professor from the MIT Sloan School of Technology, who
when I posed the question informally, said that the FSF would be
laughed out of court if they tried to claim that the GPL infected
across API's.  But Larry's right, in the U.S. at least, you get the
best justice money can buy, and with enough high-paid lawyers and
lobbyist, you can probably pervert the system any way you like ---
witness the RIAA and DMCA.

But that aside, does the Open Source community really want to push for
the legal principle that just because you write an independent program
which uses a particular API, the license infects across the interface?
That's essentially interface copyrights, and if say the FSF were to
file an amicus curiae brief support that particular legal principle in
an kernel modules case, it's worthwhile to think about how Microsoft
and Apple could use that case law to f*ck us over very badly.

It would mean that we would not be able to use Microsoft DLL's in
programs like xine.  It would mean that programs like Crossover office
wouldn't work.  It would mean that Apple could legally prohibit people
from writing enhancements to MacOS (for example, how do all of the
various extensions in Mac OS 9 work?  They link into the operating
system and modify its behaviour.  If they are therefore a derived work
of MacOS, then Apple could screw over all of the people who write
system extensions of MacOS.)

Be careful of what you wish for, before you get it.  The ramifications
of the statement that just because a device driver is written for
Linux, that it is presumptively a derived work of Linux unless proven
otherwise, is amazingly scary.  Fortunately, we can hope that the law
professor I talked to was right, and that such a claim would be
laughed out of court.  But if it isn't, look to Microsoft and other
unsavory companies to use that kind of case law to completely screw us
to the wall.....

						- Ted


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312041743530.6638@home.osdl.org>
Date: Fri, 5 Dec 2003 01:48:52 GMT
Message-ID: <fa.j7skq5c.1ci0k0k@ifi.uio.no>

On Thu, 4 Dec 2003, Paul Adams wrote:
>
> A work that is inspired by Linux is no more a derivative work than
> a programmatic musical composition inspired by a novel.  Having
> Linux in mind cannot be enough to constitute infringement.

But it does - you have to include the Linux header files in order to be
able to make any nontrivial module.

I'm not claiming that "thinking about Linux makes you tainted". It's not
about inspiration. But it's a bit like getting somebody pregnant: you have
to do a lot more than just think about it to actually make it happen, or
every high school in the world would be crawling with babies.

In other words: feel free to be inspired by Linux all you want. But if you
release a binary module that loads and works, you've been doing more than
just feeling inspired. And then you need to be _careful_.

		Linus


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312050853200.9125@home.osdl.org>
Date: Fri, 5 Dec 2003 17:22:23 GMT
Message-ID: <fa.j7c6q5a.182mk0o@ifi.uio.no>

On Fri, 5 Dec 2003, Peter Chubb wrote:
>
> As I understand it, SCO is/was claiming that JFS and XFS are derived
> works of the UNIX source base, because they were developed to match
> the internal interfaces of UNIX, and with knowledge of the internals
> of UNIX -- and they hold the copyrights of and are the licensor of UNIX.

Yes, and I'm not claiming anything like that.

I claim that a "binary linux kernel module" is a derived work of the
kernel, and thus has to come with sources.

But if you use those same sources (and _you_ wrote them) they do not
contain any Linux code, they are _clearly_ not derived from Linux, and you
can license and use your own code any way you want.

You just can't make a binary module for Linux, and claim that that module
isn't derived from the kernel. Because it generally is - the binary
module not only included header files, but more importantly it clearly is
_not_ a standalone work any more. So even if you made your own prototypes
and tried hard to avoid kernel headers, it would _still_ be connected and
dependent on the kernel.

And note that I'm very much talking about just the _binary_. Your source
code is still very much yours, and you have the right to distribute it
separately any which way you want. You wrote it, you own the copyrights to
it, and it is an independent work.

But when you distribute it in a way that is CLEARLY tied to the GPL'd
kernel (and a binary module is just one such clear tie - a "patch" to
build it or otherwise tie it to the kernel is also such a tie, even if you
distribute it as source under some other license), you're BY DEFINITION
not an independent work any more.

(But exactly because I'm not a black-and-white person, I reserve the right
to make a balanced decision on any particular case. I have several times
felt that the module author had a perfectly valid argument for why the
"default assumption" of being derived wasn't the case. That's why things
like the AFS module were accepted - but not liked - in the first place).

This is why SCO's arguments are specious. IBM wrote their code, retained
their copyrights to their code AND THEY SEVERED THE CONNECTION TO SCO'S
CODE (and, arguably the connections didn't even exist in the first place,
since apparently things like JFS were written for OS/2 as well, and the
Linux port was based on that one - but that's a separate argument and
independent of my point).

See the definition of "derivative" in USC 17.1.101:

	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".

And a binary module is an "elaboration" on the kernel. Sorry, but that is
how it IS.

In short: your code is yours. The code you write is automatically
copyrighted by YOU, and as such you have the right to license and use it
any way you want (well, modulo _other_ laws, of course - in the US your
license can't be racist, for example, but that has nothing to do with
copyright laws, and would fall under a totally different legal framework).

But when you use that code to create an "elaboration" to the kernel, that
makes it a derived work, and you cannot distribute it except as laid out
by the GPL. A binary module is one such case, but even just a source patch
is _also_ one such case. The lines you added are yours, but when you
distribute it as an elaboration, you are bound by the restriction on
derivative works.

Or you had better have some other strong argument why it isn't. Which has
been my point all along.

			Linus


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312050921500.9125@home.osdl.org>
Date: Fri, 5 Dec 2003 17:36:47 GMT
Message-ID: <fa.j8s8pd8.1bikloq@ifi.uio.no>

On Fri, 5 Dec 2003, Shawn Willden wrote:
>
> So copies to disk and RAM that are "an essential step in the utilization of
> the computer program" are non-infringing.

Absolutely. But you don't have the right to distribute them.

Put another way: nVidia by _law_ has the right to do whatever essential
step they need to be able to run Linux on their machines. That's what the
exception to copyright law requires for any piece of software.

And in fact you should be damn happy for that exception, because that
exception is also what makes things like emulators legal - software houses
can't claim that you can't use an emulator to run their programs (well,
they may _try_, but I don't know if it ever gets to court).

But what they do NOT have the right to do is to create derivative works of
the kernel, and distribute them to others. That act of distribution is not
essential _for_them_ to utilize the kernel program (while the act of
_receiving_ the module and using it may be - so the recipient may well be
in the clear).

So in order for nVidia to be able to legally distribute a binary-only
kernel module, they have to be able to feel damn sure that they can
explain (in a court of law, if necessary) that the module isn't a derived
work. Enough to convince a judge. That's really all that matters. Our
blathering matters not at all.

Now, personally, I have my own judgment on what "derivative works" are,
and I use that judgement to decide if I'd complain or take the matter
further.

And so _I_ personally think some binary modules are ok, and you've heard
my arguments as to why. That means that _I_ won't sue over such uses,
since in my opinion there is no copyright infringement IN THOSE CASES due
to me not considering them derivative.

My opinions are fairly public, and the stuff I say in public actually does
have legal weight in that it limits what I can do (if I say in public that
I think something is ok, I have a much harder time then making the
argument that it _isn't_ ok in front of a judge - this is what the
"estoppel" thing is all about).

But the thing is, my public opinions don't bind anybody else. So if Alan
Cox, or _any_ other kernel copyright holder, disagrees with me (and trust
me, people do), they have the right to complain on their own. Their case
would be weakened by my stance (simply because a defendant could point to
my opinions and the judge might be swayed by that).

And quite frankly, my largest reason for not complaining loudly has often
been that I'm lazy, and in several cases of sme people using GPL'd work
improperly I have been ready to join a lawsuit that somebody else
initiates. So far people have tended to back down.

			Linus


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: RE: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312051122190.9125@home.osdl.org>
Date: Fri, 5 Dec 2003 19:28:12 GMT
Message-ID: <fa.j7capd9.192mlop@ifi.uio.no>

On Fri, 5 Dec 2003, Kendall Bennett wrote:
>
> Right, and by extension of the same argument you cannot use kernel
> headers to create non-GPL'ed binaries that run IN USER SPACE!

This was indeed one of the worries that people had a long time ago, and is
one (but only one) of the reasons for the addition of the clarification to
the COPYING file for the kernel.

So I agree with you from a technical standpoint, and I claim that the
clarification in COPYING about user space usage through normal system
calls covers that special case.

But at the same time I do want to say that I discourage use of the kernel
header files for user programs for _other_ reasons (ie for the last 8
years or so, the suggestion has been to have a separate copy of the header
files for the user space library). But that's due to technical issues
(since I think the language of the COPYING file takes care of all
copyright issues): trying to avoid version dependencies.

> This exact reasoning is what RedHat (aka Cygnus) has been using for years
> with the Cygwin toolkit for Windows. Although 99% of the code built with
> the GNU compilers and Cygwin includes the glibc runtime library that is
> LGPL, every program *must* include the C runtime library startup code or
> it cannot function. *That* code is pure GPL, and by extension any program
> using the Cygwin libraries is a derived work and must be GPL. If you
> don't like that, by a commercially licensed version of Cygwin from
> RedHat/Cygnus instead.

And this is an area where I think the GPL just isn't the right license to
use - but on the other hand it obviously isn't my decision to make. I'm
not touching Cygwin with a ten-foot pole, and that has nothing to do with
licensing ;)

The GPL just doesn't make a lot of sense for library-like infrastructure.

		Linus


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312100809150.29676@home.osdl.org>
Date: Wed, 10 Dec 2003 16:24:30 GMT
Message-ID: <fa.iegrgjm.1h0m9i2@ifi.uio.no>

On Wed, 10 Dec 2003, Larry McVoy wrote:
>
> > kernel was compiled with certain options etc - then it pretty clearly is
> > very tightly integrated.
>
> So what?  Plugins have a nasty tendency to have to be updated when the
> main program is updated.

Sorry, but again, I repeat: technicalities don't actually matter much to a
judge.

There's a fundamental difference between "plugins" and "kernel modules":
intent.

If you write a program that tries to have a stable API to outside modules,
and you make and document a plugin interface that is documented to accept
proprietary modules, then that is an ABI. And linking against such a thing
is fine.

But when you have the GPL, and you have documented for years and years
that it is NOT a stable API, and that it is NOT a boundary for the license
and that you do NOT get an automatic waiver when you compile against this
boundary, then things are different.

And they are different even if from a _technical_ standpoint you do
exactly the same: you dynamically link against a binary.

Ask a lawyer. Really.

I know people on this list are engineers and programmers, and you think
that technology is all that matters, and that if you link in one situation
and do exactly the same motions ("walk around the computer three times
widdershins, and give the -dynamic option to 'ld'") then you are doing the
same thing.

But that's not how "the real world" works. In the real world, intent and
permission matter a whole lot. When you make love to your wife in the
privacy of your own home, the "real world" is perfectly ok with that. When
you do the same thing to somebody you didn't get permission from, it's a
major crime and you can be put into prison for decades - even though
technically the movements are pretty much the same.

See? Intent matters. How you do something _technically_ does not.

In fact, I will bet you that if the judge thinks that you tried to use
technicalities ("your honour, I didn't actually run the 'ln' program,
instead of wrote a shell script for the _user_ to run the 'ln' program for
me"), that judge will just see that as admission of the fact that you
_knew_ you were doing something bad. Which means that now it wasn't just
unintentional copyright infringement, now it is clearly wilful.

So those technicalities you might use to try to make things better
actually can make them WORSE.

The best you can do is to just ask for permission. Maybe you'll get it.

			Linus



Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312100944190.29676@home.osdl.org>
Date: Wed, 10 Dec 2003 18:00:38 GMT
Message-ID: <fa.ieh5hjh.1h0c8if@ifi.uio.no>

On Wed, 10 Dec 2003, Chris Friesen wrote:
>
> Linus Torvalds wrote:
>
> > But also note how it's only the BINARY MODULE that is a derived work. Your
> > source code is _not_ necessarily a derived work, and if you compile it for
> > another operating system, I'd clearly not complain.
> >
> > This is the "stand-alone short story" vs "extra chapter without meaning
> > outside the book" argument. See? One is a work in its own right, the other
> > isn't.
>
> We currently have a situation where an external company supplies us with
> a device driver containing a binary blob that was explicitly written as
> OS-agnostic, and a shim that is gpl'd (at least the linux shim is) to
> get the appropriate os-specific services.  I guess this would fall under
> the "not made just for linux" category in which you've placed the Nvidia
> driver?
>
> Carrying on your analogy, this could be a generic love scene, with
> blanks in which to insert the character's names and location.

Yes. Depending on how it is done (ie is the support for other operating
systems really a major thing that you really care about, and not intended
just as a smoke-screen), I personally believe that this is likely a valid
way to show that some part of the code (the binary blob) is not a derived
work. Clearly it no longer depends on the kernel, and you can show that to
be true by the obvious argument.

And I think this argument is _especially_ strong for things like firmware
etc, and I've been on record as saying that I think it's ok to upload
standard firmware for a driver as long as you don't call it directly (ie
it really lives on the hardware itself).

(At this point I should probably point out that other people disagree, and
there are people who feel strongly that the kernel cannot contain binary
firmware. Whish is obviously part of the reason for having the firmware
loader interfaces for drivers - adding an extra layer of separation).

However, even that doesn't necessarily make the issue 100% clear. It
clarifies the status of the binary blob itself - but arguably the _other_
part of the story (eg the shim layer) is not a whole work, and it could be
argued that that part in itself violates the GPL.

At that point I just say "I'm personally a reasonable person, and quite
frankly, personally the _last_ thing I'd want to do is to complain in a
court of law".

Quite frankly, you'd have to really really try to actively irritate me
with some flagrant crap for me to decide that it's time to try to enforce
anything. But I'm only speaking for myself here, and there are other
copyright holders that might be more trigger-happy.

So while I may be arguing vehemently here against binary-only modules,
please realize that I haven't sued anybody over them, and in fact I'm a
big believer in trying to make sure everybody is pretty happy and not make
a big deal out of things.

Sometimes that "everybody is happy" means that I literally tell people
that they might want to use a *BSD kernel instead of Linux, if I don't see
them being able to make themselves _and_ the GPL people happy otherwise.

		Linus


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312101108150.29676@home.osdl.org>
Date: Wed, 10 Dec 2003 19:17:17 GMT
Message-ID: <fa.if0dgjl.1hg49i3@ifi.uio.no>

On Wed, 10 Dec 2003, Larry McVoy wrote:
>
> I can understand your touchiness, it's not much fun living through tons of
> messages where people try and figure out how to circumvent your license.

That's not really the issue.

I'd like to make it clear that I'm actually much softer on this than many
other people - I've been making it clear that I think that binary-only
modules _are_ ok, but that the burden of proof of ok'ness is squarely on
the shoulders of the company that makes them.

So please do get that part clear: I'm pretty well-known for allowing
binary-only modules in things like AFS and nVidia, where some people think
they shouldn't be allowed.

But the real issue here (and in the subject line in this whole discussion)
is about an "exception clause".

There is none. And I'm just saying that there is NO WAY that a binary-only
module is "automatically in the clear". They _may_ be, but it's on the
basis of something totally different than just "it's a module".

This is why I want to make it so clear that "moduleness" (which is not a
word, but should be one) is not the thing that matters. There's still a
strong "linkage" to a particular kernel in a binary module, and the act of
running the linker is not what determines whether a work is a derived
work.

In short, you should not see my arguments as a way of saying "all modules
are derived works". I'm clearly not saying that, since I _do_ allow binary
only modules and I don't claim they infringe.

So I'm not arguing for a very wide notion of derived works: I'm arguing
AGAINST the narrow notion that a module would somehow automatically _not_
be derived.

This is why I've said at least fifty times that a kernel module is to be
considered "derived by default". The non-derivedness comes from things
that have nothing to do with whether it is a module.

		Linus


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: RE: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312100923370.29676@home.osdl.org>
Date: Wed, 10 Dec 2003 17:45:03 GMT
Message-ID: <fa.ifh1h3g.1g0g928@ifi.uio.no>

On Wed, 10 Dec 2003, Hua Zhong wrote:
>
> > What has meaning for "derived work" is whether it stands on its own or
> > not, and how tightly integrated it is. If something works
> > with just one particular version of the kernel - or depends on things like
> > whether the kernel was compiled with certain options etc - then it pretty
> > clearly is very tightly integrated.
>
> Many userspace programs fall into this category too.

Absolutely.

Trust me, REAL LAWYERS WERE WORRIED about this. It wasn't just random tech
people discussing issues on a technical (or, right now, not-so-technical)
mailing list.

There's a reason for those lines at the top of the COPYING file saying
that user space is not covered, and there are literally lawyers who say it
would hold up in a court of law.

Exactly because you _can_ argue that user-space might be covered. It's an
argument that almost certainly would fail very quickly due to "documented
interfaces" and ABI issues, but it is an argument that lawyers have made,
and it's that argument that makes the disclaimer in COPYING be worth it.

In other words: even without that disclaimer of derivation, user space
would almost certainly (with a very high probability indeed) be safe from
a copyright infringement suit. Such a suit would most likely be thrown out
very early, exactly because the UNIX system call interface is clearly
extensively documented, and the Linux implementation of it has strived to
be a stable ABI for a long time.

In fact, a user program written in 1991 is actually still likely to run,
if it doesn't do a lot of special things. So user programs really are a
hell of a lot more insulated than kernel modules, which have been known to
break weekly.

Similarly, things like /proc etc are clearly intended to be ways to
interface to the kernel in user space, so there's a clear intent there
that nobody can reasonably deny (again, that intent is made _clearer_ by
the COPYING disclaimer, but it would be hard to argue against even in the
absense of that).

But even DESPITE these strong arguments that user-space clearly isn't a
derived work, and real lawyers worried, and felt much happier with the
explicit disclaimer in the COPYING file.

That should tell you something. In particular, it should tell you to be
careful: some courts have made so broad "derivative work" judgements that
it's scary - think about the "Gone With the Wind" parody (I think the
ruling was eventually overturned on First Amendment grounds, but the
point is that you should be very careful, and while source code has
the potential for First Amendment protection, binary modules sure as hell
do not).

And please note that I am _not_ arguing for those overly broad judgements:
I'm just pointing out that you should not assume that "derivative" is
something simple. If an author claims your work is derivative, you should
step very very lightly.

And I claim that binary-only kernel modules ARE derivative "by default",
by virtue of having no meaning without the kernel.

		Linus


Newsgroups: fa.linux.kernel
From: Linus Torvalds <torvalds@osdl.org>
Subject: RE: Linux GPL and binary module exception clause?
Original-Message-ID: <Pine.LNX.4.58.0312101452300.1273@home.osdl.org>
Date: Wed, 10 Dec 2003 23:14:03 GMT
Message-ID: <fa.j4c0rl2.1c28l0q@ifi.uio.no>

On Wed, 10 Dec 2003, Andre Hedrick wrote:
>
> How can the additional words alter the mean of GPL itself?

They can't.

But they _can_ alter your ability to sue. In particular, if you publicly
state that you will not sue anybody over something, they can now use that
statement to make future plans. If at a later date you decide to sue them
anyway, they can point the judge at your earlier statement, and claim
estoppel against you.

So note how the license itself didn't change - but your ability to
_enforce_ the license has changed by virtue of you stating that you won't.

So while I publicly say that I'm a lazy bastard, and the less I have to
do with lawyers, the better - I won't actually say that I will never sue
anybody. I'll say that it is "unlikely", or that people would have to
irritate me mightily.

For most developers that literally doesn't much matter what they say. Even
when _I_ say something, that doesn't really matter to what other
developers do, and while it could potentially limit me from enforcing _my_
copyrights, it doesn't stop others from enforcing theirs. So my random
email ramblings should really be construed as my opinions rather than any
legally relevant stuff.

However, the few extra lines in the main COPYING file end up being
somewhat binding to others, simply because they are _so_ public (they are,
after all, in the _main_ COPYING file) and they have been there pretty
much since the beginning, that they would basically end up being a very
strong argument in any legal case where some random kernel developer would
try to argue that it doesn't cover "their" code.

You don't have to agree to them, btw - you can remove them from the copy
of Linux you distribute, since the GPL in no way requires you to keep
them. They're not part of the copyright license per se, they are expressly
marked as being my personal viewpoint.  I suspect that if you do, you'll
find companies that would be slightly more nervous to work with you,
though.

But nobody has really ever argued against the clause, even originally. And
in this particular discussion, I don't believe anybody is actually arguing
against it now either. The legal meaning of it may be under discussion,
but I don't think anybody is really even _trying_ to argue that it should
be removed and that we should suddenly try to claim that any future user
programs have to be GPL'd.

Quite the reverse - I think everybody involved would argue that that would
just be crazy talk.

			Linus


Newsgroups: fa.linux.kernel
From: viro@parcelfarce.linux.theplanet.co.uk
Subject: Re: Linux GPL and binary module exception clause?
Original-Message-ID: <20031210231309.GH4176@parcelfarce.linux.theplanet.co.uk>
Date: Wed, 10 Dec 2003 23:14:47 GMT
Message-ID: <fa.ngbkdkm.1mnc3ak@ifi.uio.no>

On Wed, Dec 10, 2003 at 02:36:46PM -0800, Kendall Bennett wrote:

> > In 2.7 we need to get the export list back to sanity.  Right now it's a
> > such a junkpile that speaking about even a relative stability for it...
> > Not funny.
>
> You miss my point. I was talking about a single kernel version. For a
> single kernel version, the ABI is both *published* and *stable*. Sure it
> may not be what you consider a *clean* or *good* ABI, but it *IS* an ABI.

The hell it is.  Change CONFIG_SMP or any number of other options and your
binary compatibility is toast.

> Given that it is a stable and published ABI for a single kernel version,
> then what makes a kernel module different from a user program? The fact

The utter lack of isolation in the former.  And that's a very practical
consideration - amount of efforts needed to tell whether any given bug is
in kernel or in an application is *way* less than for module vs. kernel.
Ditto for potential impact of changes on one side of "interface" upon the
other side.

Realistically there's no way to keep the module "API" fixed without a major
negative impact on kernel development, security and stability.  If somebody
has business model based on the expectation that this "API" will not be
changed whenever we find that useful - too bad, you can't possibly claim
that you had not been warned.

Again, lack of warranties regarding the module "API" is
	* deliberate
	* well-documented
	* older than binary-only modules
	* based on the very sound technical reasons

Live with it.  It's not going to change.

Of course some parts of the "API" are relatively stable; if nothing else,
we have in-tree drivers to consider whenever we make a change and well-behaving
3rd-party module won't take more efforts to update than a typical in-tree
driver.  But that's it - author of such module basically makes an educated
guess regarding the likeliness of change that would leave him in a bad
situation.  Generally, the deeper in kernel guts you play, the easier it
is to get burned.  And current set of exports goes very deep in said guts -
much deeper than it should have.

Anybody who does out-of-tree kernel work must understand the reality.
Modules are different from userland code in the ways that deeply affect
product cycle.  Pretending that there is no fundamental difference and
complaining about that difference signifies only one thing - lack of
basic research on part of complainers.  Don't pretend that you don't know
what you are getting into.



From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches
Date: Thu, 14 Dec 2006 04:17:04 UTC
Message-ID: <fa.uptFenZA61MQbAcOiwjVzIrL8Qc@ifi.uio.no>

On Wed, 13 Dec 2006, Greg KH wrote:
>
> Numerous kernel developers feel that loading non-GPL drivers into the
> kernel violates the license of the kernel and their copyright.  Because
> of this, a one year notice for everyone to address any non-GPL
> compatible modules has been set.

Btw, I really think this is shortsighted.

It will only result in _exactly_ the crap we were just trying to avoid,
namely stupid "shell game" drivers that don't actually help anything at
all, and move code into user space instead.

What was the point again?

Was the point to alienate people by showing how we're less about the
technology than about licenses?

Was the point to show that we think we can extend our reach past derived
work boundaries by just saying so?

The silly thing is, the people who tend to push most for this are the
exact SAME people who say that the RIAA etc should not be able to tell
people what to do with the music copyrights that they own, and that the
DMCA is bad because it puts technical limits over the rights expressly
granted by copyright law.

Doesn't anybody else see that as being hypocritical?

So it's ok when we do it, but bad when other people do it? Somehow I'm not
surprised, but I still think it's sad how you guys are showing a marked
two-facedness about this.

The fact is, the reason I don't think we should force the issue is very
simple: copyright law is simply _better_off_ when you honor the admittedly
gray issue of "derived work". It's gray. It's not black-and-white. But
being gray is _good_. Putting artificial black-and-white technical
counter-measures is actually bad. It's bad when the RIAA does it, it's bad
when anybody else does it.

If a module arguably isn't a derived work, we simply shouldn't try to say
that its authors have to conform to our worldview.

We should make decisions on TECHNICAL MERIT. And this one is clearly being
pushed on anything but.

I happen to believe that there shouldn't be technical measures that keep
me from watching my DVD or listening to my music on whatever device I damn
well please. Fair use, man. But it should go the other way too: we should
not try to assert _our_ copyright rules on other peoples code that wasn't
derived from ours, or assert _our_ technical measures that keep people
from combining things their way.

If people take our code, they'd better behave according to our rules. But
we shouldn't have to behave according to the RIAA rules just because we
_listen_ to their music. Similarly, nobody should be forced to behave
according to our rules just because they _use_ our system.

There's a big difference between "copy" and "use". It's exatcly the same
issue whether it's music or code. You can't re-distribute other peoples
music (because it's _their_ copyright), but they shouldn't put limits on
how you personally _use_ it (because it's _your_ life).

Same goes for code. Copyright is about _distribution_, not about use. We
shouldn't limit how people use the code.

Oh, well. I realize nobody is likely going to listen to me, and everybody
has their opinion set in stone.

That said, I'm going to suggest that you people talk to your COMPANY
LAWYERS on this, and I'm personally not going to merge that particular
code unless you can convince the people you work for to merge it first.

In other words, you guys know my stance. I'll not fight the combined
opinion of other kernel developers, but I sure as hell won't be the first
to merge this, and I sure as hell won't have _my_ tree be the one that
causes this to happen.

So go get it merged in the Ubuntu, (Open)SuSE and RHEL and Fedora trees
first. This is not something where we use my tree as a way to get it to
other trees. This is something where the push had better come from the
other direction.

Because I think it's stupid. So use somebody else than me to push your
political agendas, please.

		Linus


From: Theodore Tso <tytso@mit.edu>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches for 
	2.6.19]
Date: Thu, 14 Dec 2006 15:35:42 UTC
Message-ID: <fa.Vqw9nW91I4zxVAeESUVTj2MI3Pk@ifi.uio.no>

>But I would ask that they honour the licence on the code I release, and
>perhaps more importantly on the code I import from other GPL sources.

It's not a question of "honoring the license"; it's a matter of what
is the reach of the license, as it relates to derivitive works.  It's
a complicated subject, and very dependent on the local law; certainly
in the U.S., when I asked a Law Professor from the MIT Sloan School of
Management, who specialized in IP issues about the FSF theory of GPL
contamination by dynamic linking, after I explained all the details of
how dynamic linking work, she told me that it would be "laughed out of
the courtroom".

Now, is that a legal opinion?  No, because the facts of every single
case are different, and it was an opinion from someone over a decade
ago, and case law may have changed (although as far as I know, there
has been no court ruling directly on this particular point since
then).

The bottom line though is that it is not _nearly_ so clear as some
people would like to believe.  There is a lot of gray --- and that's a
GOOD thing.  If copyright contamination via dynamic linking was the
settled law of the land, then all of the Macintosh extensions that
people wrote --- WHICH WORK BY PATCHING THE OPERATING SYSTEM --- would
be illegal.  And given how much Apple hated people implying that the
UI as handed down from the mountain by the great prophet Steve Jobs
wasn't good enough, would we really have wanted Apple hounding
developers with lawsuits just because "they weren't honoring the
license" by daring to patch MacOS, and extending the OS by linking in
their code?

And what about people who link in a debugger into the Microsoft HAL or
other Microsoft DLL's in order to reverse engineer USB drivers for
Linux or reverse engineer protocols for Samba --- that's dynamic
linking of a sort too --- should that be illegal as well?  Imagine the
power that Microsoft could put into their EULA if copyright
contamination could be as easily achieved by dynamic linking.

Please, let's try to have a little sanity here,

						- Ted


From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches
Date: Thu, 14 Dec 2006 16:54:18 UTC
Message-ID: <fa.t4lVWEE2dt817jlcseCiLe1JWao@ifi.uio.no>

On Thu, 14 Dec 2006, David Woodhouse wrote:
>
> But I would ask that they honour the licence on the code I release, and
> perhaps more importantly on the code I import from other GPL sources.

This is a total non-argument, and it doesn't get any betetr by being
mindlessly repeated over and over and over again.

The license on the code you released talked about "derived works".

Not "everything I want to".

If a module owner can argue successfully in a court of law that a binary
driver isn't a derived work, then the GPL simply DOES NOT COVER IT!

In other words, people CAN "honor the license" and still not be required
to put their code under the GPL.

And no, including one header file in order to compile against something
does not automatically make something a "derived work". It may, or it may
not. It really isn't up to you to decide whether it does (and notice how
I'm not saying that it's up to _me_ either!).

For example, all the same people who clamor for free software get
absolutely RABID about "fair use". Guess what "fair use" actually MEANS?

Think about it for a moment. It expressly _limits_ the right of copyright
authors to claim "derived work". So if you argue that anything that ever
includes your header file (but none of your code) and compiles against it
is a "derived work", then you are basically very close to arguing that
"fair use" does not exist.

Do you really want to argue that "everything that has touched anything
copyrighted AT ALL is a derived work"? Do you feel lucky, punk?

THAT is why I think this discussion is so hypocritical. Either you accept
that "fair use" and copyrights aren't black-and-white, or you don't.

If you think this is a black-and-white "copyright owners have all the
rights", then you're standing with the RIAA's and the MPAA's of the world.

Me, personally, I think the RIAA and the MPAA is a shithouse. They are
immoral. But guess what? They are immoral exactly _because_ they think
that they automatically own ALL the rights, just because they own the
copyright.

That is what it boils down to: copyright doesn't really give you "absolute
power". This is why I have been _consistently_ arguing that we're not
about "black and white" or "good against evil". It simply isn't that
simple.

I don't like binary modules. I refuse to support them, and if it turns out
that the module was written using Linux code, and just for Linux, I think
that's a _clear_ copyright violation, and that binary module is obviously
a license violation.

But if the module was written for other systems, and just ported to Linux,
and not using our code, then it's very much debatable whether it's
actually a "derived work". Interfaces don't make "derived works" per se.

Now, is it something you could sue people over? Sure. I actually do
believe that it's very possible that a judge _would_ consider such a
module a derived work, and you can sue people. It probably depends on
circumstances too.

But don't you see the problem with a black-and-white technical measure?

Don't you see the problem with the DMCA and the DVD encryption?

Those kinds of things REMOVE the "reasonable thought" from the equation,
and turn a gradual process into a sharp "right or wrong" situation. AND
THAT IS WRONG. We simply do not LIVE in a world that is black and white.

So if you think somebody violates your copyright, send them a C&D letter,
and eventually take them to court. It's been done. Companies that mis-used
the GPL have actually been sued, and THEY HAVE LOST. That's a GOOD thing.
I'm not arguing against that at all. What I'm arguing against is the
"blind belief" that you or I have the right to tell people what to do,
just because we own copyrights.

It's not a blind belief that I'm willing to subscribe to. Exactly because
I have _seen_ what that blind belief results in - crap like the DMCA and
the RIAA lawsuits.

			Linus



From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches
Date: Thu, 14 Dec 2006 17:04:51 UTC
Message-ID: <fa.CahPSx89OmEM4ZJoZNuA8xxYoTw@ifi.uio.no>

On Thu, 14 Dec 2006, Jeff Garzik wrote:
>
> For the record, I also disagree with the sneaky backdoor way people want to
> add EXPORT_SYMBOL_GPL() to key subsystems that drivers will need.

I actually think the EXPORT_SYMBOL_GPL() thing is a good thing, if done
properly (and I think we use it fairly well).

I think we _can_ do things where we give clear hints to people that "we
think this is such an internal Linux thing that you simply cannot use this
without being considered a derived work".

It's really just a strong hint about what we consider to be internal. The
fact is, "intent" actually does matter, and as such our _intent_ in saying
"these are very deep and internal interfaces" is actually meaningful -
even in a court of law.

So I personally don't see EXPORT_SYMBOL_GPL() to be a "technical measure",
I see it as being "documentation".

That said, I think that some people seem to be a bit over-eager to use it.
And I actually think that weakens the rest of them too (imagine a lawyer
saying in front of a judge:

  "Look, they marked 'strcpy()' as a symbol that requires us to be GPL'd,
   but look, it's a standard function available everywhere else too, and
   you can implement it as one line of code, so a module that uses it
   clearly is NOT a derived work, so EXPORT_SYMBOL_GPL is obviously not
   something that means anything"

So this is why I've actually argued in the past for some
EXPORT_SYMBOL_GPL's to be demoted to "normal" EXPORT_SYMBOL's. Exactly
because over-using them actually _weakens_ them, and makes them pointless
both from a documentation _and_ from a legal standpoint.

Btw, I've actually had a lawyer tell me that EXPORT_SYMBOL_GPL makes legal
sense and has actually made people happier, for what its worth. Of course,
you can get <n*2> different opinions from <n> lawyers, so that may not be
all that meaningful ;)

				Linus


From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches
Date: Thu, 14 Dec 2006 18:53:02 UTC
Message-ID: <fa.9W3hEu02rBLwr4zJSxxIGUeSI44@ifi.uio.no>

On Thu, 14 Dec 2006, Chris Wedgwood wrote:
>
> Calling internal symbols _INTERNAL is confusing?

Well, I'm not sure the _INTERNAL name is all that much better than the
_GPL one.

In many ways, the _GPL one describes the _effects_ better, and also points
out the reason _why_ something is marked differently. Sure, it's marked
becasue it's internal, but why is does that have to be pointed out at all?
Why not use the same EXPORT_SYMBOL? The answer to that is the "GPL" part,
ie the expectation that internal symbols are so internal that they have
license effects.

And if you were an external vendor doing binary only modules, would you
react to "internal"? It wouldn't have the same "oh, _that_ is what it is
all about" thing, would it?

So I do agree that we have probably done a bad job of explaining why that
_GPL thing makes sense, and what it means on a deeper level (the license
thing is a very superficial thing, but its worth naming just because the
superficial thing is also the biggest _impact_ - even if it may not be the
underlying deeper _reason_ for it).

So which makes more sense from a naming standpoint: the superficial impact
that is what _matters_ for people, or the more subtle issue that causes it
to have that impact?

I think that question is what it boils down to, and at least personally,
while I see both things as being worthwhile, I think the superficial thing
is the one that needs pointing out, because it's the one that may change
your behaviour (while the deeper _meaning_ is more of just an
explanation).

But I don't personally care that deeply. I mostly care about the fact that
changing the name now would just be inconvenient and unnecessary churn,
and that's probably my biggest reason to not want to do it ;)

			Linus


From: Theodore Tso <tytso@mit.edu>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches for 
	2.6.19]
Date: Thu, 14 Dec 2006 17:19:30 UTC
Message-ID: <fa.dsbLOgnwyizjB5N0Huc5xI9mCzU@ifi.uio.no>

On Thu, Dec 14, 2006 at 04:33:47PM +0000, Alan wrote:
> > The trick is to let a lawyer send cease and desist letters to people
> > distributing the infringing software for 1 Euro at Ebay.
>
> Doesn't that sound even more like the music industry ? Pick on Grandma,
> and people who've no clue about the issue. It's not the way to solve such
> problems. The world does not need "The war on binary modules". Educate
> people instead, and talk to vendors.

.... or like Microsoft, who is threatening to make war on end-users
instead of settling things with vendors.  (One of the reasons why I
personally find the Microsoft promise not to sue _Novell_'s end users
so nasty.  Microsoft shouldn't be threatening anyone's users; if they
have a problem, they should be taking it up with the relevant vendor,
not sueing innocent and relatively shallow-pocketed end-users and
distributors.)

One of the things that I find so interesting about how rabid people
get about enforcing GPL-only modules is how they start acting more and
more like the RIAA, MPAA, and Microsoft every day....

						- Ted


From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: [GIT PATCH] more Driver core patches for 2.6.19
Date: Thu, 14 Dec 2006 17:23:32 UTC
Message-ID: <fa.2dQGUWP4Y2nemuU0av8v162hhrM@ifi.uio.no>

On Wed, 13 Dec 2006, Alan wrote:
>
> He only owns a small amount of the code. Furthermore he imported third
> party GPL code using the license as sole permission. So he may have dug
> a personal hole but many of the rest of us have been repeatedly saying
> whenever he said that - that we do not agree.

[ The "he" being me in the above ]

Btw, I'd like to make it clear in this discussion too (as I have in
others), that I agree 100% with Alan here.

The thing is, my opinion is really just _my_ opinion. People shouldn't see
it as anything else. When I say "I don't think we should totally disallow
binary modules", you should always keep in mind that:

 - the fact that I think that _some_ binary modules may be perfectly legal
   does not mean that I think _all_ binary modules would be legal. I think
   there are lots of ways to make such a binary module that is obviously
   not ok.

 - I really _am_ just one of hundreds of copyright owners. The fact that
   _I_ am not necessarily all that eager to take things to court should in
   no way be seen as estoppel for _others_ who decide that they want to
   flex their legal rights.

So when I "may have dug a personal hole", please realize that this is
actually a personal - and conscious - choice. I've never wanted to do
copyright assignments, for several reasons: I think they are nasty and
wrong personally, and I'd hate all the paperwork, and I think it would
actually detract from the development model.

But one of the reasons I've never wanted copyright assignments is that I'm
personally actually _more_ comfortable with the system being co-owned. I
_like_ having my hands bound, and being in that hole. Not because of any
strange sexual hangups either, but simply because I think being personally
limited is something that makes people trust me more in the end - or
rather, it is something that means that people don't _have_ to trust me.

So people know that I can't unilaterally change the license. And they
_know_ that they can actually take things to court on their own. AND THAT
IS A GOOD THING. The last thing anybody _ever_ wants is to have me having
absolute powers. Not you guys, and certainly not me.

So you guys should always be happy, realizing that Linus may have his
quirks, but that my quirks can't ever really screw you guys up.

So I repeat: my opinions are _my_ opinions. Nobody else is legally bound
by them. And I'm certainly willing to bend my behaviour in the presense of
pressure (I think only mindless idiots can't change their mind - I
personally change some of my opinions several times a day just to keep
them fresh), but in something like this, where I _do_ have a fairly strong
opinion, I really think that this kind of patch has to be merged in
somebody elses tree than mine.

If, after a year, it turns out that my tree is the only one that doesn't
have that clause, I think I'll either get the hint, or people will realize
that I'm pointless and will just ignore me. It will have taken you long
enough to realize that ;)

Because one of the great things about the GPL is that _nobody_ has the
power to deny other peoples will. Not even me, not even for the kernel.

				Linus


From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches
Date: Sat, 16 Dec 2006 02:55:49 UTC
Message-ID: <fa.FExMliE6EJkOThZwW3M5o5wtjRY@ifi.uio.no>

On Sat, 16 Dec 2006, karderio wrote:
>
> As it stands, I believe the licence of the Linux kernel does impose
> certain restrictions and come with certain obligations

Absolutely. And they boil down to something very simple:

	"Derived works have to be under the same license"

where the rest is just really fluff.

But the point is, "derived work" is not what _you_ or _I_ define. It's
what copyright law defines.

And trying to push that definition too far is a total disaster. If you
push the definition of derived work to "anything that touches our work",
you're going to end up in a very dark and unhappy place. One where the
RIAA is your best buddy.

And the proposed "we make some technical measure whereby we draw our _own_
lines" is exactly that total disaster.

We don't draw our own lines. We accept that the lines are drawn for us by
copyright law, and we actually _hope_ that the lines aren't too sharp and
too clearcut. Because sharp edges on copyright is the worst possible
situation we could ever be in.

The reason fair use is so important is exactly that it blunts/dulls the
sharp knife that overly strong copyright protection could be. It would be
a total disaster if you couldn't quote other peoples work, and if you
couldn't make parodies on them, and if you couldn't legally use the
knowledge you gained for them.

In other words, copyright MUST NOT be seen as some "we own this, and you
have no rights AT ALL unless you play along with our rules". Copyright
absolutely _has_ to allow others to have some rights to play according to
their rules even without our permission, and even if we don't always agree
with what they do.

And that is why it would be WRONG to think that we have the absolute right
to say "that is illegal". It's simply not our place to make that
judgement. When you start thinking that you have absolute control over the
content or programs you produce, and that the rest of the worlds opinions
doesn't matter, you're just _wrong_.

And no, "BECAUSE I'M GOOD" is _not_ an excuse. It's never an excuse to do
something like that just because you believe you are "in the right". It
doesn't matter _how_ much you believe in freedom, or anything else -
everybody _always_ thinks that they are in the right.  The RIAA I'm sure
is in a moral lather because they are protecting their own stronghold of
morality against the infidels and barbarians at the gate.

So don't go talking about how we should twist peoples arms and force them
to be open source of free software. Instead, BE HAPPY that people can take
advantage of "loopholes" in copyright protections and can legally do
things that you as the copyright owner might not like. Because those
"loopholes" are in the end what protects YOU.

			Linus


From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches
Date: Sat, 16 Dec 2006 16:34:34 UTC
Message-ID: <fa.rLbgMHN9n9znuNqaSCUozxklxhs@ifi.uio.no>

On Sat, 16 Dec 2006, Rafael J. Wysocki wrote:
>
> I think the most important problem with the binary-only drivers is that we
> can't support their users _at_ _all_, but some of them expect us to support
> them somehow.

Actually, I do think that we've made our position on that side pretty
clear.

I think people do by-and-large know that if they load a binary module,
they simply can't get supported by the kernel developers.

We make that fairly clear at module loading time, and I think it's also
something that people who have read linux-kernel or seen other peoples
bug-reports are reasonably aware of.

I realize that a lot of people never read the kernel mailing list, but
they probably don't look at www.kernel.org either - they got their kernel
from their distribution. The only way they realize is probably by looking
at where they got whatever binary modules they use.

That said - it should be noted that a lot of the time when you use a
binary module and have an oops, the oops doesn't necessarily have anything
to do with your binary module. If I recognize the oops from other reports,
I certainly won't say "I'm not going to help you, because you used a
binary module". If I can tell where the problem is, the binary module is a
non-issue.

It's only when we try to debug things that we say "You've got a binary
module, you need to reproduce this problem _without_ it, because otherwise
we can't bother to waste our time on trying to debug something that may be
due to somebody else".

			Linus


From: Theodore Tso <tytso@mit.edu>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches for 
	2.6.19]
Date: Sat, 16 Dec 2006 14:50:01 UTC
Message-ID: <fa.iEgWDwI+jSM6462dOcqFgQuyGJk@ifi.uio.no>

On Sat, Dec 16, 2006 at 07:43:44AM +0100, Willy Tarreau wrote:
> All this is about "fair use", and "fair use" comes from compatibility
> between the author's intent and the user's intent.

That is NOT TRUE.  If the author's intent is that anyone who is using
a TV with a screen larger than 29" and with two chairs is a theatrical
performance, and so anyone with a large screen TV must ask permission
from the MPAA first and pay $$$ before they crack open a DVD, would
you think that they should be allowed to claim that watching a DVD
isn't fair use unless you obey their rules?

I thought not.

						- Ted

P.S.  For people who live in the US; write your congresscritters; the
MPAA wants to propose new legislation stating exactly this.



From: Theodore Tso <tytso@mit.edu>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches for 
	2.6.19]
Date: Sat, 16 Dec 2006 20:23:45 UTC
Message-ID: <fa.JjL+bVYAZ4XzBTAZEsp388cER7c@ifi.uio.no>

On Sat, Dec 16, 2006 at 05:30:31PM +0100, Willy Tarreau wrote:
> I don't think this is the same case. The film _author_'s primary goal is
> to have a lot of families buy his DVD to watch it. Whatever the MPAA says,
> I can consider it "fair use" if a family of 4..8 persons watch the DVD at
> the same time.

"You can consider it"?  But you're not the author.  This is the
hypocrisy that Linus was talking about.  At the same time that you're
trying to dictate to other other people can use their copy of the
Linux kernel, when it comes to others people's copyrighted work, you
feel to dictate what is and isn't "fair use".

That's the big thing about dynamic linking.  The GPL has always said
it is about distribution, not about use.  The dynamic linking of a
kernel module happens in the privacy of someone's home.  When we try
to dictate what people are doing in the privacy in their home, we're
no better than the MPAA or the RIAA.

As far as whether or not someone is allowed to distribute a binary
module that can be linked into the Linux kernel, that's a question of
whether the binary module is a derived work or not.  And that's not up
to us, that's up to the local laws.  But before you decide that you
want the most extreme form of anything that wanders close to one
person's code or header files is a derived work, and to start going to
work lobbying your local legislature, recall that there have been
those who have claimed that Linux is a derived work of Unix because we
used things like #define's for errno codes and structure definitions
of ELF binaries.  You really sure you want to go there?

						- Ted


From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches
Date: Sat, 16 Dec 2006 16:29:13 UTC
Message-ID: <fa.kZH6BCqh/06NAOnhrP3iF9bd5Rg@ifi.uio.no>

On Sat, 16 Dec 2006, Willy Tarreau wrote:
>
> All this is about "fair use", and "fair use" comes from compatibility
> between the author's intent and the user's intent.

No. "fair use" comes from an INcompatibility between the author's intent
and the users intent.

In other words, "fair use" kicks in EXACTLY when an author says "you can't
copy this except when you [payme, stand on your head for two hours, give
your modifications back]", and the user _disagrees_.

Users still have rights under copyright law even when the author tries to
deny them those rights.

Of course, all reasonable true authors tend to agree with fair use. People
who actually do "original work" tend to all realize that everybody really
feeds off of each others works, and that we're all inspired by authors etc
that went before us. So I doubt a lot of real authors, musicians or
computer programmers will actually disagree with the notion of fair use,
but it's important to realize that fair use is exactly for when the users
and the authors rights clash, and the user DOES have rights. Even rights
that weren't explicitly given to them by the author.

> For this exact reason, I have added a "LICENSE" file [1] in my software
> (haproxy) stating that I explicitly permit linking with binary code if
> the user has no other choice (eg: protocols specs obtained under NDA),
> provided that "derived work" does not steal any GPL code (include files
> are under LGPL). On the other hand, all "common protocols" are
> developped under GPL so that normal users are the winners, and everyone
> is strongly encouraged to use the GPL for their new code to benefit from
> everyone else's eyes on the code.
>
> This clarifies my intent and let developers decide whether *they* are
> doing legal things or not.

I think that's fine, and I think it may make some of your users happier,
and breathe more easily. I don't disagree with that kind of clarification.

But:

> Don't you think it would be a good idea to add such a precision in the
> sources ?

I think it would be a hell of a lot better idea if people just realized
that they have "fair use" rights whether the authors give them or not, and
that the authors copyrights NEVER extend to anything but a "derived work".

I find the RIAA's position and the DMCA distasteful, and in that I
probably have a lot of things in common with a lot of people on this list.
But by _exactly_ the same token, I also find the FSF's position and a lot
of GPL zealots' position on this matter very distasteful.

Because "fair use" is NOT something that should be specified in the
license. It's very much something that people have DESPITE any license
claiming otherwise.

And I'd rather teach people that fundamental fact, than try to confuse the
issue EVEN MORE by saying that my copyright only extends to derived works
in the license text. That will just make people think that if the license
does NOT say that, they don't have fair use. AND THAT IS WRONG.

			Linus


From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches
Date: Sat, 16 Dec 2006 17:20:57 UTC
Message-ID: <fa.BtR3BrSRXfA/j9LF1x2KHzoOstE@ifi.uio.no>

On Sat, 16 Dec 2006, Willy Tarreau wrote:
>
> I understand your point, but not completely agree with the comparison,
> because I think that you (as the "author") are in the type of authors
> you describe below :
>
> > Of course, all reasonable true authors tend to agree with fair use.

Sure. Sadly, in this day and age, "copyright owner" and "author" only bear
a very passing resemblance to each other.

In a lot of areas, the AUTHOR may be a very reasonable person, and realize
that fair use is a good thing, and perhaps even realize that in some
places even unfair use can be a good thing (do you really think you should
pay $20 for a DVD if you make $3 a month in a sweatshop in china? Maybe
piracy sometimes is simply better..)

But the author may also have his own reasons for wanting to _deny_ fair
use. Maybe he's just a royal a-hole, and wants to milk his work for
whatever it's worth. But maybe he's a person with an agenda, and wants to
ignore fair use because he wants to "improve the world for everybody",
never mind that he tries to deny people a fundamental right in the
process. I call those people a-holes too (in all fairness, they return the
favor, so we're all even ;)

But even more commonly, the author simply doesn't control the copyright at
all any more. In many areas (and software is one - including even large
swaths of free software), the copyrights of a work is not really
controlled by the author of the work, but by companies or foundations that
have no reason to really try to educate people about "fair use".

So I actually think that the authors that actually UNDERSTAND fair use,
and realize that people can use portions of their work without permission,
AND that actually control their work is a very very very small subset of
authors in general.

This has nothing to do with software per se, btw. Pick up one of the
Calvin & Hobbes books by Bill Watterson - I think it may have been the "10
year anniversary" one - where he talks about the disagreements he had with
the people who actually controlled the copyrights (and I think also some
of the people who used his artwork without any permission - the line
between "fair use" and "illegal" really is a murky one, and while we
should celebrate that murkiness, it's also why people disagree).

> > And I'd rather teach people that fundamental fact, than try to confuse the
> > issue EVEN MORE by saying that my copyright only extends to derived works
> > in the license text. That will just make people think that if the license
> > does NOT say that, they don't have fair use. AND THAT IS WRONG.
>
> That's a valid point. What is really needed is to tell them that if they
> doubt, they just have to ask the author and not be advised by any GPL zealot.

Well, in open source, there often isn't any one "the author". So you can't
do that. And when there is, as mentioned, he may not actually even have
the legal right any more to give you any license advice. And even when he
does hold the copyrights, he may change his mind later.

So in the end, the thing you can and should depend on is: the license text
itself (and happily, the GPLv2 very clearly talks about the real line
being "derived work" - it may be a murky line, and they seem to want to
change that to something harder in the GPLv3, but it's a good line), a
separate signed contract, or simply a legal opinion, preferably by a judge
in a court of law.

Of course, it very seldom gets to that kind of issue. People tend to just
walk very gently around it all.

If you want to be safe, you NEVER do any binary modules. The only
_obviously_ safe thing is to always do only what the license very
explicitly allows you to, and in the case of the GPLv2, that's to release
all modifications under the same GPLv2.

Anything else, you have to make some really scary decisions. Can a judge
decide that a binary module is a derived work even though you didn't
actually use any code? The real answer is: HELL YES. It's _entirely_
possible that a judge would find NVidia and ATI in violation of the GPLv2
with their modules.

Judges have done stranger things. And it's not my place to say what the
limit of "derived work" actually is. It all probably depends on a lot of
circumstances, and there simply isn't an easy answer.

			Linus


From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches
Date: Sat, 16 Dec 2006 21:01:39 UTC
Message-ID: <fa.5D1zK/nyYrPLC4P9ezoC+0PxiT4@ifi.uio.no>

On Sat, 16 Dec 2006, Ricardo Galli wrote:

> As you probably know, the GPL, the FSF, RMS or even GPL "zealots" never tried
> to change or restrict "fair use". GPL[23] covers only to "distibution" of the
> covered program. The freedom #0 says explicitly: "right to use the program
> for any purpose".

I'm sorry, but you're just rewriting history.

The FSF very much _has_ tried to make "fair use" a very restricted issue.
The whole reason the LGPL exists is that people realized that if they
don't do something like that, the GPL would have been tried in court, and
the FSF's position that anything that touches GPL'd code would probably
have been shown to be bogus.

In reality, if the FSF actually believed in "fair use", they would just
have admitted that GNU libc could have continued to be under the GPL, and
that any programs that link against it are obviously not "derived" from
it.

But no. The FSF has very much tried to confuse and muddle the issue, and
instead have claimed that projects like glibc should be done under the
"Lesser" GPL.

That's just idiocy, but it works as a way to defuse the problem that the
FSF has always had with admitting that not only _they_ have "fair use"
rights, but others have them too.

Do you REALLY believe that a binary becomes a "derived work" of any random
library that it gets linked against? If that's not "fair use" of a library
that implements a standard library definition, I don't know what is.

And yes, the FSF really has tried to push that totally insane argument.

So don't tell me that the FSF honors "fair use". They say they do, but
they only seem to honor it when it helps _their_ argument, not when it
helps "those evil people who try to take advantage of our hard work".

The fact is, if you accept fair use, you have to accept it for other
people to take advantage of too. Fair use really isn't just a one-way
street.

		Linus


From: Theodore Tso <tytso@mit.edu>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules [was Re: [GIT PATCH] more Driver core patches for 
	2.6.19]
Date: Sun, 17 Dec 2006 04:10:53 UTC
Message-ID: <fa.F8nFk0vcGRyIGSkXStE95ZKR6AM@ifi.uio.no>

On Sun, Dec 17, 2006 at 01:22:12AM +0100, Ricardo Galli wrote:
> OK, let assume your perspective of the history is the valid and real one,
> then, ¿where are all lawsits against other big GPL only projects? For example
> libqt/kdelibs. You can hardly provide any example where the GPL wasn't hold
> in court.

There's no need for lawsuits against things like libqt.  The question
is whether someone who writes a commercial program that happens to
dynamically link against libqt is in fact in violation of copyright
claims.  In such a case, the owners of libqt would have to sue the
commercial application writer, not the other way around.  There
haven't been any such cases, mostly because (a) the FUD generated by
the FSF about GPL vs. LGPL has generally been enough to cause
application authors to avoid using GPL'ed code even if it would be
legally defensible in court, and (b) I personally suspect that the FSF
has deliberately not tried to make a test case out of a commercial
application dynamically linking against a GPL'ed library.

In point of fact, if you compile libss from e2fsprogs on a Solaris
machine, and then let the Sun Enterprise Authentication Mechanism (a
proprietary version of Kerberos v5) link against that version of libss
(as opposed to the one derived from the MIT Kerberos version of
libss), you can have a proprietary Sun binary linking against libss
which will called will dynamically pull in the GPL'ed version of
readline (or the BSD licensed editline library, whichever one it finds
first in its search path).  Quick!  Is there a GPL violation involved,
and if so, who should the FSF try to sue first?

There are indeed plenty of cases where the GPL has been upheld in a
court of law, but usually it's some straightforward case of an
embedded version of Linux being used without releasing source.  As far
as I know, there has been no case on point about GPL and dynamic
linking, and I personally suspect it's at least partially because the
FSF is afraid it would lose such a case.  (As I've said, at least one
law professor of mine from the MIT Sloan School of Management has told
me that in her opinion the FSF's theory would be "laughed out of
court").

						- Ted


From: Linus Torvalds <torvalds@osdl.org>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules
Date: Sun, 17 Dec 2006 18:01:03 UTC
Message-ID: <fa.VSWCKHCsdQKhyBZVoHkD9HTOYPA@ifi.uio.no>

On Sun, 17 Dec 2006, Alexandre Oliva wrote:

> On Dec 16, 2006, Linus Torvalds <torvalds@osdl.org> wrote:
> >
> > The whole reason the LGPL exists is that people realized that if they
> > don't do something like that, the GPL would have been tried in court, and
> > the FSF's position that anything that touches GPL'd code would probably
> > have been shown to be bogus.
>
> Or that people would feel uncomfortable about the gray area and avoid
> using the GPLed code in cases in which this would be perfectly legal
> and advantageous to Free Software.

I agree. A lot of it is about "comfort". But you can _easily_ handle that
comfort level in other ways.

For example, many programs already do have clarifications that certain
uses do not introduce any GPL dependency what-so-ever. The kernel COPYING
makes it clear that user space is not a derived work of the kernel, for
example. You don't actually need to use a different license for this case:
if all you're looking for is "comfort", then you really can comfort people
other ways.

For example, glibc could easily have just come out and said the thing that
is obvious to any sane person: "using this library as just a standard
library does not make your program a derived work".

There really wassn't much need for the LGPL, I think.

> There are many factors involved and you're oversimplifying the issue.

Sure. It's never clear-cut. It's never black and white.

> Some claim that, in the case of static linking, since there part of
> the library copied to the binary, it is definitely a case of derived
> work.

No, the sane way to think about it is that linking just creates an
"aggregate" work. It's no less "aggregate" than creating a CD-ROM that
contains the library and some random program: you "link" them together
with "mkisofs".

Why do people think that using "ln" is _any_ different from using
"mkisofs". Both create one file that contains multiple pieces. What's the
difference - really?

Of course, the _aggregate_ still needs permission from all the copyright
holders in order to be distributed, that goes without saying. But the
GPLv2 clearly allows aggregation.

And don't get me wrong: I do not say that "linking" _never_ creates
derived works. I'm just saying that "linking" is just a technical step,
and as such is not the answer to whether something is derived or not.
Things can be derived works of each other _without_ being linked, and they
may not be derived works even if they _are_ linked.

So "linking" basically has very little to do with "derived" per se.

Linking does have one thing that it implies: it's maybe a bit "closer"
relationship between the parts than "mkisofs" implies. So there is
definitely a higher _correlation_ between "derived work" and "linking",
but it's really a correlation, not a causal relationship.

For example, if you link two object files together where neither is a
"library" with standard interfaces, then the result is most likely a
derived work from both. But it wasn't the "act of linking" that caused
that to happen, but simply the fact that they were part of a bigger whole,
and were meaningless apart from each other.

Think of this in the sense of a book. Does binding pages together create a
"derived work"? Not always: you can have anthologies (which are
*aggregations* of works with *independent* copyright), and the binding of
pages together didn't really do anything to the independent pieces. But
clearly, if you're talking about individual pages in one story, then each
individual page is not an independent work in itself.

Linking is the same way. Are the two pieces you link "independent works"
on their own? If so, the end result is really just an aggregate, no
different from using "mkisofs". They are still clearly separable: you
could have built either piece AGAINST SOMETHING ELSE.

> Some then take this notion that linking creates derived works and
> further extend the claim that using dynamic linking is just a trick to
> avoid making the binary a derived work, and thus it shouldn't be taken
> into account, even if there still is *some* information from the
> dynamic library that affects the linked binary.

See how this whole "trick" discussion becomes a totally moot point once
you realize that "mkisofs" and "ld" aren't really all that different.

Does "mkisofs" create a derived work, or an aggregate? Does "ld" create a
derived work or an aggregate? The answer in BOTH cases is the same: it's
not about the name of the command, or some technical detail about how the
pieces are bound together. Copyright law doesn't concern itself with
"mkisofs" vs "ld". It would be totally INSANE if it did, wouldn't you say?

So if it isn't about "mkisofs" vs "ld", then _what_ is it about?

I gave you one answer above. Feel free to make your own judgements. I'm
just saying that anybody who thinks that copyright law cares about
"mkisofs" vs "ld" is just obviously misguided.

So I think the "dynamic vs static" linking argument is a red herring. It
_is_ meaningful in two ways:

 - static linking obviously means that even at a MINIMUM, the result will
   _contain_ both things, so at a minimum, you do need the permission to
   distribute the pieces as parts of an aggregate work.

   In contrast,  in dynamic linking, since you're not _actually_
   distributing the thing you linked against, you don't need to have the
   license to distribute it as an aggregate work.

   This particular thing is a non-issue wrt the GPLv2, since you always
   have the right to do distribution of aggregates, but it does come up in
   some OTHER licenses.

 - you can (quite validly, in my opinion) argue that dynamic linking is a
   sign of separation, and as such if you're able to do dynamic linking
   against an unmodified second work, you have a much stronger argument
   that they really can be seen as two independent works. But notice how
   this was not a technical argument about the _linking_ per se: this
   comes back to a much more important (and much more fundamental) issue
   of whether things are independent (and being independent is certainly
   one _requirement_ for them not being derived works)

   In other words: the _ability_ to do dynamic linking is certainly
   meaningful, not because of the linking itself, but because of what it
   implies from a perspective of "independence".

So to get back to the example of glibc: if a program _could_ have been
linked against some other library, then that pretty clearly shows that
it's really independent of glibc, and the linking is "mere aggregation"
exactly the same way "mkisofs" is generally considered "mere aggregation".

And that is actually true whether you link dynamically or statically.
Since the GPLv2 allows aggregation, I think you can very much argue in
front of a judge that you could have linked statically against even a
GPL'd glibc.

But notice how the thing changes if you talk about a specialized library
like libqt - and notice how it again doesn't really matter whether you do
dynamic or static linking. Libqt is still a work in its own right, but
what about the program that links _to_ it? You can't generally really
claim that it could equally well have been built against some other
library, so now that program - whether linked dynamically or statically -
obviously cannot stand on its own independently of libqt.

As a result, something that links against libqt is very different from
something that links against glibc.

But note how it wasn't "static" vs "dynamic" that mattered AT ALL. What
mattered was whether they had independent lives.

And finally, in case it's not clear: I'm not a lawyer, and I don't play
one on TV, and if I did, I'd be better looking and wouldn't spend my time
on some technical discussion forum. So I'm not claiming that my viewpoint
is "Right(tm)".

But I _am_ claiming that it makes a hell of a lot more sense as a
viewpoint than the "linking is magic" argument does.

			Linus


From: Theodore Tso <tytso@mit.edu>
Newsgroups: fa.linux.kernel
Subject: Re: GPL only modules
Date: Mon, 18 Dec 2006 17:03:27 UTC
Message-ID: <fa.FWN6VMDlhzRXDEW2uwyvVj9cofY@ifi.uio.no>

On Mon, Dec 18, 2006 at 10:38:38AM -0500, Dave Neuer wrote:
> I think this is the key, both with libraries and w/ your book example
> below; the concept of independent "meaning." If your code doesn't do
> whatever it is supposed to do _unless_ it is linked with _my_ code,
> then it seems fairly clear that your code is derivative of mine, just
> as your sequel to my novel (or your pages added onto my book) don't
> "mean" anything if someone hasn't read mine.

That's a wonderful theory, but I don't believe it's recognized by the
courts.  I'm also pretty sure you don't want to go there.  Consider
folks who create add-ons to Tivo player, or extensions to MacOS.  They
don't _do_ anything unless they are used with the Tivo player.  Or a
game meant for a Playstation 3; it won't _do_ anything unless it's
calls the BIOS and system functions provided by the PS3.  Does that
automatically make them derived works?

What about a GPL'ed program which interfaces with the iTunes server?
It won't _do_ anything unless it can connect across the network and
talks to iTunes code.  Does that make it a derived work?

If the answer is no --- or should be no --- then maybe you should be
more careful before making such statements.

For myself, I believe we actually get the largest amount of
programming freedom if we use a very tightly defined definition of
derived code, and not try to create new expansive definitions and try
to ram them through the court system or through legislatures.  In the
end, we may end up regretting it.

						- Ted


Index Home About Blog