[en] Take your freedom back, with Linux-2.6.33-libre

info en fsfla.org info en fsfla.org
Lun Mar 1 06:08:07 UTC 2010


Cyberspace, March 1st, 2010---Linux hasn't been Free Software since
1996, when Mr Torvalds accepted the first pieces of non-Free Software
in the distributions of Linux he has published since 1991.  Over these
years, while this kernel grew by a factor of 14, the amount of
non-Free firmware required by Linux drivers grew by an alarming factor
of 83.  We, Free Software users, need to join forces to reverse this
trend, and part of the solution is Linux-libre, whose release
2.6.33-libre was recently published by FSFLA, bringing with it
freedom, major improvements and plans for the future.


== History

All firmware in Linux-1.3.0 was Free Software.  Whatever little
relevance the GNU/Linux operating system had back in 1995 was enough
for a few hardware vendors to disclose the details of their hardware
or even offer all the software needed to make it work under terms that
respected users' essential freedoms.  They knew Linux, already
licensed under the GNU GPLv2, wouldn't have drivers for their
components otherwise.

Over the year that followed, Mr Torvalds changed his stance, and
started accepting binary-only firmware in Linux.  Because of this
decision, GNU/Linux ceased to be an incentive for hardware vendors to
respect users' essential freedoms.  Since the Linux developers
forfeited the defenses provided by the GPL, nearly all of the vendors
decided to keep only to themselves the control over the ever-growing
computers that passed for peripherals.

Some 143KB of object code disguised as source code were present in the
4.7MB compressed tarball of Linux-2.0, released in June, 1996.  Some 6
years later, there were 1.3MB of non-Free firmware hiding in the 26MB
compressed tarball of Linux-2.4.19.  In Linux-2.6.33, all of these
pieces and them some, adding up to 2MB, lie in a subtree created some
two years ago to hold firmware in Linux.  Another 650KB still
disguised as sources were recently added to the staging subtree, and
another 9.2MB (duplicates removed) live in a separate archive, created
to eventually replace the firmware subtree in Linux.


== Perspective

The largest single piece of non-Free firmware in the linux-firmware
repository weights 1.25MB today.  In the 1980s, half as many bytes
were held as enough memory for any application in a personal computer.
It was then that Richard Stallman started working on GNU, when entire
operating systems were smaller than that.  He realized that users
should be entitled to the four essential freedoms over all the
software that ran on computers, even when they were far less powerful
than today's peripherals.

We have achieved that, a Free operating system for general-purpose
personal computers, but it lasted for only a few years.  The kernel
that provided the piece that was missing in the GNU operating system
hasn't been Free Software for more than a decade, and it requests
users to install a growing number of non-Free programs that are not
included in it.


== Progress

We welcome, applaud and thank the various recent efforts that resulted
in Free firmware for various devices: Atheros contributed Free
firmware for its ar5k and ar9k wireless networking cards; experts in
reverse engineering developed Free firmware for some of Broadcom's b43
wireless networking cards; others developed the Free nouveau driver
for nVidia video cards, and, more recently, completed the task with
Free firmware for them, unfortunately a bit too late for the final
pieces to make Linux-2.6.33.

However, just like RMS, we realized that developing Free Software
isn't enough to establish freedom for the users of GNU/Linux.  We also
need to educate them to value their freedom, and to recognize and
reject non-Free Software.  Otherwise, the products that require users
to give up their freedom would continue to find willing customers.

A few years ago, the Free Software community realized that Linux was
no longer Free Software, and started various efforts to fix this
problem.  One of them, born nameless within gNewSense, was named
Linux-libre within BLAG.  Once we took responsibility for it, in
addition to removing the non-Free components from Linux, we replace
the requests for non-Free firmware with messages that inform users
that the hardware in question is a trap.

Our hope is that more users will use this Free version of Linux,
present in various GNU/Linux-libre distributions, to find out about
hardware components that do not respect their freedoms, then tell
vendors how unhappy they are, and use their freedom and power of
choice to support vendors that do respect their customers.

Large businesses, governments or lots of users working together,
applying a little pressure at the right spot of vendors' pockets, can
often get them to change their minds and voluntarily respect
customers' freedom.  Failing that, we can still help, participating in
or funding reverse engineering efforts.  The manufacturers that
voluntarily respect our freedom deserve the most appreciation, but a
product that works in freedom despite the efforts of the manufacturer
is much better than nothing.


== What's new in Linux-2.6.33-libre

We don't maintain the Linux-libre source files directly.  Instead we
maintain “deblobbing” scripts that clean Linux “sources”, thus
producing Linux-libre sources.  The main improvement in this
generation of Linux-libre, the fourth since we got involved, consisted
of making the deblobbing scripts more efficient.

As we accumulated thousands of patterns to recognize blobs, sequences
that look like blobs but that aren't, requests for non-Free firmware
external to Linux, and documentation that induces users to install it,
running the GNU sed script generated to locate and remove blobs became
too expensive for many users: in recent releases of Linux-libre, GNU
sed took some 15 seconds and more than 2GB of RAM to compile all the
patterns in the script.

