Šiame vertime gali nebūti pakeitimų, padarytų nuo 2016-03-27 ir esančių originale anglų kalba.

Jums reikėtų pažiūrėti tuos pakeitimus. Šio straipsnio vertimų palaikymo informaciją prašome pamatykite Vertimų PERSKAITYKITEMANE.

JavaScript spąstai

Pagal Richard Stallman

Jūs galbūt šito nesuvokdami kiekvieną dieną savo kompiuteryje leidžiate nelaisvas programas – per savo tinklo naršyklę.

Laisvos programinės įrangos bendruomenėje, idėja, kad nelaisvos programos išnaudoja jų naudotojus yra žinoma. Kai kurie iš mūsų visiškai atsisakome įdiegti nuosavybinę programinę įrangą ir daug kitų nelaisvę laiko smūgiu prieš tą programą. Daug naudotojų žino, kad ši problema taikoma programiniams priedams, kuriuos naršyklės siūlo įdiegti, kadangi jie gali būti laisvi arba nelaisvi.

Bet naršyklės leidžia kitas nelaisvas programas, apie kurias jos jūsų neatsiklausia ar jums net neužsimena – programos, kurias turi, ar nurodo į, tinklapiai. Šios programos dažniausiai yra parašytos JavaScript, nors kitos kalbos taip pat yra naudojamos.

JavaScript (oficialiai vadinama ECMAScript, bet mažuma naudoja tą pavadinimą) kažkada buvo naudojama mažiems tinklapių padekoravimams, tokiems kaip miela, bet neesminė navigacija ir vaizdavimo ypatybės. Šiuos buvo priimtina laikyti paprastais HTML žymėjimo išplėtimais, o ne kaip tikrą programinę įrangą; jie reikšmingos problemos nesudarė.

Daug svetainių vis dar naudoja JavaScript tokiu būdu, bet kai kurios ją naudoja svarbioms programoms, kurios atlieka didelius darbus. Pavyzdžiui, Google Docs į jūsų mašiną bando atsiųsti JavaScript programą, kuri apima pusę megabaito, kompaktiška forma, kurią mes galėtume pavadinti Užslėpt-scenarijumi, nes joje nėra jokių komentarų ir vos keli tarpai, ir metodų pavadinimai yra vienos raidės ilgio. Programos šaltinio kodas yra pageidautina forma jos modifikavimui; kompaktiškas kodas nėra šaltinio kodas ir tikrasis šitos programos šaltinio kodas naudotojui nėra prieinamas.

Naršyklės įprastai jums nepraneša kada jos įkrauna JavaScript programas. Kai kurios naršyklės turi būdą JavaScript išjungti visiškai, bet net jei jums ši problema yra žinoma, jums kiltų daug problemų identifikuoti tas nepaprastas, nelaisvas programas ir jas užblokuoti. Tačiau, net laisvos programinės įrangos bendruomenėje dauguma naudotojų nežino apie šią problemą; naršyklių tyla linksta ją nuslėpti.

Yra įmanoma JavaScript programą išleisti laisva programine įranga, šaltinio kodą platinant pagal laisvos programinės įrangos licenciją. Jei ta programa yra savarankiška – jei jos funkcionavimas ir paskirtis yra nepriklausomi nuo puslapio, kuriame ji patalpinta – tai yra gerai; jūs ją galite nukopijuoti į failą savo mašinoje, jį modifikuoti ir atverti tą failą su naršykle jo leidimui. Bet tai yra neįprastas atvejis.

Įprastu atveju, JavaScript programos yra numatytos veikti su konkrečiu puslapiu ar svetaine ir to puslapio ar svetainės funkcionavimas priklauso nuo jų. Tada iškyla dar viena problema: net jei programos šaltinis yra prieinamas, naršyklės nesiūlo būdo leisti jūsų modifikuotą versiją vietoje originalios, kai lankomasi tame puslapyje ar svetainėje. Šis efektas yra palyginamas su tivoizacija1, nors iš principo ir ne tiek sunkus įveikti.

