views:

123

answers:

4

I am looking forward to use an open source product which has GNU-GPL like license and it says that if I use that product, I must share the source code of my application.

I am slightly confused about it. I understand that Linux is available under GNU-GPL license as well. Does it mean ALL linux application are and has to be open source? Does it mean I can ask for the source code of complete Oracle DB from Oracle Corp (at least the part that runs on Linux)?

EDIT:

Taken from FAQ:

If a library is released under the GPL (not the LGPL), does that mean that any program which uses it has to be under the GPL or a GPL-compatible license?

Yes, because the program as it is actually run includes the library.

+1  A: 

I believe most of your questions should be covered by the FAQ.

In short: No, all Linux applications don't have to be open source. No, you can't ask for the source code for Oracle DB.

Really really simplified the GPL says that if you distribute binaries you must also offer to distribute the source. So if you distribute binaries of the Linux kernel you must also offer to distribute the source for those binaries.

Christoffer Hammarström
Again I don't understand this: "If you distribute binaries, you must also offer to distribute the source." If **you** is oracle here, then they must offer to distribute the source since they do distribute binaries! (Excuse me for being dumb but cant get my head around this sentence)
Hemant
By 'binaries' here he means 'binaries linked against full-GPL code'. Oracle DB isn't linked against full-GPL code so they have no such obligation.
Rup
Oracle isn't licensed under the GPL.
Christoffer Hammarström
+4  A: 

Linux is the kernel, no application will use the kernel directly but over a library, generally the GLIBC which is released under LGPL. That breaks the GPL chain a little bit because GLIBC syscalls the Kernel but this seems to be agreed on. So I'm afraid you won't get the code from Oracle :-).

If the application however uses any GPL licensed code then you MUST make the source code for that application available (but not only open source under a license of your choice) licensed under GPL. That makes GPL actually a quite restrictive license that is "contaminating" products, that is why it is also known as viral license.

jdehaan
That means any libraries making system calls to Linux kernel has to be released under GPL. That means anything that uses those **libraries** must be released under GPL. (As you said, its like a viral) Then ultimately oracle database components will access those libraries!!!
Hemant
As jdehaan said, glibc is *not* released under the GPL.
David Dorward
The question nevertheless remains: why is glibc allowed to send system calls to the kernel and be licenced under the LGPL?
Tomislav Nakic-Alfirevic
Because Linus has a special exception in the version of the GPL that applies to the Linux kernel: "NOTE! This copyright does *not* cover user programs that use kernel services by normal system calls - this is merely considered normal use of the kernel, and does *not* fall under the heading of 'derived work'."
mipadi
@Tomislav - see my answer. There is a deliberate copyright disclaimer that considers using the syscall interface (and associated headers) as normal use of the kernel, thus not forming a combined work.
Tim Post
Thanks for the clarification.
Tomislav Nakic-Alfirevic
+1  A: 

The key distinction with the GPL license is what constitutes "use" of a software package released under this license. GPL draws this distinction as "incorporating" vs. releasing "side-by-side" the GPL-licensed software, and whether or not the latter constitutes an "arms length" relationship.

Most software which uses GPL-licensed software would probably "incorporate" it and thus would itself be required to be released under GPL if it is released. (GPL does not require release, rather it just governs how releases must occur.) Use of a GPL-based library qualifies as incorporation, for example.

The FAQ that was mentioned in a previous answer contains a precise discussion of this issue and gives an example of where a compiler and kernel qualify as having an arms-length relationship, and thus the compiler could be released separately without any GPL license that the kernel may have, provided that the release is done properly. This, however, I think is more the exception than the rule where GPL is involved.

It is important to understand also that the GPL license is significantly different in this regard compared to the LGPL license, which is much more permissive regarding releases.

Joel Hoff
+6  A: 

It is important to realize that the "GPL" can refer to two licenses.

  • The GNU General Public License
  • The GNU Lesser General Public License (aka) The Library General Public License

