summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/uk/javascript-trap.html
blob: fe42706809fb0a377073a328bb396b9736020b54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
<!--#set var="PO_FILE"
 value='<a href="/philosophy/po/javascript-trap.uk.po">
 https://www.gnu.org/philosophy/po/javascript-trap.uk.po</a>'
 --><!--#set var="ORIGINAL_FILE" value="/philosophy/javascript-trap.html"
 --><!--#set var="DIFF_FILE" value="/philosophy/po/javascript-trap.uk-diff.html"
 --><!--#set var="OUTDATED_SINCE" value="2018-03-31" -->

<!--#include virtual="/server/header.uk.html" -->
<!-- Parent-Version: 1.84 -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Пастка JavaScript</title>

<!--#include virtual="/philosophy/po/javascript-trap.translist" -->
<!--#include virtual="/server/banner.uk.html" -->
<!--#include virtual="/server/outdated.uk.html" -->
<h2>Пастка JavaScript</h2>

<p><a href="http://www.stallman.org/">Річард Столмен</a></p>

<p><strong>Не виключено, що ви запускаєте невільні програми на своєму
комп'ютері кожен день, навіть не усвідомлюючи цього&nbsp;&nbsp; з вашого
браузера.</strong></p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<blockquote>
<p>Веб-майстри: існує <a
href="/software/librejs/free-your-javascript.html">декілька способів вказати
ліцензію програми на JavaScript</a> на сайті.</p>
</blockquote>

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

<p>Багатьом користувачам відомо, що це питання стосується модулів, які браузери
пропонують встановити, бо вони можуть бути вільними або невільними. Але
існують інші невільні програми, які браузери виконують, навіть не питаючи
вас і не кажучи вам про це&nbsp;&nbsp;це програми, на які посилаються або
які містять сторінки сайту. Ці програми найчастіше написані на мові
JavaScript, хоча використовуються й інші мови.</p>

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

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

<p>Багато з цих програм не тільки невільні, вони ще й шкідливі, бо що <a
href="http://github.com/w3c/fingerprinting-guidance/issues/8">шпигують за
користувачем</a>.</p>

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

<p>Є можливість зробити програму на JavaScript вільною, поширюючи вихідний код
за ліцензією вільних програм. Якщо програма самостійна&nbsp;&mdash; якщо її
робота і призначення не залежать від сторінки, на якій вона
використовується&nbsp;&nbsp; чудово; ви можете зберегти її на своїй машині,
змінити її і відкрити в браузері, щоб працювати з нею. Але так зазвичай не
роблять.</p>

<p>Зазвичай програми на JavaScript призначені для роботи з конкретною сторінкою
або конкретним сайтом, а робота сторінки залежить від цих програм. Тоді
постає інша проблема: навіть якщо вихідний текст програми доступний,
браузери не пропонують способу працювати зі зміненою вами версією замість
вихідної, коли ви відвідуєте цей сайт. Цей ефект можна порівняти з
тівоїзацією, хоча його в принципі не так важко подолати.</p>

<p>JavaScript&nbsp;&mdash; не єдина мова, на якій написані програми, що
передаються з сайтів користувачеві. Flash підтримує програмування за
допомогою розширеного варіанту мови JavaScript; якщо у нас буде хоча б
досить повноцінний вільний програвач Flash, нам буде необхідно вирішувати
проблему невільних програм на Flash. Silverlight, здається, створює
проблеми, схожі з Flash, тільки ще гірші, бо Microsoft застосовує його як
базу для невільних кодеків. Вільна заміна Silverlight не вирішить проблему
для вільного світу, якщо разом з нею не будуть поставлятися вільні заміни
кодеків.</p>

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

<p>Теоретично можливо програмувати на HTML і CSS, але на практиці ці можливості
обмежені, це незручно; для кожної крихти вимагається неабияка
майстерність. Такі програми повинні бути вільні, але на&nbsp;2016&nbsp;рік
CSS не становить серйозної проблеми для користувачів.</p>

