La trappola JavaScript

di Richard Stallman

Forse ogni giorno eseguite software non libero senza rendervene conto, attraverso il vostro web browser.

Per i webmaster: ci sono molti modi di indicare la licenza dei programmi JavaScript in un sito.

Nella comunità del software libero, l'idea che i programmi non liberi maltrattino i propri utenti è 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.

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.

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.

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.

Oltre ad essere non liberi, molti di questi programmi sono malware perché spiano gli utenti. Inoltre alcuni siti usano servizi che registrano tutte le azioni dell'utente mentre visita pagina. 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.

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.

È 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.

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.

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.

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.

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.

C'è un movimento forte che chiede ai siti web di comunicare solo tramite formati e protocolli liberi (alcuni dicono "aperti"), 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. “Solo i programmi liberi trasmessi all'utente“ possono soddisfare il criterio di condotta appropriata per i siti web.

Caricare ed eseguire programmi non liberi silenziosamente è uno degli svariati problemi posti dalle "applicazioni web". Il termine "applicazione web" è 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.

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

Che cosa vuol dire "non banale"? Dipende da caso a caso ed è quindi preferibile definire un criterio semplice che offre buoni risultati piuttosto che cercare una risposta esatta.

La nostra politica provvisoria considera un programma JavaScript non banale se:

Come facciamo a determinare se il codice JavaScript è libero? In un ulteriore articolo 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.

Infine, è necessario che noi modifichiamo i browser liberi per rilevare e bloccare JavaScript non libero nelle pagine web. Il programma LibreJS rileva JavaScript non banale e libero nelle pagine che visitate e lo blocca. LibreJS è parte di IceCat ed è disponibile come estensione per Firefox.

Gli utenti dei browser hanno anche bisogno di un modo facile per sostituire 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.

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.

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—non dimenticate di disattivarlo una volta finito.

Per i webmaster: ci sono molti modi di indicare la licenza dei programmi JavaScript in un sito.

Grazie a: Matt Lee e John Resig per il loro aiuto nel definire il criterio da noi proposto ed a David Parunakian per avermi messo a conoscenza del problema.