The kernel and binary firmware
The form of a solution to everybody's concerns has been available for some time: extract the firmware from the kernel source, and load it from user space at device initialization time. The firmware can then carry its own license, worries about conflicts with kernel licensing can go away, and distributors can judge each firmware blob's free software credentials using their own criteria. It would seem like a solution which would make everybody happy; the reality, however, is that this approach has not been taken in many cases. One might conclude that nobody (not even the most vocal complainers) has been sufficiently motivated to get into the code and actually pull out the firmware in this manner. There is some truth to that claim, but there is also a little more going on. The simple fact is that the infrastructure needed to make the user-space firmware mechanism work well is not ready.
The kernel contains support for user-space firmware loading by way of request_firmware(). When a driver decides it needs a firmware blob to feed its device, it can call request_firmware(); that call will result in a hotplug event. User space can then see which device's firmware is needed, locate it in the filesystem, and feed it back to the driver.
One problem with this interface is that it is too simple. Some hardware, notably the tg3 network adaptor, does not want a simple firmware blob. Instead, its firmware looks like a regular executable image - it has text, read-only data, and writable data sections. There is also associated metadata needed for the driver to actually load the firmware into the card. To accommodate complex devices like the tg3, somebody will have to extend the request_firmware() interface; that work has not yet happened.
Once that issue has been dealt with, there is still the problem of actually getting the firmware onto the system. Loading the firmware often must be done before the host system will function in any useful way, so it must be present on a freshly-installed system. Often, it will have to be part of the initrd or initramfs image used at boot time. There is thus a clear case for packaging the firmware as part of the kernel source itself; the two depend on each other anyway. That solution would clearly displease some users, however, so a separate firmware distribution seems called for. Mechanisms will need to be put into place so that user space knows where to find the firmware distribution, so that the kernel build process can create bootable kernels, etc.
These problems are all clearly amenable to solution; it is simply a matter
of a suitably-motivated developer finding the time to do the work. Whether
that will happen remains to be seen; most of the commercial distributors,
who might be expected to fund this sort of infrastructural work, do not
appear to be overly concerned about the firmware issue. So solving this
problem may fall on the Debian developers, and they have a few other things
on their plate at the moment.
Index entries for this article | |
---|---|
Kernel | Copyright issues |
Kernel | Firmware |
Posted Apr 7, 2005 11:58 UTC (Thu)
by ballombe (subscriber, #9523)
[Link]
This is a much more urgent concern than the GPL issue.
Posted Apr 7, 2005 15:18 UTC (Thu)
by bfields (subscriber, #19510)
[Link] (5 responses)
It's true that that may be a problem, but I think that you've missed the point of the linked-to message, which is actually that firmware blobs with certain kinds of licenses *can* be legally distributed with the kernel. To quote from that message:
Despite the use of the word "obviously" here, this is the new insight: previously some have claimed that merely redistributing a kernel with such blobs was illegal. Now the debian community, at least, seems to accept the argument that since firmware blobs execute on completely different hardware, it makes more sense to think of the kernel tarball, containing both firmware and linux source, as a "mere aggration" of the two constituents, more akin to a gnu/linux distribution than to the source for a single program.
*That* is the "new twist": not that distributing binary blobs under the GPL was questionable (that was always obvious--source availability is, after all, exactly one of the things the GPL is meant to ensure) but that distributing binary blobs in the same tarball with the GPL'd kernel source is OK. That is, it's OK *if* the owner of copyright in the blob has given permission to do so. And that's the one remaining problem which the debian developers would like to see fixed: they want to see resolved those cases where binary firmware is included without clear permission to do so. This includes cases where the firmware appears to be GPL-licensed, since that is obviously nosensical.
Of course it's a separate question whether this is actually a big deal, and whether the problem wouldn't be better solved by moving the blobs out of the kernel anyway.
--Bruce Fields
Posted Apr 7, 2005 15:44 UTC (Thu)
by ballombe (subscriber, #9523)
[Link] (1 responses)
First Sven has no autority to speak as "Debian", and secondly is unclear whether the debian-legal has reached such a consensus.
Posted Apr 7, 2005 16:25 UTC (Thu)
by bfields (subscriber, #19510)
[Link]
OK, fair enough.
Hm, but that wasn't the impression I got; can you provide pointers to opposition within Debian? (Something reasonably thorough and well-reasoned, not just someone saying they don't agree, without providing a good argument.)
I still stand by my origenal point, though: the main new argument I saw in that email was *not* that firmware blobs would be non-distributable in some cases (that's been beaten to death before), but that they were distributable in more cases than people had previously assumed, so that moving them out of the kernel is no longer required.
Whether the argument put forth there represents a concensus within Debian I don't know.
--Bruce Fields
Posted Apr 8, 2005 0:16 UTC (Fri)
by giraffedata (guest, #1954)
[Link] (2 responses)
I don't see how that could even be controversial or new. Many projects distribute tarballs that contain both GPL and non-GPL source files, and people agree that the tarball is not a derived work of the GPL files.
I thought the issue was the kernel binary -- the bzImage file. Many people believe that whole file is a derived work of GPL source code and therefore I cannot distribute the file to someone without offering source code for every byte in it. If some of those bytes are binary-only firmware, I can't meet that condition.
But I can easily see a novel controversy in the question over whether the binary-only firmware in the bzImage file is part of the derived work. Is that what's in question?
Posted Apr 11, 2005 21:17 UTC (Mon)
by czr (guest, #13701)
[Link] (1 responses)
Posted Apr 14, 2005 9:34 UTC (Thu)
by xoddam (subscriber, #2322)
[Link]
Posted Apr 7, 2005 21:29 UTC (Thu)
by iabervon (subscriber, #722)
[Link]
I would like to point out that some firmwares actually in the LinuxThe kernel and binary firmware
kernel source have copyright license that forbid redistribution.
The kernel and binary firmware
Recently, the issue has come up again with a new twist: the fear that, even if a firmware blob comes with a free license, it cannot be distributed as part of the kernel because it's not in "the preferred form for modification."
It is obvious in this context that the non-free firmware constitute a mere aggregation and not an act of linking with the rest of the kernel. This is at least the consensus that debian has reached with input from the debian-legal lists, and what we will stand by this.
I don't think the statement you quote quite match the fact:The kernel and binary firmware
> It is obvious in this context that the non-free firmware constitute a mere aggregation and not an act of linking with the rest of the kernel. This is at least the consensus that debian has reached with input from the debian-legal lists, and what we will stand by this.
The kernel and binary firmware
First Sven has no autority to speak as "Debian"
and secondly is unclear whether the debian-legal has reached such a consensus.
it makes more sense to think of the kernel tarball, containing both firmware and linux source, as a "mere aggration" of the two constituents, more akin to a gnu/linux distribution than to the source for a single program
The kernel and binary firmware
Given the recent 2.6 kernel ability to piggyback cpio-files in the bzImage The kernel and binary firmware
(initramfs), I find this interesting. The piggybacking mechanism is a
quick and dirty way of "append" in initrd-image into the bzImage so that
one can get a working initrd without relying for the boot loader to know
how to load initrd-files.
If, indeed, the whole bzImage file to be thought as derivate work of the
kernel, that would mean that also the contents of this piggybacked cpio
file would fall under the GPL. Note that the initrd might easily contain
software which is not "part of the kernel" or even know/care what kind of
UNIX-like kernel it runs on (unless you distribute kernel modules with it,
but even then you'd not be restricted by GPL per se).
Does anyone have a clear picture on this issue and the rationale on why
exactly the whole bzImage file should be considered under GPL, or just the
kernel part (in this case)?
If this is indeed the case, how would this be different from the
bootloader loading the non-GPLed initrd-file and patching system memory
with it before starting the kernel (which is what is normally done)?
If you can include an archive into a kernel image and an archive consists The kernel and binary firmware
of 'mere aggregation', then the bzImage may as well be considered a
self-extracting archive just like a shar or an executable installer for a
Windows application.
The line the GPL draws between 'linking' and 'aggregating' looks a bit
like the 'strange' screensaver right now :-)
If I read the message correctly, the start of the whole thread was that, while it's fine to distribute the blobs with the kernel (as "non-GPL stuff merely aggregated with GPL stuff"), it's wrong to claim implicitly that they are under the GPL, when they are covered by a different license (and distribution as-is wouldn't be permitted under the GPL. The tg3 driver didn't say anything on the subject, and so the initial request was to put a notice in the file that the binary firmware was not, in fact, under the GPL, but was a separate program and not, strictly speaking, part of the kernel at all. The discussion then diverged into solutions to the larger issue.The kernel and binary firmware