<p>Виник потужний рух, який закликає застосовувати на сайтах тільки вільні
(деякі кажуть &ldquo;відкриті&rdquo;) формати і протоколи, тобто ті,
документація на які опублікована і які кожен вільний реалізувати. При
наявності програм на сторінках сайтів це умова необхідна, але не
достатня. Сам по собі JavaScript вільний як формат, і коли його застосовують
на сайті, це не обов'язково погано. Однак, як ми бачили вище, цього не
завжди достатньо. Коли сайт передає програму користувачеві, недостатньо, щоб
програма була написана на документованій мові, яка не викликає труднощів
мовою&nbsp;&nbsp; ця програма теж повинна бути вільна. &ldquo;Користувачу
передаються тільки вільні програми - це повинно стати частиною критерію
коректної поведінки сайтів.</p>

<p>Мовчазне завантаження та виконання невільних програм&nbsp;&mdash; одна з
кількох проблем, що порушуються &ldquo;веб-додатками&rdquo;. Термін
&ldquo;веб-додаток&rdquo; був створений, щоб стерти принципову відмінність
між програмами, які передають користувачам, і програмами, які працюють на
сервері. Він може позначати особливу клієнтську програму, яку виконує
браузер; він може позначати особливу серверну програму; він може позначати
особливу клієнтську програму, яка працює поряд із особливою серверною
програмою. Клієнтська і серверна сторони зачіпають різні етичні питання,
навіть якщо вони так тісно пов'язані, що можна стверджувати, що вони
представляють собою частини однієї програми. Ця стаття розглядає тільки
проблему програм на клієнтській стороні. Проблему серверної сторони ми
розглядаємо окремо.</p>

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

<p>Що ми розуміємо під &ldquo;нетривіальним&rdquo;? Це поняття широке, тому це
питання створення простого критерію, що дає хороші результати, а не пошук
єдиної вірної відповіді.</p>
<p>
Ми пропонуємо використовувати правило, згідно якого програма на JavaScript
нетривіальна, якщо:</p>

<ul>
  <li>вона виконує запити AJAX або завантажується з програмами, які виконують
запити AJAX, </li>

  <li>вона динамічно завантажує зовнішні програми або завантажується з
програмами,які це роблять, </li>

  <li>вона визначає функції або методи і завантажує зовнішню програму (зHTML), або
сама завантажується як така, </li>
  
  <li>вона застосовує динамічні конструкції, які важко аналізувати без
інтерпретації програми або завантажується з програмами, які застосовують
такі конструкції. До цих конструкцій відносяться: 
    <ul>
      <li>застосування функції <code>eval</code>,</li>
      <li>виклик методів із застосуванням нотації квадратних дужок, </li>
      <li>застосування будь-якої конструкції, крім рядкового літерала, з
певнимиметодами (Obj.write, Obj.createElement, ...).</li>
    </ul>
  </li>
</ul>

<p>Як ми дізнаємося, чи вільні програми на JavaScript? <a
href="/licenses/javascript-labels.html">У цій статті</a> ми пропонуємо
метод, за яким нетривіальна програма на мові JavaScript на сторінці сайту
може вказати адресу, де знаходиться її вихідний текст, а також зазначити
ліцензію за допомогою стилізованих коментарів.</p>

<p>Нарешті, нам потрібно змінити вільні браузери так, щоб вони виявляли і
блокували невільні нетривіальні програми на мові JavaScript на сторінках
сайтів. Програма <a href="/software/librejs/">LibreJS</a> виявляє невільні
нетривіальні програми на JavaScript на сторінках, які ви відвідуєте, і
блокує їх. LibreJS&nbsp;&mdash; це доповнення до IceCat, а також доступна як
доповнення до Firefox.</p>

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

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

