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.
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.
reject_firmware() and report_missing_free_firmware() to the kernel source coderequest_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, 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 |
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
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:
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.
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.
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