I want to use FFmpeg in commercial software using its LGPL licence without enabling the GPL add-on. However, the libavformat library allows decoding for a lot of codecs straight out of the box. These are third party codecs so probably won't be the same LGPL licence. Are these embedded codecs ok to use in my application to keep it LGPL compliant?
These are third party codecs so probably won't be the same LGPL licence. Are these embedded codecs ok to use in my application to keep it LGPL compliant?
When I configure FFmpeg to use third-party codecs that are GPL-licensed, then FFmpeg "declares" itself as GPL-licensed as a result of activating these configuration options, either GPL 2 or GPL 3 depending on the third-party codecs. The same applies for built-in extensions that would be subject to the GPL. And if there is no GPL-licensed extensions, FFmpeg declares it self as LGPL-licensed.
This configuration process is not guaranteed to be foolproof and I should check for any third-party codecs I depend on (for instance by inspecting the generated config or by checking the required shared objects in the build Elfs using readelf) and checking their actual license terms.
The simple rule I apply is that the copyleft of the GPL flows up to my code when I build or use code that depends on GPL-licensed code (at least when linking is at play). More details on dependencies and licensing are explained here.
As an aside, irrespective of the resulting (and verified) license of a certain configuration of FFmpeg, I need to consider eventual patent licenses for using certain codecs for some purposes, in particular if I project to use this in a commercial software product. This needs to be reviewed codec-by-codec and I would handle this with the assistance of a lawyer. This involves possibly contacting several patent holders such as Mpeg-LA and can be a long and painful process. FFmpeg does not hold these patents and therefore cannot licenses these to me.
Finally and for reference, FFmpeg publishes a decent FAQ including a "License Compliance Checklist": its first two items are the most important wrt building an LGPL-configured FFmpeg:
1. Compile FFmpeg without "--enable-gpl" and without "--enable-nonfree". 2. Use dynamic linking (on windows, this means linking to dlls) for linking with FFmpeg libraries.