Introducing Linux-libre-firmware

Sun, 12 Nov 2017

Version 4.14 of the kernel named Linux was released today. One of the changes is the removal of the in-kernel firmware subtree. This, sadly, doesn't get rid of all of the proprietary software inside the kernel but that wasn't really their goal anyway. It's really just a cleaning up of something that wasn't being used anymore.

The kernel developers actually began moving some of the proprietary bits into a separate location many years ago: The first commits to linux-firmware.git were in 2008, while 2009 marked the addition of a file to the kernel tree telling people not to add new stuff to the firmware subtree anymore. It seems that they just forgot to delete that subtree once the transition was done. Well, they finally remembered.

We can tell that software freedom wasn't their motivating factor because they deleted all of what little free firmware was in there too.

As Alexandre Oliva explains in his release announcement of Linux-libre 4.14, the actual location of the proprietary software doesn't really matter since there are some indicators that they may very well be derivative works of the kernel, and a GPL violation regardless.

Since even what little free firmware existed was also removed and there wasn't really a clean place to send people to get it (because linux-firmware.git primarily consists of proprietary software), I took Alexandre's recommendation and started a replacement that only would only consist of freely-licensed firmware, naming it linux-libre-firmware.git.

I quickly found that some of these free ones either weren't buildable from source, or didn't run if they were, and had probably been like that for a long time. In one example the assembler that was needed did build but immediately segfaulted. In another there were some problems building the cross-compiling toolchain, which was a prerequisite to building the actual firmware.

My guess was that most people probably didn't build these from source and instead just grabbed the binaries from linux-firmware.git and so didn't notice when there were problems.

As I continued looking into this I found that Debian had these firmwares and decided to see how they were handling it, in case patches to fix the problems already existed but had not migrated upstream. I found that Debian also didn't build them from source either: They just re-used the same pre-compiled firmware files from and provided the same (broken) source. I imagine that's probably a violation of their own DFSG.

In the end I was able to either locate patches or make them (and sent upstream) but that's only part of it if no one actually ever bothers to compile the software from source. I wonder how other distros handle it. I've not yet looked.