According to the Free Software Foundation, the Debian distribution is not a Free System Distribution. While I, as a Debian Developer, disagree with that point of view, it should be obvious that the opinion of an organization that engages in politics (or, at the very least, in political lobbying) and of which I am not a member should not be my concern. However, it has long irked me the wrong way that these claims exist.
A few weeks ago, I found the System distribution commitments page on Wikipedia. This does change the situation somewhat; I cannot say that a page explaining an opinion of the FSF is wrong; but if that opinion is copied nearly verbatim to a website which claims neutrality as one of its "Core content policies", then the situation is significantly different.
When I originally found that page, it was immediately obvious where the content came from, but there was no reference listed, so I added a "citation needed" tag, the first time I ever did so on Wikipedia.
Now, a few weeks later, a reference has been added, and the "citation needed" tag removed. However, as expected, the only reference which has been added is the highly opinionated document on the FSF's website, which is hardly neutral.
I've added another tag (this time a "which" tag, asking for more clarification) and added a Talk page listing my concerns with the article. But I can't really explain in Wikipedia why I think the whole premise is wrong; that's what a blog is for.
So, here goes.
The FSF lists two reasons why they do not endorse Debian:
- The non-free and contrib repositories
- An unsubstantiated claim that "the installer in some cases recommends [...] non-free firmware files for the peripherals on the machine."
Let's have a look at them, each in turn.
Non-free and contrib
It is true that Debian provides non-free software in separate repositories, and that software in these repositories does not comply with either the Debian Free Software Guidelines (DFSG) or the FSF's Free Software Definition. However, the non-free and contrib repositories are fairly small:
wouter@carillon:/var/lib/apt/lists$ awk -F':' 'BEGIN{total=0}/^Size/{total+=$2}END{print total}' ftp.be.debian.org_debian_dists_sid_non-free_binary-amd64_Packages
4398812934
That is, the non-free repository contains just over 4G of software (after installation). Contrib is even smaller:
wouter@carillon:/var/lib/apt/lists$ awk -F':' 'BEGIN{total=0}/^Size/{total+=$2}END{print total}' ftp.be.debian.org_debian_dists_sid_contrib_binary-amd64_Packages
306578636
While, combined, this is approximately the same size as some other distributions, free and non-free together, it pales in comparison with the "main" repository:
wouter@carillon:/var/lib/apt/lists$ awk -F':' 'BEGIN{total=0}/^Size/{total+=$2}END{print total}' ftp.be.debian.org_debian_dists_sid_main_binary-amd64_Packages
60025033622
i.e., the "main" repository contains just shy of 60G of software.
Of course, whether non-free is large or not should not matter at all; the fact that it exists in the first place is a problem for free software advocates. But of those 4 gigabytes, what exactly is the non-free repository used for?
For that, the Debian popularity contest has a page specifically for the non-free section. Looking at this page, and ignoring the packages that are listed as "Not in sid" (which either means they were installed from third-party suppliers and therefore cannot be attributed to Debian, or were only available in older distributions so should not be held against the Debian of today anymore), we see three main uses of non-free:
- Various implementations of non-free algorithms (unrar, libfaac0, etc)
- A lot of packages containing non-free firmware
- A number of packages containing non-free documentation
The first package which does not fit any of those descriptions is
iozone3
, currently on the 64th position of the popularity contest
(including packages "Not in sid").
The first item in this list is something which most free software advocates will try to avoid. After all, for all of those algorithms, alternatives exist, and so there is no real reason why one would want to use such software, other than "someone sent me a file encoded according to that algorithm, and I want to decode it". Debian gives you the option to do so, but a valid case could be made for not doing so.
The second item in that list is really an alternate version of "the installer recommends non-free software", so I'll come back on that in the next section.
The 3rd item in the above list deserves some special attention. Just over 10 years ago, Debian clarified its position where it clearly specified that documentation and programs (as both are interpreted as "software") should follow the same set of guidelines regarding freedom. The FSF disagrees with this position, and chose to release some of its documentation under the GFDL with invariant sections, which Debian decided is a non-free license in 2006. Since then, such GNU documentation would no longer be available were Debian to ditch the non-free repository.
Recommending non-free firmware
As I said above, the FSF's page claims that the Debian installer recommends non-free firmware "in some cases", without going into much detail. Special care should be taken in understanding the word "recommend" here; wiktionary defines it as follows:
recommend (third-person singular simple present recommends, present participle recommending, simple past and past participle recommended)
- (transitive) To bestow commendation on; to represent favourably; to suggest, endorse or encourage as an appropriate choice.
The board recommends Philips, given his ample experience in similar positions.
(transitive) To make acceptable; to attract favor to.
(transitive) To advise, propose, counsel favorably
The therapist recommends resting the mind and exercising the body.
- (transitive, archaic) To commit, confide to another's care, confidence or acceptance, with favoring representations
A medieval oblate's parents recommended the boy for life to God and the monastery
However, according to the FSF, merely showing a firmware filename in unencrypted form counts as a recommendation. I've always found that use of the word "recommendation" to be dubious, at best.
Ignoring that part, we can make the following observations:
The debian-installer module ("udeb") which is responsible for
configuring apt is called
apt-mirror-setup
(code in the apt-setup git
repository).
The actual debconf templates which allow the user to enable the non-free
or contrib repositories are the apt-setup/non-free
and
apt-setup/contrib
templates, and they look like this:
Template: apt-setup/non-free
Type: boolean
Default: false
# :sl1:
_Description: Use non-free software?
Some non-free software has been made to work with Debian. Though this
software is not at all a part of Debian, standard Debian tools can be used
to install it. This software has varying licenses which may prevent you
from using, modifying, or sharing it.
.
Please choose whether you want to have it available anyway.
Template: apt-setup/contrib
Type: boolean
Default: false
# :sl1:
_Description: Use contrib software?
Some additional software has been made to work with Debian. Though this
software is free, it depends on non-free software for its operation. This
software is not a part of Debian, but standard Debian tools can be
used to install it.
.
Please choose whether you want this software to be made available to you.
Note the lines Default: false
, which imply that the default answer to
these questions is to disable the non-free and contrib repositories. A
question which defaults to false isn't a recommendation, nor do I read
the text as any form of recommendation to install these repositories
(quite the contrary, in fact).
More important than whether the default is to enable or disable these repositories is whether this question is even shown to the user in normal installations. Whether this is the case isn't decided by any template; instead, it is decided by the code that calls the templates. That code currently looks like this:
STATE=1
while true; do
case "$STATE" in
1)
db_input low apt-setup/non-free || true
;;
2)
# If they chose not to use non-free, ask about
# contrib, with a default of no. If they chose to
# use non-free, they get contrib too..
db_get apt-setup/non-free
if [ "$RET" = false ]; then
db_fget apt-setup/contrib seen
if [ "$RET" = false ]; then
db_set apt-setup/contrib false
fi
db_input low apt-setup/contrib || true
else
db_fget apt-setup/contrib seen
if [ "$RET" = false ]; then
db_set apt-setup/contrib true
fi
fi
;;
*)
break
;;
esac
if db_go; then
STATE=$(($STATE + 1))
else
STATE=$(($STATE - 1))
fi
done
Note the "low" in the db_input lines; it means the question is only
shown at low priority, i.e., in "expert" mode. The result is that,
unless you enable expert mode, you won't even see the question about the
non-free repository, and it will be disabled by default. There won't
even be any mention of it in your sources.list
file.
Of course, the above isn't about firmware files, which is what the FSF website claims. So, there is a second part to this story. If you run a system with hardware for which there is a non-free firmware package in the non-free repository, and you provided firmware for this hardware to the installer through various means, then the hw-detect module comes into play. This has code which currently looks like this:
# install cached firmware debs
if [ -d /var/cache/firmware ]; then
for deb in /var/cache/firmware/*.deb; do
if [ -f "$deb" ]; then
cp -a "$deb" /target/tmp
# TODO debconf passthrough
if ! in-target dpkg -i "/tmp/$(basename "$deb")"; then
# dpkg failed, force removal of package
in-target dpkg --force-depends --remove "$(deb_package "$deb")" || true
fi
rm -f "/target/tmp/$deb"
need_nonfree=1
fi
done
fi
if [ "$need_nonfree" ]; then
db_set apt-setup/non-free true
fi
As can bee seen, if any firmware .deb
files exist under
/var/cache/firmware in the installer environment, then these will be
installed on the target system and default answer to the
apt-setup/non-free
question will be changed to enable the non-free
repository. How do such packages end up there?
Well, that's done by the same hw-detect udeb, in a different script. The code there is a bit too long to quote in this already far too long blog post, but it boils down to:
If the installer detects missing firmware, the user is asked whether (s)he wants to install firmware, with the following template:
Template: hw-detect/load_firmware Type: boolean Default: true # :sl2: _Description: Load missing firmware from removable media? Some of your hardware needs non-free firmware files to operate. The firmware can be loaded from removable media, such as a USB stick or floppy. . The missing firmware files are: ${FILES} . If you have such media available now, insert it, and continue.
If the user agreed to doing so (and to me, the above template does not read as a recommendation), any firmware .deb files that are provided to the installer are tested for the missing firmware files.
- If any of those files are found, these .deb files are copied to the
/var/cache/firmware
directory, and the firmware files are made available to the running kernel.
Conclusion
In my opinion, while some of the claims on the FSF website are correct, others are at the very least misleading. Debian does not recommend the use of non-free software; and while providing non-free firmware to the installer isn't too difficult, it isn't documented very well; and as such installing a system with non-free enabled isn't something you can easily do by accident.
Debian and the FSF clearly disagree on certain things, and this disagreement, not any policies by the Debian project, is the main reason why the FSF won't encourage Debian as a free distribution. I don't think the Debian project will easily agree to get rid of the non-free repository while the FSF still produces non-free documentation or while non-free firmware is still a fact of life in this world. However, I do think the following should happen:
- The FSF should relicense its non-free documentation so it becomes truly free.
- Once that has happened, Debian should rename its non-free repository to a "hardware-support" repository (or something along those lines), and remove everything that does not exist solely for the support of proprietary hardware (i.e., non-free drivers, non-free firmware, etc).
- The installer could be clearer on the fact that if non-free firmware is found to be in use for the system, the user is using software that cannot be properly supported by the Debian project.
While the above wouldn't necessarily bring the opinions of the FSF and Debian 100% in line, it would at least bring their positions closer to eachother. Unfortunately, however, I doubt that this will happen; and that's a shame, because in the end, both Debian and the FSF want the same thing: a world where Free Software is the norm, not the exception.
Update
- The first version of this text said that providing firmware is not very easy. As was pointed out to me, it isn't too hard, but it's not very well documented and not part of the 'regular' installer images.
- Add contrib too, when we compare non-free and main
- Clarify when GFDL is non-free
The FSF position borders on censorship of the existence of non-free firmware/software, or a requirement to brainwash users at every opportunity. IIRC their libre kernels disable firmware-loading mechanisms which is a deliberate technical hindrance to the user.
Even if I agree with their principles, this seems to be the wrong way to go about it. I don't think Debian needs to go beyond its own DFSG, which has inspired actually useful QA work, such as finding sourceless or questionably licensed files, then going about fixing the problems such as by packaging good alternatives, asking upstream authors to relicense, making it easy to build things ourselves (like images from SVG source, binary SWF from XML), and replacing in-kernel blobs with firmware-loading capability.
I wish Debian would separate GFDL packages from the rest of the non-free archive, and make them more easily discoverable by, say, dropping a hint in the installer. When I was new to Debian, it took me a little while to figure out why the documentation for bash and tar were not automatically installed, and why I could not find it with an aptitude search (because it was in "non-free", which I assumed I wouldn't need).
Most people think the GNU recommendations are inflexible and oppressive, but in this case I think their rationale is more nuanced, and Debian's is inflexible. It is easy to regard binary blobs and invariant sections as similar evils--both banned by the DFSG. But one aim of having invariant sections is to discourage censorship, while I don't think the same can be said for binary blobs. DFSG treats everything the same, but FSF creates different rules for different usage cases which it thinks is better for promoting freedom. I totally understand why one might think the DFSG is superior, but IMO GFDL packages should not be placed in a repository which discourages their use.
I've often thought that non-free should be a bunch of micro-repositories each of which holds exactly one binary package and it's transitive dependencies, so I could have in my sources.list something like:
and be completely sure that the only thing I would ever get from non-free would be the firmware for my NIC and those things which it directly depends on. Of course things would actually be stored in the usual pool structure so the only overhead would be the many tiny Packages files.
I'm not really sure where I would even start with implementing such a thing though...