on disabling drivers that use non-Free firmware

Richard M Stallman rms at gnu.org
Tue Jan 13 10:51:04 UTC 2009

    > We should change these drivers to make report clearly "This device is
    > not supported" instead of trying to load the blob.

    That's an interesting thought.  This could be accomplished by as little
    as changing the name of the requested firmware file, or changing the
    call to request_firmware, or some such.

    I'm still not entirely sold on the idea of making it impossible to get
    any firmware whatsoever loaded by such drivers, although I can see that,
    once Linux moves all firwmare elsewhere, this could be the main
    distinction between it and Linux-libre.

    However, disabling drivers or firmware requests feels far less laudable
    than removing the non-Free Software itself.  Unless I manage to
    understand good social and strategic reasons to drop support for them
    altogether, rather than make room for freedom of choice where it might
    be put to use without harming others, and keep our focus on education, I
    think I'll have a much harder time defending this project than I do now

The reason we need to deactivate loading these blobs
is that otherwise the driver steers the user towards the blob.

However, if we can design another way to load free firmware, we can
avoid the need to change the drivers one by one.  Instead we could
entirely disable the routine to load firmware from a separate file.

Here is an idea.  We can put the binary for each piece of free
software into the C sources as a binary blob in the driver.  As long
as the source package contains the source corresponding to the binary,
everything is free and it complies with the GPL.  The makefile for this
driver can rebuild the binary blob from the firmware source code.
Then it will link the binary blob into the driver binary.  When the driver
runs, it will use the binary it contains.

If we do this for all free firmware, we will eliminate the need for
the capacity to load a separate firmware file.  So we can make that
routine give an error, "this device is not supported", and not mention
the name of the firmware file that it would otherwise have loaded.

This way there is no need to change the drivers that sometimes try to
load non-free firmware.

However, in the cases where the driver does work usefully without
loading the firmware, we should change it not to try to load it.  That
way, it will work.

More information about the linux-libre mailing list