javascript-trap.html (17356B)
1 <!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" --> 2 3 <!--#include virtual="/server/header.it.html" --> 4 <!-- Parent-Version: 1.96 --> 5 <!-- This page is derived from /server/standards/boilerplate.html --> 6 <!--#set var="TAGS" value="essays licensing traps" --> 7 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" --> 8 9 <!-- This file is automatically generated by GNUnited Nations! --> 10 <title>La trappola JavaScript - Progetto GNU - Free Software Foundation</title> 11 12 <!--#include virtual="/philosophy/po/javascript-trap.translist" --> 13 <!--#include virtual="/server/banner.it.html" --> 14 <!--#include virtual="/philosophy/ph-breadcrumb.it.html" --> 15 <!--GNUN: OUT-OF-DATE NOTICE--> 16 <!--#include virtual="/server/top-addendum.it.html" --> 17 <div class="article reduced-width"> 18 <h2>La trappola JavaScript</h2> 19 20 <address class="byline">di <a href="https://www.stallman.org/">Richard Stallman</a></address> 21 22 <p><strong>Forse ogni giorno eseguite software non libero senza rendervene 23 conto, attraverso il vostro browser.</strong></p> 24 25 <!-- any links that used to point to the appendices should point to 26 free-your-javascript.html instead. --> 27 <div class="announcement"> 28 <hr class="no-display" /> 29 <p>Per i webmaster: ci sono <a 30 href="/software/librejs/free-your-javascript.html">molti modi</a> di 31 indicare la licenza dei programmi JavaScript in un sito.</p> 32 <hr class="no-display" /> 33 </div> 34 35 <p>La comunità del software libero è ben consapevole dell'idea che <a 36 href="/philosophy/free-software-even-more-important.html">i programmi non 37 liberi maltrattano gli utenti</a>. Alcuni di noi difendono la propria 38 libertà rifiutandosi categoricamente di installare software 39 proprietario. Molti altri considerano che la mancanza di libertà costituisce 40 un duro colpo al programma.</p> 41 42 <p>Molti utenti sono a conoscenza del fatto che questo problema si applica ai 43 plug-in che i browser offrono di installare, visto che possono essere sia 44 liberi che non liberi. Ma i browser eseguono altri programmi non liberi per 45 i quali non vi chiedono il permesso o vi avvisano: i programmi che le pagine 46 web contengono o includono da altri siti. Questi programmi sono spesso 47 scritti in JavaScript, anche se a volte sono scritti in altri linguaggi.</p> 48 49 <p>JavaScript (ufficialmente ma raramente chiamato ECMAScript) un tempo veniva 50 utilizzato per vari fronzoli non essenziali nelle pagine web, come effetti 51 visuali e di navigazione. Era quindi accettabile considerarli come una mera 52 estensione del linguaggio HTML più che come software vero e proprio, e così 53 ignorare il problema.</p> 54 55 <p>Alcuni siti continuano ad usare JavaScript in quella maniera, mentre molti 56 lo usano per grandi programmi che svolgono operazioni complesse. Per esempio 57 Google Docs prova a installare nel vostro browser un JavaScript che pesa 58 mezzo megabyte, in una forma compattata che potremmo chiamare 59 Obfuscript. Questa versione compattata è ottenuta dal codice sorgente, 60 togliendo gli spazi aggiuntivi che rendono il codice leggibile, le note 61 esplicative che lo rendono comprensibile, e sostituendo i nomi significativi 62 con brevi nomi arbitrari in modo che non si riesca a capire cosa vogliono 63 dire.</p> 64 65 <p>Una parte del significato di <a href="/philosophy/free-sw.html">software 66 libero</a> è che gli utenti devono poter aver accesso al codice sorgente del 67 programma. Il sorgente di un programma è la forma preferita dai 68 programmatori per modificare un programma: incluse spaziature tra i 69 caratteri, commenti e uso di nomi significativi. Il codice compattato è un 70 falso e inutile sostituto del codice sorgente: il vero sorgente di questi 71 programmi non viene reso disponibile agli utenti, quindi gli utenti non 72 possono capirlo; pertanto questi programmi non sono liberi.</p> 73 74 <p>Oltre ad essere non liberi, molti di questi programmi sono <em>malware</em> 75 perché <a 76 href="https://github.com/w3c/fingerprinting-guidance/issues/8">spiano gli 77 utenti</a>. Peggio ancora, alcuni siti usano servizi che registrano <a 78 href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">tutte 79 le azioni dell'utente mentre visita la pagina</a>. Questi servizi in teoria 80 “eliminano” i dati sensibili che il sito non dovrebbe raccogliere, ma anche 81 se fosse vero il problema comunque rimarrebbe: questi servizi inviano al 82 sito informazioni che non dovrebbe ricevere.</p> 83 84 <p>I browser di solito non vi informano di aver caricato dei programmi 85 JavaScript. Alcuni browser forniscono un'opzione per disabilitare JavaScript 86 del tutto, ma anche se siete a conoscenza di questo problema, identificare e 87 bloccare i programmi non banali e non liberi non è facile e persino nella 88 comunità del software libero la maggior parte degli utenti non ne è a 89 conoscenza, anche per via del silenzio dei browser.</p> 90 91 <p>Dobbiamo chiarire un possibile equivoco: il linguaggio JavaScript non è 92 intrinsecamente migliore o peggiore per la libertà degli utenti di qualsiasi 93 altro linguaggio. È possibile rilasciare un programma JavaScript come 94 software libero se si distribuisce il suo codice sorgente sotto una licenza 95 libera. Se il programma è indipendente (nel senso che il suo funzionamento e 96 scopo non dipendono dalla pagina che lo conteneva) va bene. Lo si può 97 copiare su un file nel proprio computer, modificarlo ed eseguirlo in un 98 browser. È anche possibile creare un pacchetto per installarlo, proprio come 99 altri programmi liberi, e invocarlo da shell. I JavaScript non hanno un 100 profilo morale diverso da quelle dei programmi C.</p> 101 102 <p>Parliamo di Trappola JavaScript quando un programma JavaScript viene fornito 103 in una pagina Web visitata dagli utenti. Questi programmi JavaScript sono 104 scritti per funzionare solamente in una particolare pagina o sito, e la 105 pagina o sito dipendono da loro per funzionare.</p> 106 107 <p>Supponiamo di copiare e modificare il codice JavaScript della pagina. Allora 108 sorge un altro problema: anche se il codice sorgente del programma è 109 disponibile, i browser non offrono un modo per poter eseguire la versione 110 modificata del programma al posto dell'originale quando viene visitata una 111 pagina. L'effetto è comparabile alla tivoizzazione anche se, in linea di 112 principio, meno difficile da superare.</p> 113 114 <p>JavaScript non è l'unico linguaggio che i siti web usano per i programmi 115 inviati agli utenti. Flash permetteva di programmare attraverso una variante 116 estesa di JavaScript, ma ormai è una tecnologia che sta 117 scomparendo. Silverlight è in procinto di porre un problema simile a Flash 118 ma peggiore, visto che Microsoft lo usa come piattaforma per codec non 119 liberi. Un sostituto libero per Silverlight non può funzionare per il mondo 120 libero a meno che dei codec liberi non vengano inclusi con esso.</p> 121 122 <p>Anche le applet Java vengono eseguite dal browser e pongono simili 123 problematiche. In generale, ogni sistema di applet pone simili 124 problemi. Avere un ambiente di esecuzione libero per un'applet ci porta solo 125 a scontrarci con questo problema.</p> 126 127 <p>Teoricamente è possibile programmare in HTML e CSS, ma in pratica questa 128 possibilità è limitata e poco pratica; anche solo riuscire a realizzarci 129 qualcosa richiede complessi smanettamenti. Questi programmi dovrebbero 130 essere liberi, ma il CSS non è comunque un problema per la libertà degli 131 utenti (nel 2019).</p> 132 133 <p>C'è un movimento forte che chiede ai siti web di comunicare solo tramite 134 formati e protocolli liberi (alcuni dicono “aperti”), ovvero la cui 135 documentazione viene pubblicata e ognuno può liberamente 136 implementare. Tuttavia la presenza di programmi JavaScript nelle pagine Web 137 rende insufficiente questo criterio. Lo stesso linguaggio JavaScript, come 138 formato, è libero, e l'uso di JavaScript in un sito web non è 139 necessariamente negativo. Ma come abbiamo già visto, può essere negativo se 140 il programma non è libero. Quando il sito trasmette il programma all'utente, 141 non basta che il linguaggio in cui questo è scritto sia documentato e 142 libero, anche il programma deve essere documentato e libero. “Trasmettere 143 all'utente solo programmi liberi” deve diventare uno dei criteri di un sito 144 web etico.</p> 145 146 <p>Caricare ed eseguire programmi non liberi silenziosamente è uno degli 147 svariati problemi posti dalle “applicazioni web”. Il termine “applicazioni 148 web” è stato concepito per ignorare la distinzione fondamentale tra software 149 trasmesso all'utente e software in esecuzione su un server. Può fare 150 riferimento ad un programma client specializzato che si esegue nel browser; 151 può fare riferimento a software specializzato del server; può fare 152 riferimento ad un programma client specializzato che lavora a stretto 153 contatto con un programma server specializzato. I lati client e server 154 sollevano questioni etiche differenti, anche quando siano così strettamente 155 integrati da poter sostenere che facciano parte di un singolo 156 programma. Questo articolo fa riferimento solamente a ciò che riguarda il 157 software lato client. Ci occupiamo del lato server separatamente.</p> 158 159 <p>In termini pratici, come possiamo affrontare il problema del software 160 JavaScript non libero e non banale nei siti web? Il primo passo è evitare di 161 eseguirlo.</p> 162 163 <p>Che cosa vuol dire “non banale”? Dipende da caso a caso ed è quindi 164 preferibile definire un criterio semplice che offre buoni risultati 165 piuttosto che cercare una risposta esatta.</p> 166 <p> 167 Attualmente il nostro criterio è considerare che un programma scritto in 168 JavaScript non è banale se soddisfa una delle seguenti condizioni:</p> 169 170 <ul> 171 <li>è caricato come script esterno (da un'altra pagina).</li> 172 173 <li>dichiara un array con più di 50 elementi.</li> 174 175 <li>definisce un'entità (funzione o metodo) che chiama qualcosa di diverso da 176 una primitiva.</li> 177 178 <li>definisce un'entità utilizzando più di tre costrutti condizionali e cicli.</li> 179 180 <li>il codice che si trova all'esterno di metodi e funzioni chiama qualsiasi 181 cosa tranne le primitive e le funzioni definite nelle righe precedenti.</li> 182 183 <li>il codice che si trova all'esterno di metodi e funzioni contiene più di tre 184 cicli o costrutti condizionali, sommati.</li> 185 186 <li>utilizza la funzione <b>eval</b>.</li> 187 188 <li>effettua chiamate Ajax.</li> 189 190 <li>utilizza la notazione a parentesi quadre per accedere alle proprietà di un 191 oggetto dinamico, in questo modo <b><em>object</em>[<em>property</em>]</b>.</li> 192 193 <li>modifica il DOM.</li> 194 195 <li>usa costrutti dinamici di JavaScript che sono difficili da analizzare senza 196 interpretare il programma, oppure viene caricato assieme ad altri script che 197 usano tali costrutti. Nello specifico, riguarda l'utilizzo di qualsiasi 198 elemento di costruzione diverso da una stringa di caratteri costante con 199 certi metodi (<b>Obj.write</b>, <b>Obj.createElement</b> e altri).</li> 200 </ul> 201 202 <p>Come facciamo a determinare se il codice JavaScript è libero? In un <a 203 href="/licenses/javascript-labels.html">ulteriore articolo</a> proponiamo un 204 metodo con cui un programma JavaScript non banale in una pagina web può 205 comunicare l'indirizzo web del suo codice sorgente e la sua licenza tramite 206 commenti formattati.</p> 207 208 <p>Infine, è necessario modificare i browser liberi per rilevare e bloccare 209 JavaScript non libero e non banale nelle pagine web. Il programma <a 210 href="/software/librejs/">LibreJS</a> rileva JavaScript non libero e non 211 banale nelle pagine visitate e lo blocca. LibreJS è parte di IceCat ed è 212 disponibile come estensione per Firefox.</p> 213 214 <p>Gli utenti dei browser hanno anche bisogno di un modo facile per 215 <em>sostituire</em> il codice JavaScript di una pagina con il proprio. Il 216 codice specificato può essere una modifica parziale o totale del programma 217 JavaScript libero trovato nella pagina. Greasemonkey si avvicina ad essere 218 adatto a questo scopo ma non lo è del tutto, visto che non garantisce che il 219 codice venga modificato prima dell'esecuzione del programma. Usare un proxy 220 locale funziona, ma è troppo scomodo per poter essere una soluzione 221 pratica. Abbiamo bisogno di creare sia una soluzione affidabile e facile da 222 usare che dei siti per poter condividere le modifiche. Il progetto GNU 223 vorrebbe consigliare dei siti che siano dedicati esclusivamente alle 224 modifiche libere.</p> 225 226 <p>Queste funzionalità permetteranno di includere programmi JavaScript liberi 227 all'interno di una pagina web in maniera pratica. JavaScript cesserà di 228 essere un ostacolo per la libertà più di quanto lo siano oggigiorno C e 229 Java. Saremo capaci di respingere ed addirittura sostituire i programmi 230 JavaScript non banali e non liberi proprio come facciamo con i programmi che 231 vengono convenzionalmente installati. La nostra campagna per spingere i siti 232 a liberare il proprio JavaScript può avere inizio.</p> 233 234 <p>Comunque c'è un caso in cui è accettabile eseguire del JavaScript non 235 libero: per inviare una lamentela agli operatori del sito, chiedendo loro di 236 liberare o altrimenti rimuovere il codice JavaScript dal sito. Vi prego di 237 non esitare ad abilitare JavaScript temporaneamente per questo scopo – non 238 dimenticate di disattivarlo una volta finito.</p> 239 240 <!-- any links that used to point to the appendices should point to 241 free-your-javascript.html instead. --> 242 <div class="announcement"> 243 <hr class="no-display" /> 244 <p>Per i webmaster: ci sono <a 245 href="/software/librejs/free-your-javascript.html">molti modi</a> di 246 indicare la licenza dei programmi JavaScript in un sito.</p> 247 <hr class="no-display" /> 248 </div> 249 250 <p><strong>Grazie a:</strong> <a href="/people/people.html#mattlee">Matt 251 Lee</a> e <a href="https://johnresig.com/">John Resig</a> per il loro aiuto 252 nel definire il criterio da noi proposto ed a David Parunakian per avermi 253 messo a conoscenza del problema.</p> 254 </div> 255 256 <div class="translators-notes"> 257 258 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> 259 </div> 260 </div> 261 262 <!-- for id="content", starts in the include above --> 263 <!--#include virtual="/server/footer.it.html" --> 264 <div id="footer" role="contentinfo"> 265 <div class="unprintable"> 266 267 <p>Per informazioni su FSF e GNU rivolgetevi, possibilmente in inglese, a <a 268 href="mailto:gnu@gnu.org"><gnu@gnu.org></a>. Ci sono anche <a 269 href="/contact/">altri modi di contattare</a> la FSF. Inviate segnalazioni 270 di link non funzionanti e altri suggerimenti relativi alle pagine web a <a 271 href="mailto:webmasters@gnu.org"><webmasters@gnu.org></a>.</p> 272 273 <p> 274 <!-- TRANSLATORS: Ignore the original text in this paragraph, 275 replace it with the translation of these two: 276 277 We work hard and do our best to provide accurate, good quality 278 translations. However, we are not exempt from imperfection. 279 Please send your comments and general suggestions in this regard 280 to <a href="mailto:web-translators@gnu.org"> 281 282 <web-translators@gnu.org></a>.</p> 283 284 <p>For information on coordinating and contributing translations of 285 our web pages, see <a 286 href="/server/standards/README.translations.html">Translations 287 README</a>. --> 288 Le traduzioni italiane sono effettuate ponendo la massima attenzione ai 289 dettagli e alla qualità, ma a volte potrebbero contenere imperfezioni. Se ne 290 riscontrate, inviate i vostri commenti e suggerimenti riguardo le traduzioni 291 a <a 292 href="mailto:web-translators@gnu.org"><web-translators@gnu.org></a> 293 oppure contattate direttamente il <a 294 href="http://savannah.gnu.org/projects/www-it/">gruppo dei traduttori 295 italiani</a>.<br/>Per informazioni su come gestire e inviare traduzioni 296 delle nostre pagine web consultate la <a 297 href="/server/standards/README.translations.html">Guida alle traduzioni</a>.</p> 298 </div> 299 300 <!-- Regarding copyright, in general, standalone pages (as opposed to 301 files generated as part of manuals) on the GNU web server should 302 be under CC BY-ND 4.0. Please do NOT change or remove this 303 without talking with the webmasters or licensing team first. 304 Please make sure the copyright date is consistent with the 305 document. For web pages, it is ok to list just the latest year the 306 document was modified, or published. 307 308 If you wish to list earlier years, that is ok too. 309 Either "2001, 2002, 2003" or "2001-2003" are ok for specifying 310 years, as long as each year in the range is in fact a copyrightable 311 year, i.e., a year in which the document was published (including 312 being publicly visible on the web or in a revision control system). 313 314 There is more detail about copyright years in the GNU Maintainers 315 Information document, www.gnu.org/prep/maintain. --> 316 <p>Copyright © 2009-2013, 2016-2019, 2021 Richard Stallman</p> 317 318 <p>Questa pagina è distribuita secondo i termini della licenza <a rel="license" 319 href="http://creativecommons.org/licenses/by-nd/4.0/deed.it">Creative 320 Commons Attribuzione - Non opere derivate 4.0 Internazionale</a> (CC BY-ND 321 4.0).</p> 322 323 <!--#include virtual="/server/bottom-notes.it.html" --> 324 <div class="translators-credits"> 325 326 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> 327 Tradotto da membri del gruppo dei traduttori italiani GNU. Revisioni di 328 Andrea Pescetti, Sebastiano Pistore, Dora Scilipoti.</div> 329 330 <p class="unprintable"><!-- timestamp start --> 331 Ultimo aggiornamento: 332 333 $Date: 2021/11/28 14:01:00 $ 334 335 <!-- timestamp end --> 336 </p> 337 </div> 338 </div> 339 <!-- for class="inner", starts in the banner include --> 340 </body> 341 </html>