on disabling drivers that use non-Free firmware

Alexandre Oliva lxoliva at fsfla.org
Sun Jan 4 20:28:40 UTC 2009


[adding linux-libre list]

On Jan  3, 2009, Richard M Stallman <rms at gnu.org> wrote:

> we should not distribute copies of Linux containing code that will run
> provided the non-free firmware files are present.  We will still want
> to delete or disable the drivers that use the non-free firmware.

Hmm...  I don't like the idea of removing Free Software just because, in
order to be useful, it pretty much requires someone to run non-Free
Software as well.

Say, I don't oppose Gnash, Samba, Wine, or FreeDOS, although their
primary use cases are for people who run non-Free Software, and it would
be pushing it a bit to defend it by claiming that they might be used in
100% Free settings.  I don't oppose that Linux and GNU libc offer
interfaces that enable people to run non-Free programs along with them.

Of course I do object to inducing people to run the non-Free Software
they enable or support, but I wouldn't exclude the above enablers from
Free distros, because they *are* Free, and some people might use them in
100% Free scenarios, or to develop Free replacements for the
enabled/supported non-Free programs, or even to keep on running a few
pieces of non-Free Software they already used before (undesirable, but
there's no social harm done by their doing it in their own privacy),
while moving closer to freedom in other regards.

I don't see a difference between the above scenario and that of drivers
that operate with firmware that's currently non-Free.  They enable
people to develop Free alternatives to the non-Free firmwares, with
future Free versions of the non-Free firmwares, or even to keep on
running the non-Free firmwares they ran before (social harm would only
arise if they recommended others to do the same), and the drivers being
there doesn't turn any system into a non-Free one.

Now, I do take steps to discourage the use of such drivers in
Linux-libre, but I realize now that they're not entirely consistent,
which feels wrong.


When I joined the Linux-libre project, some drivers (korg1212, ess
maestro3, Yamaha ymfpci) had configure-time options to decide whether to
use a built-in non-Free firmware or to request one with the userland
interface.  Those who came before me (gNewSense's Brian Brazil and/or
BLAG's Jeff Moe) had apparently decided that it was enough to remove the
built-in firwmare and the config option used to enable it, but that
having the driver enabled and usable with external firmware was fine.  I
never questioned that decision, and it seemed reasonable to me.

Other drivers had firmware in the sources, but didn't require firmware
to be loaded.  The tigon3 driver, for example, had firmware removed, and
it worked nevertheless.  I didn't change that.

In fact, with the deblob scripts that I wrote, I could easily arrange
for other drivers that didn't require firmware on all variants, such as
e100, to be re-enabled similarly, so I did, and I could then use it
successfully on one of the two machines I own whose network cards were
supported by the e100 driver.  The other appeared to require non-Free
firmware.

The deblob scripts that I wrote, instead of removing entire files,
enabled us to remove only the bits that it recognized as blobs from
them.  It didn't make much effort to keep the files compilable, though,
so the config options to enable those drivers were marked as dependent
on some other config option that didn't exist (CONFIG_NONFREE), so they
couldn't be enabled without actually modifying source code.

Now, after the Linux community started moving firmwares to separate
files, and using the userland firwmare-loading interface, drivers that
used to be marked as unusable are no longer modified at all.  Sure, the
firmwares are removed, but should we still prevent those drivers from
being compiled?

This strikes me as inconsistent.  Some drivers that depend on firmware
(Free or not) to be provided by the user are enabled that we knew were
non-Free (korg1212, maestro, ymfpci), while others in the same
conditions don't, and there's nothing different between them in current
Linux trees: both have firmwares in the firmware/ tree and use the
userland firmware-loading interface.

I think this inconsistency should be fixed, but I can't convince myself
that disabling the 3 drivers mentioned above is the right thing to do.
FTR, I might be negatively influenced by the fact that my daughter's old
notebook had a maestro3 card, and I actually extracted the non-Free
firmware from the non-Free kernels she ran before, and installed it in
/lib/firwmare to enable audio to work with freed-ora Linux-libre builds.

And then, there may be other drivers that we never even looked at, that
used the userland firwmare-loading interface and external firmware all
the way from the beginning and so never triggered our blob-searching
efforts.

Once (if) all firwmare is moved out of the Linux tree, these will be
indistinguishable from any other driver that loads firmware, regardless
of whether the firwmare is Free, and regardless of whether it's in the
official external firmware tree.


Anyhow, to sum it up, if we look at a picture like this:

- all drivers that require firmware use the firmware-loading interface

- no firwmare is in the Linux tree

- some of the firmware is in the separate firwmare tree, some isn't even
  there

- some of the firmware is Free, some isn't, some is unknown, and for
  some, there might even be multiple alternatives

Given this picture, how do we decide which drivers to disable or
discourage, if any?

Now, should the fact that, currently, some of the firwmares are still in
the Linux tree, or were combined with the drivers' source code before,
play any role in the decision?


Does it make sense to keep the drivers enabled, but change the firmware
names in them, to avoid accidentally loading firmware we know is
non-Free?  Say, if the driver says “MODULE_FIRMWARE("foo")”, and we know
foo is non-Free, change it to “free/foo” or “foo-free” or some such, so
that it will only work if a Free alternative is developed, or if the
user cheats and (presumably consciously) installs the non-Free firmware
under the free name.

Regardless, should all drivers that load firmware, but for which no Free
firmware is known to exist, be disabled?


Thanks in advance for your guidance and feedback,

-- 
Alexandre Oliva           http://www.lsd.ic.unicamp.br/~oliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist      Red Hat Brazil Compiler Engineer


More information about the linux-libre mailing list