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