Цей переклад може не відображати змін, внесених із 2018-03-31 у англійський оригінал.
Ви можете поглянути на ці зміни. Будь-ласка перегляньте файл README стосовно перекладів для того, щоб отримати інформацію про координування перекладів цієї статті.
Пастка JavaScript
Не виключено, що ви запускаєте невільні програми на своєму комп'ютері кожен день, навіть не усвідомлюючи цього з вашого браузера.
Веб-майстри: існує декілька способів вказати ліцензію програми на JavaScript на сайті.
Спільнота вільного програмного забезпечення добре знайома з ідеєю, що невільні програми несправедливі стосовно користувачів. Деякі з нас захищають нашу свободу, відкидаючи всякі невільні програми на наших комп'ютерах. Багато інші вважають закритість програми серйозним недоліком.
Багатьом користувачам відомо, що це питання стосується модулів, які браузери пропонують встановити, бо вони можуть бути вільними або невільними. Але існують інші невільні програми, які браузери виконують, навіть не питаючи вас і не кажучи вам про це це програми, на які посилаються або які містять сторінки сайту. Ці програми найчастіше написані на мові JavaScript, хоча використовуються й інші мови.
JavaScript (офіційно званий “ECMAScript”, але мало хто вживає цю назву) колись застосовували для дрібних надмірностей на сторінках Інтернету, таких, як цікаві, але несуттєві деталі відображення і навігації. Було допустимо розглядати їх просто як доповнення до розмітки HTML, а не як справжні програми; вони не становили значущої теми для обговорення.
Багато сайтів досі використовують JavaScript таким чином, але деякі застосовують його для великих програм, які вирішують серйозні завдання. Наприклад, “Google Docs” встановлює на вашій машині програму на JavaScript, що займає півмегабайта в стислому вигляді, який ми називаємо “Obfuscript” (заплутаний сценарій), тому що там немає коментарів і майже немає пропусків, а назви методів складаються з однієї літери. Вихідний текст програми це форма, бажана для зміни програми; стиснутий текст не є вихідним кодом, і справжній вихідний код недоступний користувачеві.
Багато з цих програм не тільки невільні, вони ще й шкідливі, бо що шпигують за користувачем.
Браузери зазвичай не повідомляють вам про те, що вони завантажують програми на JavaScript. В деяких браузерах є спосіб повністю вимкнути JavaScript, але навіть якщо ви знайомі з цією проблемою, вам було б достатньо важко розпізнати змістовні невільні програми і заблокувати їх. Однак навіть у спільноті вільного програмного забезпечення більшість користувачів не знає про цю проблему; мовчання браузерів не виставляє її напоказ.
Є можливість зробити програму на JavaScript вільною, поширюючи вихідний код за ліцензією вільних програм. Якщо програма самостійна — якщо її робота і призначення не залежать від сторінки, на якій вона використовується чудово; ви можете зберегти її на своїй машині, змінити її і відкрити в браузері, щоб працювати з нею. Але так зазвичай не роблять.
Зазвичай програми на JavaScript призначені для роботи з конкретною сторінкою або конкретним сайтом, а робота сторінки залежить від цих програм. Тоді постає інша проблема: навіть якщо вихідний текст програми доступний, браузери не пропонують способу працювати зі зміненою вами версією замість вихідної, коли ви відвідуєте цей сайт. Цей ефект можна порівняти з тівоїзацією, хоча його в принципі не так важко подолати.
JavaScript — не єдина мова, на якій написані програми, що передаються з сайтів користувачеві. Flash підтримує програмування за допомогою розширеного варіанту мови JavaScript; якщо у нас буде хоча б досить повноцінний вільний програвач Flash, нам буде необхідно вирішувати проблему невільних програм на Flash. Silverlight, здається, створює проблеми, схожі з Flash, тільки ще гірші, бо Microsoft застосовує його як базу для невільних кодеків. Вільна заміна Silverlight не вирішить проблему для вільного світу, якщо разом з нею не будуть поставлятися вільні заміни кодеків.
Аплети на мові Java теж виконуються в браузері і призводять до схожих проблем. Взагалі кажучи, будь-яка система аплетів призводить до проблем цього роду. Наявність вільного середовища для виконання аплетів приводить нас тільки до постановки цього питання.
Теоретично можливо програмувати на HTML і CSS, але на практиці ці можливості обмежені, це незручно; для кожної крихти вимагається неабияка майстерність. Такі програми повинні бути вільні, але на 2016 рік CSS не становить серйозної проблеми для користувачів.
Виник потужний рух, який закликає застосовувати на сайтах тільки вільні (деякі кажуть “відкриті”) формати і протоколи, тобто ті, документація на які опублікована і які кожен вільний реалізувати. При наявності програм на сторінках сайтів це умова необхідна, але не достатня. Сам по собі JavaScript вільний як формат, і коли його застосовують на сайті, це не обов'язково погано. Однак, як ми бачили вище, цього не завжди достатньо. Коли сайт передає програму користувачеві, недостатньо, щоб програма була написана на документованій мові, яка не викликає труднощів мовою ця програма теж повинна бути вільна. “Користувачу передаються тільки вільні програми - це повинно стати частиною критерію коректної поведінки сайтів.
Мовчазне завантаження та виконання невільних програм — одна з кількох проблем, що порушуються “веб-додатками”. Термін “веб-додаток” був створений, щоб стерти принципову відмінність між програмами, які передають користувачам, і програмами, які працюють на сервері. Він може позначати особливу клієнтську програму, яку виконує браузер; він може позначати особливу серверну програму; він може позначати особливу клієнтську програму, яка працює поряд із особливою серверною програмою. Клієнтська і серверна сторони зачіпають різні етичні питання, навіть якщо вони так тісно пов'язані, що можна стверджувати, що вони представляють собою частини однієї програми. Ця стаття розглядає тільки проблему програм на клієнтській стороні. Проблему серверної сторони ми розглядаємо окремо.
Як на практиці ми можемо вирішувати проблему нетривіальних невільних програм на мові JavaScript на сайтах? Перший крок уникати їх виконання.
Що ми розуміємо під “нетривіальним”? Це поняття широке, тому це питання створення простого критерію, що дає хороші результати, а не пошук єдиної вірної відповіді.
Ми пропонуємо використовувати правило, згідно якого програма на JavaScript нетривіальна, якщо:
- вона виконує запити AJAX або завантажується з програмами, які виконують запити AJAX,
- вона динамічно завантажує зовнішні програми або завантажується з програмами,які це роблять,
- вона визначає функції або методи і завантажує зовнішню програму (зHTML), або сама завантажується як така,
- вона застосовує динамічні конструкції, які важко аналізувати без
інтерпретації програми або завантажується з програмами, які застосовують
такі конструкції. До цих конструкцій відносяться:
- застосування функції
eval
, - виклик методів із застосуванням нотації квадратних дужок,
- застосування будь-якої конструкції, крім рядкового літерала, з певнимиметодами (Obj.write, Obj.createElement, ...).
- застосування функції
Як ми дізнаємося, чи вільні програми на JavaScript? У цій статті ми пропонуємо метод, за яким нетривіальна програма на мові JavaScript на сторінці сайту може вказати адресу, де знаходиться її вихідний текст, а також зазначити ліцензію за допомогою стилізованих коментарів.
Нарешті, нам потрібно змінити вільні браузери так, щоб вони виявляли і блокували невільні нетривіальні програми на мові JavaScript на сторінках сайтів. Програма LibreJS виявляє невільні нетривіальні програми на JavaScript на сторінках, які ви відвідуєте, і блокує їх. LibreJS — це доповнення до IceCat, а також доступна як доповнення до Firefox.
Користувачам браузера потрібен також зручний механізм для вказівки програм, які потрібно використовувати замість програм на певній сторінці. (Зазначені програми можуть бути повною заміною або тільки зміненою версією вільних програм з тієї сторінки.) Greasemonkey наближається до цього, але не зовсім, тому що не гарантує, що програма зі сторінки буде змінена перед тим, як ця програма починає виконуватися. Можна використовувати локальний проксі-сервер, але це дуже непрактично для реального вирішення. Нам потрібно побудувати рішення, яке буде надійним і зручним, так само як і сайти для обміну модифікаціями. Проект GNU хотів би рекомендувати сайти, виділені тільки для вільних змін.
Ці особливості будуть дозволяти програмі на JavaScript зі сторінок сайту бути по-справжньому вільною у практичному сенсі. JavaScript більше не буде особливою перешкодою на шляху до нашої свободи — не більше, ніж C і Java зараз. Ми зможемо відкидати і навіть замінювати невільні нетривіальні програми на мові JavaScript точно так само, як ми відкидаємо і замінюємо невільні пакети, запропоновані для встановлення звичайним чином. Тоді ми зможемо почати кампанію по звільненню JavaScript на сайтах.
А поки виконувати невільну програму на JavaScript допустимо в одному випадку: якщо це потрібно, щоб надіслати скаргу операторам сайту і повідомити їм, що їм слід звільнити або видалити програми на JavaScript з цього сайту. Будь ласка, сміливо вмикайте тимчасово JavaScript, щоб зробити це — але не забудьте вимкнути його після цього.
Веб-майстри: існує декілька способів вказати ліцензію програми на JavaScript на сайті.
Подяки: Безмежно вдячний Мету Лі та Джону Резіку за їхню допомогу у визначенні запропонованого нами критерію, і Дейвіду Парунакяну, який допоміг звернути мою увагу на цю проблему.