Using GPL/BSD Code In Closed Source Projects?
Dan asks: "I am considering writing a program that will use code from OpenSSH and OpenSSL as the base for my network protocol in a closed source project. How can I do this without breaking the GPL/BSD license? If I isolate the borrowed code in a shared library, and then open the source for that whole .so or .dll file, is that sufficient? Or do I also need to open the API for that shared library as well?
It seems to me to be quite reasonable to include code from open source projects in closed source projects, as long as the areas that it touches are open as well. For example: if I develop a network chess game with a protocol based on OpenSSH, it would seem to me to be reasonable to open up the code for the protocol, but not the code to make the entire game...that would seem silly. Any thoughts on this?"
While RMS would have preferred that we open sourced the whole application, the fact that we have released independently-usable programs as a result of our work is enough to satisfy the GPL and stave off a little of the grumbling. That is also why RMS says it's okay to call GPL'ed CORBA components from proprietary programs -- every little piece that's GPL'ed helps further his goal of being able to do everything with free software. The requirement is that the GPL'ed component be a complete, independently usable program or component -- this gives RMS something that he can personally run as part of his totally-free system. Just releasing a few unusable fragments of code (or a CORBA component that requires proprietary components in order to be useful) won't do the job.
Regarding network protocols, I wouldn't use 'ssh' or 'openssh' anyhow. Investigate 'openssl', and write your own protocol based upon it. I could not use OpenSSL for the closed source project that I worked on because of the RSA patent (which is now expired so it's not a problem for you, back then it WAS a problem) so I wrote my own Diffie-Hellman based protocol, but nobody should have to go through that hassle nowdays.
-E
Send mail here if you want to reach me.
The rule (well, the law, I should say) is that if the library is GPL'ed, then programs that use the library must be GPL'ed. If you don't agree to that, you have no right under copyright law to use the library, and can be sued for a $100,000 copyright violation for each instance of shipping a proprietary product that uses the library (so if you sold 100,000 copies of your program... whoa, can you count that high?!). Note, however, that I can use 'tapeinfo', 'loaderinfo', and 'scsitape' from a proprietary product without the proprietary product itself being GPL'ed. What matters is that these are complete, useful programs. The fact that they can be called from shell scripts or Python scripts that are not themselves GPL'ed is irrelevant.
-E
Send mail here if you want to reach me.
If it's BSD, all you have to do is give proper credit.
If it's LGPL, then you can isolate the code in a shared library and Open-Source that, while keeping the rest closed. It does have to be a shared library, however; static ones won't do.
If it's GPL, your chances are slim, but all is not lost. Ask the authors of the code for permission to use their code in your project. You never know; they just might let you do it.
----------
> As a political tool, hey, whatever you can get away with to force other people to release THEIR code, no matter that it has nothing to do with YOUR contribution.
Nice spin. Completely bogus. I can't "force" you to do anything. However, I can withhold my permission for you to use my code.
It's not like using GPL'd code is your only choice when you start a new project. You could write it yourself, like I did. Or you could hire someone else to write it. Or you could obtain it through a license which may or may not cost money, depending on what you want and who is licensing it to you.
The problem with critics of the GPL is that they assume they have some kind of intrinsic right to use GPL'd code, and thus bitch about the restrictions on it. The fact is, however, no one has any intrinsic rights to it at all. You can use it under a license, just like you could with code from Sun or Microsoft. If you don't like the cost or terms of the license, you have to shop elsewhere, whether you're dealing with Sun, Microsoft, or me.
--
Sheesh, evil *and* a jerk. -- Jade
AFAIK, IANAL and all that.
You'll be wanting to read the OpenSSL licence then?
But it seems fine to me. OpenSSL is released under a variant of the BSD licence (enforced credit-where-it's-due), which is more or less carte blanche to do what you like provided you put some thank you's in the appropriate pages. Apart from that, fine, tunnel what you like. Try hacking around with stunnel first (/usr/ports/security/stunnel/).
Dave
I write a blog now, you should be afraid.
(Assume that I'm the author of the aforementioned code. I'm not, but...)
If you want to use MY code, you have to agree to the terms I give on it. And my terms for using MY code within your program are that you have to release the source code for the entire application.
GPL code is not public domain. You have to satisfy MY price to distribute MY code. Otherwise, you have no rights under copyright law. If you don't like the terms I offer, you can either negotiate other terms with me (which will probably require monetary renumeration), or you don't use the code.
If you want code without these restrictions, either reimplement it yourself, or use public domain. You have no right to use my code.
The GPL is designed to prevent exactly this. While the BSD and, to a lesser extent, the LGPL, has a main purpose of seeing the code in use, hopefully in a free way, the GPL has a main goal of making as much code open as possible. In this, it sacrifices the convenience of the developer for freedom. While this is a goal that you may or may not agree with, it is one that you should respect before trying to use GPL'ed code in a closed application.
Your option under the GPL is this: Open your code or use a closed-source library. Perhaps, instead of trying to find a way to include open code without violating the license, you should explore either one of the above options. Anything else would violate the spirit, if not the letter, of the General Public License.
--
Friends don't let friends misuse the subjunctive.
The GPL exists to protect the authors of Free Software from having their work stolen (yes, I said "stolen") by people who aren't willing to give back to the community.
Seriously, why would you think that you can freely partake of the efforts of a programmer without giving him some sort of compensation? The author of GPLed code, I'm sure, *rejoices* every time he sees a project GPLed because it used his code. That's what he charges for his code: that people who use it must also contribute to Free Software.
Honestly, I don't think it's moral to used GPLed code without GPLing your product that takes advantage of it, regardless of whether you can find a legal loophole for doing so. Doing so violates the intent of the author.
Jeremy
Looking for a Python IRC bot?
But never mind, I assume you wrote this out of ignorance and innocence, and not bad will... so here's the answer:
It seems to me to be quite reasonable to include code from open source projects in closed source projects
...
it would seem to me to be reasonable to open up the code for the protocol, but not the code to make the entire game...that would seem silly
Why?
All I can observe is:
That being said, you are lucky that OpenSSL and OpenSSH are both BSD licensed programs (IIRC) and thus you can do with it whatever you want. But I am really concerned about your attitude towards Open Source. Why the heck is it "silly" to make your own program open? Why on earth did you choose it to be closed anyway?
I know I sound like a hippie father trying to understand why his son joined the army, but please do consider this. Open Source has got tons of benefits (see here for more info) PLUS idealistic advantages (see here for more info). Why go closed? Your program would hardly have any impact to the Linux community in closed source form, nor would people contribute to your work, etc.
It's... It's...
"We can confirm that Debian does *not* ship the version with the trojan horse. Our version predates it." [CA-2002-28]
When code is published under an open source license it is a choice by the programmers writing that code to make it available to others under a specific set of restrictions. It is wrong of you to try to take the work of those programmers and use it in ways they explicitely do not approve of by virtue of their choice of licensing agreement.
If they choose to publish under a BSD style license you are free to reuse their code and incorporate it into a closed source product. That was the way the people who wrote the code intended you to use it.
Many of us who publish under the GPL feel differently about how we want our work used. We do not object to others who are contributing to our community on the same terms reusing our code, but we do object to people simply taking our work and using it as a free ride. When you release derived works under the GPL you are in a sense paying us for our work by enriching our community. When you simply take our labor and use it in your closed source product you are stealing our work as surely as someone who pirates your closed source software is stealing yours.
Please respect the wishes of those of us who choose to contribute our time, efforts, and talents under the GPL and respect both the letter and the spirit of that license.
it would seem to me to be reasonable to open up the code for the protocol, but not the code to make the entire game...that would seem silly. Any thoughts on this?
:)
I see you're new here
What you're missing is that the GPL is a political tool, not a source code license.
As a source code license, of COURSE it is utterly ludicrous that you should have to open up source code unrelated to what you're using.
As a political tool, hey, whatever you can get away with to force other people to release THEIR code, no matter that it has nothing to do with YOUR contribution.
This also puts me in an annoying situation. I write free-as-in-beer software to download flight data from the Ball Varios variometers. Now, there's a number of GPL projects it would be nice to include code from, graphing libraries for instance; but if I did, I would have to open ALL the source, which includes the part that communicates with the hardware device, although that obviously has nothing to do with a graphing library for instance.
This is a problem, because the Ball varios are certified by FAI as being acceptable as documentation of a world record flight. And one of FAI's conditions for that certification is that the protocols for communicating with these devices may not be made public. Which means, not releasing the source code containing those protocols. Which means, I can't use any GPLd code at all, no matter how completely unrelated it is to the actual problem and how perfectly willing I'd be to contribute back any work I did to the source I used.
So my users lose out on functionality they'd get quicker otherwise, and the Open Source community loses out on the work I would put towards something licensable.
Now whose interests exactly is the GPL serving here? Nobody's that I can see.
(Don't bother saying "change FAI's mind". They have no motivation to do so whatsoever; there's no way you'd ever get even time to explain the CONCEPT of Open Source, never mind why their certification process should accomodate the GPL...)