summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/en/wwworst-app-store.html
blob: ea055afe19a75c6dea2cd4d0d7e48bc2da4ed6f7 (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
<!--#include virtual="/server/header.html" -->
<!-- Parent-Version: 1.96 -->
<!-- This page is derived from /server/standards/boilerplate.html -->
<!--#set var="TAGS" value="essays cultural evils" -->
<!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
<title>The WWWorst App Store
- GNU Project - Free Software Foundation</title>
<style type="text/css" media="print,screen"><!--
#content p { margin: .5em 0 0; }
--></style>
 <!--#include virtual="/philosophy/po/wwworst-app-store.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>The WWWorst App Store</h2>

<address class="byline">by Alexandre Oliva</address>

<p>Picture the most abusive app store.</p>

<p>Programs in it are meant to run on your own computer.</p>

<p>However, you have to be online to run them.</p>

<p>Every time you start them, they contact the app store.</p>

<p>If there is an updated version, it's installed automatically, no
questions asked.  You'd rather run the earlier version?  Tough.</p>

<p>If the app store decides you're no longer welcome, the program won't 
start any more.</p>

<p>If the app store servers are offline, or if you are, it won't start
either.</p>

<div class="important">
<p>Programs in this app store must also hold your data in the app store's
servers.</p>

<p>If the program won't start, you can't get to the data on the servers
any more.</p>

<p>You may have downloaded backups of your data, but you'd have to figure
out how to decode them without the program.</p>
</div>

<p>Sounds like a nightmare?  It is.  But it's also very real.</p>

<p>Well-known app stores are approaching this level of nastiness.</p>

<p>But they are just catching up with the real thing.</p>

<p>The most abusive app store is the business-driven perversion of the
old user-empowering distributed hypertext system called &ldquo;the Web.&rdquo;</p>

<p>Users have been encouraged to adopt &ldquo;web apps&rdquo; for much of their
computing, paving the way for other app stores to follow suit.</p>

<div class="important">
<p>&ldquo;Web apps&rdquo; are most often distributed as JavaScript (though Java and
Flash have served similar purposes), automatically installed and
executed on your browser.</p>

<p>But the problem is not that they're in JavaScript, or that it's your
browser that runs them.  It's that:</p>

<ul>
<li>you don't have control over what the program does;</li>
<li>you don't have control over when you can run it;</li>
<li>you don't have control over your own data.</li>
</ul>

<p>The app store owner takes all that control away from you, thereby
gaining control over you.</p>

<p>You lose when the JavaScript code is nonfree software.<br />
<a href="/philosophy/javascript-trap.html">
https://www.gnu.org/philosophy/javascript-trap.html</a></p>

<p>But you also lose when it is (nominally) free software!</p>
</div>

<p>When the app / web site has so much control over what runs on
your computer, the effect &ldquo;is equivalent to using a nonfree program
with surveillance features and a universal back door.&rdquo; <br />
<a href="/philosophy/network-services-arent-free-or-nonfree.html">
https://www.gnu.org/philosophy/network-services-arent-free-or-nonfree.html</a> <br />

<a href="/philosophy/who-does-that-server-really-serve.html">
https://www.gnu.org/philosophy/who-does-that-server-really-serve.html</a> </p>

<p>The owner gets all the freedom, and you, the user, get none.</p>

<p>That's not a self-respectful way to do your computing.</p>

<p>It invades your privacy, it keeps you and your data hostage, it takes
away your agency and your freedom when it comes to your digital life.</p>

<hr class="column-limit" />

<p>The web used to be a wonderful way to share information.</p>

<p>Web apps and mandatory JavaScript have turned it into the worst app
store.</p>

<p>It is time to separate the WWWonderful from the WWWorst practices.</p>

<p>Here are some ways to help:</p>

<ul>
<li>request web sites that require JavaScript execution to offer either:
  <ul>
  <li>alternate means of access to information they publish, or</li>
  <li>alternate means of delivery for their apps;</li>
  </ul>
</li>

<li>promote free browser extensions that control JavaScript execution;<br />
<a href="/software/librejs/">https://www.gnu.org/software/librejs/</a></li>

<li>beware of apps that are mere front ends for SaaSS;<br />
<a href="/philosophy/who-does-that-server-really-serve.html">
https://www.gnu.org/philosophy/who-does-that-server-really-serve.html</a></li>

<li>demand software you use to be delivered in freedom-respecting ways;</li>

<li>promote hypertext systems that do not grant servers control over users.<br />
<a href="https://en.wikipedia.org/wiki/Gemini_(protocol)">
https://en.wikipedia.org/wiki/Gemini_(protocol)</a><br />
<a href="https://en.wikipedia.org/wiki/Gopher_(protocol)">
https://en.wikipedia.org/wiki/Gopher_(protocol)</a></li>
</ul>

<p>More generally:</p>

<ul>
<li>as a self-respecting user, reject the abusive practices whenever you can;<br />
<a href="/philosophy/saying-no-even-once.html">
https://gnu.org/philosophy/saying-no-even-once.html</a></li>

<li>discourage automatic execution of downloaded code;<br />
<a href="https://www.fsfla.org/blogs/lxo/pub/who-is-afraid-of-spectre-and-meltdown.en.html">
https://www.fsfla.org/blogs/lxo/pub/who-is-afraid-of-spectre-and-meltdown.en.html</a></li>

<li>as a network service operator, set a user-respecting example;<br />
<a href="/philosophy/network-services-arent-free-or-nonfree.html">
https://www.gnu.org/philosophy/network-services-arent-free-or-nonfree.html</a></li>

<li>spread awareness of the problem, and advice on solving and avoiding it.<br />
<a href="/help/help-javascript.html">
https://www.gnu.org/help/help-javascript.html</a></li>
</ul>

<p>Now, if you wish your site to give its users a taste of how the
WWWorst app store feels to us, add to web pages you control the
following JavaScriptlet:</p>

<p class="emph-box">
document.body.textContent = 'Please disable JavaScript to view this site.'</p>

<p>If you wish, make &ldquo;disable JavaScript&rdquo; a link to this article.</p>

<hr class="column-limit" />

<p>Thanks to Richard Stallman for the inspiration to write about this
issue, and for the encouragement to publish it.</p>

<p><em>2021-04-01 update:</em>&nbsp; thanks to KE0VVT for letting me know that
textContent can't have links; you need innerHTML for that.</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; 2021 Alexandre Oliva</p>

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

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

<p class="unprintable">Updated:
<!-- timestamp start -->
$Date: 2021/09/10 11:28:41 $
<!-- timestamp end -->
</p>
</div>
</div><!-- for class="inner", starts in the banner include -->
</body>
</html>