javascript-trap.html (16810B)
1 <!--#set var="PO_FILE" 2 value='<a href="/philosophy/po/javascript-trap.nl.po"> 3 https://www.gnu.org/philosophy/po/javascript-trap.nl.po</a>' 4 --><!--#set var="ORIGINAL_FILE" value="/philosophy/javascript-trap.html" 5 --><!--#set var="DIFF_FILE" value="/philosophy/po/javascript-trap.nl-diff.html" 6 --><!--#set var="OUTDATED_SINCE" value="2021-05-31" --> 7 8 <!--#include virtual="/server/header.nl.html" --> 9 <!-- Parent-Version: 1.90 --> 10 11 <!-- This file is automatically generated by GNUnited Nations! --> 12 <title>De JavaScript-valstrik</title> 13 14 <!--#include virtual="/philosophy/po/javascript-trap.translist" --> 15 <!--#include virtual="/server/banner.nl.html" --> 16 <!--#include virtual="/server/outdated.nl.html" --> 17 <h2>De JavaScript-valstrik</h2> 18 19 <p>door <a href="http://www.stallman.org/">Richard Stallman</a></p> 20 21 <p><strong>Waarschijnlijk voer je elke dag niet-vrije programma's uit op je 22 computer zonder dat je het door hebt—via je webbrowser.</strong></p> 23 24 <!-- any links that used to point to the appendices should point to 25 free-your-javascript.html instead. --> 26 <blockquote> 27 <p>Websitebeheerders: er zijn <a 28 href="/software/librejs/free-your-javascript.html">diverse methoden</a> om 29 de licentie van JavaScript-programma's op een website aan te geven.</p> 30 </blockquote> 31 32 <p>In de vrije software gemeenschap is het bekend dat <a 33 href="/philosophy/free-software-even-more-important.html">niet-vrije 34 programma's hun gebruikers misbruiken</a>. Sommigen onder ons verdedigen 35 onze vrijheid door alle private software op onze computers af te 36 wijzen. Vele anderen zien onvrijheid als een tekortkoming in het programma.</p> 37 38 <p>Veel gebruikers zijn zich ervan bewust dat deze kwestie ook van toepassing 39 is op add-ons die in de webbrowser geïnstalleerd kunnen worden, omdat 40 ook deze vrij of niet-vrij kunnen zijn. Maar browsers gebruiken andere 41 niet-vrije programma's zonder jou daar eerst toestemming voor te vragen of 42 zelfs over te informeren—programma's die zich in webpagina's 43 bevinden. Deze programma's worden meestal geschreven in JavaScript, maar 44 andere programmeertalen worden ook gebruikt.</p> 45 46 <p>JavaScript (officieel ECMAScript genoemd, maar weinigen gebruiken die naam) 47 werd eerst gebruikt voor kleine details in webpagina's, zoals schattige maar 48 niet-essentiële functies om te bladeren door webpagina's. Het was 49 acceptabel om deze te beschouwen als uitbreidingen van de HTML-opmaak, in 50 plaats van echte software; het was geen belangrijke kwestie.</p> 51 52 <p>Sommige websites gebruiken JavaScript nog steeds op die manier, maar veel 53 websites gebruiken het voor omvangrijke programma's die grote taken 54 uitvoeren. Neem bijvoorbeeld Google Docs; het probeert een 55 JavaScript-programma naar je machine te downloaden dat een halve megabyte 56 groot is, in een compacte vorm die we Obfuscript noemen, omdat het geen 57 commentaar bevat en nauwelijks spaties, en de namen van methoden zijn 58 één letter lang. De broncode van een programma is de vorm die 59 het liefst gebruikt wordt om te bewerken; de compacte code is niet de 60 broncode, en de echte broncode van dit programma is niet beschikbaar voor de 61 gebruiker.</p> 62 63 <p>Een <a href="/philosophy/free-software-even-more-important.html">onderdeel 64 van vrije software</a> is dat gebruikers toegang hebben tot de broncode van 65 een programma (zijn blauwdruk). De broncode van een programma is datgene wat 66 programmeurs kunnen wijzigen—met inbegrip van spaties, commentaar met 67 uitleg en zinnige naamgeving. Compacte code is een onbruikbare vervanger 68 voor dit doel; de daadwerkelijke broncode is dan niet echt beschikbaar voor 69 de gebruikers en dus niet te begrijpen; dat maakt een dergelijk programma 70 niet-vrij.</p> 71 72 <p>Bovendien zijn deze niet-vrije programma's ook vaak <em>malware</em> omdat 73 ze <a href="http://github.com/w3c/fingerprinting-guidance/issues/8">de 74 gebruiker bespioneren</a>. Nog erger, sommige sites gebruiken services die 75 <a 76 href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">alle 77 handelingen van een gebruiker op die site</a> vastleggen. Dit soort services 78 “bewerken” deze opnamen zodat gevoelige data niet mee komt, maar 79 al zou dat goed werken, het hele idee is toch om websites van data te 80 voorzien die het niet zou mogen hebben.</p> 81 82 <p>Browsers vertellen je normaal gesproken niet wanneer zij 83 JavaScript-programma's laden. Sommige browsers hebben de mogelijkheid om 84 JavaScript geheel uit te schakelen, maar zelfs als je je bewust bent van 85 deze kwestie, zou het grote moeite kosten om de niet-triviale, niet-vrije 86 programma's te identificeren en deze te blokkeren. Echter, zelfs in de 87 vrije-softwaregemeenschap zijn de meeste gebruikers zich niet bewust van 88 deze kwestie; het zwijgen van de browser verhult het.</p> 89 90 <p>Het is mogelijk om JavaScript-programma's als vrije software uit te brengen, 91 door het verspreiden van de broncode onder een vrije-software licentie. Als 92 het programma zelf-bevattend is—zijn functioneren en doel zijn 93 onafhankelijk van de pagina waarin het geleverd werd—is dat prima; je 94 kunt het programma kopiëren naar je eigen computer, het wijzigen, en 95 dat bestand openen met een browser om het uit te voeren. Maar dat is een 96 ongebruikelijk geval.</p> 97 98 <p>In het gebruikelijke geval zijn JavaScript-programma's bedoeld om te werken 99 met een bepaalde pagina of website, en de pagina of website hangt voor zijn 100 functioneren van deze programma's af. Dan speelt een ander probleem: zelfs 101 als de broncode van het programma beschikbaar is, bieden browsers je geen 102 manier aan om jouw aangepaste versie uit te voeren in plaats van de 103 originele versie bij het bezoeken van die pagina of website. Het effect 104 lijkt op tivoisatie (waarbij je de software niet kunt vervangen), hoewel het 105 in principe niet zo moeilijk is op te lossen.</p> 106 107 <p>JavaScript is niet de enige programmeertaal die websites gebruiken om 108 programma's naar de gebruiker te sturen. Flash ondersteunt programmeren door 109 middel van een uitgebreide variant van JavaScript; als we ooit een compleet 110 vrije Flash-speler hebben, moeten we omgaan met de kwestie van niet-vrije 111 Flash-programma's. Silverlight heeft een vergelijkbaar probleem, maar dan 112 erger, omdat Microsoft het gebruikt als een platform voor niet-vrije 113 codecs. Een vrije vervanging van Silverlight is niet genoeg voor de vrije 114 wereld totdat het normaal gesproken geleverd wordt met vrije vervangingen 115 voor codecs.</p> 116 117 <p>Java-applets worden ook in de browser uitgevoerd en hebben vergelijkbare 118 problemen. Over het algemeen zal elke vorm van applet dit soort problemen 119 hebben. Wanneer we een vrije uitvoeringsomgeving hebben voor een applet 120 brengt dat ons alleen ver genoeg om het probleem te ervaren.</p> 121 122 <p>Het is theoretisch mogelijk om te programmeren in HTML en CSS, maar in de 123 praktijk is deze mogelijkheid gelimiteerd en niet gemakkelijk; het zou een 124 ware prestatie zijn om iets te programmeren in deze talen. Dergelijke 125 programma's zouden vrij moeten zijn, maar CSS is sinds 2019 geen serieus 126 probleem meer voor de vrijheid van gebruikers.</p> 127 128 <p>Er heeft zich een sterke beweging ontwikkeld die oproept dat websites alleen 129 communiceren door middel van formaten en protocollen die vrij zijn (sommigen 130 zeggen "open"); wat betekent dat de documentatie gepubliceerd is 131 en iedereen vrij is het te implementeren. Met JavaScript is dat criterium 132 niet meer voldoende. JavaScript zelf, als taal, is vrij, en het gebruik 133 ervan is niet noodzakelijkerwijs slecht. Echter, zoals we hierboven hebben 134 gezien, hoeft het ook niet goed te zijn—wanneer het programma zelf 135 onvrij is. Wanneer de website een programma naar de gebruiker verzendt, is 136 het niet niet genoeg dat het programma is geschreven in een vastgelegde en 137 vrije taal; het programma moet zelf ook vrij zijn. “Alleen vrije 138 programma's die naar de gebruiker worden verzonden” moet onderdeel 139 worden van de eisen voor behoorlijk gedrag voor websites.</p> 140 141 <p>Het stilletjes laden en uitvoeren van niet-vrije programma's is 142 één van de problemen die zich voordoen bij 143 "web-applicaties". De term "webapplicatie" is bedacht om 144 het fundamentele verschil, tussen software die geleverd wordt aan de 145 gebruikers en software die uitgevoerd wordt op een server, te 146 verzwijgen. Het kan verwijzen naar een gespecialiseerd clientprogramma dat 147 wordt uitgevoerd in een browser; het kan verwijzen naar gespecialiseerde 148 serversoftware; het kan verwijzen naar een gespecialiseerd clientprogramma 149 dat hand in hand samenwerkt met gespecialiseerde serversoftware. De client- 150 en server-kant brengen verschillende ethische kwesties aan het licht, zelfs 151 als ze zo hecht samenwerken dat ze mogelijkerwijs gedeeltes van een enkel 152 programma zijn. Dit artikel spreekt slechts over de kwestie van de software 153 aan de client-kant. We benoemen de serverkwestie apart.</p> 154 155 <p>Hoe kunnen we praktisch omgaan met het probleem van complexe niet-vrije 156 JavaScript-programma's in webpagina's? De eerste stap is het niet uit te 157 voeren.</p> 158 159 <p>Wat bedoelen we met "niet-triviaal"? Hier is geen vaste grens 160 voor, dus gaat het om het ontwerpen van een simpele eis die goede resultaten 161 geeft, in plaats van het juiste antwoord te vinden.</p> 162 <p> 163 Ons huidige beleid is om een JavaScript-programma als niet-triviaal te 164 beschouwen wanneer:</p> 165 166 <ul> 167 <li>het aan wordt geroepen als extern script (vanuit een andere pagina)</li> 168 169 <li>het een array, groter dan 50 elementen gebruikt.</li> 170 171 <li>het een functie of methode bevat die meer aanroept dan een primitive.</li> 172 173 <li>het een object aanmaakt met meer dan drie voorwaardelijke constructies of 174 lussen.</li> 175 176 <li>code buiten de functies die iets anders dan primitieven aanroepen of 177 functies verderop op de pagina.</li> 178 179 <li>code buiten de functies die in totaal meer dan drie voorwaardelijke 180 constructies of lussen bevat.</li> 181 182 <li>wanneer het <b>eval</b> aanroept.</li> 183 184 <li>het een Ajax aanroep doet.</li> 185 186 <li>het vierkante haken gebruikt voor dynamische toegang tot properties van het 187 type <b><em>object</em>[<em>property</em>]</b>.</li> 188 189 <li>het de DOM wijzigt.</li> 190 191 <li>het dynamische JavaScript-constructies gebruikt die moeilijk te analyseren 192 zijn zonder het programma te interpreteren, of als het gelijk wordt geladen 193 met scripts die dergelijke constructies gebruiken. Met name andere 194 constructies dan string waarden bij bepaalde methoden (<b>Obj.write</b>, 195 <b>Obj.createElement</b>, en anderen).</li> 196 </ul> 197 198 <p>Hoe kunnen we uitvinden of JavaScript-code vrij is? In een <a 199 href="/licenses/javascript-labels.html">apart artikel</a> stellen we een 200 conventie voor waarmee niet-triviale JavaScript-programma's in een webpagina 201 de URL kunnen aangeven waar de broncode staat, alsmede zijn licentie, door 202 middel van gestilleerd commentaar.</p> 203 204 <p>Tenslotte moeten we vrije browsers wijzigen zodat zij niet-triviale, 205 niet-vrije JavaScript detecteren en blokkeren. Het programma <a 206 href="/software/librejs/">LibreJS</a> detecteert niet-vrije, niet-triviale 207 JavaScript in de pagina's die je bezoekt, en blokkeert deze. LibreJS wordt 208 meegeleverd met IceCat, en is beschikbaar als add-on voor Firefox.</p> 209 210 <p>Gebruikers van browsers hebben ook een gebruikersvriendelijke methode nodig 211 om JavaScript-code te gebruiken <em>in plaats van</em> de JavaScript in een 212 bepaalde pagina. (De gespecificeerde code kan een volledige vervanging zijn, 213 of een gewijzigde versie van het vrije JavaScript-programma in die pagina.) 214 Greasemonkey komt hier dicht in de buurt, maar niet helemaal, want het 215 garandeert niet dat de aangepaste JavaScript-code op de pagina wordt 216 gebruikt voordat het programma begint met uitvoeren. Het gebruiken van een 217 lokale proxy werkt, maar is momenteel te moeilijk om een echte oplossing te 218 zijn. We moeten een oplossing creëren die betrouwbaar en gemakkelijk 219 is, alsmede websites om gewijzigde programma's te delen. Het GNU-project 220 raadt graag websites aan die toegewijd zijn aan vrije wijzigingen.</p> 221 222 <p>Deze functies zullen het mogelijk maken dat een JavaScript-programma dat 223 wordt meegeleverd met een webpagina in een praktisch opzicht vrij 224 is. JavaScript zal geen bijzonder obstakel zijn voor onze 225 vrijheid—niet meer dan C en Java nu zijn. We zullen in staat zijn om 226 de niet-vrije, niet-triviale JavaScript-programma's te verwerpen en zelfs te 227 vervangen, net zoals we niet-vrije programma's verwerpen en vervangen die 228 ons op de reguliere manier ter installatie aangeboden worden.</p> 229 230 <p>In de tussentijd is er één moment waarop het acceptabel is om 231 een niet-vrij JavaScript-programma uit te voeren: om een klacht naar de 232 websitebeheerders te sturen, waarin je aangeeft dat ze de JavaScript-code op 233 de website zouden moeten bevrijden of verwijderen. Aarzel niet om JavaScript 234 tijdelijk aan te zetten om dat te doen—maar vergeet niet om het na 235 afloop weer uit te zetten.</p> 236 237 <!-- any links that used to point to the appendices should point to 238 free-your-javascript.html instead. --> 239 <blockquote> 240 <p>Websitebeheerders: er zijn <a 241 href="/software/librejs/free-your-javascript.html">diverse methoden</a> om 242 de licentie van JavaScript-programma's op een website aan te geven.</p> 243 </blockquote> 244 245 <p><strong>Dankbetuiging:</strong>Ik dank <a 246 href="/people/people.html#mattlee">Matt Lee</a> en <a 247 href="http://ejohn.org">John Resig</a> voor hun hulp bij het bepalen van de 248 voorgestelde criteria, en aan David Parunakian, die mij geholpen heeft me 249 bewust te maken van het probleem.</p> 250 251 <div class="translators-notes"> 252 253 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> 254 </div> 255 </div> 256 257 <!-- for id="content", starts in the include above --> 258 <!--#include virtual="/server/footer.nl.html" --> 259 <div id="footer"> 260 <div class="unprintable"> 261 262 <p>Gelieve algemene vragen over FSF & GNU te sturen naar <a 263 href="mailto:gnu@gnu.org"><gnu@gnu.org></a>. Er zijn ook nog <a 264 href="/contact/">andere manieren om in contact te komen</a> met de 265 FSF. Foute links en andere correcties graag sturen aan <a 266 href="mailto:webmasters@gnu.org"><webmasters@gnu.org></a>.</p> 267 268 <p> 269 <!-- TRANSLATORS: Ignore the original text in this paragraph, 270 replace it with the translation of these two: 271 272 We work hard and do our best to provide accurate, good quality 273 translations. However, we are not exempt from imperfection. 274 Please send your comments and general suggestions in this regard 275 to <a href="mailto:web-translators@gnu.org"> 276 277 <web-translators@gnu.org></a>.</p> 278 279 <p>For information on coordinating and submitting translations of 280 our web pages, see <a 281 href="/server/standards/README.translations.html">Translations 282 README</a>. --> 283 We doen ons best om goede vertalingen te maken maar staan altijd open voor 284 verbeteringen. Suggesties, op- en aanmerkingen sturen aan: <a 285 href="mailto:web-translators@gnu.org"><web-translators@gnu.org></a>.</p> 286 <p>Zie <a href="/server/standards/README.translations.html"> Translations 287 README</a> voor informatie over het onderhoud van vertalingen op deze 288 website.</p> 289 </div> 290 291 <!-- Regarding copyright, in general, standalone pages (as opposed to 292 files generated as part of manuals) on the GNU web server should 293 be under CC BY-ND 4.0. Please do NOT change or remove this 294 without talking with the webmasters or licensing team first. 295 Please make sure the copyright date is consistent with the 296 document. For web pages, it is ok to list just the latest year the 297 document was modified, or published. 298 299 If you wish to list earlier years, that is ok too. 300 Either "2001, 2002, 2003" or "2001-2003" are ok for specifying 301 years, as long as each year in the range is in fact a copyrightable 302 year, i.e., a year in which the document was published (including 303 being publicly visible on the web or in a revision control system). 304 305 There is more detail about copyright years in the GNU Maintainers 306 Information document, www.gnu.org/prep/maintain. --> 307 <p>Copyright © 2009-2013, 2016, 2017, 2018, 2019 Richard Stallman</p> 308 309 <p>Deze pagina is uitgebracht onder een <a rel="license" 310 href="http://creativecommons.org/licenses/by-nd/4.0/">Creative Commons 311 Naamsvermelding-GeenAfgeleideWerken 4.0 Internationaal licentie</a>.</p> 312 313 <!--#include virtual="/server/bottom-notes.nl.html" --> 314 <div class="translators-credits"> 315 316 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> 317 <strong>Vertaling:</strong> <a 318 href="//savannah.gnu.org/projects/www-nl">www-nl</a></div> 319 320 <p class="unprintable"><!-- timestamp start --> 321 Bijgewerkt: 322 323 $Date: 2021/08/19 08:13:19 $ 324 325 <!-- timestamp end --> 326 </p> 327 </div> 328 </div> 329 <!-- for class="inner", starts in the banner include --> 330 </body> 331 </html>