English [en]   العربية [ar]   español [es]   فارسی [fa]   français [fr]   hrvatski [hr]   italiano [it]   日本語 [ja]   polski [pl]   русский [ru]   українська [uk]  

Da trent'anni la Free Software Foundation è ritenuta una guida autorevole per il movimento del software libero e si batte per la libertà degli utenti.

Aiutateci a continuare il nostro lavoro facendo una donazione che ci avvicini all'obiettivo dei 450.000$ entro il 31 gennaio.

450mila $
314 mila finora

Questa è la traduzione di una pagina scritta originariamente in lingua inglese.

La trappola JavaScript

di Richard Stallman

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

Nella comunità del software libero, l'idea che i programmi non liberi maltrattino i propri utenti è familiare. Alcuni di noi si rifiutano categoricamente di installare software proprietario e 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; il loro uso non costituiva un problema significante.

Molti siti continuano ad usare JavaScript in quella maniera, mentre altri lo usano per grandi programmi che svolgono grandi operazioni. Per esempio, Google Docs scarica 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.

I browser di solito non vi comunicano di aver caricato dei programmi JavaScript. La maggior parte dei browser fornisce un'opzione per disabilitare JavaScript del tutto ma nessuno di loro permette di verificare se i programmi sono non banali o non liberi. Anche se siete a conoscenza di questo problema, identificare e bloccare questi programmi 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. Ma anche se il codice sorgente del programma è disponibile, non è facile eseguire la vostra versione modificata del programma al posto di quella scaricata dalla 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. Abbiamo bisogno di studiare il problema posto da Flash per poter fare delle raccomandazioni adatte. 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.

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 sul 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 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? Alla fine di questo articolo proponiamo una convenzione secondo la quale 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 è un'estensione per IceCat e IceWeasel (e 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.

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.

Appendice A: una convenzione per il rilascio di programmi JavaScript liberi

Per riferimenti al codice sorgente corrispondente, raccomandiamo


    // @source:

seguito dall'indirizzo web. Questo soddisfa il requisito della GNU GPL di distribuire il codice sorgente. Se il codice è su un sito esterno, dovete agire di conseguenza. Il codice sorgente è necessario perché un programma sia libero.

Per indicare la licenza del codice JavaScript contenuto in una pagina, raccomandiamo di inserire l'avviso di licenza tra due note di questo tipo:



    @licstart  The following is the entire license notice for the 
    JavaScript code in this page.
    ...
    @licend  The above is the entire license notice
    for the JavaScript code in this page.

Questo testo dovrebbe essere contenuto in un commento multi-linea.

La GNU GPL, come altre licenze libere, richiede la distribuzione di una copia della licenza con sia il codice sorgente che con i file binari del programma. Ma essendo la GNU GPL troppo lunga per essere inclusa senza impaccio in un programma JavaScript, potrete fare a meno di includerla per intero tramite l'uso di un avviso di licenza come questo:


    Copyright (C) YYYY  Developer

    The JavaScript code in this page is free software: you can
    redistribute it and/or modify it under the terms of the GNU
    General Public License (GNU GPL) as published by the Free Software
    Foundation, either version 3 of the License, or (at your option)
    any later version.  The code is distributed WITHOUT ANY WARRANTY;
    without even the implied warranty of MERCHANTABILITY or FITNESS
    FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

    As additional permission under GNU GPL version 3 section 7, you
    may distribute non-source (e.g., minimized or compacted) forms of
    that code without the copy of the GNU GPL normally required by
    section 4, provided you include this license notice and a URL
    through which recipients can access the Corresponding Source.

Ringrazio Jaffar Rumith per avere portato la questione alla mia attenzione.

Appendice B: Pubblicare programmi Javascript liberi come webmaster

Se siete dei webmaster che rilasciano programmi in JavaScript liberi sul vostro sito, pubblicare chiaramente e coerentemente le informazioni circa le licenze di questi aiuta i vostri visitatori ad accertarsi che il software che stanno eseguendo sia libero ed aiuta voi ad essere certi di soddisfare le condizioni di licenza.

Un metodo per comunicare le licenze è quello descritto qui sopra, nell'Appendice A. Un secondo metodo, le etichette web di licenza JavaScript, può risultare più comodo per le librerie di JavaScript minificato, specialmente quando non siete stati voi a scriverle.

[Logo FSF]“La nostra missione è preservare, proteggere e promuovere la libertà di usare, studiare, copiare, modificare e ridistribuire il software per computer, e difendere i diritti degli utenti di software libero.”

La Free Software Foundation è lo sponsor principale del Sistema operativo GNU. Potete sostenere GNU e la FSF comprando manuali e gadget, diventando membri associati della FSF oppure facendo una donazione diretta o via Flattr.

inizio pagina