summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/en/applying-free-sw-criteria.html
blob: 6fd700096a2f8007ce94788cddafb69a718e950b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
<!--#include virtual="/server/header.html" -->
<!-- Parent-Version: 1.96 -->
<!-- This page is derived from /server/standards/boilerplate.html -->
<!--#set var="TAGS" value="essays aboutfs practice" -->
<!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
<title>Applying the Free Software Criteria
- GNU Project - Free Software Foundation</title>
 <!--#include virtual="/philosophy/po/applying-free-sw-criteria.translist" -->
<!--#include virtual="/server/banner.html" -->
<!--#include virtual="/philosophy/ph-breadcrumb.html" -->
<!--GNUN: OUT-OF-DATE NOTICE-->
<!--#include virtual="/server/top-addendum.html" -->
<div class="article reduced-width">
<h2>Applying the Free Software Criteria</h2>

<address class="byline">by Richard Stallman</address>

<p>The four essential freedoms provide the criteria for <a
href="/philosophy/free-sw.html">whether a particular piece of code is
free/libre</a> (i.e., respects its users' freedom).  How should we
apply them to judge whether a software package, an operating system, a
computer, or a web page is fit to recommend?</p>

<p>Whether a program is free affects first of all our decisions about our
private activities: to maintain our freedom, we need to reject the
programs that would take it away.  However, it also affects what we
should say to others and do with others.</p>

<p>A nonfree program is an injustice.  To distribute a nonfree program,
to recommend a nonfree program to other people, or more generally
steer them into a course that leads to using nonfree software, means
leading them to give up their freedom.  To be sure, leading people to
use nonfree software is not the same as installing nonfree software in
their computers, but we should not lead people in the wrong direction.</p>

<p>At a deeper level, we must not present a nonfree program as a solution
because that would grant it legitimacy.  Nonfree software is a
problem; <a href="/philosophy/compromise.html"> to present it as a
solution denies the existence of the problem</a>.</p>

<p>This article explains how we apply the basic free software criteria to
judging various kinds of things, so we can decide whether to recommend
them or not.</p>

<h3>Software packages</h3>

<p>For a software package to be free, all the code in it must be free.
But not only the code.  Since documentation files including manuals,
README, change log, and so on are essential technical parts of a
software package, <a href="/philosophy/free-doc.html">they must be
free as well</a>.</p>

<p>A software package is typically used alongside many other packages,
and interacts with some of them.  Which kinds of interaction with
nonfree programs are ethically acceptable?</p>

<p>We developed GNU so that there would be a free operating system,
because in 1983 none existed.  As we developed the initial components
of GNU, in the 1980s, it was inevitable that each component depended
on nonfree software.  For instance, no C program could run without a
nonfree C compiler until GCC was working, and none could run without
Unix libc until glibc was working.  Each component could run only
on nonfree systems, because all systems were nonfree.</p>

<p>After we released a component that could run on some nonfree systems,
users ported it to other nonfree systems; those ports were no worse,
ethically, than the platform-specific code we needed to develop these
components, so we incorporated their patches.</p>

<p>When the kernel, Linux, was freed in 1992, it filled the last gap in
the GNU system.  (Initially, in 1991, Linux had been distributed under
a nonfree license.)  The combination of GNU and Linux made a complete
free operating system&mdash;<a
href="/gnu/linux-and-gnu.html">GNU/Linux</a>.</p>

<p>At that point, we could have deleted the support for nonfree
platforms, but we decided not to.  A nonfree system is an injustice,
but it's not our fault a user runs one.  Supporting a free program on
that system does not compound the injustice.  And it's useful, not
only for users of those systems, but also for attracting more people
to contribute to developing the free program.</p>

<p>However, a nonfree program that runs on top of a free program is a
completely different issue, because it leads users to take a step away
from freedom.  In some cases we disallow this: for instance, <a
href="https://gcc.gnu.org/ml/gcc/2014-01/msg00247.html">GCC prohibits
nonfree plug-ins</a>.  When a program permits nonfree add-ons, it
should at least not steer people towards using them.  For instance, we
choose LibreOffice over OpenOffice because OpenOffice suggests use of
nonfree add-ons, while LibreOffice shuns them.  We developed <a
href="https://directory.fsf.org/wiki/IceCat">IceCat</a> initially to
avoid proposing the nonfree add-ons suggested by Firefox.</p>

<p>In practice, if the IceCat package explains how to run IceCat on
MacOS, that will not lead people to run MacOS.  But if it talked about
some nonfree add-on, that would encourage IceCat users to install the
add-on.  Therefore, the IceCat package, including manuals and web
site, shouldn't talk about such things.</p>

<p>Sometimes a free program and a nonfree program interoperate but
neither is based on the other.  Our rule for such cases is that if the
nonfree program is very well known, we should tell people how to use
our free program with it; but if the proprietary program is obscure,
we should not hint that it exists.  Sometimes we support
interoperation with the nonfree program if that is installed, but
avoid telling users about the possibility of doing so.</p>

<p>We reject &ldquo;enhancements&rdquo; that would work only on a nonfree system.
Those would encourage people to use the nonfree system instead of GNU,
scoring an own-goal.</p>

<h3>GNU/Linux distros</h3>

<p>After the liberation of Linux in 1992, people began developing
GNU/Linux distributions (&ldquo;distros&rdquo;).  Only a few distros
are <a href="/distros">entirely free software</a>.</p>

<p>The rules for a software package apply to a distro too: an ethical
distro must contain only free software and steer users only towards
free software.  But what does it mean for a distro to
&ldquo;contain&rdquo; a particular software package?</p>

<p>Some distros install programs from binary packages that are part of
the distro; others build each program from upstream source, and
literally <em>contain</em> only the recipes to download and build it.
For issues of freedom, how a distro installs a given package is not
significant; if it presents that package as an option, or its web site
does, we say it &ldquo;contains&rdquo; that package.</p>

<p>The users of a free system have control over it, so they can install
whatever they wish.  Free distros provide general facilities with
which users can install their own programs and their modified versions
of free programs; they can also install nonfree programs.  Providing
these general facilities is not an ethical flaw in the distro, because
the distro's developers are not responsible for what users get and
install on their own initiative.</p>

<p>The developers become responsible for installation of nonfree software
when they steer the users toward a nonfree program&mdash;for
instance, by putting it in the distro's list of packages, or
distributing it from their server, or presenting it as a solution
rather than a problem.  This is the point where most GNU/Linux
distros have an ethical flaw.</p>

<p>People who install software packages on their own have a certain level
of sophistication: if we tell them &ldquo;Baby contains nonfree code,
but Gbaby is free,&rdquo; we can expect them to take care to remember
which is which.  But distros are recommended to ordinary users who
would forget such details.  They would think, &ldquo;What name did
they say I should use?  I think it was Baby.&rdquo;</p>

<p>Therefore, to recommend a distro to the general public, we insist that
its name not be similar to a distro we reject, so our message
recommending only the free distro can be reliably transmitted.</p>

<p>Another difference between a distro and a software package is how
likely it is for nonfree code to be added.  The developers of a
program carefully check the code they add.  If they have decided to
make the program free, they are unlikely to add nonfree code.
There have been exceptions, including the very harmful case of the
&ldquo;binary blobs&rdquo; that were added to Linux, but they are a
small fraction of the free programs that exist.</p>

<p>By contrast, a GNU/Linux distro typically contains thousands of
packages, and the distro's developers may add hundreds of packages a
year.  Without a careful effort to avoid packages that contain some
nonfree software, some will surely creep in.  Since the free distros
are few in number, we ask the developers of each free distro to make a
commitment to keep the distro free software by removing any nonfree
code or malware, as a condition for listing that distro.  See the <a
href="/distros/free-system-distribution-guidelines.html">GNU free
system distribution guidelines</a>.</p>

<p>We don't ask for such promises for free software packages: it's not
feasible, and fortunately not necessary.  To get promises from the
developers of 30,000 free programs to keep them free would avoid a few
problems, at the cost of much work for the FSF staff; in addition,
most of those developers have no relationship with the GNU Project and
might have no interest in making us any promises.  So we deal with
the rare cases that change from free to nonfree, when we find out
about them.</p>

<h3>Peripherals</h3>

<p>A computer peripheral needs software in the computer&mdash;perhaps a
driver, perhaps firmware to be loaded by the system into the
peripheral to make it run.  Thus, a peripheral is acceptable to use
and recommend if it can be used from a computer that has no nonfree
software installed&mdash;the peripheral's driver, and any firmware that
the system needs to load into it, are free.</p>

<p>It is simple to check this: connect the peripheral to a computer
running a totally free GNU/Linux distro and see if it works.  But most
users would like to know <em>before</em> they buy the peripheral, so
we list information about many peripherals
in <a href="https://www.h-node.org/">h-node.org</a>, a hardware
database for fully free operating systems.</p>

<h3>Computers</h3>

<p>A computer contains software at various levels.  On what criterion
should we certify that a computer &ldquo;Respects Your Freedom&rdquo;?</p>

<p>Obviously the operating system and everything above it must be free.
In the 90s, the startup software (BIOS, then) became replaceable, and
since it runs on the CPU, it is the same sort of issue as the
operating system.  Thus, programs such as firmware and drivers that
are installed in or with the system or the startup software must be free.</p>

<p>If a computer has hardware features that require nonfree drivers or
firmware installed with the system, we may be able to endorse it.  If
it is usable without those features, and if we think most people won't
be led to install the nonfree software to make them function, then we
can endorse it.  Otherwise, we can't.  This will be a judgment call.</p>

<p>A computer can have modifiable preinstalled firmware and microcode at
lower levels.  It can also have code in true read-only memory.  We
decided to ignore these programs in our certification criteria today,
because otherwise no computer could comply, and because firmware that
is not normally changed is ethically equivalent to circuits.  So our
certification criteria cover only the code that runs on the computer's
main processor and is not in true read-only memory.  When and as free
software becomes possible for other levels of processing, we will
require free software at those levels too.</p>

<p>Since certifying a product is active promotion of it, we insist
that the seller support us in return, by talking
about <a href="/philosophy/free-software-even-more-important.html">free
software</a> rather
than <a href="/philosophy/open-source-misses-the-point.html">open
source</a> and referring to the combination of GNU and Linux
as <a href="/gnu/linux-and-gnu.html">&ldquo;GNU/Linux&rdquo;</a>.  We
have no obligation to actively promote projects that won't recognize
our work and support our movement.</p>

<p>See <a href="https://www.fsf.org/resources/hw/endorsement/criteria">our
certification criteria</a>.</p>

<h3>Web pages</h3>

<p>Nowadays many web pages contain complex JavaScript programs and won't
work without them.  This is a harmful practice since it hampers users'
control over their computing.  Furthermore, most of these programs are
nonfree, an injustice.  Often the JavaScript code spies on the user.
<a href="/philosophy/javascript-trap.html">JavaScript has morphed into
a attack on users' freedom.</a></p>

<p>To address this problem, we have developed <a
href="/software/librejs">LibreJS</a>, an add-on for Firefox that
blocks nontrivial nonfree JavaScript code.  (There is no need to block
the simple scripts that implement minor user interface hacks.)  We ask
sites to please free their JavaScript programs and mark their licenses
for LibreJS to recognize.</p>

<p>Meanwhile, is it ethical to link to a web page that contains a nonfree
JavaScript program?  If we were totally unyielding, we would link only
to free JavaScript code.  However, many pages do work even when their
JavaScript code is not run.  Also, you will most often encounter nonfree
JavaScript in other ways besides following our links; to avoid it,
you must use LibreJS or disable JavaScript.  So we have decided to go
ahead and link to pages that work without nonfree JavaScript, while urging
users to protect themselves from nonfree JavaScript in general.</p>

<p>However, if a page can't do its job without running the nonfree
JavaScript code, linking to it undeniably asks people to run that
nonfree code.  On principle, we do not link to such pages.</p>

<h3>Conclusion</h3>

<p>Applying the basic idea that <em>software should be free</em> to
different situations leads to different practical policies.  As new
situations arise, the GNU Project and the Free Software Foundation
will adapt our freedom criteria so as to lead computer users towards
freedom, in practice and in principle.  By recommending only
freedom-respecting programs, distros, and hardware products, and
stating your policy, you can give much-needed support to the free
software movement.</p>
</div>

</div><!-- for id="content", starts in the include above -->
<!--#include virtual="/server/footer.html" -->
<div id="footer" role="contentinfo">
<div class="unprintable">

<p>Please send general FSF &amp; GNU inquiries to
<a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.
There are also <a href="/contact/">other ways to contact</a>
the FSF.  Broken links and other corrections or suggestions can be sent
to <a href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>

<p><!-- TRANSLATORS: Ignore the original text in this paragraph,
        replace it with the translation of these two:

        We work hard and do our best to provide accurate, good quality
        translations.  However, we are not exempt from imperfection.
        Please send your comments and general suggestions in this regard
        to <a href="mailto:web-translators@gnu.org">
        &lt;web-translators@gnu.org&gt;</a>.</p>

        <p>For information on coordinating and contributing translations of
        our web pages, see <a
        href="/server/standards/README.translations.html">Translations
        README</a>. -->
Please see the <a
href="/server/standards/README.translations.html">Translations
README</a> for information on coordinating and contributing translations
of this article.</p>
</div>

<!-- Regarding copyright, in general, standalone pages (as opposed to
     files generated as part of manuals) on the GNU web server should
     be under CC BY-ND 4.0.  Please do NOT change or remove this
     without talking with the webmasters or licensing team first.
     Please make sure the copyright date is consistent with the
     document.  For web pages, it is ok to list just the latest year the
     document was modified, or published.
     
     If you wish to list earlier years, that is ok too.
     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
     years, as long as each year in the range is in fact a copyrightable
     year, i.e., a year in which the document was published (including
     being publicly visible on the web or in a revision control system).
     
     There is more detail about copyright years in the GNU Maintainers
     Information document, www.gnu.org/prep/maintain. -->

<p>Copyright &copy; 2015, 2021 Richard Stallman</p>

<p>This page is licensed under a <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/">Creative
Commons Attribution-NoDerivatives 4.0 International License</a>.</p>

<!--#include virtual="/server/bottom-notes.html" -->

<p class="unprintable">Updated:
<!-- timestamp start -->
$Date: 2021/09/05 07:59:44 $
<!-- timestamp end -->
</p>
</div>
</div><!-- for class="inner", starts in the banner include -->
</body>
</html>