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

Thanks to your support, 2015 marks 30 years of the FSF! In the next 30 years, we want to do even more to defend computer user rights. To kick off in that direction, we're setting our highest-ever fundraising goal of $525,000 by January 31st. Read more.

$525K
29% (155K)
Count me in

Це переклад оригінальної сторінки з англійської мови.

Пастка JavaScript

Річард Столмен

Не виключено, що ви запускаєте невільні програми на своєму комп'ютері кожен день, навіть не усвідомлюючи цього   з вашого браузера.

Спільнота вільного програмного забезпечення добре знайома з ідеєю, що невільні програми несправедливі по відношенню до користувачів. Деякі з нас принципово відмовляються встановлювати невільні програми, багато інших вважають закритість програми серйозним недоліком. Багатьом користувачам відомо, що це питання стосується модулів, які браузери пропонують встановити, бо вони можуть бути вільними чи невільними.

Але існують інші невільні програми, які браузери виконують, навіть не питаючи вас і не кажучи вам про це  це програми, на які посилаються або які містять сторінки сайту. Ці програми найчастіше написані на мові JavaScript, хоча використовуються й інші мови.

JavaScript (офіційно званий “ECMAScript”, але мало хто вживає цю назву) колись застосовували для дрібних надмірностей на сторінках Інтернету, таких, як цікаві, але несуттєві деталі відображення і навігації. Було допустимо розглядати їх просто як доповнення до розмітки HTML, а не як справжні програми; вони не становили значущого предмета для обговорення.

Багато сайтів досі використовують JavaScript таким чином, але деякі застосовують його для великих програм, які вирішують серйозні завдання. Наприклад, “Google Docs” встановлює на вашій машині програму на JavaScript, що займає півмегабайта, в стислому вигляді, який ми називаємо “Obfuscript” (заплутаний сценарій), тому що там немає коментарів і майже немає пропусків, а назви методів складаються з однієї літери. Вихідний текст програми   це форма, бажана для зміни програми; стиснутий текст не є вихідним кодом, і справжній вихідний код недоступний користувачеві.

Браузери зазвичай не повідомляють вам про те, що вони завантажують програми на JavaScript. В більшості браузерів є спосіб повністю вимкнути JavaScript, але жоден з них не може розпізнати нетривіальну і невільну програму на JavaScript. Навіть якщо ви знайомі з цією проблемою, вам було б досить важко розпізнати і заблокувати ці програми. Однак, навіть у спільноті вільного програмного забезпечення більшість користувачів не знає про цю проблему; мовчання браузерів не виставляє її напоказ.

Є можливість зробити програму на JavaScript вільної, поширюючи вихідний код за ліцензією вільних програм. Але навіть якщо вихідний код програми доступний, немає простого способу виконувати змінену вами версію замість первісної. Сучасні вільні браузери не пропонують можливості виконувати вашу змінену версію замість тієї, що була доставлена зі сторінкою. Цей ефект можна порівняти з тивоїзацією, хоча його не так важко подолати.

JavaScript — не єдина мова, на якій написані програми, що передаються з сайтів користувачеві. Flash підтримує програмування з допомогою розширеного варіанту мови JavaScript. Нам буде необхідно вивчити питання про Flash, щоб давати відповідні рекомендації. Silverlight, здається, створює проблеми, подібні з Flash, тільки ще гірше, бо Microsoft застосовує його як базу для невільних кодеків. Вільна заміна Silverlight не вирішить проблему для вільного світу, якщо разом з нею не будуть поставлятися вільні заміни кодеків.

Аплети на мові Java теж виконуються в браузері і призводять до схожих проблем. Взагалі кажучи, будь-яка система аплетів призводить до проблем цього роду. Наявність вільного середовища для виконання аплетів приводить нас тільки до постановки цього питання.

Виник потужний рух, який закликає застосовувати на сайтах тільки вільні (деякі кажуть “відкриті”) формати і протоколи, тобто ті, документація на які опублікована і які кожен вільний реалізувати. При наявності програм на сторінках сайтів це умова необхідна, але не достатня. Сам по собі JavaScript вільний як формат, і коли його застосовують на сайті, це не обов'язково погано. Однак, як ми бачили вище, цього не завжди достатньо. Коли сайт передає програму користувачеві, недостатньо, щоб програма була написана на документованій мові, яка не викликає труднощів мовою   ця програма теж повинна бути вільна. “Користувачу передаються тільки вільні програми - це повинно стати частиною критерію коректної поведінки сайтів.

Мовчазна завантаження і виконання невільних програм   одне з декількох питань, що порушуються “веб-програмами”. Термін “веб-програма” був створений, щоб стерти принципову відмінність між програмами, які передають користувачам,і програмами, які працюють на сервері. Він може позначати особливу клієнтську програму, яку виконує браузер; він може позначати особливу серверну програму; він може позначати особливу клієнтську програму, яка працює пліч-о-пліч з особливою серверною програмою. Клієнтська і серверна сторонизачіпають різні етичні питання, навіть якщо вони так тісно пов'язані, що можна стверджувати, що вони представляють собою частини однієї програми. Ця стаття розглядає тільки питання програм на клієнтській стороні. Питання серверної сторони ми розглядаємо окремо.

