summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/bg/java-trap.html
blob: 1b8953df8da19ef4b48cdd6cbf5c82e32d8cd39c (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
<!--#set var="PO_FILE"
 value='<a href="/philosophy/po/java-trap.bg.po">
 https://www.gnu.org/philosophy/po/java-trap.bg.po</a>'
 --><!--#set var="ORIGINAL_FILE" value="/philosophy/java-trap.html"
 --><!--#set var="DIFF_FILE" value=""
 --><!--#set var="OUTDATED_SINCE" value="2010-04-04" -->

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

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Свободен, но в окови - „клопката на Джава“ - Проектът GNU - Фондация за
свободен софтуер</title>

<!--#include virtual="/philosophy/po/java-trap.translist" -->
<!--#include virtual="/server/banner.bg.html" -->
<!--#include virtual="/server/outdated.bg.html" -->
<h2>Свободен, но в окови – „клопката на Джава“</h2>

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

<div class="announcement"><blockquote><h3>Встъпителна бележка</h3>
<p>През декември 2006 г., „Сън“ вече са започнали да <a
href="http://www.fsf.org/news/fsf-welcomes-gpl-java.html">преиздават своята
платформа на Джава под GNU GPL</a>.  Очакваме, че когато тази промяна на
лиценза завърши, Джава вече няма да представлява клопка.  Въпреки това, като
цяло, описаният тук въпрос ще остане важен, защото всяка несвободна
библиотека или платформа за програмиране може да причини подобен проблем.
Трябва да си вземем поука от историята на Джава, така че да избягваме други
клопки за в бъдеще.</p>

<p>Вижте също и <a href="/philosophy/javascript-trap.html">Клопката на
JavaScript</a>.</p>
</blockquote>
</div>

<p>12 април 2004 г.</p>

<p>
  Ако програмата ви е свободен софтуер, то тя по същество е етична.
Съществува обаче една клопка, за която трябва да бъдете нащрек.  Въпреки че
сама по себе си е свободна, програмата ви може да бъде ограничена от
несвободния софтуер, от който зависи.  Тъй като този проблем днес е най-ярко
изразен при програмите на Джава, наричаме го „клопката на Джава“.
</p>

<p>
  Една програма е свободен софтуер, ако потребителите ѝ притежават определени
съществени свободи.  Грубо казано, те са: свободата да изпълняват
програмата, свободата да изучават и променят изходния код, свободата да
разпространяват изходния и двоичния код, и свободата да публикуват подобрени
версии. (Вижте <a
href="/philosophy/free-sw.html">http://www.gnu.org/philosophy/free-sw.html</a>.)
Дали дадена програма е свободен софтуер зависи изцяло от волята, заложена в
лиценза ѝ.
</p>

<p>
  Дали обаче програмата може да бъде използвана в Свободния свят, дали може да
бъде използвана от хора, които са решени да живеят в свобода, е по-сложен
въпрос.  Това не се определя само от лиценза на програмата, понеже нито една
програма не работи в изолация.  Всяка програма зависи от други програми.
Например, ако дадена програма има нужда да бъде компилирана или
интерпретирана, то тя зависи от компилатор или интерпретатор.  Ако е
компилирана до байткод, то тя зависи от интерпретатор на байткод.  Освен
това, за да бъде изпълнявана, програмата се нуждае и от библиотеки.  Също
така програмата би могла да извиква други самостоятелни програми, които се
изпълняват като отделни процеси.  Всички тези програми са зависимости.
Зависимостите може да са необходими, за да бъде изобщо изпълнена програмата,
но може и да са нужни само за да функционират някои нейни възможности.  Така
или иначе, цялата програма или част от нея не може да работи без
зависимостите.
</p>

<p>
  Ако някои от зависимостите на програмата са несвободни, то това означава, че
цялата програма или част от нея не може да бъде изпълнена върху напълно
свободна система — тя е безполезна в Свободния свят.  Разбира се, ние можем
да разпространяваме програмата и да притежаваме нейни копия върху машините
си, но от това няма голяма полза, щом не можем да я изпълняваме.  Тази
програма е свободен софтуер, но на практика е окована от своите несвободни
зависимости.
</p>

<p>
  Този проблем може да възникне с всеки вид софтуер, на какъвто и да е език за
програмиране.  Например, една свободна програма, която се изпълнява само
върху Майкрософт Уиндоус, е очевидно безполезна в Свободния свят.  Но
софтуерът, който се изпълнява върху GNU/Линукс също може да бъде безполезен,
ако зависи от друг несвободен софтуер.  В миналото, Мотиф (преди да имаме
ЛесТиф) и библиотеката „Кю ти“ (преди разработчиците ѝ да я направят
свободен софтуер) бяха основните причини за този проблем.  Повечето
видеокарти с тримерно ускорение работят пълнофункционално само с несвободни
драйвери, което също води до този проблем.  Но днес основният източник на
проблема е Джава, защото хората, които пишат свободен софтуер, често
чувстват, че Джава е секси.  Заслепени от привличането си към езика, те
пренебрегват въпроса със зависимостите и така попадат в „клопката на Джава“.
</p>

<p>
  Реализацията на Джава от „Сън“ е несвободна.  Стандартните библиотеки на
Джава също са несвободни.  Ние разполагаме със свободни реализации на Джава,
като например <a href="http://gcc.gnu.org/java/"> компилатора на GNU за
Джава</a> (GCJ) и <a href="/software/classpath">GNU Класпат</a> (GNU
Classpath), но те все още не поддържат напълно всички възможности. Все още
наваксваме.
</p>

<p>
  Ако разработвате програма на Джава върху платформата на Джава от „Сън“,
съществува опасност да използвате възможности, специфични само за „Сън“, без
дори да забележите.  След време, когато откриете това, може да са минали
месеци, а пренаписването на тези части от програмата може да отнеме още
месеци.  Бихте могли да кажете: „Това е твърде много работа, за да се
започне отначало.“  В този момент програмата ви ще е попаднала в „клопката
на Джава“.  Програмата ви ще е безполезна в Свободния свят.
</p>

<p>
  Сигурният начин да избегнете „клопката на Джава“ е да разполагате само със
свободна реализация на Джава върху системата си.  Тогава, ако използвате
възможност на Джава или библиотека, която свободния софтуер все още не
поддържа, ще откриете това незабавно и ще можете веднага да пренапишете кода
си.
</p>

<p>
  „Сън“ продължава да разработва допълнителни „стандартни“ библиотеки на Джава
и почти всички те са несвободни.  В много случаи, дори спецификацията на
библиотеката представлява търговска тайна, а последният лиценз на „Сън“ за
тези спецификации забранява издаването на непълни реализации на
спецификацията. (Вижте например <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 за Си, всяка програма зависеше от
несвободна библиотека за Си.  Преди да имаме Линукс, първото свободно ядро,
всяка програма зависеше от несвободно ядро.  Преди да имаме Bash, всеки
скрипт на обвивката трябваше да бъде интерпретиран от несвободна обвивка.
Бе неизбежно първите ни програми да бъдат обременени от тези зависимости, но
ние приехме това, понеже последващото отърваване на тези програми бе част от
нашия план.  Нашата голяма цел — самостоятелна операционна система GNU —
включваше свободни заместители на всички тези зависимости.  Ако постигнехме
целта си, тогава всички програми биха били отървани.  Така и стана — със
системата GNU/Линукс вече можем да изпълняваме тези програми върху свободни
платформи.
</p>

<p>
  Ситуацията днес е различна.  Сега разполагаме с мощни свободни операционни
системи и много свободни средства за програмиране.  Каквато и задача да
захванете, можете да я извършите върху свободна платформа — няма нужда да
приемате несвободна зависимост, даже дори временно.  Днес основната причина,
поради която хората попадат в клопката е, че не мислят за нея.  Най-лесното
решение на проблема е да се обясни на хората да не попадат в клопката.
</p>

<p>
  За да предпазите кода си от „клопката на Джава“, инсталирайте свободна среда
за разработване на Джава и я използвайте.  По-общо казано, какъвто и език да
използвате, отваряйте си очите на четири и проверявайте дали са свободни
програмите, от които зависи кода ви.  Най-лесният начин да проверите дали
дадена програма е свободна е да погледнете за нея в Указателя на свободен
софтуер (<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>
  Опитваме се да отървем програмите на Джава, които са хванати в капана.  Така
че, ако харесвате езика Джава, каним ви да помогнете при разработването на
GNU Класпат.  Също би било полезно изпробването на програмите ви с
компилатора GCJ и GNU Класпат и докладването на всякакви проблеми, на които
сте се натъкнали при вече реализираните класове.  Все пак, завършването на
GNU Класпат ще отнеме време — ако постоянно продължават да се добавят
несвободни библиотеки, може винаги да ни липсват последните от тях.  Така
че, моля ви, не оковавайте свободния си софтуер.  Днес, когато пишете
свободна приложна програма, пишете я така, че от самото начало да се
изпълнява върху свободни средства.
</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.bg.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">Документацията
за преводачи</a> за информация за координирането и подаването на преводи на
тази статия.</p>
</div>

<p>Copyright &copy; 2004 Ричард Столман</p>

<p>Може да копирате и разпространявате тази статия според условията на <a
rel="license" href="http://creativecommons.org/licenses/by-nd/4.0/">Криейтив
Комънс „Признание-Без производни произведения“ 4.0</a>.</p>

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

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
<b>Превод</b>: Калоян Доганов <a
href="mailto:kaloian@doganov.org">&lt;kaloian@doganov.org&gt;</a>, 2006 г.</div>

<p class="unprintable"><!-- timestamp start -->
Последно обновяване:

$Date: 2017/03/24 12:24:01 $

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