JavaScript nėra vienintelė tinklo svetainių naudojama kalba naudotojui atsiųstoms programoms. Flash palaiko programavimą per išplėstos JavaScript variantą; jei mes kada nors turėsime pakankamai išbaigtą, laisvą Flash grotuvą, mums reikės spręsti nelaisvų Flash programų problemą. Silverlight atrodo tikėtina sukurs problemą panašią į Flash, tik blogesnę, kadangi Microsoft ją naudoja kaip platformą nelaisvai kodavimo ir dekodavimo programinei įrangai. Laisvas Silverlight pakaitalas neatlieka darbo laisvam pasauliui, nebent jis įprastai pristatomas su pakaitine laisva kodavimo ir dekodavimo programine įranga.

Java programėlės taip pat leidžiamos naršyklėje ir kelia panašias problemas. Bendrai, bet kokio tipo programėlės sistema kelia šio tipo problemą. Laisvos vykdymo aplinkos programėlei turėjimas mus priartina tik tiek, kad susidurtume su ta problema.

Teoriškai yra įmanoma programuoti su HTML ir CSS, bet praktikoje šis gebėjimas yra ribotas ir nepatogus; net kažkokio mažmožio padarymas yra įspūdingas įkirtis. Tokios programos turėtų būti laisvos, bet CSS nėra rimta problema naudotojų laisvei 2016 m.

Išsivystė stiprus judėjimas, kuris tinklo svetaines kviečia komunikuoti tik per formatus ir protokolus, kurie yra laisvi (kai kurie sako „atviri“); taip sakant, kurių dokumentacija yra paviešinta ir kuriuos bet kas yra laisvas įgyvendinti. Su programų tinklapiuose buvimu, tas kriterijus yra būtinas, bet nepakankamas. Pati JavaScript, kaip formatas, yra laisva ir JavaScript naudojimas tinklo svetainėje nebūtinai yra blogai. Tačiau, kaip mes pamatėme anksčiau, jis taip pat nebūtinai yra gerai. Kai svetainė naudotojui persiunčia programą, nėra pakankama tai programai būti parašyta dokumentuota ir aiškia kalba; ta programa turi būti laisva, irgi. „Tik laisvos programos persiųstos naudotojui“ privalo tapti to kriterijaus dalimi tinkamam tinklo svetainių elgesiui.

Tyliai įkraunant ir leidžiant nelaisvas programas yra viena iš keleto problemų, iškeltų „tinklo aplikacijomis“. Terminas „tinklo aplikacija“ buvo suprojektuotas nepaisyti fundamentalaus skirtumo tarp programinės įrangos pristatytos naudotojams ir programinės įrangos leidžiamos serveryje. Jis gali reikšti naršyklėje leidžiamą specializuotą klientinę programą; jis gali reikšti specializuotą serverinę programinę įrangą; jis gali reikšti specializuotą klientinę programą, kuri iš vien veikia su specializuota serverine programine įranga. Kliento ir serverio pusės kelia skirtingas etines problemas, net jei jos yra taip glaudžiai integruotos, kad jos argumentuotai sudaro vienos programos dalis. Šis straipsnis nagrinėja tik kliento pusės programinės įrangos problemą. Mes nagrinėjame serverio problemą atskirai.

Praktiniais terminais, kaip mes galime elgtis su nelaisvų JavaScript programų tinklo svetainėse problema? Pirmas žingsnis yra išvengti jos leidimo.

Ką mes turime mintyje „nepaprastomis“? Tai yra laipsnio reikalas, taigi, tai yra paprasto kriterijaus, kuris duoda gerus rezultatus, projektavimo reikalas, o ne vieno teisingo atsakymo suradimas.

Mūsų preliminari politika yra JavaScript programą laikyti nepaprasta jei:

Kaip mes galime atskirti, kad JavaScript kodas yra laisvas? Šio straipsnio pabaigoje mes siūlome konvenciją, kuria nepaprasta JavaScript programa tinklapyje gali nurodyti URL kur jos šaltinio kodas randasi ir gali nurodyti jo licenciją irgi, naudojant stilizuotus komentarus.

Pabaigai, mums reikia pakeisti laisvas naršykles tinklapiuose pastebėti ir užblokuoti nepaprastą, nelaisvą JavaScript. LibreJS programa pastebi nelaisvą, nepaprastą JavaScript jūsų lankomuose puslapiuose ir ją užblokuoja. LibreJS yra IceCat ir IceWeasel (ir Firefox) priedas.

