English [en]   العربية [ar]   español [es]   فارسی [fa]   français [fr]   hrvatski [hr]   日本語 [ja]   polski [pl]   русский [ru]   українська [uk]  

Ta strona jest tłumaczeniem z angielskiego.

Pułapka JavaScript'u

Richard Stallman

Możliwe, że korzystasz z niewolnych programów na swoim komputerze każdego dnia — przez przeglądarkę internetową

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

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

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

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

Przeglądarki normalnie nie informują użytkownika kiedy ładują programy JavaScript. Większość przeglądarek ma wbudowaną możliwość by wyłączyć JavaScript całkowicie, jednak żadna z nich nie może sprawdzić czy programy JavaScript są nietrywialne i niewolne. Nawet jeśli użytkownik jest świadom tej kwestii, identyfikacja i zablokowanie tych programów kosztowałoby go wiele trudu. Jednak, nawet w społeczności wolnego oprogramowania, większość użytkowników nie jest świadoma tej kwestii; milczenie przeglądarek sprzyja zaś zatajaniu tego.

Jest możliwym wydanie programu JavaScript jako wolnego oprogramowania, przez dystrybucję kodu objętego licencją wolnego oprogramowania. Jednak nawet kiedy dostępne są źródła programu, nie ma łatwej metody by zastąpić uruchamianie wersji oryginalnej wersją zmodyfikowaną. Obecne wolne przeglądarki nie oferują udogodnień umożliwiających uruchomienie własnej zmodyfikowanej wersji zamiast tej dostarczanej na stronie. Efekt jest porównywalny do tivoizacji (ang. tivoization - od urządzenia TiVo), jednak nie jest on aż tak trudny do obejścia.

JavaScript nie jest jedynym językiem w którym strony przesyłają programy. Flash umożliwia programowanie poprzez rozszerzony wariant JavaScript. Musimy zbadać kwestię Flasha by poczynić stosowne rekomendacje. Silverlight wydaje się stwarzać problemy podobne do Flasha, jedynie gorsze, skoro Microsoft używa go jako platformy do niewolnych kodeków. Wolne zastępstwo Silverlight nie byłoby wystarczające dla wolnego świata chyba, że stadnardowo zawiera wolne zastępcze kodeki.

Aplety Java także są uruchamiane w przeglądarce i 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 bezpośrednio zetknąć się z sednem sprawy.

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

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

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

Po pierwsze, co mamy na myśli przez „nietrywialne”? Skoro pojęcie „nietrywialności” jest stopniowane, jest kwestią zaprojektowania prostego kryterium dającego dobre rezultaty, raczej niż ustalania jednej poprawnej odpowiedzi.

Nasza wstępna zasada jest aby program JavaScript był nietrywialny jeśli:

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

W końcu musimy zmienić wolne przeglądarki aby rozpoznawały i blokowały nietrywialny JavaScript na stronach internetowych. Program LibreJS wykrywa niewolny, nietrywialny JavaScript na stronach, które odwiedzacie i go blokuje. LibreJS jest dodatkiem dla IceCat i IceWeasel (i dla Firefoksa).

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

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

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

Podziękowania dla Matta LeeJohna Resiga za ich pomoc w definiowaniu naszej propozycji kryterium, oraz dla Davida Parunakiana za pomoc w uświadomieniu mi problemu.

Załącznik A: konwencja dla wypuszczania wolnych programów JavaScript.

Odnośniki do kodu źródłowego proponujemy oznaczać


    // @source:

a następnie URL. To spełnia wymóg GNU GPL aby rozprowadzać kod źródłowy. Jeśli kod jest na innej stronie, musicie zwrócić uwagę aby o to właściwie zadbać. Kod źródłowy jest konieczny aby program był wolny.

By wskazać licencję kodu JavaScript zawartego na stronie, proponujemy umieszczenie licencji między dwoma komentarzami w tej formie:



    @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.

Oczywiście, wszystko to powinno być zawarte w wielowierszowym komentarzu.

GNU GPL, tak jak wiele innych licencji wolnego oprogramowania wymaga dystrybucji kopii licencji zarówno z kodem jak i binariami programu. Jednakże, GNU GPL jest na tyle długie, że załączanie go do strony zawierającej JavaScript może być uciążliwe. Można pominąć to wymaganie, dla kodu do którego posiada się prawa autorskie, taką notatką licencyjną:


    Copyright (C) YYYY  Developer

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

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

Dziękuje Jaffarowi Rumithowi za zwrócenie mojej uwagi na tę kwestię.

Załącznik B: konwencja dla wypuszczania wolnych programów JavaScript.

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

Jedną z metod przedstawiania licencji jest ta opisana wyżej w Dodatku A. Druga metoda, JavaScript license web labels, może być wygodniejsza dla bibliotek z-minifi-owanym kodem JavaScript, szczególnie gdy to nie Wy go napisaliście.

[logo FSF]„Nasza misja to chronić i szerzyć wolność używania, poznawania, powielania, modyfikowania i rozprowadzania oprogramowania oraz chronić prawa użytkowników wolnego oprogramowania.”

Fundacja Wolnego Oprogramowania jest główną organizacją sponsorującą System operacyjny GNU. Wspieraj GNU i FSF kupując podręczniki i drobiazgi, przyłączając się do FSF jako członek zrzeszony lub dając datek albo bezpośrednio do FSF lub przez Flattr.

Do góry strony