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

Dit is een vertaling van een Engelstalige pagina.

De JavaScript-valstrik

door Richard Stallman

Waarschijnlijk voer je elke dag niet-vrije programma's uit op je computer zonder dat je het door hebt—via je webbrowser.

In de vrije-software gemeenschap is het bekend dat niet-vrije programma's hun gebruikers misbruiken. Sommigen onder ons weigeren wat voor private software dan ook te installeren en vele anderen beschouwen onvrijheid als een zeer slechte eigenschap van het programma. Veel gebruikers zijn zich ervan bewust dat deze kwestie ook van toepassing is op add-ons die in de webbrowser geïnstalleerd kunnen worden, omdat ook deze vrij of niet-vrij kunnen zijn.

Maar browsers gebruiken andere niet-vrije programma's zonder daar eerst toestemming voor te vragen of zelfs over te informeren—programma's die zich in webpagina's bevinden. Deze programma's worden meestal geschreven in JavaScript, maar andere programmeertalen worden ook gebruikt.

JavaScript (officieel ECMAScript genoemd, maar weinigen gebruiken die naam) werd eerst gebruikt voor kleine details in webpagina's, zoals schattige maar niet-essentiële functies om te bladeren door webpagina's. Het was acceptabel om deze te beschouwen als uitbreidingen van de HTML-opmaak, in plaats van echte software; het was geen belangrijke kwestie.

Veel websites gebruiken JavaScript nog steeds op die manier, maar andere websites gebruiken het voor veelomvattende programma's die grote taken uitvoeren. Neem bijvoorbeeld Google Docs; het probeert een JavaScript-programma naar je machine te downloaden dat een halve megabyte groot is, in een compacte vorm die we Obfuscript noemen, omdat het geen commentaar bevat en nauwelijks spaties, en de namen van methoden zijn één letter lang. De broncode van een programma is de vorm die het liefst gebruikt wordt om het te bewerken; de compacte code is niet de broncode, en de echte broncode van dit programma is niet beschikbaar voor de gebruiker.

Veel van deze programma's zijn niet alleen niet-vrij, maar ook malware, omdat ze de gebruiker bespioneren.

Browsers vertellen je normaal gesproken niet wanneer zij JavaScript-programma's laden. Sommige browsers hebben de mogelijkheid om JavaScript geheel uit te schakelen, maar zelfs als je je bewust bent van deze kwestie, zou het grote moeite kosten om de niet-triviale, niet-vrije programma's te identificeren en deze te blokkeren. Echter, zelfs in de vrije-softwaregemeenschap zijn de meeste gebruikers zich niet bewust van deze kwestie; het zwijgen van de browser verhult het.

Het is mogelijk om JavaScript-programma's als vrije software uit te brengen, door het verspreiden van de broncode onder een vrije-software licentie. Als het programma zelf-bevattend is—zijn functioneren en doel zijn onafhankelijk van de pagina waarin het geleverd werd—is dat prima; je kunt het programma kopiëren naar je eigen computer, het wijzigen, en dat bestand openen met een browser om het uit te voeren. Maar dat is een ongebruikelijk geval.

In het gebruikelijke geval zijn JavaScript-programma's bedoeld om te werken met een bepaalde pagina of website, en de pagina of website hangt voor zijn functioneren van deze programma's af. Dan speelt een ander probleem: zelfs als de broncode van het programma beschikbaar is, bieden browsers je geen manier aan om jouw aangepaste versie uit te voeren in plaats van de originele versie bij het bezoeken van die pagina of website. Het effect lijkt op tovoisatie (waarbij je de software niet kunt vervangen), hoewel het in principe niet zo moeilijk is op te lossen.

JavaScript is niet de enige programmeertaal die websites gebruiken om programma's naar de gebruiker te sturen. Flash ondersteunt programmeren door middel van een uitgebreide variant van JavaScript; als we ooit een compleet vrije Flash-speler hebben, moeten we omgaan met de kwestie van niet-vrije Flash-programma's. Silverlight heeft een vergelijkbaar probleem, maar dan erger, omdat Microsoft het gebruikt als een platform voor niet-vrije codecs. Een vrije vervanging van Silverlight is niet genoeg voor de vrije wereld totdat het normaal gesproken geleverd wordt met vrije vervangingen voor codecs.

