tags:

views:

1042

answers:

13
+9  Q: 

GNU Licensing

I am in a bind here. I found some old code written a long time ago, that someone had implemented under the GNU public license, in .NET 1.1. The original code was language agnostic, essentially a file parser. The .NET implementation of this parser was also released under GNU General Public License as a class library, i.e. a single DLL(Assembly) Now, come 2009, I have found a use for this assembly which I have modified for use on a mobile device, i.e its a Windows Mobile application.

Now my question is this, since I'm just referencing the .NET Assembly written by someone in 2003, when I sell my product, do I have to release source code for my mobile application, or is it sufficient to make the source code of the original assembly available? I don't want to release my application's code since it has other closed source code. It relies on said assembly only for certain functions.

Do I have to release my entire code base, or just make the assembly's source code available, which is freely available anyway.

EDIT 1: So I modified the code a bit, instead of referencing the GNU code directly, the Application now queries a Web Service that uses that component, that said, I am willing to release my Web Service code on my website that invokes the said GPL'd component/assembly. So my plan is this, I will make the source code of my web service freely available that uses this component, this way, my mobile app is only invoking a web service that uses the GPL'd code, does this satisfy GPL requirements? Since the mobile app is now invoking a web service, there is no GPL code in my mobile app, just a call to a web service that uses said component. This way, I don't have to release the source code of this application that I've worked on a for a long time.

EDIT 2: From the comments: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version

+2  A: 

Yes, you have to release your source code too.

Or alternatively, you could replace this code by functions written by yourself.

By aware that anyone who's got a binary-form of your application (supplied by you) with the GPL code has the right to demand the source code from you.

Georg
Voted up, although the last sentence is not quite right. Anyone you distribute to directly has that right. If someone else redistributes, then *they* are the ones on the hook to provide sources, not you.
T.E.D.
Right, that sentence was more about beta- and test-releases.
Georg
+20  A: 

If you're calling GPL code, you need to release under GPL. From the license:

This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License.

The LGPL permits closed-source apps to link without also being GPLed. The pure GPL, however, requires that any derivative apps also be GPLed.

ahockley
Not true. You can release under any license that is compatable with the GPL. It does not have to be GPL itself.
T.E.D.
There is no GPL-compatible license besides the GPL.
Alphager
Well, "no GPL-compatible license besides the GPL" is kind of a bad way to say it. "License X is GPL-compatible" is used to mean that code under License X can be incorporated into GPL'ed code (and then released under GPL). But you're right that you can't put GPL'ed code under any non-GPL license.
Tyler McHenry
There's also the question of what "calling" really means. The Free Software Foundation has an opinion, but I don't know that the courts have ever ruled on whether using a DLL amounts to creating a derivative work.
David Thornley
@David Thornley: Yes, the key issue is whether you are a derivative, not where you just "call" code. That is why many people agree that binary Linux drivers need not be GPL: they are an independent unit which interacts with Linux. Of course, there is controversy there so...
jhs
Ack. Accepted answer is the *one* answer that was flat out wrong.
T.E.D.
+1  A: 

Are you sure the library (let's use that term - the GPL doesn't talk about "assemblies") you are using is licensed under the GPL and not the LGPL? There is a big difference. If it is licensed under the GPL, then if your code uses it, the GPL viraly also applies to your code. If it is licensed under the LGPL (Lesser GPL - specifically designed for libraries) then it (probably) does not.

Having said that, you are under no obligation to distribute your GPL code to anyone except your own licensees. You do not, for example, have to set up a web site to give your code to all and sundry.

