Firmware blobs
There's a lot of blatter recently about firmware-requiring drivers. My arrogant opinion:
There's a difference between a bunch of opcodes packed into an array which is executed by the host system, and a bunch of bits which is sent off to a device.
You can distribute a firmware blob in an external file.
"Hey kernel, here's a file with a lot of stuff which you need to send to this device prior to doing anything else with it"
I don't see how a driver that does the above is non-free. Heck, stuff like the above could probably done in a generalized way (if devices aren't too different in how they load firmware blobs), creating a firmware-blob-dumping-framework of sorts. It's not as if that would need a proprietary license or so; so that's not how it would be non-free. The function of this framework would be to dump blobs of data to other devices, and it could perform that function well. All you'd need is the firmware blob, which you would need to download from the manufacturer's website. Or copy it from a CD-ROM or floppy disk. That does not involve Debian, so there's no problem here either.
So, what we have is this:
- A computer running Free Software.
- A device (talking USB, PCI, IEEE1399, whatnot) running non-free software. Most of these devices have a CPU and some RAM, so they could technically be considered to be a small computer themselves. They don't have permanent storage (else we wouldn't have this discussion), but that's a different matter.
- A driver in the computer running Free Software which will talk to the device–computer–running non-free software. That driver will always work correctly and as advertised; however, the computer requiring non-free software will not until it has received a blob of firmware. This is critical: people talk about some of those drivers as if they require non-free firmware blobs to function; that is not correct, the non-free system requires it, and it makes for a world of difference (see below).
- A blob of firmware (which is non-free software) required by the non-free requiring computer. It could be downloaded by the driver itself, by the user using some hypothetical other self-made special-purpose device, by the kernel through some hypothetical framework made for the specific purpose of loading firmware blobs to devices, or whatever.
Where I think the discussion goes wrong is that people see a load of non-free firmware in connection to the driver, and suddenly decide the whole driver is non-free. The firmware blob is required for the other computer to operate; I agree that Debian should not distribute it (it is still non-free software), but there's nothing wrong with providing (free) software to load the firmware blob to the device.
After all, we provide other software in the archive to copy random data from computers running Free Software to computers running non-free software already; consider netatalk, ncpfs and, of course, samba.
I submit that the part of a driver which dumps a firmware blob on a piece of hardware is similar in function to netatalk, ncpfs or samba, and that it thus can remain in main. Moving it to contrib is ridiculous, IMO.
That is all.