My understanding as to why FFMPEG isn’t included in ROCK installations and must be installed separately is because it’d be expensive to pay for the appropriate licenses to distribute it. But, in the Dockerfile for the new Roon Server version, it’s doing the following:
I think there is a subtle difference. The Docker image is entirely open and subject to GPL. It is simply a Debian container prepared for Roon, which isn’t distributed in the image.
In contrast, Roon OS is closed source, and LGPL likely applies, and places some restrictions on commercial distribution.
The GPL (and LGPL) just relate to linking against source code. Calling a binary built from GPL or LGPL code doesn’t mean the calling code has to also be distributed under the same terms. AGPL is where things get a bit odd here (since it also covers things making network requests to an AGPL-licensed application), but FFMPEG doesn’t use that.
As far as commercial distribution, the GPL says nothing about that, and there are a number of examples of closed-source applications including FFMPEG. Plex is one such example. How they navigated it was forking FFMPEG back in 2012 and then only compiling in codecs not subject to patent restrictions and patent-encumbered code that they’d licensed. This obviously created a maintenance burden, but that’s the route they decided to take.
But, it’s the patent issues that cause headaches with using FFMPEG in commercial products (which they mention at the bottom of their legal FAQ). They support everything under the sun, but there are companies that have patents covering parts of some of the codecs that FFMPEG implements, and navigating getting licenses from patent licensing pools to cover what somebody might want to do with it is a huge pain (I’ve had to do this for work before).
That’s why I’m surprised at FFMPEG being officially distributed with Roon in the Docker image. I would have expected it to have a mount that requires the user to drop an FFMPEG binary there, similar to the ROCK setup process. I’m hoping that means that the team is comfortable with the inclusion here (and, if so, potentially add it to the ROCK image to make things easier for newer users; just copying a binary over is pretty easy as is, but it’s always nice to improve the user experience when possible to do so).
AFAIK is neither of the two distributed with(in) the Docker image – both get downloaded and installed by the user running the image for the first time.