Nonfree firmware in Linux and OpenBSD; why it should be freePublished on Sun 12 May 2013.
The FSF doesn't endorse most GNU/Linux distributions for mainly two reasons: they have no rules against including nonfree programs and include nonfree firmware blobs in their kernels. This article shows some specific examples of such firmware, its usually nonfree licenses and problems that could be solved by having free firmware.
I know three practically different uses of the term firmware: it refers to boot firmware (often known as BIOS), programs running on CPUs other than the one running the main operating system (and the boot firmware) and (mostly in case of embedded or formerly embedded systems like phones) the operating system. This article discusses it only in the second meaning.
Some systems (like Fedora or OpenBSD) claim to not contain nonfree software. This is probably true in case of software running on the main CPU, while they contain nonfree firmware that is also software.
The kernel used in most GNU/Linux distributions contains many firmware files with a clear list of its origin and licenses. Newer firmware is included in a separate repository called linux-firmware which has a similar list.
Some of these files have ‘interesting’ licenses: there are files with unknown licensing (korg1212); ones with a free license made nonfree by lack of published source code (old radeon microcode); with use restrictions (keyspan), typically allowing use only with their vendor’s hardware; ones free with source available (keyspan-pda), unfortunately there aren’t many of them; some are under GPL while not having source available (ambassador), so they are probably non-distributable; ones with clearly nonfree licenses prohibiting reverse engineering (newer radeon microcode).
Several GNU/Linux distributions avoid these legal and ethical problems by not including this firmware. At least these projects free the Linux kernel from such blobs: Linux-libre, Debian and Replicant, the free Android distribution. Although both Linux-libre and Debian kernels (‘Linux distributions’) are free software, they have different approaches towards recommending the blobs, so Debian-based distributions recommended by the FSF use Linux-libre or its scripts to free their kernels.
A useful feature of Linux-libre is its log listing files containing or referring to nonfree software.
OpenBSD documents itself as not containing blobs: they use this term referring only to software running on the main CPU. (Technically, the OpenBSD kernel has no blobs: they are hexadecimal, not binary, large objects.)
There are firmware files in the OpenBSD kernel sources with issues similar to ones from Linux: some are freely licenses sourceless software, some have also plainly nonfree licenses, some have no license, some have both use restrictions and no reverse engineering clauses.
No derived BSD distribution removing all nonfree software from the upstream distribution has been released yet. The LibertyBSD project is aiming to change this and NuBSD documented some of the work needed in such projects.
Firmware should be free
The main reason why firmware should be free is that all software should be free (that article also shows important arguments for free software in devices like printers or cell phone modems which often aren’t considered general purpose computers). There are several reasons why free firmware can be better even if there are no antifeatures in the original firmware (which cannot be verified with most nonfree software).
Free firmware can implement features that vendors consider unimportant. Wi-fi firmware often doesn’t implement master or monitor modes, while it can be changed to provide this features (although in this case the nonfree firmware is modified).
Although firmware is specific to a device, it might contain algorithms useful in other systems. The firmware running on the GPU used in Raspberry Pi is an atypical example of this: it implements OpenGL ES, like the device-independent parts of most GPU drivers running on the main CPU. Freeing some firmware might make supporting other devices with similar parts easier, since a single design is often used in multiple devices (a similar situation occurred with drivers in kernels for specific router products which are now available in the mainline Linux kernel).
These two arguments miss one important point: free software can be used for purposes of its users, not all of which are known now. New uses will be invented that nonfree software doesn’t implement today and not supporting nonfree firmware can make future systems better for their users.
Submit comments on this post to <firstname.lastname@example.org>.