Java-applets worden ook in de browser uitgevoerd en hebben vergelijkbare problemen. Over het algemeen zal elke vorm van applet dit soort problemen hebben. Wanneer we een vrije uitvoeringsomgeving hebben voor een applet brengt dat ons alleen ver genoeg om het probleem te ervaren.

Het is theoretisch mogelijk om te programmeren in HTML en CSS, maar in de praktijk is deze mogelijkheid gelimiteerd en niet gemakkelijk; het zou een ware prestatie zijn om iets te programmeren in deze talen. Dergelijke programma's zouden vrij moeten zijn, maar CSS is anno 2016 geen serieus probleem voor de vrijheid van gebruikers.

Er heeft zich een sterke beweging ontwikkeld die oproept dat websites alleen communiceren door middel van formaten en protocollen die vrij zijn (sommigen zeggen "open"); wat betekent dat de documentatie gepubliceerd is en iedereen vrij is het te implementeren. Met de aanwezigheid van programma's in webpagina's is die eis noodzakelijk, maar niet voldoende. JavaScript zelf, als formaat, is vrij, en het gebruiken van JavaScript in een webpagina is niet noodzakelijkerwijs slecht. Echter, zoals we hierboven hebben gezien, hoeft het ook niet goed te zijn. Wanneer de website een programma naar de gebruiker verzendt, is het niet niet genoeg als het programma is geschreven in een gedocumenteerde en onbelemmerde taal; het programma moet zelf ook vrij zijn. “Alleen vrije programma's die naar de gebruiker verzonden worden” moet onderdeel worden van de eisen voor behoorlijk gedrag voor websites.

Het stilletjes laden en uitvoeren van niet-vrije programma's is één van de problemen die zich voordoen bij "web-applicaties". De term "webapplicatie" is bedacht om het fundamentele verschil, tussen software die geleverd wordt aan de gebruikers en software die uitgevoerd wordt op een server, te verzwijgen. Het kan verwijzen naar een gespecialiseerd clientprogramma dat wordt uitgevoerd in een browser; het kan verwijzen naar gespecialiseerde serversoftware; het kan verwijzen naar een gespecialiseerd clientprogramma dat hand in hand samenwerkt met gespecialiseerde serversoftware. De client- en server-kant brengen verschillende ethische kwesties aan het licht, zelfs als ze zo hecht samenwerken dat ze mogelijkerwijs gedeeltes van een enkel programma zijn. Dit artikel spreekt slechts over de kwestie van de software aan de client-kant. We benoemen de serverkwestie apart.

Hoe kunnen we, in praktisch opzicht, omgaan met het probleem van niet-vrije JavaScript-programma's in webpagina's? De eerste stap is vermijden het uit te voeren.

Wat bedoelen we met "niet-triviaal"? Hier is geen vaste grens voor, dus gaat het om het ontwerpen van een simpele eis die goede resultaten geeft, in plaats van het juiste antwoord te vinden.

Ons voorlopige beleid is om een JavaScript-programma niet-triviaal te beschouwen als:

Hoe kunnen we uitvinden of JavaScript-code vrij is? Aan het einde van dit artikel stellen we een conventie voor waarmee niet-triviale JavaScript-programma's in een webpagina de URL kunnen aangeven waar de broncode staat, alsmede zijn licentie, door middel van gestilleerd commentaar.

Tenslotte moeten we vrije browsers wijzigen zodat zij niet-triviale, niet-vrije JavaScript detecteren en blokkeren. Het programma LibreJS detecteert niet-vrije, niet-triviale JavaScript in de pagina's die je bezoekt, en blokkeert deze. LibreJS wordt meegeleverd met IceCat, en is beschikbaar als add-on voor Firefox.