Як на практиці ми можемо вирішувати проблему невільних програм на мові JavaScript на сайтах? Перший крок   уникати їх виконання.

Що ми розуміємо під “нетривіальним”? Це поняття широке, тому це питання створення простого критерію, що дає хороші результати, а не пошук єдиної вірної відповіді.

Ми пропонуємо використовувати правило, згідно якого програма на JavaScript нетривіальна, якщо:

Як ми дізнаємося, чи вільні програми на JavaScript? У цій статті ми пропонуємо порядок, в якому нетривіальна програма на мові JavaScript на сторінці сайту може вказати адресу, за якою знаходиться її вихідний текст, а також може вказати і ліцензію з допомогою стилізованих коментарів.

Нарешті, нам потрібно змінити вільні браузери так, щоб вони виявляли і блокували невільні нетривіальні програми на мові JavaScript на сторінках сайтів. Програма LibreJS виявляє невільні нетривіальні програми на JavaScript на сторінках, які ви відвідуєте, і блокує їх. LibreJS — це доповнення до IceCat і IceWeasel (і Firefox).

Користувачам браузера потрібен також зручний механізм для вказівки програм, які потрібно використовувати замість програм на певній сторінці. (Зазначені програми можуть бути повною заміною або тільки зміненою версією вільних програм з тієї сторінки.) Greasemonkey наближається до цього, але не зовсім, тому що не гарантує, що програма зі сторінки буде змінена перед тим, як ця програма починає виконуватися. Можна використовувати локальний проксі-сервер, але це дуже непрактично для реального вирішення. Нам потрібно побудувати рішення, яке буде надійним і зручним, так само як і сайти для обміну модифікаціями. Проект GNU хотів би рекомендувати сайти, виділені тільки для вільних змін.

Ці особливості будуть дозволяти програмі на JavaScript зі сторінок сайту бути по-справжньому вільною у практичному сенсі. JavaScript більше не буде особливою перешкодою на шляху до нашої свободи — не більше, ніж C і Java зараз. Ми зможемо відкидати і навіть замінювати невільні нетривіальні програми на мові JavaScript точно так само, як ми відкидаємо і замінюємо невільні пакети, запропоновані для встановлення звичайним чином. Тоді ми зможемо почати кампанію по звільненню JavaScript на сайтах.

А поки виконувати невільну програму на JavaScript допустимо в одному випадку: якщо це потрібно, щоб надіслати скаргу операторам сайту і повідомити їм, що їм слід звільнити або видалити програми на JavaScript з цього сайту. Будь ласка, сміливо вмикайте тимчасово JavaScript, щоб зробити це — але не забудьте вимкнути його після цього.

Подяка Мету Лі та Джону Резігу за їх допомогу у визначенні пропонованого нами критерію, і Дейвіду Парунакяну, який допоміг звернути мою увагу на цю проблему.

Додаток A: угода про публікацію вільних програм на JavaScript

Для посилань на вихідний код ми рекомендуємо


    // @source:

з подальшим URL. Це задовольняє вимогам GNU GPL по розповсюдженнювихідного коду. Якщо вихідний код знаходиться на іншому сайті, ви повинніподбати про те, щоб прийняти відповідні заходи.Вихідний код необхідний, щоб програма була вільною.

Щоб вказати ліцензію програм на JavaScript з конкретної сторінки, ми рекомендуємо додавати зауваження про ліцензії між двома зауваженнями такого виду:



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

Звичайно, все це має бути поміщене у коментар.

Ліцензія GNU GPL, як і багато інших ліцензій вільних програм, вимагає, щоб копія ліцензії поширювалася як з вихідним кодом, так і з двійковими формами програми. Однак, текст ліцензії досить великий, тому розміщувати його на сторінці з програмою на JavaScript було б незручно. Для програм, авторські права на які належать вам, ви можете замінити цю вимогу на зауваження, подібне до цього:


    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.

Я дякую Джафару Руміту (Jaffar Rumith) за те, що він звернув мою увагу на це питання.

Додаток B: публікація вільних програм на JavaScript розробниками сайтів

Якщо ви розробник сайту і застосовуєте вільні програми на JavaScript на своєму сайті, то чітка і однакова публікація відомостей про ліцензії та вихідні коди цих файлів допоможе вашим відвідувачам упевнитися, що вони виконують вільні програми і допоможе вам задовольнити умовам ліцензій.

Один метод оголошення про ліцензії   описаний вище в Додатку A. Другий метод, ліцензійні мітки про JavaScript, може бутизручнішим для бібліотек мінімізованих програм на JavaScript, особливоколи їх не написали ви.

[логотип ФВПЗ]“Наша місія    збереження, захист та підтримка свободи використання, вивчення, модифікації, копіювання і розповсюдження комп'ютерних програм, а також захист прав користувачів вільних програм”.

Фонд вільного програмного забезпечення - це провідна організація, відповідальна за розробку операційної системи GNU. Підтримайте GNU і ФВПЗ покупкою посібників і інших товарів, приєднанням до ФВПЗ в якості члена-партнера або пожертвуваннями прямо у фонд чи черезFlattr.

перейти на початок