anon
It should be noted that you do still have to allow users to share your software with anyone and everyone. This is how CentOS came about (hint: it's basically RHEL with another name).
Jason Baker
That's right. However, you are never forced to share your software with anyone. All GPL says is that if you do, you have to give them access to sources too, and you can't prevent them from sharing in turn.
T.E.D.
+7  A: 

If you link to GPL code, and you release your code to anyone (outside your company), then you have to license your code to them under the GPL as well, or some license compatable with the GPL.

Really, that isn't as bad a deal as a lot of people think. You can still sell your program to people for money, for example. To get a full picture of what it means, I'd suggest reading through the GPL FAQ

If you still can't deal with that, then you will have to remove the GPL code from your program (or not distribute it to anyone).

Based on the comments, I see a lot of people seem to be very confused about what GPL-compatable means.

When you redistribute GPLed code to someone, it has to be under the GPL (its original version or newer). However, that is not true for any new code you may have written yourself and linked with that GPL'ed code. You can put any license you want on your own code.

The catch is that it is quite possible to put a license on your own code which has restrictions on it that interact with the GPL (on the code you linked in) in such a way that you cannot legally distribute the entire program to anyone else. Licenses like that are termed GPL incompatable.

As for the question's latest edit (2): With GPL version 2, If you aren't actually linking against GPLed code, or textually including it with a preprocessor somehow, you are free to release under any license you like. Just don't "upgrade" its license to GPL 3. :-)

T.E.D.
That's not how the license reads. GPL compatible refers to the list of licenses whose code can be modified with the modified version licensed under the GPL. This is, unfortunately, a one-way deal. If it wasn't, one could eliminate the restrictions on GPL code by relicensing it as modified BSD.
R. Bemrose
Errr, no Bemrose. The GPL has nothing to say about modifications, only releasing. You can always make any modifications you want to GPLed code. Its how you redistribute the result (assuming you choose to distribute) that can get you into trouble.
T.E.D.
I'm still a little confused about what your point is here. GPL-compatable has to do with what licenses you can give other code that links with GPL code, if you want to distribute the result to someone else. Did I somehow imply otherwise? I should clear it up if I did
T.E.D.
GPLed code has to be re-released under the GPL. A GPL-compatible license means that you can relicense under the GPL (perhaps keeping the original license in addition). It doesn't mean you can relicense GPLed code to it.
David Thornley
No David, that is not what GPL-compatable means. You generally cannot change the license on someone else's code. As this is the second comment I've gotten that misunderstood "GPL-compatable" (and thought it understood perfectly), I've added a clarification.
T.E.D.
If I take some GPL code, some BSD code, and some of mine, and combine, the whole is under the GPL, some of it also under the BSD license, and some under any GPL-compatible license I choose (or no additional). You'd have to abide by all licenses (trivial in the BSD case).
David Thornley
+13  A: 

In response to your edit regarding the web service, then yes that is compliant with the GPL, so long as the service and the app are not tightly coupled. Generally this means that you must document the protocol that your mobile app uses to communicate with the web service, and the protocol must not require knowledge of the internal state or internal data structures of your closed-source app.

In other words you must both open source the service, and make it possible for someone to write a program that interoperates with your service without having to reverse-engineer your closed source app.

Tyler McHenry
Thanks, for the info, I wish there was a way I could split the bounty between you and Ted
RandomNoob
Yes the web service is just a simple SOAP call, anyone could do it.
RandomNoob
+1  A: 

I am not a lawyer, but I think you would only have to publish your source code if the code of the Web Service was released under the AGPL, however you only change the way the function is called, not the calling of the function itself. The easiest (and safest) way to resolve this would be to ask the original author if you can either use it under the LGPL or some other licence.

tstenner
+13  A: 

Your strategy of isolating the GPL code to a web service is a fairly common idiom called the "GPL condom". Google actually does this in their Search Appliance product. You aren't obligated to release the code to the service if the software is licensed under the GPL.

Ted Dziuba
Haha, I'd never heard it called that. I've only heard the politically-correct "ASP loophole." Thanks!
jhs
My initial response was that ASP loophole sounded just as dirty ;o) It must just be one of those days.
wcm
That condom doesn't protect against the GPLv3.
vartec
+1  A: 

There's still a bit of confusion.

