summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/ru/java-trap.html
blob: 886ea3046665e6cb0e2602ae769c9faa7a6697e8 (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
297
<!--#set var="ENGLISH_PAGE" value="/philosophy/java-trap.en.html" -->

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

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Свободны, но в кандалах — Западня Java - Проект GNU - Фонд свободного
программного обеспечения</title>

<!--#include virtual="/philosophy/po/java-trap.translist" -->
<!--#include virtual="/server/banner.ru.html" -->
<h2>Свободны, но в кандалах — Западня Java</h2>

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


<div class="announcement"><blockquote><h3>Вводное замечание</h3>
<p>С тех пор, как была написана эта статья, компания Sun (ныне филиал Oracle)
<a
href="http://www.fsf.org/news/fsf-welcomes-gpl-java.html">перевыпустила</a>
почти всю свою эталонную реализацию платформы Java под Стандартной
общественной лицензией GNU, и свободная среда разработки для Java теперь
есть. Таким образом, язык Java как таковой больше не западня.</p>

<p>Однако вы должны быть осторожны, поскольку не всякая платформа Java
свободна. Sun продолжает распространять в исполняемом виде платформу Java,
которая не свободна, и другие компании тоже так поступают.</p>

<p>Свободная среда для Java называется IcedTea; она включает в себя исходный
текст, освобожденный компанией Sun. Так что это та реализация, которой вам
следует пользоваться. Многие дистрибутивы GNU/Linux поставляются с IcedTea,
но некоторые включают в себя несвободные платформы Java. (Добавлено в
октябре 2015&nbsp;года: свободная реализация Java во многих дистрибутивах
GNU/Linux известна как OpenJDK.)</p>

<p>Чтобы надежно гарантировать, что ваши программы на Java будут прекрасно
выполняться в свободной среде, вам нужно разрабатывать их с помощью
IcedTea. Теоретически платформы Java должны быть совместимы, но они
совместимы не на сто процентов.</p>

<p>Кроме того, есть несвободные программы, в названии которых есть слово
&ldquo;Java&rdquo;, такие, как JavaFX, и есть несвободные пакеты Java,
которые вы, возможно, сочли бы заманчивыми, но должны отвергать. Так что
проверяйте лицензии всех пакетов, какими только вы планируете
воспользоваться. Если вы пользуетесь Swing, убедитесь, вы пользуетесь
свободной версией&nbsp;&mdash; той, что входит в состав IcedTea. (Добавлено
в октябре 2015&nbsp;года: была выпущена свободная замена JavaFX под
названием OpenFX.)</p>

<p>Не считая этих деталей, связанных с Java, общая проблема, описанная здесь,
остается важной, потому что несвободная библиотека или платформа
программирования может создать подобную же проблему. Из истории Java мы
должны извлечь урок, чтобы в будущем избежать других ловушек.</p>

<p>См. также <a href="/philosophy/javascript-trap.html"> Западня
JavaScript</a>.</p>
</blockquote>
</div>

<p>12 апреля 2004&nbsp;года</p>

<p>
  Если ваша программа свободна, она в основном этична&nbsp;&mdash; но есть
западня, которой вы должны остерегаться. Ваша программа, даже если она сама
по себе свободна, может быть ограничена несвободными программами, от которых
она зависит. Поскольку наиболее ярко эта проблема выражена сегодня для
программ на Java, мы называем это западней Java.
</p>

<p>
  Программа свободна, если у ее пользователей есть определенные жизненно
важные свободы. Грубо говоря, это свобода выполнять программу, свобода
изучать и править исходный текст, свобода перераспространять исходный текст
и двоичные файлы, а также свобода публиковать улучшенные версии.  (См. <a
href="/philosophy/free-sw.html">
http://www.gnu.org/philosophy/free-sw.html</a>.) Является ли данная
программа в виде исходного текста свободной, полностью определяется смыслом
ее лицензии.
</p>

<p>
  Может ли программа применяться в мире свободы&nbsp;&mdash; применяться
людьми, которые намерены жить свободно,&mdash; более сложный вопрос. Это
определяется не только собственной лицензией программы, потому что никакая
программа не работает изолированно. Всякая программа зависит от других
программ. Например, программу нужно скомпилировать или интерпретировать, так
что она зависит от компилятора или интерпретатора. Если она компилируется в
промежуточный псевдокод, то она зависит от интерпретатора псевдокода. Более
того, чтобы выполняться, ей нужны библиотеки, и она может вызывать другие
самостоятельные программы, которые выполняются в других процессах. Все эти
программы&nbsp;&mdash; зависимости. Зависимости могут быть необходимы для
того, чтобы программа могла хоть как-то выполняться, или только для доступа
к определенным возможностям. Как бы то ни было, вся программа или ее часть
не может функционировать без зависимостей.
</p>

<p>
  Если какая-то из зависимостей программы несвободна, это значит, что вся или
часть программы не сможет выполняться в полностью свободной
системе&nbsp;&mdash; ее нельзя использовать в мире свободы. Разумеется, мы
могли бы перераспространять эту программу и копировать ее на свои машины, но
пользы от этого не много, потому что она не станет работать. Эта программа
свободна, но фактически она скована несвободными зависимостями.
</p>

<p>
  Эта проблема может возникнуть в программах любого рода, на любом
языке. Например, свободная программа, которая выполняется только под
Microsoft Windows, явно бесполезна для мира свободы. Но программа, которая
выполняется под GNU/Linux, тоже может быть бесполезна, если она зависит от
других несвободных программ. В прошлом Motif (до того, как у нас появился
Lesstif) и Qt (до того, как его разработчики сделали его свободным) были
серьезными источниками этой проблемы. Большинство видеоплат с трехмерной
графикой в полном объеме работают только с несвободными драйверами, что тоже
создает эту проблему. Но сегодня серьезнейший источник этой
проблемы&nbsp;&mdash; Java, потому что люди, которые пишут свободные
программы, часто испытывают влечение к Java. Ослепленные притягательностью
языка, они закрывают глаза на проблему зависимостей и попадают в западню
Java.
</p>

<p>
  Реализация Java компании Sun несвободна. Стандартные библиотеки Java тоже
несвободны. Свободные реализации Java у нас есть&nbsp;&mdash; такие, как <a
href="http://gcc.gnu.org/java/">компилятор GNU языка Java</a> (GCJ) и <a
href="/software/classpath">GNU Classpath</a>,&mdash; но они поддерживают еще
не все возможности. Мы пока только догоняем.
</p>

<p>
  Если вы разрабатываете программу на Java с помощью платформы Java компании
Sun, вы, скорее всего, будете пользоваться возможностями, доступными только
для платформы Sun, даже не замечая этого. К тому времени, как вы обнаружите
это, вы, возможно, будете пользоваться ими уже многие месяцы, и на переделку
тоже уйдут месяцы. Может оказаться, что вы скажете: &ldquo;Это слишком
большая работа, чтобы начинать ее заново&rdquo;. Тогда ваша программа
провалится в западню Java; ею нельзя будет пользоваться в мире свободы.
</p>

<p>
  Надежный способ избежать западни Java&nbsp;&mdash; устанавливать в своей
системе только свободную реализацию Java. Тогда, если вы воспользуетесь
особенностью языка или библиотеки, которую свободные программы пока не
поддерживают, вы сразу же это обнаружите, и вы сможете немедленно переписать
эту часть программы.
</p>

<p>
  Sun продолжает разрабатывать дополнительные &ldquo;стандартные&rdquo;
библиотеки Java, и почти все они несвободны; во многих случаях даже
спецификации библиотеки являются коммерческой тайной, и последняя лицензия
Sun на эти спецификации запрещает выпуск чего бы то ни было, кроме полной
реализации спецификаций. (См., например, <a
href="http://jcp.org/aboutJava/communityprocess/JSPA2.pdf">
http://jcp.org/aboutJava/communityprocess/JSPA2.pdf</a> и <a
href="http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html">
http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html</a>.)
</p>

<p>
  К счастью, эта лицензия на спецификации все-таки позволяет выпускать
реализацию в качестве пакета свободных программ; другим, тем, кто получит
библиотеку, можно позволить изменять ее, и от них не требуется следовать
спецификации. Но это требование фактически запрещает применять схемы
сотрудничества для выработки свободной реализации. Применение такой схемы
подразумевало бы публикацию неполных версий, а это не позволено тем, кто
прочел спецификации.
</p>

<p>
  На заре движения за свободное программное обеспечение было невозможно
избежать зависимости от несвободных программ. До того, как у нас появился
компилятор Си GNU, каждая программа на Си (свободная или нет) зависела от
несвободного компилятора Си. До того, как у нас появилась библиотека Си GNU,
каждая программа зависела от несвободной библиотеки Си. До появления у нас
Linux, первого свободного ядра, каждая программа зависела от несвободного
ядра. До того, как у нас появился BASH, каждую программу для командного
интерпретатора приходилось выполнять в несвободном командном
интерпретаторе. Наши первые программы изначально были опутаны этими
зависимостями, это было неизбежно; но мы пошли на это, потому что в наши
планы входило последующее избавление наших программ. Наша высшая
цель&nbsp;&mdash; самодостаточная операционная система GNU&nbsp;&mdash;
содержала свободные замены всех этих зависимостей; если бы мы достигли цели,
все наши программы были бы спасены. Так и случилось: благодаря системе
GNU/Linux сейчас мы можем выполнять эти программы на свободных платформах.
</p>

<p>
  Сегодня ситуация другая. Теперь у нас есть мощные свободные операционные
системы и большое количество свободных средств разработки. Какую бы работу
вы ни хотели выполнить, вы можете делать это на свободной платформе; нет
необходимости соглашаться даже на временную несвободную зависимость. Главная
причина, по которой люди попадают сегодня в западню&nbsp;&mdash; то, что они
не думают об этом. Проще всего эту проблему решить, приучая людей ее
распознавать и не попадать в нее.
</p>

<p>
  Чтобы предохранить ваши программы на Java от этой западни, установите
свободную среду разработки Java и пользуйтесь ею. Вообще, каким бы языком вы
ни пользовались, смотрите в оба и проверяйте, свободны ли пакеты, от которых
зависят ваши программы. Самый простой способ проверить, является ли
программа свободной&nbsp;&mdash; поискать ее в Каталоге свободных программ
(<a
href="http://www.fsf.org/directory">http://www.fsf.org/directory</a>). Если
программы в каталоге нет, можно проверить, перечислены ли ее лицензии в
списке лицензий свободных программ (<a href="/licenses/license-list.html">
http://www.gnu.org/licenses/license-list.html</a>).
</p>

<p>
  Мы пытаемся спасти завязнувшие программы на Java, так что если вам нравится
этот язык, мы приглашаем вас помочь в разработке GNU Classpath. Если вы
испытаете свои программы с компилятором GCJ и GNU Classpath и расскажете о
любых проблемах, с которыми вы столкнетесь в уже реализованных классах, это
тоже будет полезно. Однако до конца разработки GNU Classpath пройдет
какое-то время; если несвободные библиотеки будут по-прежнему добавляться, у
нас, может быть, никогда не будет самых последних из них. Так что не
сажайте, пожалуйста, свои свободные программы в кандалы. Когда сегодня вы
будете писать прикладную программу, пишите ее так, чтобы она с самого начала
выполнялась на свободных средствах.
</p>

<h3>См. также:</h3>
<p><a href="/philosophy/sun-in-night-time.html">Забавный инцидент с солнцем в
ночную пору</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.ru.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>

<p>Copyright &copy; 2004, 2010, 2015 Richard Stallman</p><p>Copyright &copy;
2012, 2013, 2015 Free Software Foundation, Inc. (translation)</p>

<p>Это произведение доступно по <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/deed.ru">лицензии
Creative Commons Attribution-NoDerivs (<em>Атрибуция&nbsp;&mdash; Без
производных произведений</em>) 4.0 Всемирная</a>.</p>

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

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
<em>Внимание! В подготовке этого перевода участвовал только один человек. Вы
можете существенно улучшить перевод, если проверите его и расскажете о
найденных ошибках в <a
href="http://savannah.gnu.org/projects/www-ru">русской группе переводов
gnu.org</a>.</em></div>

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

$Date: 2015/10/03 17:28:16 $

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