Gebruikers van browsers hebben ook een gebruikersvriendelijke methode nodig om JavaScript-code te gebruiken in plaats van de JavaScript in een bepaalde pagina. (De gespecificeerde code kan een volledige vervanging zijn, of een gewijzigde versie van het vrije JavaScript-programma in die pagina.) Greasemonkey komt hier dicht in de buurt, maar niet helemaal, want het garandeert niet dat de aangepaste JavaScript-code op de pagina wordt gebruikt voordat het programma begint met uitvoeren. Het gebruiken van een lokale proxy werkt, maar is momenteel te moeilijk om een echte oplossing te zijn. We moeten een oplossing creëren die betrouwbaar en gemakkelijk is, alsmede websites om gewijzigde programma's te delen. Het GNU-project raadt graag websites aan die toegewijd zijn aan vrije wijzigingen.

Deze functies zullen het mogelijk maken dat een JavaScript-programma dat wordt meegeleverd met een webpagina in een praktisch opzicht vrij is. JavaScript zal geen bijzonder obstakel zijn voor onze vrijheid—niet meer dan C en Java nu zijn. We zullen in staat zijn om de niet-vrije, niet-triviale JavaScript-programma's te verwerpen en zelfs te vervangen, net zoals we niet-vrije programma's verwerpen en vervangen die ons op de reguliere manier ter installatie aangeboden worden.

In de tussentijd is er één moment waarop het acceptabel is om een niet-vrij JavaScript-programma uit te voeren: om een klacht naar de websitebeheerders te sturen, waarin je aangeeft dat ze de JavaScript-code op de website zouden moeten bevrijden of verwijderen. Aarzel niet om JavaScript tijdelijk aan te zetten om dat te doen—maar vergeet niet om het na afloop weer uit te zetten.

Met dank aan Matt Lee en John Resig voor hun hulp bij het bepalen van de voorgestelde criteria, en aan David Parunakian, die mij geholpen heeft me bewust te maken van het probleem.

Bijlage A: een conventie voor het vrijgeven van vrije JavaScript-programma's

Voor verwijzingen naar de gerelateerde broncode raden wij het volgende aan:


    // @source:

gevolgd door de URL. Dit voldoet aan de eis van de GNU GPL bij het verspreiden van broncode. Als de bron zich op een andere website bevindt, moet je ervoor zorgen dat je dat correct afhandelt. Broncode is noodzakelijk voor een vrij programma.

Om de licentie van de JavaScript-code die is ingebed in een pagina te specificeren, raden wij aan om de licentie-kennisgeving tussen twee notities van deze vorm te plaatsen:



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

Natuurlijk moet dit alles als commentaar over meerdere regels geplaatst worden.

De GNU GPL vereist dat je een kopie van de licentie mee-levert bij zowel de broncode als de binaire vorm van het programma, zoals veel andere vrije-software-licenties dat ook vereisen. Echter is de GNU GPL vrij lang; wanneer de volledige licentietekst op een pagina met een JavaScript-programma wordt bijgevoegd kan dit niet handig zijn. Voor code waar jij het auteursrecht op hebt, kan je die vereiste verwijderen door het volgende te plaatsen:


    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.

Ik bedank Jaffar Rumith voor het onder de aandacht brengen van deze kwestie.

Bijlage B: Vrije JavaScript-programma's uitbrengen als webmaster

Als je een webmaster bent die vrije JavaScript-software op je website aanbiedt, dan helpt duidelijke en consistente uitgave-informatie over de licenties en broncode van deze bestanden je bezoekers zeker te zijn dat ze vrije software uitvoeren, en het helpt jou om te voldoen aan licentievoorwaarden.

Eén manier om de licenties aan te geven wordt hierboven beschreven in bijlage A. Een tweede methode, weblabels voor JavaScript-licenties, kan gemakkelijker zijn voor bibliotheken van compacte JavaScript-code, vooral als je ze zelf niet hebt geschreven.

NAAR BEGIN


[FSF logo] “Onze missie is het behouden, beschermen en promoten van de vrijheid om computersoftware te gebruiken, bestuderen, kopiëren, wijzigen en verspreiden, en het beschermen van de rechten van gebruikers van vrije software.”

De Free Software Foundation is de hoofdsponsor van het GNU besturingssysteem. Steun GNU en de FSF door handleidingen en andere gadgets te kopen, door lid te worden van de FSF of met een schenking, direct aan de FSF of via Flattr.