Either one is very clear to specify that it considers code from a library intermixed with a program as a combined work. This means, if your program loads a library through a dynamic loader (i.e. a common shared object), or links against it statically, the resulting executable is a combined work of the program itself and the libraries that support it.

Now, the differences between the two licenses become very important.

The GPL states that if your program uses a library (or any other code covered by the GPL), it must be released under the same terms as the GPL. This (again) is because the GPL considers the resulting program to be a combined work of your code, plus the work of others.

Fortunately (or not? depending on your views), the GNU C Library is not covered by the GPL. It is covered by the LGPL. The LGPL says that simply loading and using the system C library does constitute a combined work, but an exception is made that allows proprietary applications to do so without having to comply with the distribution requirements of the GPL. So, in this case, Oracle is free to use the system C library (needed to run their code) without being obligated to release their source code.

If Oracle released software that needed to load or link against a GPL covered library, say .. readline(), then yes, they would be obligated to share the code. Oracle (like many others that write software for UNIX-like operating systems) is careful to choose libraries that are released under a more permissive license (aka 2 or 3-clause BSD), or implement their own.

As far as the kernel goes, simply using its syscall interface does not constitute a combined work. While most of us just let the system C library abstract these complexities away, you are completely free to implement your own syscalls under whatever terms you want. This illustrates why the LGPL for the system C library was a very strategic choice. If it were the other way around, GNU/Linux would have deterred more developers than they attracted. Note also, that many of the Linux headers that define the magic numbers needed to talk to the kernel's syscall interface have no license mentioned whatsoever. See linux/sysctl.h for example, or this note from Linus himself in the COPYING file distributed with the kernel:

NOTE! This copyright does not cover user programs that use kernel services by normal system calls - this is merely considered normal use of the kernel, and does not fall under the heading of "derived work". Also note that the GPL below is copyrighted by the Free Software Foundation, but the instance of code that it refers to (the Linux kernel) is copyrighted by me and others who actually wrote it.

Also note that the only valid version of the GPL as far as the kernel is concerned is this particular version of the license (ie v2, not v2.2 or v3.x or whatever), unless explicitly otherwise stated.

                    Linus Torvalds

Note, Linus specifically says using the kernel headers and syscall interface does not constitute a derived (as in modified) or combined (as in simply used) work. This, among other things is part of the rift between Linux and GNU. I mention this only because you indirectly mention the ramifications of the GPL. Linus (sometimes) wants code that modifies the kernel, but chose the GPL to ensure the (sometimes) was his choice.

In short, if you link against or load a library that is covered by the GPL, you must make your code available under the same license. If you link against or load a library that is covered by the LGPL, the terms of licensing are up to you.

Note also that the LGPL has a lot more to say, especially regarding modifications, statically linking, etc. What I've described is just the bit that answers your question.

Finally, The GPL applies only when you distribute or convey a program. You can do whatever you want to your software on your computer and you are under no obligation to share it with other users of your computer (or server, or whatever). The AGPL has things to say about that, if the software interacts with a network .. but that's a topic for a different question.

The FSF takes GPL related questions at [email protected] - if you are ever in doubt about a particular case and want to make sure you don't get in trouble, they are rather friendly and happy to answer questions .. even if you are making non-free software. They like it when people take some effort to ensure they follow the license appropriately, which unfortunately doesn't happen from time to time.

This topic is still just as sensitive as it was in the early 90's.

Tim Post
Thanks a lot. It makes sense after all. I wonder whether all Linux developers are careful enough in picking the APIs they call (No offence to Linux developers, I know very little about Linux development). Thanks again!
Hemant
Great post, I upvoted yours, you deserve it! Mine is only scratching the surface, respect.
jdehaan
I've tried to make this as neutral as possible. @jdehaan - Thanks! I just happened to read the question when I had some time to sit down and really explain it. You answer is also good, thus upvoted.
Tim Post