I've searched and read many posts about LGPL and C, and when I was able to find one that related to Java, my mind still didn't rest with ease, so I'll try to be more specific and hopefully get a viable guide lines, and I would eventually consult a lawyer obviously!


  • There is a LGPL library, lets call it Lib-B
  • I have My Library which is based on Lib-B lets call it My-Lib

In my opinion Lib-B architecture is not well formulated, and I want to apply in My-Lib my own architecture and use some of the functions of Lib-B.

Problem is, that Lib-B, wraps the functions I want to access in a manner that does not suit the architecture of My-Lib so I've changed Lib-B and encapsulated (duplicated) the code lines I wanted/needed within a couple of objects still inside Lib-B and call these functions from My-Lib.

That is my current static setup...


The second thing I can do is to make my setup dynamic, so:

  • I could create a Library that would define an interface with the functions My-Lib needs lets call it Lib-A.

Later, I will compile and link My-Lib with Lib-A, and let Lib-B implement the interface from Lib-A, and load Lib-B dynamically in My-Lib.

I understand that in both cases I must release my changes of Lib-B as LGPL as well and allow my end users access to the code etc... what about My-Lib?

Thanks, Adam.

1 Answer 1


The LGPL allows you to release My-lib without opening its source code. That's the whole purpose of the LGPL; it provides a linking exception to allow users to link the LGPL library without opening their own source.

The LGPL still provides users with access to the source code of your changes to Lib-B, without preventing you from keeping the rest of your application closed-source.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.