summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/pl/javascript-trap.html
blob: 08711c43876db6ae7d77f2bf79640a039d1cccd6 (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
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
<!--#set var="PO_FILE"
 value='<a href="/philosophy/po/javascript-trap.pl.po">
 https://www.gnu.org/philosophy/po/javascript-trap.pl.po</a>'
 --><!--#set var="ORIGINAL_FILE" value="/philosophy/javascript-trap.html"
 --><!--#set var="DIFF_FILE" value="/philosophy/po/javascript-trap.pl-diff.html"
 --><!--#set var="OUTDATED_SINCE" value="2016-03-27" -->

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

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Pułapka JavaScript'u</title>

<!--#include virtual="/philosophy/po/javascript-trap.translist" -->
<!--#include virtual="/server/banner.pl.html" -->
<!--#include virtual="/server/outdated.pl.html" -->
<h2>Pułapka JavaScript'u</h2>

<p><a href="http://www.stallman.org/">Richard Stallman</a></p>

<p><strong>Możliwe, że&nbsp;korzystasz z&nbsp;niewolnych programów
na&nbsp;swoim komputerze każdego dnia &mdash; przez przeglądarkę
internetową</strong></p>

<p>W&nbsp;społeczności wolnego oprogramowania, znana jest idea tego,
że&nbsp;niewolne programy źle traktują użytkowników. Niektórzy z&nbsp;nas
całkowicie odmawiają instalacji prawnie zastrzeżonego oprogramowania,
a&nbsp;wielu innych fakt bycia niewolnym uważa za&nbsp;wadę programu. Wielu
użytkowników jest świadomych tego, że&nbsp;kwestia ta ma zastosowanie
do&nbsp;wtyczek oferowanych do&nbsp;instalacji przez przeglądarki, jako
że&nbsp;mogą one być wolne bądź&nbsp;niewolne.</p>

<p>Jednak&nbsp;przeglądarki uruchamiają inne niewolne programy, o co nie pytają
użytkowników ani&nbsp;nawet ich o tym nie informują &mdash; programy zawarte
bezpośrednio bądź&nbsp;przez odnośnik na&nbsp;stronach internetowych. Te
programy najczęściej napisane są w&nbsp;JavaScript, choć&nbsp;wykorzystywane
są także i&nbsp;inne języki.</p>

<p>JavaScript (oficjalnie nazywany ECMAScript, choć&nbsp;niewielu korzysta
z&nbsp;tej nazwy) był dawniej wykorzystywany do&nbsp;drobnych upiększeń
na&nbsp;stronach internetowych, takich jak ładne, lecz&nbsp;nieistotne
elementy nawigacji bądź&nbsp;wyświetlania. Dopuszczalnym było traktowanie
ich jedynie jako rozszerzenia znaczników HTML, raczej niż prawdziwe
oprogramowanie; nie stanowiły one znaczącej kwestii.</p>

<p>Wiele stron korzysta z&nbsp;JavaScript w&nbsp;ten sposób,
jednak&nbsp;niektóre wykorzystują go do&nbsp;większych programów
wykonujących duże zadania. Przykładowo, Google Docs próbuje pobrać
na&nbsp;maszynę użytkownika program JavaScript o objętości pół megabajta,
upakowany w&nbsp;formie, którą nazwać można Obfuscriptem (celowo
nieczytelnie napisany kod) ponieważ&nbsp;nie posiada żadnych komentarzy
i&nbsp;prawie żadnych białych znaków, a&nbsp;nazwy metod są
jednoliterowe. Kod źródłowy programu jest preferowaną formą do&nbsp;jego
modyfikacji; upakowany kod nie jest kodem źródłowym,
natomiast&nbsp;prawdziwy kod źródłowy tego programu nie jest dostępny dla
użytkownika.</p>

<p>Przeglądarki normalnie nie informują użytkownika kiedy ładują programy
JavaScript. Niektóre przeglądarki ma możliwość by wyłączyć JavaScript
całkowicie, jednak&nbsp;nawet jeśli o tym wiesz, jest nieoczywiste jak
rozróżnić nietrywialne niewolne oprogramowanie i&nbsp;je zablokować. Jednak,
nawet w&nbsp;społeczności wolnego oprogramowania, większość użytkowników nie
jest świadoma tej kwestii; milczenie przeglądarek sprzyja zaś&nbsp;zatajaniu
tego.</p>

<p>Jest możliwym wydanie programu JavaScript jako wolnego oprogramowania, przez
dystrybucję kodu objętego licencją wolnego oprogramowania. Jeśli program
jest samowystarczalny&nbsp;&ndash; jeśli jego funkcja czy&nbsp;cel są
niezależne od&nbsp;strony na&nbsp;której jest&nbsp;&ndash; to jest
w&nbsp;porządku; możecie skopiować program do&nbsp;pliku na&nbsp;komputerze,
zmodyfikować go i&nbsp;odwiedzić w&nbsp;przeglądarce aby&nbsp;go
uruchomić. Ale&nbsp;to nietypowy przypadek.</p>

<p>Zwykle programy JavaScript są zaprojektowane aby&nbsp;działać
z&nbsp;konkretną stroną czy&nbsp;witryną i&nbsp;strona czy&nbsp;witryna
wymaga ich do&nbsp;funkcjonowania. Wtedy jest dodatkowy problem: nawet jeśli
jest kod źródłowy programu, przeglądarki nie oferują udogodnień
umożliwiających uruchomienie własnej zmodyfikowanej wersji zamiast tej
dostarczanej na&nbsp;stronie. Efekt jest porównywalny do&nbsp;tivoizacji
(ang. tivoization - od&nbsp;urządzenia TiVo), jednak&nbsp;nie jest on aż tak
trudny do&nbsp;obejścia.</p>

<p>JavaScript nie jest jedynym językiem w&nbsp;którym strony przesyłają
programy. Flash umożliwia programowanie poprzez&nbsp;rozszerzony wariant
JavaScript; jeśli kiedykolwiek będziemy mieli wystarczająco kompletny,
wolny, program do&nbsp;odtwarzania Flash, będziemy musieli się uporać
z&nbsp;niewolnymi programami Flash. Silverlight wydaje się stwarzać problemy
podobne do&nbsp;Flasha, jedynie gorsze, skoro Microsoft używa go jako
platformy do&nbsp;niewolnych kodeków. Wolne zastępstwo Silverlight nie
byłoby wystarczające dla wolnego świata chyba, że&nbsp;standardowo zawiera
wolne zastępcze kodeki.</p>

<p>Aplety Java także są uruchamiane w&nbsp;przeglądarce i&nbsp;wzbudzają
podobne kłopoty. Ogólnie rzecz biorąc, każdy typ systemu apletów stanowi
tego typu zagrożenie. Posiadanie wolnego środowiska wykonawczego dla apletu
jedynie przybliża nas aby&nbsp;bezpośrednio zetknąć się z&nbsp;sednem
sprawy.</p>

<p>Teoretycznie jest możliwe aby&nbsp;programować w&nbsp;HTML i&nbsp;CSS,
ale&nbsp;w praktyce jest to ograniczone i&nbsp;niewygodne;
aby&nbsp;cokolwiek zrobiło to już dobre przedsięwzięcie. Takie programy
powinny być wolne, ale&nbsp;CSS nie jest poważnym problemem dla wolności
użytkowników w&nbsp;roku 2016.</p>

<p>Powstał silny ruch który domaga się od&nbsp;stron internetowych by
komunikowały się jedynie przez formaty i&nbsp;protokoły, które są wolne
(niektórzy powiedzą &bdquo;otwarte&rdquo;); a&nbsp;więc takich, których
dokumentacja została opublikowana i&nbsp;które każdy może
zaimplementować. Z&nbsp;obecnością programów na&nbsp;stronach internetowych,
takie kryterium jest konieczne, lecz&nbsp;nie wystarczające. JavaScript sam
w&nbsp;sobie, jako format, jest wolny, a&nbsp;wykorzystanie JavaScript
w&nbsp;na stronie internetowej samo w&nbsp;sobie nie jest złe. Jednak, jak
widać po&nbsp;powyższych przykładach, nie jest to automatycznie
w&nbsp;porządku. Kiedy strona przesyła program do&nbsp;użytkowanika, nie
jest wystarczającym by program był napisany w&nbsp;udokumentowanym
i&nbsp;nieobciążonym języku; taki program musi być także
wolny. &bdquo;Jedynie wolne programy przesyłane do&nbsp;użytkownika&rdquo;
mogą stać się częścią kryterium dla poprawnego zachowania się stron
internetowych.</p>

<p>Ciche ładowanie i&nbsp;uruchamianie niewolnych programów jest jedną
z&nbsp;wielu kwestii wnoszonych przez &bdquo;aplikacje
sieciowe&rdquo;. Termin &bdquo;aplikacji sieciowych&rdquo; został
zaprojektowany by ignorować fundamentalne różnice między oprogramowaniem
dostarczonym do&nbsp;użytkowników, a&nbsp;oprogramowaniem działającym
na&nbsp;serwerze. Może się on odnosić do&nbsp;wyspecjalizowanego programu
uruchamianego bezpośrednio w&nbsp;przeglądarce; może się on odnosić
do&nbsp;wyspecjalizowanego oprogramowania serwera; może się on odnosić
do&nbsp;wyspecjalizowanego programu w&nbsp;przeglądarce działającego
wspólnie z&nbsp;wyspecjalizowanym oprogramowaniem serwera. Strony klienta
i&nbsp;serwera podnoszą różne kwestie etyczne, nawet jeśli są tak mocno
zintegrowane, że&nbsp;w efekcie tworzą części jednego programu. To
opracowanie dotyczy tylko oprogramowanie po&nbsp;stronie
klienta. Oprogramowanie na&nbsp;serwerach omawiamy osobno.</p>

<p>W&nbsp;kwestiach praktycznych, jak możemy sobie radzić z&nbsp;problemem
niewolnych programów JavaScript na&nbsp;stronach internetowych? Pierwszym
krokiem jest aby&nbsp;go nie uruchamiać.</p>

<p>Po&nbsp;pierwsze, co mamy na&nbsp;myśli przez &bdquo;nietrywialne&rdquo;?
Skoro pojęcie &bdquo;nietrywialności&rdquo; jest stopniowane, jest kwestią
zaprojektowania prostego kryterium dającego dobre rezultaty, raczej niż
ustalania jednej poprawnej odpowiedzi.</p>
<p>
Nasza wstępna zasada jest aby&nbsp;program JavaScript był nietrywialny
jeśli:</p>

<ul>
  <li>robi żądania AJAX lub&nbsp;jest ładowany ze skryptami, które robią żądania
AJAX,</li>

  <li>ładuje dynamicznie zewnętrzne skrypty lub&nbsp;jest ładowany razem ze
skryptami, które to robią,</li>

  <li>definiuje funkcje i&nbsp;albo ładuje zewnętrzny skrypt (z wnętrza html)
lub&nbsp;jest ładowany jako taki,</li>
  
  <li>używa dynamiczne struktury JavaScript, które są trudne do&nbsp;analizowania
bez&nbsp;uruchamiania programu, lub&nbsp;jest ładowany razem ze skryptami,
które używają takich struktur. Te struktury to:
    <ul>
      <li>używanie funkcji eval,</li>
      <li>wywoływanie funkcji za&nbsp;pomocą kwadratowych nawiasów,</li>
      <li>Używanie konstrukcji innych niż ciąg znaków z&nbsp;niektórymi funkcjami
(Obj.write, Obj.createElement, ...).</li>
    </ul>
  </li>
</ul>

<p>Jak rozróżnić czy&nbsp;dany kod JavaScript jest wolny? Na&nbsp;zakończenie
tego artykułu proponujemy konwencję, według której nietrywialne programy
JavaScript na&nbsp;stronie internetowej mogłyby podać URL pod&nbsp;którym
znajduje się ich kod źródłowy, a&nbsp;także przy wykorzystaniu stylizowanych
komentarzy określać swoją licencję.</p>

<p>W&nbsp;końcu musimy zmienić wolne przeglądarki aby&nbsp;rozpoznawały
i&nbsp;blokowały nietrywialny JavaScript na&nbsp;stronach
internetowych. Program <a href="/software/librejs/">LibreJS</a> wykrywa
niewolny, nietrywialny JavaScript na&nbsp;stronach, które odwiedzacie
i&nbsp;go blokuje. LibreJS jest dodatkiem dla IceCat i&nbsp;IceWeasel (i dla
Firefoksa).</p>

<p>Użytkownicy przeglądarek potrzebują wygodnej metody określenia kodu
JavaScript, którego chcą użyć <em>zamiast</em> JavaScript na&nbsp;wybranej
stronie. (Określony kod może być całkowitym zastąpieniem,
bądź&nbsp;zmodyfikowaną wersją wolnego programu JavaScript obecnego
na&nbsp;wybranej stronie.) Greasemonkey jest bliskie umożliwienia tego,
jednak&nbsp;nie do&nbsp;końca, gdyż nie gwarantuje modyfikacji kodu
JavaScript na&nbsp;stronie zanim ten zacznie się wykonywać. Wykorzystanie
lokalnego proxy działa, jednak&nbsp;jest zbyt niedogodne by być realnym
rozwiązaniem. Potrzebujemy rozwiązania, które jest niezawodne
i&nbsp;wygodne, jak i&nbsp;witryny gdzie można się dzielić zmianami. Projekt
GNU zarekomenduje strony, które są dedykowane jedynie wolnym zmianom.</p>

<p>Takie możliwości umożliwią programom JavaScript zawartym na&nbsp;stronach
internetowych bycie wolnymi w&nbsp;rzeczywistym i&nbsp;praktycznym
sensie. JavaScript nie będzie nadal szczególną przeszkodą do&nbsp;naszej
wolnośći &mdash; nie bardziej niż C i&nbsp;Java są nimi teraz. Będziemy
mogli odrzucić a&nbsp;nawet podmienić niewolne, nietrywialne programy
JavaScript, tak samo jak możemy podmienić niewolne pakiety normalnie
oferowane nam do&nbsp;instalacji. Nasza kampania dla stron internetowych by
uwolnić ich JavaScript może się wtedy zacząć.</p>

<p>W&nbsp;międzyczasie jest jeden przypadek gdzie jest dopuszczalne uruchamiać
niewolny program JavaScript: aby&nbsp;wysłać zażalenie do&nbsp;operatorów
witryn internetowych, że&nbsp;powinni uwolnić lub&nbsp;usunąć JavaScript ze
stron. Nie wahajcie się włączyć JavaScript tymczasowo aby&nbsp;to zrobić,
ale&nbsp;pamiętajcie go potem wyłączyć.</p>

<p><strong>Podziękowania dla <a href="/people/people.html#mattlee">Matta
Lee</a> i&nbsp;<a href="http://ejohn.org">Johna Resiga</a> za&nbsp;ich pomoc
w&nbsp;definiowaniu naszej propozycji kryterium, oraz&nbsp;dla Davida
Parunakiana za&nbsp;pomoc w&nbsp;uświadomieniu mi problemu.</strong></p>

<h3 id="AppendixA">Załącznik A: konwencja dla wypuszczania wolnych programów JavaScript.</h3>

<p>Odnośniki do&nbsp;kodu źródłowego proponujemy oznaczać</p>
<pre dir="ltr">

    // @source:

</pre>

<p>a&nbsp;następnie URL. To spełnia wymóg GNU GPL aby&nbsp;rozprowadzać kod
źródłowy. Jeśli kod jest na&nbsp;innej stronie, musicie zwrócić uwagę
aby&nbsp;<a href="/licenses/gpl-faq.html#SourceAndBinaryOnDifferentSites">o
to właściwie zadbać</a>. Kod źródłowy jest konieczny aby&nbsp;program był
wolny.
</p>

<p>By wskazać licencję kodu JavaScript zawartego na&nbsp;stronie, proponujemy
umieszczenie licencji między dwoma komentarzami w&nbsp;tej formie:</p>
<pre dir="ltr">
<!--TRANSLATORS: Do not translate these license notices.  The <pre>

    elements have dir="ltr" explicitly set to cater for RTL languages.-->

    @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.
</pre>
<p>Oczywiście, wszystko to powinno być zawarte w&nbsp;wielowierszowym
komentarzu.</p>

<p><a href="/licenses/gpl.html">GNU GPL</a>, tak jak wiele innych licencji
wolnego oprogramowania wymaga dystrybucji kopii licencji zarówno
z&nbsp;kodem jak i&nbsp;binariami programu. Jednakże, GNU GPL jest
na&nbsp;tyle długie, że&nbsp;załączanie go do&nbsp;strony zawierającej
JavaScript może być uciążliwe. Można pominąć to wymaganie, dla kodu
do&nbsp;którego posiada się prawa autorskie, taką notatką licencyjną:</p>
<pre dir="ltr">

    Copyright (C) YYYY  Developer

    Kod JavaScript na&nbsp;tej stronie jest wolnym oprogramowaniem: można
    go rozprowadzać oraz&nbsp;modyfikować go zgodnie z&nbsp;warunkami GNU
    General Public License (GNU GPL) opublikowanym przez Free Software
    Foundation, licencji w&nbsp;wersji 3, bądź&nbsp;(opcjonalnie) każdą późniejszą wersją
    Kod dystrybuowany jest BEZ&nbsp;JAKIEJKOLWIEK GWARANCJI;
    nawet bez&nbsp;domniemanej gwarancji ZDATNOŚCI DO&nbsp;HANDLU
    czy&nbsp;ZDATNOŚCI DO&nbsp;OKREŚLONEGO CELU. Proszę odwołać się
    do&nbsp;GNU GPL po&nbsp;szczegóły.

    Jako dodatkowe zezwolenie zgodne z&nbsp;GNU GPL wersji 3 sekcji 7,
    można dystrybuować nie-źródłowe (np., zminimalizowane bądź&nbsp;    upakowane)
    formy tego kodu bez&nbsp;kopii GNU GPL normalnie wymaganej
    w&nbsp;sekcji 4, pod&nbsp;warunkiem załączenia tej notatki licencyjnej i&nbsp;URL
    przez które odbiorcy mogą dotrzeć do&nbsp;Właściwego Źródła

</pre>

<p>Dziękuje Jaffarowi Rumithowi za&nbsp;zwrócenie mojej uwagi na&nbsp;tę
kwestię.</p>

<h3 id="AppendixB">Załącznik B: konwencja dla wypuszczania wolnych programów JavaScript.</h3>

<p>Jeśli jesteście webmasterem rozprowadzającym wolne oprogramowanie JavaScript
na&nbsp;Waszej stronie, to jasne i&nbsp;konsekwentne umieszczanie informacji
o licencjach i&nbsp;kodzie źródłowym pomaga odwiedzającym upewnić się,
że&nbsp;uruchamiają wolne oprogramowanie i&nbsp;pomogą Wam przestrzegać
warunki licencji.</p>

<p>Jedną z&nbsp;metod przedstawiania licencji jest ta opisana wyżej w&nbsp;<a
href="#AppendixA">Dodatku A</a>. Druga metoda, <a
href="/licenses/javascript-labels.html">JavaScript license web labels</a>,
może być wygodniejsza dla bibliotek z-minifi-owanym kodem JavaScript,
szczególnie gdy to nie Wy go napisaliście.</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.pl.html" -->
<div id="footer">
<div class="unprintable">

<p>Wszelkie pytania dotyczące GNU i&nbsp;FSF prosimy kierować na&nbsp;adres <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>. Inne metody kontaktu
z&nbsp;FSF można znaleźć na&nbsp;stronie <a
href="/contact/contact.html">kontakt</a> <br /> Informacje o niedziałających
odnośnikach oraz&nbsp;inne poprawki (lub propozycje) prosimy wysyłać
na&nbsp;adres <a
href="mailto:web-translators@gnu.org">&lt;web-translators@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>. -->
Staramy się, aby&nbsp;tłumaczenia były wierne i&nbsp;wysokiej jakości,
ale&nbsp;nie jesteśmy zwolnieni z&nbsp;niedoskonałości. Komentarze odnośnie
tłumaczenia polskiego oraz&nbsp;zgłoszenia dotyczące chęci współpracy
w&nbsp;tłumaczeniu prosimy kierować na&nbsp;adres <a
href="mailto:www-pl-trans@gnu.org">www-pl-trans@gnu.org</a>. <br /> Więcej
informacji na&nbsp;temat koordynacji oraz&nbsp;zgłaszania propozycji
tłumaczeń artykułów znajdziecie na&nbsp;<a
href="/server/standards/README.translations.html">stronie tłumaczeń</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 Richard Stallman</p>

<p>Ta strona jest dostępna na&nbsp;<a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/deed.pl">licencji
Creative Commons Uznanie autorstwa&nbsp;&ndash; Bez&nbsp;utworów zależnych
4.0 Międzynarodowe</a>.</p>

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

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
Tłumaczenie: Jan Owoc 2012, 2016, Jan Wieremjewicz 2010, 2012; poprawki Jan
Owoc 2010, 2011, 2013.</div>

<p class="unprintable"><!-- timestamp start -->
Aktualizowane:

$Date: 2016/11/18 07:32:45 $

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