I understand that in using a LGPL library in your application, you have to provide a re-linking mechanism for the end user (by linking to the library dynamically or providing all your object files which they can then use to re-link against a different version of the library) but what is the reason behind this?

Not sure if I'm missing the point, but I cannot think of an example where the general user would go and specifically replace the .dll files I have provided/relink my object files against their own version of the LGPL library.

Please tell me the purpose of this requirement as I don't really understand it and am considering using a LGPL library for my project. Thanks!


The relinking requirement says that whenever an LGPL library is distributed linked to a (possibly proprietary) application, recipients of that code must be able to substitute in a modified LGPL library attached to the application.

A hypothetical LGPL that did not require this would still grant a useful sets of rights. Suppose libFoo is distributed under such a hypothetical weakened license, and MegaProg is an application that includes libFoo. Recipients of MegaProg are free to use their included copy of libFoo (possibly modified) in their own projects.

However, suppose libFoo has an annoying bug in it, and the maintainers of MegaProg have stopped issuing new releases of MegaProg. You could fix the bug in libFoo yourself (or grab an improved copy from the libFoo maintainers) but unless MegaProg structurally allows relinking against a new version of libFoo, your right to improve libFoo is useless in the local context of MegaProg. Therefore, the authors of the LGPL felt it necessary to require this possibility from any application that uses an LGPL library.

| improve this answer | |
  • Okay thank you, I think I understand. I was just confused with this regarding the Qt library - it seemed strange to specifically provide people with the option of changing the version my program uses with regards to a GUI library. Anyways, I guess that kind of clears things up. – Gary Allen Apr 17 at 18:42
  • @gasko For your Qt example, maybe you shipped your software with Qt 5.12.1, but a user wants to switch it out for Qt 5.12.2. If you distribute the LGPL version of Qt with your (closed source) software, then you cannot prevent a user from doing that. – Brandin Apr 25 at 9:50

To understand this you have to see things from the Free Software Foundation's point of view (note: I am not saying you have to agree with their point of view, or that everyone who releases their code under one of the FSFs licenses shares their point of view).

Not sure if I'm missing the point, but I cannot think of an example where the general user would go and specifically replace the .dll files I have provided/relink my object files against their own version of the LGPL library.

This is fundamentally where your worldview doesn't line up with the FSFs, it looks like you view users as people who just passively use software. The FSF views users as people who may want to modify the software they use but are denied the ability to do so by proprietary software companies.

The FSFs ideal is that all users would have the freedom to freely use modify and redistribute all the software they use. Whether any particular user chooses to exercise those freedoms is of course up to them. In their definition of free software they explicitly state "Freedom 1 includes the freedom to use your changed version in place of the original.".

They knew that if they just released their code "no strings attached" that people would not always share alike. The proprietary software world would be able to benefit from the work done in the free software world but not vice-versa.

This is why we have the concept of "copyleft", the idea that you can use code for free as long as you give your users the same freedoms you received.

But they knew that they could not get rid of proprietary software overnight (if ever) and that in some cases (for example a library supporting a free file format, or the platform libraries for an operating system) taking an all or nothing approach may not be the best route for maximizing user freedom. If a user is going to use a piece of proprietary software it's better that they use it on a free operating system with free file formats than on a proprietary operating system with proprietary file formats.

Hence the LGPL is a compromise, you get to keep your application code proprietary while using the library provided you extend your users the freedom to modify the library. The re-linking requirements are there to ensure that users can actually use their modifications.

| improve this answer | |
  • Sorry, but this seems a general defence of copyleft. It seems to me to fail to address the relinkability requirement, which is what the question specifically asks about. – MadHatter Apr 16 at 20:10
  • 1
    The key is the FSFs position is about USER FREEDOM, it's no good being able to modify the source code if you can't use your modifications. – Peter Green Apr 16 at 21:13
  • 1
    To put @MadHatter's comment another way, how would a hypothetical LGPL without the relinking requirement (specifically the latter half of the sentence in LGPLv3 4(d)(0), "in a form suitable for, and under terms that permit, the user to recombine or relink the Application") serve your stated objective of user freedom any less? When you articulate that, then you've answered the question. – apsillers Apr 17 at 17:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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