The solution was to rewrite the main script in higher-level scripting
languages.  GNU awk reduced the start-up time to about 3 seconds, and
memory requirements dropped by an order of magnitude, but 3 seconds
multiplied by the 260 files that get cleaned up with this script to
form Linux-2.6.33-libre is a lot of time to waste.  Python and PERL
compile our huge collection of patterns in tenths of a second, while
reducing memory use by almost another order of magnitude.  However,
internal limits in PERL's pattern matching algorithm produce incorrect
results in deblob-check, so using it with PERL is not recommended for
now.

For deblob-main's cleaning-up of small files in Linux, Python was
determined to be fastest, which is why it is the new default.  For
verifying that a large tarball is clean, Python and PERL's run-time
jump to more than 90 minutes, up from 5 minutes with GNU awk and as
little as 3 minutes with GNU sed.  GNU awk comes ahead when listing
all the blobs in a Linux tarball, now with a long-wished feature:
printing before each blob the name of the file within the tarball that
contains it.

Future releases may be smarter in choosing suitable backend depending
on task and inputs.  For now, users of deblob-check should be aware of
the new flags: --use-python, --use-awk, --use-perl, and --use-sed, and
the corresponding environment variables PYTHON, AWK, PERL, and SED.

The lower memory footprint and CPU requirements for checking and
cleaning up individual files means it is again possible to clean up
Linux trees on the fly, which a number of users used to find valuable.

Over the next few days, we'll also roll out Linux-libre, generation 4,
for earlier Linux releases, fixing a few deblobbing errors in staging
drivers and catching a few more occurrences of non-Free blob names in
documentation and error messages.


== Request for comments

A number of our users have expressed legitimate dissatisfaction with a
consequence of the method we've used to stop the kernel from inducing
users to install non-Free firmware.  It is not our goal to prevent
users from loading or running non-Free firmware, but the only way we
thought of to avoid inducing users to run non-Free firmware had the
side effect of making it impossible to use the non-Free firmware just
by installing it.

In Linux, several drivers call request_firmware with a blob name.
This request is logged, including the blob name, and passed on to a
userland program, supposed to locate a firmware file with that name
and upload it to the kernel.  Given the logs, in addition to existing
and potential behavior of the userland program, this amounted to Linux
telling its user to install a specific non-Free program, which is
unacceptable.

Linux-libre releases since generation 2 replace the blob name with a
name that the firmware loader is unlikely to match, and that could be
recognized in userland to inform users about the lack of Free firmware
for some hardware component of the system.  We also reject whatever
response the firmware loader produces for such requests, to minimize
the risk of accidental matches and hardware damage.

We reasoned that anyone determined to use the firmware could still
build a module, or a complete kernel, that issues the request and uses
the response.  This possibility was considered too cumbersome by some.

Recently we came up with another way to achieve the goal of stopping
the kernel from inviting users into the trap of non-Free Software:
where Linux requests a firmware file that we know is non-Free, we
could anonymize the blob name with a unidirectional hash of its name
and a kernel build and/or session identifier, and issue a request for
a file named after the computed hash.

Given a suitable implementation of the userland firmware loader,
whatever pieces of firmware the user chose to install would still be
readily located and made available to the kernel.  However, because of
the unidirectional nature of the hash, a request for firmware that's
not installed won't steer users toward that firmware, because the hash
code won't immediately identify it.  Thus, if the user insists on
installing this firmware, Linux-libre will work with it, but it is
very unlikely anyone will install the firmware because of Linux-libre.

Join us at linux-libre en fsfla.org and let us know your suggestions,
other ways to address this issue, or your opinion about this plan and
whether it might be accepted upstream.  Feedback and help are welcome!

In the mean time, Be Free! with Linux-2.6.33-libre, and help us
reverse the growing dependency of Linux on non-Free firmware.


== About Linux-libre

Linux-libre is a project maintained by FSFLA, that releases cleaned-up
versions of Linux, suitable for use in distributions that comply with
the Free Software Distribution Guidelines published by the GNU
project, and by users who wish to run Free versions of Linux on their
GNU systems.  The project offers cleaning-up scripts and Free sources,
binaries for some Free GNU/Linux-libre distributions, binaries to
replace with minimal changes the kernels in non-Free GNU/Linux
distributions: Freed-ebian and Freed-ora, and artwork with GNU and the
Linux-libre mascot: Freedo, the clean, Free and user-friendly
light-blue penguin.  Visit our web site and Be Free!
http://linux-libre.fsfla.org/
http://www.gnu.org/distros/


== About FSFLA

Free Software Foundation Latin America joined in 2005 the
international FSF network, previously formed by Free Software
Foundations in the United States, in Europe and in India.  These
sister organizations work in their corresponding geographies towards
promoting the same Free Software ideals and defending the same
freedoms for software users and developers, working locally but
cooperating globally.
http://www.fsfla.org/

----

Copyright 2010 FSFLA

Permission is granted to make and distribute verbatim copies of this
entire document without royalty, provided the copyright notice, the
document's official URL, and this permission notice are preserved.

Permission is also granted to make and distribute verbatim copies of
individual sections of this document worldwide without royalty
provided the copyright notice and the permission notice above are
preserved, and the document's official URL is preserved or replaced by
the individual section's official URL.

http://www.fsfla.org/anuncio/2010-03-Linux-2.6.33-libre


Más información sobre la lista de distribución Anuncios