Check the license on the DLL. If it's the Gnu General Public License, than it, and anything that links with it, has to be released under the GPL if released at all. (The word "links" may be ambiguous here. The Free Software Foundation considers a DLL to be linked, while other people seem to think that may not be the case. I'm not a lawyer. The safest way is to assume that a DLL is linked.)

If it turns out the license is the Gnu Lesser (or Library) Public License, as is common with libraries, then you need to provide whatever is necessary for other people to change the source code on the DLL and recompile, but there are no restrictions on how you distribute your code.

One alternate way is to track down the copyright holder (if there is only one; many projects have multiple copyrights) and ask for permission to use the library under a different license. Different people will react in different ways, so be polite and accept a refusal as such.

There was no Affero GPL in 2003, so there's no need to redistribute under any license if the code is used on the server side. (Not that I have faith that the AGPL would hold up in court.) Since you are not distributing the server-side code, the actual license doesn't really matter. Since any client-side code communicates with the GPL code through regular communication channels, and is not linked in, it doesn't have to be under the GPL.

Therefore, your proposed solution will work. You don't actually have to release the server code, but if it doesn't bother you too much it might be worth it for good relations with the open source/free software communities.

David Thornley
+1  A: 

You can use GPL code completely freely to implement a web service on your own site. As long as you do not ship ("convey" in terms of GPL 3) the implementation to third parties you are not obligated to reveal the source code either.

This is from GPL 3:

To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

This is also:

You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force.

So as long as it is not possible to anyone besides you and your subcontractors to actually obtain access to a copy of a derivative work, you are within the bounds of GPL.

Another poster refers to AGPL, which is a different license, and from this license's text we can read the following comment:

The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public.

DISCLAIMER: This is not any form of legal advice and shall not be construed as such. I am not a lawyer.

antti.huima
+3  A: 

With GPL 2 you are fine. You do not have to release the source of the web service as you are not distributing anything (it is just running on your server).

With AGPL2 or AGPL3 (the Affero GPL) you would have to release the source for the web service.

Regardless the source for the client does not have to be released.

Look here for the question about the web service not having to be released.

I would say, as a nice user of the GPL source, you should (from my own personal moral point of view) release the source for the web service - but if you don't want to that is fine as well - it is 100% your decision.

TofuBeer
+3  A: 

This is why I don't consider the GPL "free": You really CAN'T do whatever you want with GPL'd code. You have to release your source. However, your web service solution works, as long as the service can't be considered solely a component of your program, but a standalone entity.

The GPL is what it is, and that's neither good nor bad, but "free" is something like the BSD license.

I expect to be voted down for this comment.

rlbond
A: 

Find the original author(s) and pay them. I have no clue if you are legally obliged to do so, but if it's valuable to you and you don't like the terms, pay for ones you do like.

wowest
A: 

This is gray zone of GPL. Generally Stallman is saying, that GPL is contagious even through dynamic linking. I.e. Stallman is saying, that program using a DLL is derived work of that DLL. So if you believe in Stallman, release your whole project on GPL license.

BTW. GPL (prior to GPLv3) obligates you only to provide source code to those, which you have provided with binaries. And this may be on request.

Now, it has never been proven in court, that dynamic linking is creating derived work. In fact there where few cases (not involving GPL though) in which conclusion was, that dynamic linking is boundary. Assuming it is, you only have to release the source code of that specific DLL, not entire project.

Now why would you assume that dynamic linking is boundary?

  • linking is actually done on users machine, and you can actually link to another library which exports same symbols (e.g. Motif, Lesstif and OpenMotif can be interchanged)
  • there a lot of projects linking to GPL libraries (e.g. libmysqlclient which is GPL, not LGPL), yet they are not GPL-ed.
  • with dynamic linking the only code you're including are header files, which in many legislations are explicitly excluded from copyright as being API specification.


As for the web service edit: GPL prior to GPLv3 is not contagious via network. The code you used to create the web service is GPLv2. You're safe. You don't have to release any source to anyone.

vartec
GPLv3 code is not contagious via network. That would be the Affero versions, which I'm dubious about.
David Thornley