summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/en/when-free-depends-on-nonfree.html
blob: a96341228d916e266366ad61fd8f398eca0cfe0a (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
<!--#include virtual="/server/header.html" -->
<!-- Parent-Version: 1.96 -->
<!-- This page is derived from /server/standards/boilerplate.html -->

<!--#set var="TAGS" value="essays aboutfs free-nonfree" -->
<!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
<title>When Free Software Depends on Nonfree - GNU Project - Free Software Foundation</title>
 <!--#include virtual="/philosophy/po/when-free-depends-on-nonfree.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>When Free Software Depends on Nonfree</h2>

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

<p>When a program is free software (free as in freedom), that means it 
gives users <a 
href="/philosophy/free-sw.html">the four freedoms</a>,
so that they control what the program does. In most cases, that is 
sufficient for the program's distribution to be ethical; but not 
always. There are additional problems that can arise in specific 
circumstances. This article describes a subtle problem, where 
upgrading the free program requires using a nonfree program.</p>

<p>If the free program's use depends unavoidably on another program which
is nonfree, we say that the free program is &ldquo;trapped.&rdquo; Its code is
free software, and you may be able to copy pieces of its code into
other free programs with good, ethical results. But you shouldn't
<em>run</em> the trapped program, because that entails surrendering
your freedom to the other nonfree program.</p>

<p>Someone who upholds the principles of free software would not knowingly
make a program that is trapped. However, many free programs are
developed by people or companies that don't particularly support these
principles, or don't understand the problem.</p>

<p>Dependence on a nonfree program can take various forms. The most
basic form is when the programming language used has no free
implementation. The first programs I wrote for the GNU system in the
1980s, including GNU Emacs, GDB and GNU Make, had to be compiled with
AT&amp;T's nonfree C compiler, because there was no free C compiler until
I wrote GCC. Fortunately, this kind of problem is mostly a thing of
the past; we now have free compilers and platforms for just about all
the languages anyone uses for writing free software.</p>

<p>We can release the program from this kind of trap by translating it to
another language, or by releasing a free implementation of the
language it's written in. Thus, when a full free Java implementation
became available, that released all the free Java programs from the <a
href="/philosophy/java-trap.html">Java Trap</a>.</p>

<p>This kind of dependence is conceptually simple because it stems from
the situation at one given instant in time. At time T, free program P
won't run without nonfree programming platform Q. To borrow a term
from linguistics, this relationship is &ldquo;synchronic.&rdquo;</p>

<p>More recently, we have seen another kind of dependence in database
programs, where you can build and run any given version of the program
in the free world, but upgrading from version N to version N+1
requires a nonfree program.</p>

<p>This happens because the internal format of the database changes from
version N to version N+1. If you have been seriously using version N,
you probably have a large existing database in the version N format.
To upgrade to version N+1 of the database software, you need to
reformat that database.</p>

<p>If the way you are supposed to do this is by running a proprietary
database reformat program, or using the developer's service which is
SaaSS (<a
href="/philosophy/who-does-that-server-really-serve.html">Service as
a Software Substitute</a>),
the database software is trapped&mdash;but in a more subtle
way. Any single version of the database program can be used without
nonfree software or SaaSS. The problem arises when you try to keep
using the program for the long term, which entails upgrading it from
time to time; you can't use it this way without some nonfree software
or equivalent. This database program is trapped across time&mdash;we
could call it &ldquo;diachronically trapped,&rdquo; borrowing another term from
linguistics.</p>

<p>For example, the program OpenERP (since renamed &ldquo;Odoo&rdquo;),
though free, is diachronically
trapped. <a href="/software/health/">GNU Health</a>, our free package
for running a medical clinic, initially used OpenERP. In 2011, GNU
Health developer Luis Falcón discovered that upgrading to the next
version of OpenERP required sending the database (full of patients'
medical data) to OpenERP's server for reformatting. This is SaaSS:
it requires the user of GNU Health (a
clinic) to entrust its own computing and its data to the company
developer of OpenERP. Rather than bow down, Falcón rewrote GNU Health
to use <a href="https://www.tryton.org">Tryton</a> instead.</p>

<p>Using SaaSS is inherently equivalent to running a proprietary program
with snooping functionality and a universal back door. The service
could keep a copy of the databases that users reformat. Even if we
can trust the company that runs the service never to intentionally
show any form of the data to anyone, we can't be sure that it won't be
accessed by <a href="/philosophy/surveillance-vs-democracy.html">the
intelligence agencies of various countries</a> or security-breaking
crackers (<a
href="https://stallman.org/articles/on-hacking.html">please don't call
them &ldquo;hackers&rdquo;</a>).</p>

<p>When a program is diachronically trapped, releasing it from the trap
requires more than a one-time job of programming. Rather, the job has
to be done continually, each time there is a change in the data
format. Launching a project with a long-term commitment to continue
doing this is not easy. It may be easier to pressure the company to
stop trying to trap users&mdash;by rejecting the trapped program until it
does so. Given how difficult it is to free the program, you had
better stay away from it.</p>

<p>It is possible to try out a diachronically trapped free program
without nonfree software, but if you're going to do more than dabble,
you must steer clear of really using it. Both businesses and
individuals will find fine free alternatives that don't have such a
problem; all it takes to avoid the trap is to recognize it.</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; 2016, 2021 Free Software Foundation, Inc.</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 10:10:10 $
<!-- timestamp end -->
</p>
</div>
</div><!-- for class="inner", starts in the banner include -->
</body>
</html>