Differences between GPL and LGPL when using licensed software
By Marek Olejnik
Software licensed with any GNU license can be used and modified everywhere, without any restrictions in private and even in corporate environments. You can do whatever you want: modify, compile, link statically and dynamically. When, for example, the software was only for internal use in the company, then there is no obligation to do anything.
What if the software is distributed?
Here is where the restrictions come in... If changes were made to the software that's going to be distributed (any GNU license), it must be distributed with its full source code, on the same license terms as the original software.
And what if the free software is only a part of the application? Does the application have to be distributed with its full source code?
Well, it depends on the type of the license and the way that the proprietary program interacts with the free software. In GNU GPL it (General Public license) requires that all its derivative works be licensed as a whole under the terms of the GPL. As the Free Software Foundation states, dynamically linking application to libraries creates a single work derived from both the library code and the application code. If an application links to a library licensed under GPL, it must also be licensed under GPL. It means that the source code of the application must be provided.
However, there are cases when GPL-covered software can be distributed alongside a proprietary system. To do this validity, the free and non-free programs have to communicate at arms length, that they can be considered separate works. Two programs do not communicate at arms length if they share any data structures. At a minimum, two programs should run in separate processes. They can communicate over ICP mechanisms. Unfortunately it's not always applicable.
By contrast, libraries licensed under the GNU Lesser General Public License (LGPL) may be linked to proprietary applications. If linked statically, the application code must be released also as LGPL or everything that allows the user to re-link the application with a different version of the LGPL source code, have to be provided. As long the application is linked dynamically to LGPL software, the proprietary code can be kept proprietary.
Our product, the FFmpeg enabler, includes FFmpeg libraries licensed under LGPL. Support to any codecs using GPL licensed software was disabled, so it can be used to create proprietary software without GPL restrictions.