Pointless ideology?
[Posted September 1, 2004 by corbet]
Last week's
USB subsystem patch posting
included a number of changes, from some data structure shrinking and
continuing improvements to the new
USB OTG support. A less
welcome part of that patch, however, was the removal of the Philips webcam
(PWC) driver, by the request of its author.
The PWC driver had a unique feature in the form of a hook which allowed the
loading of a binary module into the driver. This hook was used to load a
closed-source decompression routine, needed to use the camera in its
higher-resolution mode. This sort of hook goes against kernel policy, so,
when USB maintainer Greg Kroah-Hartman became aware of it, he prepared a
patch to take it out. The PWC driver maintainer (Nemosoft Unv.), in
response to this change, requested that the driver be removed altogether.
He has also removed the driver and all the related files (including the
binary-only part) from his web site.
Greg Kroah-Hartman's FAQ on the removal of
the PWC driver is worth reading.
The reaction in parts of the community has been quite strong. This is,
according to some, another example where licensing fundamentalists have,
through their intolerance of binary-only modules, cost Linux users the
ability to work with their cameras. The PWC driver, which was not hurting
anyone, has been needlessly lost. Linux will never be able to compete with
Microsoft or be taken seriously by vendors as long as this kind of
silliness is going on.
And so on.
Whether Linux developers should be concerned with "competing with
Microsoft" is a topic for a different article. For now, let us look at the
issue of proprietary modules, and the kernel developers' approach to them.
The general attitude toward proprietary modules is overtly hostile.
Critics claim that this attitude is the result of blind ideology which puts
free software fundamentalism above the needs of Linux users. The truth of
the matter is that there is no end of solid, practical reasons for
discouraging the creation and use of binary-only kernel modules.
The first of these is that the copyright status of many of these modules is
ambiguous at best. Any module which is a derived product of the kernel
must carry a GPL-compatible license; no exception to the GPL for loadable
modules exists. A serious legal challenge to the distribution of a
proprietary module has not yet been made. Yet. There may yet come a day,
however, when one of the many holders of copyrights on kernel code decides
that a binary module violates his or her copyrights, and does something
about it.
Binary modules are, by their nature, platform-specific. One of the
strengths of Linux is the freedom of choice it gives with regard to
hardware, but binary modules take that freedom away. Linus Torvalds put it this way:
The fact is, Linux has been a hell of a lot more successful at
moving to things like x86-64 and ppc64 than Windows will _ever_
be. And the reason is open source drivers.
Non-free drivers lock users into specific architectures.
When binary modules have bugs, there is no way to even track them down,
much less fix them. A bad module brings down the entire kernel with it,
making Linux appear to be unstable. And closed-source modules tend to have
a much higher rate of bugs than free modules; they have been seen by very
few eyes, rarely conform to kernel programming conventions, and their
authors cannot be educated on how to do things right. A system which
contains proprietary modules is less stable, and there is nothing that the
kernel developers can do about it.
Closed-source modules break when the system is upgraded. The internal
kernel interfaces can be changed at any time, a longstanding policy which
exists for several good reasons.
In-tree modules are fixed quickly; proprietary modules are fixed
when the vendor gets around to it, if ever. A binary module has no future
beyond whatever promises the vendor may have made regarding its support
plans. Some of the more cynical among us have been known to mutter that
such promises have, on occasion, not been kept. And those promises tend to
be minimal in the first place; technology manufacturers are much more
interested in getting people to buy new hardware than supporting their old,
obsolete products.
Perhaps more to the point: binary modules are a drag on the development of
the kernel. Whenever a kernel change breaks those modules, users complain
loudly. The kernel developers express their lack of worry about breaking
binary modules in a very clear way, but the fact is that they (and their
employers) have to think before making that sort of incompatible change.
Consider, for example, the change to 4KB stacks on the x86 architecture.
This change makes the kernel more stable in a number of ways. But it broke
the binary nVidia modules, leading to a loud chorus of protests. To the
extent that those users' complaints are heard, important kernel
improvements will be delayed or blocked.
Binary-only modules lack transparency; users never really know what is
going on inside. There is speculation that the PWC decompression code is
closed-source because opening it would reveal that the camera has far less
resolution than advertised. This is almost certainly untrue, but there is
no way to look at what is going on and know for sure. The lack of
transparency also makes it impossible for programmers to benefit from the
work that was done on the proprietary module; there may well be useful
ideas there which could be applied elsewhere in the kernel, but there is no
way to know. The creator of a binary-only module is benefiting from the
free software development process, but is not giving back to it.
At the 2004 Kernel Summit customer
panel, the technical manager from Goldman Sachs - not a person who is
likely to be inclined toward ideological licensing fancies - was in the
interesting position of telling the kernel developers about the advantages
of having device drivers in the mainline kernel. He pointed out that
drivers which have been freed and merged into the kernel do not have the
sorts of stability issues experienced by users of proprietary drivers.
Even the most focused and hard-nosed of users are beginning to realize that
wedging proprietary code into the kernel is not in their best interest.
It is thus in the interest of all users to discourage proprietary modules.
It is not a question of irrational allergies to end-user license agreements
or free software fundamentalism; it is, instead, a matter of creating the
most stable and capable kernel possible. Had the kernel been a friendlier
environment for proprietary code, the kernel we all use now would be less
capable, less stable, and less portable than it is.
When you see a proprietary module
break, or (as in the case of the PWC driver) be withdrawn, what you are
seeing is the risk which is inherent in the use of non-free modules, not
irrational behavior on the part of the kernel developers.
(
Log in to post comments)