This is an interesting question I have after reading about MonoDevelop removing GPL code:
I have this application which I license under the terms of BSD, and I saw a GPL library (lets call it libbar ) which might help me. I incorporate the library by dinamic linking. Now my application is effectly a GPL binary, sweet.
Now, I write myself a new replacement library and release it under the terms of BSD. I replace the old "legacy" library by my new one.
Lets assume, my application uses (derives classes, whatever) code from libbar. If I remove the GPL code and change it by BSD code - my work even tough it does not contain GPL code - it's a derived work, due to compile time constrains. Am I correct?
Lets assume that libbar, uses abstract classes/methods from libfoo (which is BSD). Lets assume that my application uses the interfaces exposed in libfoo, then libbar extends those interfaces, and I am not directly using libbar. When I use my new BSD library, my application is not compiled against any GPL code (just linked to) and it never used it directly. My old code was GPL by run-time constrains and, and the new one is BSD. Am I correct?
The problem wuth scenario 2, is that even if I am wrong, and my BSD code is "forced" to be GPL, this would not held in court. I still remember the wifi drivers issue the freebsd guys had (openbsd? a link in the comments would be a good idea...)