The kernel

This document contains notices about the kernel we use or we want to adapt. The goal is to provide a non-censoring fully free kernel.

Linux-Libre

Links:

The Linux Libre project is based on deblob script developed by Alexandre Oliva, based on work done by UTUTO, gNewSense and BLAG.

Quote from the README

deblob-check looks for blobs in tarballs, source files and patches,
and performs a number of other tasks, such as cleaning up individual
source files from non-Free blobs, while retaining known Free and
apparent blobs.

deblob-<version> is to be run in an expanded Linux-<version> tree, to
clean it up from non-Free blobs.  As explained in the comments in the
script, if deblob-check is alongside it, it will be used to remove
only the blobs, otherwise entire files will be removed.  If you find a
++ in the assignment to extra, this means the script was modified
after the named release.  You might have to take the ++s out for the
script to run.  Feel Free to edit it however you see fit.

deblob-main is used to clean up a Linux tarball and create a GNU
Linux-libre tarball.  The comments in the script detail the arguments
it expects.  If you use it to deblob patched Linux trees, be sure to
run deblob-check on the result, to make sure blobs haven't been added
in the patches that it didn't know to clean up.
  • Linux Libre deblob scripts remove
    • non-free firmware files
    • non-free inline firmware in code files (e. g. firmware disguised as large arrays with numbers)
    • Names of non-free firmware files
    • Documentation in which non-free firmware is mentioned
    • instructions how to obtain non-free firmware
    • scripts which purpose is to obtain non-free firmware
  • Additionally Linux-Libre deblob scripts
    • add the functions reject_firmware() and report_missing_free_firmware() to the kernel source code
    • replace request_firmware() calls with reject_firmware() calls when the kernel requests non-free firmware. reject_firmware calls report_missing_free_firmware() and then request_firmware(). Since the name of non-free firmware files are replaced with the string /*DEBLOBBED*/ non-free firmware files can not be loaded,

Details of deblob funtions

Linux-Libre's deblob script does not only remove non-free firmware (files and inline), but it also removes name of non-free files, documentation in which non-free firmware is mentioned, scripts and instructions how to obtain non-free firmware. Some of this functions are going beyond the purpose to remove non-free software/firmware.

Function name Purpose
announce echo wrapper - at which point is the script now?
clean_file Remove a file
check_changed check if editing was successful
clean_blob calls deblob-check to remove unwanted content within a file or delete the file if deblob-chek is missing
dummy_blob replaces non-free firmware entries in Makefile
clean_fw calls clean_blob and then dummy_blob
drop_fw_file calls clean_file and then dummy_blob
clean_kconfig adds “depends on NONFREE” to Kconfig files
clean_mk removes entries from Makefiles - not used any more
clean_sed sed wrapper which calls check_changed
reject_firmware, maybe_reject_firmware replaces request_firmware calls with reject-firmware
undefine_macro replace macro definitions
undefault_firmware calls undefine_macro to remove name of non-free firmware files in #define macros

Debian Linux Kernel

Links:

Since version 6.0 Squeeze Debian GNU/Linux provides a fully free Linux kernel in which all non-free bits are removed. The Debian Linux Kernel is recognized by the FSF as free according to http://www.fsf.org/news/debian-squeeze-makes-key-progress-toward-being-a-fully-free-distribution

  • Debian removed
    • non-free firmware files
    • non-free inline firmware in code files (e. g. firmware disguised as large arrays with numbers)
  • Debian additionally
    • moved the non-free firmware files to their 'non-free' repo
    • patched out non-free inline firmware to external files and moved them to their 'non-free' repo. The files containing this inline firmware were patched to use request_firmware to load the firmware from the newly created external files.

Discussion

As of version 0.9.1 ConnochaetOS is using Linux-Libre kernel. The Linux-Libre kernel has a serious drawback, since the deblob scripts not only remove non-free firmware but names of the files as well. The result is that the non-free firmware will not be loaded, even if the files are installed at the right place.

That solution is not good, since it it practical censorship. Richard Stallman isn't happy with this solution either, see http://lists.gnu.org/archive/html/gnu-linux-libre/2010-12/msg00033.html

There were some discussions how the issue could be solved but until now, there are only some ideas, no implementation exists, see http://lists.gnu.org/archive/html/gnu-linux-libre/2012-03/msg00033.html

The argument is, that by leaving the names a user could learn about non-free software and could be tempted to install them.

Richard Stallman said that the Debian Linux kernel do “recommend specific nonfree firmware programs”. This is an exaggeration, the kernel simply says, that it tries to load firmware and mentions the name of the firmware file. It could hardly be interpreted as a recommendation. However, users may be tempted to install the non-free files without knowing if it is free or non-free, which is undesirable.

We must distinguish to cases:

  1. names of non-free software printed at screen at runtime
  2. names of non-free software in source code

In the first case the user learns the name of the non-free file while running the kernel. Without information if the file is free or non-free this may be lead to a situation where the user installs the file and compromises his freedom without knowing it.

In the second case the user may learn the name of the file while browsing the source code. But to delete that information would not only be censorship but futile as well. There are names of other proprietary programs in the Linux source code, they are there as well in Linux-Libre, e. g. the name of a proprietary operating system whose file system is implemented in the kernel.

It is our opinion at the ConnochaetOS project, that freedom can only be established by information, not by censorship.

Solution

To establish freedom by information it is necessary that the user know what he is doing.

The way Debian goes, to just omit the non-free parts and put it in their non-free repository leads to situations, where uninformed users install non-free software without knowing what they are doing. The situation worsens in practice by the fact, that in Debians user documentation and help forums users are encouraged to add the non-free repo without telling them what that means.

The way Linux-Libre goes, to omit the non-free parts, delete every information about it and make it impossible to use the non-free parts if the user learns about it is censorship.

Both ways suffer from a lack of information. The right way is to the inform users exhaustive, so that they can make a responsible decision.

In practice this means to teach the kernel, to inform the user, if the file it wants to load is non-free. This could be done by adding code to the kernel before any request_firmware() call, if the firmware file is non-free. The Linux-libre deblob script can be a starting point, since they contain detailed information about non-free files. But instead of deleting information they can be modified to add information.

Downloads

This are the first kernel packages and accompanied software - they still need improvement and should not be used for production.

The kernel source was created by getting linux-source-2.6.32_2.6.32-41_all.deb from Debian and extracting the included source tarball linux-source-2.6.32.tar.bz2. Then the script clean-2.6.32 was executed.

This kernel displays a warning every time it tries to load non-free firmware. The warning looks like this:

WARNING Kernel wants to load NON-FREE FIRMWARE which DOES NOT RESPECT YOUR FREEDOM
iwl3945 0000:0c:00.0: firmware: requesting iwlwifi-3945-2.ucode
iwl3945 0000:0c:00.0: iwlwifi-3945-2.ucode firmware file req failed: -2

If the file is installed in place it will be loaded. Then the message looks like this

WARNING Kernel wants to load NON-FREE FIRMWARE which DOES NOT RESPECT YOUR FREEDOM
iwl3945 0000:0c:00.0: firmware: requesting iwlwifi-3945-2.ucode
iwl3945 0000:0c:00.0: loaded firmware version 15.32.2.9

Kernel image

Kernel headers

Source

Clean script, based on Linux-Libre's deblob script

 
Back to top
devel/kernel.txt · Last modified: 2012/03/27 13:15 by haary
 
 
GNU Free Documentation License 1.3
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0