<p>А поки виконувати невільну програму на JavaScript допустимо в одному
випадку: якщо це потрібно, щоб надіслати скаргу операторам сайту і
повідомити їм, що їм слід звільнити або видалити програми на JavaScript з
цього сайту. Будь ласка, сміливо вмикайте тимчасово JavaScript, щоб зробити
це&nbsp;&mdash; але не забудьте вимкнути його після цього. </p>

<!-- any links that used to point to the appendices should point to
     free-your-javascript.html instead.  -->
<blockquote>
<p>Веб-майстри: існує <a
href="/software/librejs/free-your-javascript.html">декілька способів вказати
ліцензію програми на JavaScript</a> на сайті.</p>
</blockquote>

<p><strong>Подяки:</strong> Безмежно вдячний <a
href="/people/people.html#mattlee">Мету Лі</a> та <a
href="http://ejohn.org">Джону Резіку</a> за їхню допомогу у визначенні
запропонованого нами критерію, і Дейвіду Парунакяну, який допоміг звернути
мою увагу на цю проблему.</p>

<div class="translators-notes">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
 </div>
</div>

<!-- for id="content", starts in the include above -->
<!--#include virtual="/server/footer.uk.html" -->
<div id="footer">
<div class="unprintable">

<p>Будь ласка, надсилайте загальні запити фонду та GNU за адресою <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Наявні також <a
href="/contact/">інші способи зв'язку</a> з фондом. Звіти про непрацюючі
посилання і інші виправлення чи пропозиції можна надсилати за адресою <a
href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>

<p>
<!-- TRANSLATORS: Ignore the original text in this paragraph,
        replace it with the translation of these two:

        We work hard and do our best to provide accurate, good quality
        translations.  However, we are not exempt from imperfection.
        Please send your comments and general suggestions in this regard
        to <a href="mailto:web-translators@gnu.org">

        &lt;web-translators@gnu.org&gt;</a>.</p>

        <p>For information on coordinating and submitting translations of
        our web pages, see <a
        href="/server/standards/README.translations.html">Translations
        README</a>. -->
Ми намагалися зробити цей переклад точним та якісним, але виключити
можливість помилки ми не можемо. Надсилайте, будь ласка, свої зауваження і
пропозиції щодо перекладу за адресою <a
href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.
</p><p>Відомості з координації та пропозицій перекладів наших статей див. у
<a href="/server/standards/README.translations.html">&ldquo;Посібнику з
перекладу&rdquo;</a>.</p>
</div>

<!-- Regarding copyright, in general, standalone pages (as opposed to
     files generated as part of manuals) on the GNU web server should
     be under CC BY-ND 4.0.  Please do NOT change or remove this
     without talking with the webmasters or licensing team first.
     Please make sure the copyright date is consistent with the
     document.  For web pages, it is ok to list just the latest year the
     document was modified, or published.
     
     If you wish to list earlier years, that is ok too.
     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
     years, as long as each year in the range is in fact a copyrightable
     year, i.e., a year in which the document was published (including
     being publicly visible on the web or in a revision control system).
     
     There is more detail about copyright years in the GNU Maintainers
     Information document, www.gnu.org/prep/maintain. -->
<p>Copyright &copy; 2009-2013, 2016, 2017, 2018 Річард Столмен</p>

<p>Ця сторінка доступна на умовах <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/deed.uk"> ліцензії
Creative Commons Attribution-NoDerivatives (<em>Із зазначенням
авторства&nbsp;&mdash; Без похідних творів</em>) 4.0 Міжнародна</a>.</p>

<!--#include virtual="/server/bottom-notes.uk.html" -->
<div class="translators-credits">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
Підтримка українського перекладу: Андрій Бандура
(andriykopanytsia@gmail.com)</div>

<p class="unprintable"><!-- timestamp start -->
Оновлено:

$Date: 2018/12/15 13:45:47 $

<!-- timestamp end -->
</p>
</div>
</div>
</body>
</html>