summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/it/javascript-trap.html
blob: be75529a6e7638ef6e09b139107c91874f57f9f6 (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
<!--#set var="PO_FILE"
 value='<a href="/philosophy/po/javascript-trap.it.po">
 https://www.gnu.org/philosophy/po/javascript-trap.it.po</a>'
 --><!--#set var="ORIGINAL_FILE" value="/philosophy/javascript-trap.html"
 --><!--#set var="DIFF_FILE" value="/philosophy/po/javascript-trap.it-diff.html"
 --><!--#set var="OUTDATED_SINCE" value="2019-02-21" -->

<!--#include virtual="/server/header.it.html" -->
<!-- Parent-Version: 1.86 -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>La trappola JavaScript</title>

<!--#include virtual="/philosophy/po/javascript-trap.translist" -->
<!--#include virtual="/server/banner.it.html" -->
<!--#include virtual="/server/outdated.it.html" -->
<h2>La trappola JavaScript</h2>

<p>di <a href="http://www.stallman.org/">Richard Stallman</a></p>

<p><strong>Forse ogni giorno eseguite software non libero senza rendervene
conto, attraverso il vostro web browser.</strong></p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<blockquote>
<p>Per i webmaster: ci sono <a
href="/software/librejs/free-your-javascript.html">molti modi</a> di
indicare la licenza dei programmi JavaScript in un sito.</p>
</blockquote>

<p>Nella comunità del software libero, l'idea che <a
href="/philosophy/free-software-even-more-important.html"> i programmi non
liberi maltrattino i propri utenti</a> è familiare. Alcuni di noi difendono
la libertà rifiutandosi categoricamente di installare software proprietario;
molti altri considerano la non-libertà un punto negativo per il programma.</p>

<p>Molti utenti sono a conoscenza del fatto che questo problema si applica ai
plug-in che i browser offrono di installare, visto che possono essere sia
liberi che non liberi. Ma i browser eseguono altri programmi non liberi per
i quali non vi chiedono il permesso o vi avvisano: i programmi che le pagine
web contengono o includono da altri siti. Questi programmi sono spesso
scritti in JavaScript, anche se alle volte sono scritti in altri linguaggi.</p>

<p>JavaScript (ufficialmente ma raramente chiamato ECMAScript) era usato un
tempo per vari fronzoli non essenziali nelle pagine web come effetti visuali
di navigazione. Era quindi accettabile considerare questi come una mera
estensione del linguaggio HTML più che come software vero e proprio, e così
ignorare il problema.</p>

<p>Alcuni siti continuano ad usare JavaScript in quella maniera, mentre molti
lo usano per grandi programmi che svolgono operazioni complesse. Per
esempio, Google Docs prova a scaricare nella vostra macchina un programma
JavaScript che pesa mezzo megabyte e talmente compresso da poterlo chiamare
Obfuscript perché mancante di commenti e di spazi e popolato da metodi dai
nomi lunghi un singolo carattere. Il codice sorgente di un programma è la
forma preferita per poterlo modificare; il codice compresso non è codice
sorgente, ed il vero codice sorgente di questo programma non è accessibile
dall'utente.</p>

<p>Oltre ad essere non liberi, molti di questi programmi sono malware perché <a
href="http://github.com/w3c/fingerprinting-guidance/issues/8">spiano gli
utenti</a>. Inoltre alcuni siti usano servizi che  registrano <a
href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">tutte
le azioni dell'utente mentre visita pagina</a>. Questi servizi in teoria
"eliminano" i dati sensibili che il sito non dovrebbe raccogliere, ma anche
se questo fosse vero il problema comunque rimane: questi servizi forniscono
al sito informazioni che esso non dovrebbe ricevere.</p>

<p>I browser di solito non vi comunicano di aver caricato dei programmi
JavaScript. Alcuni browser forniscono un'opzione per disabilitare JavaScript
del tutto, ma anche se siete a conoscenza di questo problema, identificare e
bloccare i programmi non banali e non liberi non è facile e persino nella
comunità del software libero la maggior parte degli utenti non ne è a
conoscenza, anche per via del silenzio dei browser.</p>

<p>È possibile rilasciare un programma JavaScript come software libero se si
distribuisce il suo codice sorgente sotto una licenza libera. Se il
programma è indipendente (nel senso che il suo funzionamento e scopo non
dipendono dalla pagina che lo conteneva) questo va bene: lo si può copiare
su un file nel proprio computer, modificarlo, ed eseguirlo in un browser. Ma
questo caso non è comune.</p>

<p>Nel caso più comune, i programmi JavaScript sono fatti per funzionare in una
specifica pagina o uno specifico sito, e a sua volta la pagina, o il sito,
funziona solo se questi sono disponibili. Allora si ha un altro problema:
anche se il codice sorgente del programma è disponibile, i browser non
offrono un modo di eseguire la vostra versione modificata del programma al
posto dell'originale quando visitate una pagina. L'effetto è comparabile
alla tivoizzazione, anche se non così difficile da sormontare.</p>

<p>JavaScript non è l'unico linguaggio che i siti web usano per i programmi
inviati agli utenti. Flash offre di programmare attraverso una variante
estesa di JavaScript; se arriveremo ad avere uno strumento libero per Flash
abbastanza completo, dovremo comunque scontrarci con il problema dei
programmi Flash non liberi. Silverlight è in procinto di porre un problema
simile a Flash e se possibile peggiore, visto che Microsoft lo usa come
piattaforma per codec non liberi. Un sostituto libero per Silverlight non
può funzionare per il mondo libero a meno che dei codec liberi non vengano
inclusi con esso.</p>

<p>Anche le applet Java vengono eseguite dal browser e pongono simili
problematiche. In generale, ogni sistema di applet pone simili
problematiche. Avere un ambiente di esecuzione libero per un'applet ci porta
a scontrarci con questo problema.</p>

<p>Teoricamente è possibile programmare in HTML e CSS, ma in pratica è
difficile riuscire a fare qualcosa di significativo usando la limitata
programmabilità disponibile con queste due tecnologie. Questi programmi
dovrebbero essere liberi, ma il CSS non è comunque un problema (nel 2016)
per la libertà degli utenti.</p>

<p>C'è un movimento forte che chiede ai siti web di comunicare solo tramite
formati e protocolli liberi (alcuni dicono &quot;aperti&quot;), ovvero la
cui documentazione viene pubblicata e che ognuno può liberamente
implementare. Con la presenza di programmi nelle pagine web, il criterio è
necessario ma non sufficiente. Lo stesso JavaScript, come formato, è libero,
e l'uso di JavaScript in un sito web non è necessariamente negativo ma, come
abbiamo già visto, nemmeno necessariamente positivo. Quando il sito
trasmette il programma all'utente, non è abbastanza che il linguaggio in cui
questo è stato scritto sia documentato e libero; anche il programma deve
essere libero. &ldquo;Solo i programmi liberi trasmessi all'utente&ldquo;
possono soddisfare il criterio di condotta appropriata per i siti web.</p>

<p>Caricare ed eseguire programmi non liberi silenziosamente è uno degli
svariati problemi posti dalle &quot;applicazioni web&quot;. Il termine
&quot;applicazione web&quot; è stato concepito per ignorare la distinzione
fondamentale tra software trasmesso all'utente e software in esecuzione su
un server. Può fare riferimento ad un programma client specializzato che
lavora a stretto contatto con un programma server specializzato. I lati
client e server sollevano diverse questioni etiche anche quando sono così
reciprocamente integrati da poter costituire ai fatti un singolo
programma. Questo articolo fa riferimento solamente a ciò che riguarda
software lato client. Ci occuperemo del lato server separatamente.</p>

<p>In termini pratici, come possiamo affrontare il problema del software
JavaScript (non banale) non libero nei siti web? Il primo passo è evitare di
eseguirlo. </p>

<p>Che cosa vuol dire &quot;non banale&quot;? Dipende da caso a caso ed è
quindi preferibile definire un criterio semplice che offre buoni risultati
piuttosto che cercare una risposta esatta.</p>
<p>
La nostra politica provvisoria considera un programma JavaScript non banale
se: </p>

<ul>
  <li>effettua una richiesta AJAX oppure viene caricato assieme ad altri script
che effettuano una richiesta AJAX,</li>

  <li>carica uno script esterno dinamicamente oppure viene caricato assieme ad
altri script che lo fanno,</li>

  <li>definisce funzioni o metodi e carica uno script esterno (da html) o viene
caricato esternamente a sua volta,</li>
  
  <li>usa costrutti dinamici di JavaScript che sono difficili da analizzare senza
interpretare il programma o viene caricato assieme ad altri script che usano
tali costrutti. Questi costrutti sono:
    <ul>
      <li>l'uso della funzione eval,</li>
      <li>la chiamata di metodi con notazione a parentesi quadre,</li>
      <li>l'uso di qualsiasi costrutto diverso da una stringa letterale con alcuni
metodi (Obj.write, Obj.createElement, ...).</li>
    </ul>
  </li>
</ul>

<p>Come facciamo a determinare se il codice JavaScript è libero? In un <a
href="/licenses/javascript-labels.html">ulteriore articolo</a> proponiamo
metodo con cui un programma JavaScript non banale in una pagina web può
comunicare l'indirizzo web del suo codice sorgente e la sua licenza tramite
commenti stilizzati.</p>

<p>Infine, è necessario che noi modifichiamo i browser liberi per rilevare e
bloccare JavaScript non libero nelle pagine web. Il programma <a
href="/software/librejs/">LibreJS</a> rileva JavaScript non banale e libero
nelle pagine che visitate e lo blocca. LibreJS è parte di IceCat ed è
disponibile come estensione per Firefox.</p>

<p>Gli utenti dei browser hanno anche bisogno di un modo facile per
<em>sostituire</em> il codice JavaScript di una pagina con il proprio. Il
codice specificato può essere una modifica parziale o totale del programma
JavaScript libero trovato nella pagina. Greasemonkey si avvicina ad essere
adatto a questo scopo ma non lo è del tutto, visto che non garantisce che il
codice venga modificato prima dell'esecuzione del programma. Usare un proxy
locale funziona, ma è troppo scomodo per poter essere una soluzione
pratica. Abbiamo bisogno di creare sia una soluzione affidabile e facile da
usare che dei siti per poter condividere le modifiche. Il progetto GNU
vorrebbe consigliare dei siti che sono dedicati esclusivamente alle
modifiche libere.</p>

<p>Queste funzionalità permetteranno di includere programmi JavaScript liberi
all'interno di una pagina web in maniera pratica. JavaScript cesserà di
essere un ostacolo per la libertà più di quanto lo siano oggigiorno C e
Java. Saremo capaci di respingere ed addirittura sostituire i programmi
JavaScript non banali e non liberi proprio come facciamo con i programmi che
vengono convenzionalmente installati. La nostra campagna per spingere i siti
a liberare il proprio JavaScript può avere inizio.</p>

<p>Nel frattempo, c'è un caso in cui è accettabile eseguire del JavaScript non
libero: per inviare una lamentela agli operatori del sito, chiedendo loro di
liberare o altrimenti rimuovere il codice JavaScript dal loro sito. Vi prego
di non esitare ad abilitare JavaScript temporaneamente per questo
scopo&mdash;non dimenticate di disattivarlo una volta finito.</p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<blockquote>
<p>Per i webmaster: ci sono <a
href="/software/librejs/free-your-javascript.html">molti modi</a> di
indicare la licenza dei programmi JavaScript in un sito.</p>
</blockquote>

<p><strong>Grazie a:</strong> <a href="/people/people.html#mattlee">Matt
Lee</a> e <a href="http://ejohn.org">John Resig</a> per il loro aiuto nel
definire il criterio da noi proposto ed a David Parunakian per avermi messo
a conoscenza del problema.</p>

<div class="translators-notes">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
 </div>
</div>

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

<p>Per informazioni su FSF e GNU rivolgetevi, possibilmente in inglese, a <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Ci sono anche <a
href="/contact/">altri modi di contattare</a> la FSF. Inviate segnalazioni
di link non funzionanti e altri suggerimenti relativi alle pagine web a <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 submitting translations of
        our web pages, see <a
        href="/server/standards/README.translations.html">Translations
        README</a>. -->
Le traduzioni italiane sono effettuate ponendo la massima attenzione ai
dettagli e alla qualità, ma a volte potrebbero contenere imperfezioni. Se ne
riscontrate, inviate i vostri commenti e suggerimenti riguardo le traduzioni
a <a
href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>
oppure contattate direttamente il <a
href="http://savannah.gnu.org/projects/www-it/">gruppo dei traduttori
italiani</a>.<br/>Per informazioni su come gestire e inviare traduzioni
delle nostre pagine web consultate la <a
href="/server/standards/README.translations.html">Guida alle traduzioni</a>.</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; 2009-2013, 2016, 2017, 2018 Richard Stallman</p>

<p>Questa pagina è distribuita secondo i termini della licenza <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/">Creative Commons
Attribuzione - Non opere derivate 4.0 internazionale</a> (CC BY-ND 4.0).</p>

<!--#include virtual="/server/bottom-notes.it.html" -->
<div class="translators-credits">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
Tradotto da membri del gruppo dei traduttori italiani GNU. Revisioni di
Andrea Pescetti.</div>

<p class="unprintable"><!-- timestamp start -->
Ultimo Aggiornamento:

$Date: 2019/12/30 12:08:30 $

<!-- timestamp end -->
</p>
</div>
</div>
<!-- for class="inner", starts in the banner include -->
</body>
</html>