I'm working on an open-source project that I want to release under a permissive license, because it's a library, not an application and personally, I don't like copyleft for library code. If I were to browse through GPL code written in a different programming language just to get a general idea of how to do something, and then write a different implementation of a similar or identical algorithm in the language I'm using, what would likely be the consequences? Would the copyleft owners have any legitimate complaints if my code was somewhat similar to, and clearly influenced by, theirs? How do these gray areas typically work?
Disclaimer: I am not a lawyer, and you should go see an intellectual property lawyer who knows enough about software licensing. If you go see a stupid one, he or she will tell you "don't do it just to be on the safe side," which anyone can say.
See Clean room design. If the software behaves almost exactly the same, you shouldn't have read the source code.
"What constitutes derivative work?" is not a question a programmer can answer. See for example What is the difference between an “aggregate” and other kinds of “modified versions”? and the GNU Licenses FAQ in general.
Regarding your specific case, Algorithms are usually not subject to copyright law, but (sadly) to patent law.
The way that these gray areas typically work is, that you are open about it, talk to the original authors, maybe work out a deal. It is very unlikely that such a case would end up in court, since neither party can gain very much from it. If it does end up in court, lawyers and judges will be the ones to decide, not programmers.
Depending on the permissive license you plan on using, the question may be moot. In other words, if your code will have the basic freedoms that LGPL provides, then even a straight copy of the code is OK and the copyright holders are not likely to come after you.
Another point is that if the original code is GPL'ed then the author is not likely to be the type who is going to object to you deriving something from his algorithms and ideas (as copylefters tend to oppose software patents).
Usual IANAL disclaimers - I just don't think it's likely to be a real life problem unless you use substantial amounts of code and try to restrict the freedoms that the author intended to guarantee with their copyleft.
I typically use the X11 license (aka 3 clause BSD) when releasing any kind of library, even though I'm known to lean to the GPL2/3 when releasing a program. I do this because I want to ensure that my library can be used without restriction by any FLOSS project, this is more important to me than asserting the ideals of copyleft when it comes to libraries.
Its kind of silly to make a library restrictive in that regard, for instance, BSD re-wrote libreadline() to editline and kept a 100% compatible interface. That's also a case in point for why you (probably) can do what you intend to do.
If your looking at some example written in Scheme, or say LISP, perhaps even PERL .. and writing some implementation of it in C, you should be perfectly fine. There is absolutely nothing wrong with studying existing implementations when working on making your own.
I would strongly suggest just asking the GNU project, e-mail [email protected] and provide them with details on what you hope to accomplish. You will surely receive a very friendly reply .. and can (probably) proceed without worry.
Even RMS himself will admit that interpreting the GPL/AGPL/LGPL can be tedious, they expect and welcome these kinds of questions.
Normally if your SW must "link" towards GPL code to function it's a derived work...
2 great licenses that probably fit your requirements:
- The Apache License, version 2.0, very permissive (like MIT/BSD), but with patent-litigation protection for both parties
- LGPL, version 3, permissive use of the library, but developing it further (and distributing it) requires retaining the LGPL and releasing the source.