This translation may not reflect the changes made since 2015-12-31 in the English original.

You should take a look at those changes. Please see the Translations README for information on maintaining translations of this article.

Zamka JavaScripta

napisao Richard Stallman

Možda pokrećete neslobodne programe na svojem računalu svaki dan, a da toga niste ni svjesni—kroz vaš internet preglednik.

U zajednici slobodnog softvera je poznato da neslobodni programi maltretiraju svoje korisnike. Neki od nas u potpunosti odbijaju instalaciju vlasničkog softvera, a mnogi drugi smatraju neslobodu udarom na program. Mnogi korisnici su svjesni da se taj problem odnosi i na priključke koje preglednici nude za instalaciju, koji mogu biti slobodni ili neslobodni.

Međutim, preglednici pokreću i druge neslobodne programe pri čijem pokretanju vas ne pitaju za dopuštenje, ili vam čak ni ne govore za njih—to su programi koje internetske stranice sadrže ili imaju poveznicu na njih. Ti programi su najčešće napisani u JavaScriptu, iako se koriste i drugi jezici.

JavaScript (službeno zvan ECMAScript, ali samo nekolicina koristi to ime) je nekoć bio korišten za manje ukrase u internetskim strancima, za slatke ali nebitne izbornike i značajke prikaza. Bilo je prihvatljivo to smatrati pukim proširenjima HTML oznaka, radije nego pravi softver; nisu tvorili značajan problem.

Mnoge lokacije još uvijek koriste JavaScript na taj način, ali neke ga koriste za značajne programe koji rade veliki posao. Na primjer, Google Docs presnimi na vaše računalo JavaScript program veličine pola megabajta u kompaktnom obliku, koji možemo nazvati Obfuscript1 zato jer nema komentara i gotovo ništa praznih znakova,a imena metoda se sastoje od jednog slova. Izvorni kod programa je poželjan oblik za njegovu izmjenu; kompaktni kod nije izvorni kod, i pravi izvorni kod ovoga programa nije dostupan korisniku.

Obično vas preglednik ne obavještava kada učitava programe pisane u JavaScriptu. U većini preglednika postoji način da se JavaScript u cijelosti isključi, ali niti jedan od njih ne može provjeriti jesu li programi pisani u JavaScript ne-trivijalni i neslobodni. Čak i ako ste svjesni ovoga problema, trebao bi vam poveliki trud da identificirate i tada blokirate te programe. Međutim, čak i u zajednici slobodnog softvera većina korisnika nije svjesna ovoga problema; šutnja preglednika vodi prema prikrivanju toga.

Moguće je objaviti program pisan u JavaScriptu kao slobodan softver - distribucijom izvornog koda pod licencom slobodnog softvera. Međutim, iako je izvorni kod programa dostupan, ne postoji lagani način da pokrenete svoju izmijenjenu inačicu umjesto originala. Sadašnji slobodni preglednici ne nude mogućnost pokretanja vaše vlastite izmijenjene inačice umjesto one koja je pružena na stranici. Efekt je usporediv sa tivoizacijom, iako ne toliko težak da se prebrodi.

JavaScript nije jedini jezik kojeg internetske lokacije koriste za programe poslane korisniku. Flash podržava programiranje kroz proširenu varijantu JavaScripta. Morat ćemo proučiti problem Flasha da napravimo prikladne preporuke. Čini se da će Silverlight po svoj prilici napraviti problem sličan Flashu, samo još gori, pošto ga Microsoftovi koristi kao platformu za neslobodne programe za čitanje i pisanje kodiranih formata. Slobodna zamjena za Silverlight neće izvršiti zadaću za slobodni svijet osim ako ne dođe normalno sa slobodnim zamjenama za te programe.

Java apleti2 se također vrte u pregledniku, i predstavljaju slične probleme. Općenito, svaka vrsta sustava apleta predstavlja tu vrstu problema. Posjedovanje slobodnog okruženja za izvršavanje apleta nas vodi samo do toga da se sretnemo s tim problemom.

Razvio se snažan pokret koji poziva web lokacije da komuniciraju samo kroz formate i protokole koji su slobodni (neki kažu "otvoreni"); to jest, čija dokumentacija je objavljena i koje je svatko slobodan implementirati. S prisustvom programa u web stranicama, taj kriterij je nužan, ali ne i dovoljan. Sam JavaScript, kao format, je slobodan, i korištenje JavaScripta na internetskoj lokaciji nije nužno loše. Međutim, kako smo vidjeli iznad, nije nužno i u redu. Kada lokacija prenese program korisniku, nije dovoljno za program da bude napisan u dokumentiranom i neopterećenom jeziku; taj program mora biti također i slobodan. “Samo slobodni programi preneseni korisniku” moraju postati dio kriterija za ispravno ponašanje internetskih lokacija.

Tiho učitavanje i pokretanje neslobodnih programa je jedan od nekoliko problema koje stvaraju "web aplikacije". Termin "web aplikacija" je zamišljen kako bi zanemario osnovnu distinkciju između softvera dostavljenom korisnicima i softvera koji se pokreće na poslužitelju. Može upućivati na specijalizirani program klijenta koji se pokreće u pregledniku; može upućivati na specijalizirani softver poslužitelja; može upućivati na specijalizirani program klijenta koji radi ruku pod ruku sa specijaliziranim softverom na poslužitelju. Strana klijenta i strana poslužitelja postavljaju različita etička pitanja, čak iako su toliko blisko integrirani da dvojbeno oblikuju dijelove jednog programa. Ovaj članak adresira samo pitanje softvera na strani klijenta. Adresiramo problem poslužitelja odvojeno.