Naršyklės naudotojams taip pat reikia patogios priemonės nurodyti JavaScript kodą naudojimui vietoje JavaScript tam tikrame puslapyje. (Šis nurodytas kodas gali būti visiškas pakaitalas ar modifikuota laisvos JavaScript programos tame puslapyje versija.) Greasemonkey yra arti galėjimo šitą padaryti, bet nevisai, kadangi ji negarantuoja JavaScript kodo puslapyje modifikavimo prieš tos programos vykdymo pradžią. Vietinio įgaliojimo naudojimas veikia, bet jis dabar yra per daug nepatogus būti realiu sprendimu. Mums reikia sukonstruoti sprendimą, kuris yra patikimas ir patogus, kaip ir svetainių dalinimuisi pakeitimais. GNU projektas norėtų parekomenduoti svetaines, kurios yra dedikuotos tik laisviems pakeitimams.

Šios ypatybės padarys įmanomu JavaScript programai įtrauktai į tinklapį būti laisva realia ir praktine prasmėmis. JavaScript daugiau nebus konkreti kliūtis mūsų laisvei – ne daugiau nei C ir Java dabar yra. Mes galėsime atmesti ir net pakeisti nelaisvas, nepaprastas JavaScript programas, lygiai taip, kaip mes atmetame ir pakeičiame nelaisvus paketus, kurie yra siūlomi įdiegti įprastu būdu. Mūsų kampanija tinklo svetainėms išlaisvinti jų JavaScript gali tada prasidėti.

Tuo tarpu, yra vienas atvejis kai yra priimtina leisti nelaisvą JavaScript programą: išsiųsti nusiskundimą tinklo svetainės operatoriams, sakantį jie turėtų išlaisvinti arba pašalinti JavaScript kodą toje svetainėje. Prašome nedvejokite laikinai aktyvuoti JavaScript to padarymui – bet prisiminkite po to ją vėl išjungti.

Ačiū jums Matt Lee ir John Resig už jų pagalbą apibrėžiant mūsų pasiūlytą kriterijų, ir David Parunakian už pagalbą man šią problemą sužinoti.

A priedas: konvencija laisvų JavaScript programų išleidimui

Nuorodoms į atitinkamą šaltinio kodą, mes rekomenduojame


    // @source:

užbaigiant su URL. Tai patenkina GNU GPL reikalavimą platinti šaltinio kodą. Jei tas šaltinis yra kitoje svetainėje, jūs privalote pasirūpinti tinkamu to sutvarkymu. Šaltinio kodas programai būti laisva yra būtinas.

Įkelto į puslapį JavaScript kodo licencijos parodymui, mes rekomenduojame tos licencijos pastabos patalpinimą tarp dviejų tokios formos pastabų:



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

Žinoma, visa tai turėtų būti patalpinta keleto eilučių komentare.

GNU GPL, kaip daug kitų laisvos programinės įrangos licencijų, reikalauja licencijos kopijos platinimo su abejomis – šaltinio ir dvejetaine, programos formomis. Tačiau, GNU GPL yra pakankamai ilga, jog jos įtraukimas puslapyje su JavaScript programa gali būti nepatogus. Jūs galite tą reikalavimą pašalinti, kodui, kuriam jūs turite autorių teises, su licencijos pastaba, kaip ši:


    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.

Aš dėkoju Jaffar Rumith už mano dėmesio atkreipimą į šią problemą.

B priedas: laisvų JavaScript programų viešinimas esant žiniatinklio administratoriumi

Jei jūs esate žiniatinklio administratorius savo svetainėje dislokuojantis laisvą JavaScript programinę įrangą, viešinant informaciją apie tų failų licencijas ir šaltinio kodą aiškiai ir pastoviai jūsų lankytojams padeda užsitikrinti, kad jie leidžia laisvą programinę įrangą, ir jums padeda atitikti licencijos sąlygas.

Vienas metodas nurodyti licencijas yra tas vienas apibūdintas anksčiau A priede. Antras metodas – JavaScript licencijos tinklo etiketės, gali būti labiau patogus sumažintoms JavaScript kodo bibliotekoms, ypatingai kai jūs jų neparašėte.

Vertėjo pastabos

  1. Tivoizacija (anglų k.: tivoization) yra praktika, kai įrenginyje įdiegtą laisvą programinę įrangą gali pakeisti tik vienas gamintojas.