views:

85

answers:

1

I'd like to license some code in a way that's less viral than GPL, but still copyleft. I can't and don't want to use GPL since I use some libraries which are basically open source, but incompatible with the GPL.

I thought about using LGPL or MPL/CDDL. The problem with these is that they are trivial to circumvent.
For one these licenses don't work for programs which are made available via a webserver and not conventionally distributed. Afaik the AGPL prevents this, but is as viral as the GPL.
Additionally the LGPL can be circumvented by just putting it in a new dll and use delegates or interfaces to call it from the LGPLed sourcecode.

Needs to be compatible with the libraries I use which are licensed as LGPL v2, Ms-PL and new BSD. Compatibility with GPL is not required.

So now I'm torn between choosing a shared-source license(like the MS Reference License) and allow modified versions on a case by case basis, or a non copyleft license and ask the users to contribute back their changes trusting their honor instead of a legally binding license.

But I'd prefer a real opensource license which requires copyleft, isn't trivially circumventable and less viral than the GPL. Does anybody know such a license or do I have to resort to one of the workarounds?

edit: Does the GPL with classpath exception do what I want?

edit2: My work is mainly an application. But due to modularity most of the code, in particular the domain model, is in libraries.
If code which builds on my code is forced to be open source I have no problem with that. But I don't want to prevent their code(and my own code) from using independent libraries with a different(including closed source) license.
So perhaps what I want is some kind of uni-directional GPL.

+1  A: 

You seem to be after a very specific middle-ground that hasn't been explicitly provided for.

The AGPL with some sort of dynamic linking exception may work, but safely constructing such an exception really needs a lawyer familiar with software licensing. You might try pinging the FSF, though of course they're always somewhat ambivalent about the whole "making it easier for proprietary software to use otherwise-GPL'd works" thing.

The Classpath exception was built specifically for the GNU Classpath project, which provides a free software version of the Java class libraries. As such, it's designed specifically for Classpath's need to allow applications built on standard Java interfaces to be linked to an unmodified version of Classpath. Any other use of the Classpath exception is unlikely to get you the results you're hoping for.

Specifically, if your library doesn't implement an existing, well-defined interface, any program linking with it may run afoul of this provision:

An independent module is a module which is not derived from or based on this library.

In some cases, like the Java class libraries, it's obvious that a program/module isn't derived from or based on any particular implementation of the libraries. But if you're creating a wholly new library, and yours is the only implementation of its interface, there's a common interpretation of copyright law (but which has not been thoroughly tested in court) which says the program is necessarily derived from your library.

Nicholas Knight
My work is mainly an application. But due to modularity most of the code, in particular the domain model, is in libraries.So if code which builds on my code is forced to be open source I have no problem with that. But I don't want to prevent their code(and my own code) from using libraries with a different(including closed source) license.So perhaps what I want is some kind of uni-directional GPL.
Chaos
Perhaps I'm misunderstanding, but these requirements sound contradictory to me. Sentence 3 says you're OK with requiring their code to be open-source, but sentence 4 says you're OK with part of their code being closed-source.
Ken
I'm only interested in the parts of their code which are based on mine, but not those independent from mine. Of course it's a bit hard to exactly define that due to various dependency inversion techniques. So if executable A depends on B and C. Where B is my code, and C is independent from B. Then I don't want to force the license of B, but A as a whole, or at least the parts of A that use my code should be open source.
Chaos