U praktičnim terminima, kako možemo riješiti problem neslobodnih programa pisanih u JavaScriptu na internetskim lokacijama? Prvi korak je izbjegavanje njihova pokretanja.

Što mislimo pod "ne-trivijalno"? Stvar je u stupnju, dakle to je stvar dizajniranja jednostavnog kriterija koji daje dobre rezultate, radije nego nalaženja jednog točnog odgovora.

Naša probna politika je da smatramo program pisan u JavaScriptu ne-trivijalnim ako:

Kako možemo razaznati je li kod u JavaScriptu slobodan? Na kraju ovoga članka predlažemo konvenciju kojom ne-trivijalni program pisan u JavaScriptu u internetskoj stranici može izjaviti URL na kojem se nalazi njegov izvorni kod, i može također izjaviti svoju licencu, korištenjem stiliziranih komentara.

Naposljetku, moramo izmijeniti slobodne preglednike da otkrivaju i blokiraju ne-trivijalan neslobodni JavaScript u internetskim stranicama. Program LibreJS otkriva neslobodni, ne-trivijalni JavaScript u stranicama koje posjećujete, i blokira ga. LibreJS je priključak za IceCat i IceWeasel (i Firefox).

Korisnici preglednika isto trebaju i prikladne alate kako bi specificirali JavaScript kod koji će se koristiti umjesto JavaScripta na određenoj stranici. (Specificirani kod može biti potpuna zamjena, ili izmijenjena inačica slobodnog programa pisanog u JavaScriptu na toj stranici.) Greasemonkey ima mogućnosti za to, ali ne u potpunosti, jer ne garantira izmjenu JavaScript koda na stranici prije nego program započne sa izvršavanjem. Korištenje lokalnog proxy4 poslužitelja funkcionira, ali je trenutno previše nepogodno da bude pravo rješenje. Moramo konstruirati rješenje koje je pouzdano i pogodno, kao i lokacije za razmjenu izmjena. Projekt GNU bi htio preporučiti lokacije koje su posvećene samo slobodnim izmjenama.

Te značajke će omogućiti da program pisan u JavaScriptu uključen na web stranici bude slobodan u stvarnom i praktičnom smislu. JavaScript više neće biti naročita prepreka našoj slobodi—ništa više nego su to trenutno C ili Java. Bit ćemo u mogućnosti odbiti i zamijeniti neslobodne i ne-trivijalne programe pisane u JavaScriptu, kao što smo odbili i zamijenili neslobodne pakete koje se nude za instalaciju na uobičajeni način. Tada može poč eti naša kampanja da internetske lokacije oslobode svoj JavaScript.

U međuvremenu, postoji jedan slučaj kada je prihvatljivo pokrenuti neslobodni program pisan u JavaScriptu: da se pošalje žalba operatorima internetske lokacije govoreći da bi oni trebali osloboditi ili ukloniti JavaScript kod koji je na lokaciji. Molim vas, ne oklijevajte da privremeno omogućite JavaScript da biste to napravili—ali sjetite se da ga onesposobite nakon toga.

Zahvaljujem se Mattu Leeu i Johnu Resigu za njihovu pomoć u definiranju našeg predloženog kriterija, i Davidu Parunakianu na pomoći da postanem svjestan ovog problema.

Dodatak A: konvencija za objavljivanje slobodnih programa pisanih u JavaScriptu

Za reference na odgovarajući izvorni kod, preporučamo


    // @source:

i u nastavku URL. To zadovoljava zahtjev GNU GPL-a za distribucijom izvornog koda. Ako je izvorni kod na nekoj drugoj lokaciji, tada morate pripaziti da se pobrinete za to na ispravan način. Izvorni kod je nužan da program bude slobodan.

Da biste ukazali na licencu JavaScript koda umetnutog u stranicu, preporučamo da stavite obavijest o licenci između dviju bilješki ovoga oblika:



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

Naravno, sve ovo bi trebalo biti sadržano u više-linijskom komentaru.

GNU GPL, kao i mnoge druge licence slobodnog softvera, zahtijeva distribuciju kopije licence zajedno i u izvornom kodu i u binarnom obliku programa. Međutim, GNU GPL je toliko dugačka da uključivanje na stranicu s programom pisanom u JavaScriptu može biti nepogodno. Možete ukloniti taj zahtjev za kod nad kojim imate autorska prava, s ovakvom obavijesti o licenci:


    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.

Zahvaljujem Jaffaru Rumithu što mi je skrenuo pažnju na ovaj problem.

Dodatak B: Objavljivanje slobodnih programa pisanih u JavaScriptu ako ste webmaster

Ako ste webmaster koji implementira slobodan softver u JavaScriptu na svojoj lokaciji, jasno i dosljedno objavljivanje informacija o licencama tih datoteka i o izvornom kodu pomaže vašim posjetiteljima da budu sigurni da pokreću slobodan softver, i pomaže vama da se pridržavate uvjeta licence.

Jedna metoda izjavljivanja licenci je ona opisana iznad u Dodatku A. Druga metoda, JavaScript web oznake licence, može biti pogodnija za biblioteke umanjenog JavaScript koda, posebno ako ih niste vi napisali.

Bilješke prevoditelja

  1. Od obfuscated (namjerno nerazumljiv i višeznačan) i script (programski kod namijenjen izvršavanju u interpreterima).
  2. Male aplikacije pisane u Javi koje se izvršavaju u virtualnome stroju.
  3. Asinkroni JavaScript i XML. Tehnika razvoja aplikacija koja omogućava učitavanje podataka sa poslužitelja bez remećenja prikaza stranice na klijentu.
  4. Poslužitelj koji služi kao posrednik za zahtjeve klijenta prema nekom drugom poslužitelju.