Wolne, lecz w okowach - puĹapka Javy
Richard StallmanKonspekt
Od czasu gdy ten artykuĹ zostaĹ opublikowany po raz pierwszy Sun zmieniĹ licencjÄ swojej implementacji platformy Java na PowszechnÄ PublicznÄ LicencjÄ GNU i istnieje teraz wolne Ĺrodowisko programistyczne dla Javy. Z tego wzglÄdu jÄzyk Java nie jest juĹź puĹapkÄ .
NaleĹźy jednak byÄ ostroĹźnym, nie kaĹźda platforma Java jest wolna. Sun nadal rozpowszechnia Ĺrodowisko uruchomieniowe Java, ktĂłre jest niewolne. Inne firmy teĹź to robiÄ .
Wolne Ĺrodowisko dla Java nazywa siÄ IcedTea i zawiera kod ĹşrĂłdĹowy, ktĂłry uwolniĹ Sun. WĹaĹnie tego powinno sie uĹźywaÄ. Wiele dystrybucji GNU/Linux zawiera IcedTea, ale niektĂłre nadal posĹugujÄ siÄ niewolnymi. (Przypis dodany w X 2015: wolna implementacja Java jest znana jako OpenJDK we wielu dystrybucjach GNU/Linux.)
Aby byÄ pewnym, Ĺźe Twoje programy napisane w Java bÄdÄ dobrze dziaĹaÄ w wolnym Ĺrodowisku naleĹźy tworzyÄ je za pomocÄ IcedTea. Teoretycznie wszystkie platformy powinny byÄ kompatybilne, ale nie jest tak w 100 procentach.
Co wiÄcej, istniejÄ niewolne programy zawierajÄ ce „Java” w nazwie, takie jak JavaFX, a takĹźe niewolne pakiety Java, ktĂłre mogÄ byÄ kuszÄ ce, ale naleĹźy je odrzuciÄ. Sprawdzaj wiÄc licencjÄ kaĹźdego pakietu, ktĂłrego planujesz uĹźywaÄ. JeĹli uĹźywasz Swing upewnij siÄ, Ĺźe jest to wolna wersja, ktĂłra doĹÄ czona jest do IcedTea. (Przypis dodany w X 2015: wolny zamiennik JavaFX o nazwie OpenJFX zostaĹ wydany.)
OdkĹadajÄ c na bok konkretnÄ sprawÄ Java, ogĂłlny problem opisany tutaj pozostaje istotny, poniewaĹź kaĹźda niewolna biblioteka czy platforma programowa spowoduje ten sam problem. Musimy wyciÄ gnÄ Ä naukÄ z historii Java abyĹmy mogli uniknÄ Ä podobnych puĹapek w przyszĹoĹci.
Zobaczcie teĹź: PuĹapka JavaScript.
12 kwietnia 2004
JeĹli Wasz program jest wolnym oprogramowaniem, to zasadniczo jest dobry etycznie – ale istnieje puĹapka, ktĂłrej musicie siÄ strzec. Wasz program, choÄ sam w sobie wolny, byÄ moĹźe ograniczany jest przez niewolne oprogramowanie, od ktĂłrego zaleĹźy. PoniewaĹź problem ten najbardziej widoczny jest obecnie w przypadku programĂłw napisanych w Javie, nazywamy go PuĹapkÄ Javy.
Program jest wolny, kiedy jego uĹźytkownicy majÄ pewne kluczowe swobody. Z grubsza rzecz ujmujÄ c, sÄ to: wolnoĹÄ uruchamiania programu, wolnoĹÄ studiowania go i zmiany jego kodu ĹşrĂłdĹowego, wolnoĹÄ redystrybucji ĹşrĂłdeĹ i binariĂłw oraz wolnoĹÄ publikowania poprawionych wersji (zob. Definicja Wolnego Oprogramowania). To, czy dany program jest wolnym oprogramowaniem, zaleĹźy wyĹÄ cznie od jego licencji.
To, czy program moĹźe byÄ uĹźywany w Wolnym Ĺwiecie, przez ludzi, ktĂłrzy zamierzajÄ ĹźyÄ w wolnoĹci, jest pytaniem bardziej zĹoĹźonym. Nie decyduje o tym licencja samego programu, gdyĹź Ĺźaden program nie dziaĹa w odosobnieniu. KaĹźdy program zaleĹźy od innych programĂłw. Musi na przykĹad zostaÄ skompilowany lub zinterpretowany, wiÄc zaleĹźy od kompilatora czy interpretera. JeĹli jest kompilowany do kodu bajtowego, zaleĹźy od interpretera tego kodu. Ponadto, do dziaĹania potrzebuje bibliotek, a moĹźe teĹź wywoĹywaÄ inne odrÄbne programy dziaĹajÄ ce jako osobne procesy. Dany program moĹźe zaleĹźeÄ od innych, Ĺźeby w ogĂłle dziaĹaÄ lub wymagaÄ ich tylko dla pewnych funkcji. Tak czy owak, caĹy program lub jego czÄĹÄ nie mogÄ funkcjonowaÄ bez oprogramowania, od ktĂłrego sÄ zaleĹźne.
JeĹźeli niektĂłre z wymaganych przez program elementĂłw nie sÄ wolne, to znaczy, Ĺźe caĹoĹÄ lub czÄĹÄ programu nie dadzÄ siÄ uruchomiÄ w caĹkowicie wolnym systemie – nie nadaje siÄ on do uĹźywania w Wolnym Ĺwiecie. Jasne, moĹźemy rozprowadzaÄ ten program i trzymaÄ kopie w swoich komputerach, ale niewiele z tego poĹźytku, jeĹli nie bÄdzie dziaĹaĹ. Taki program jest wolnym oprogramowaniem, lecz w praktyce zostaĹ spÄtany przez niewolne oprogramowanie, od ktĂłrego jest uzaleĹźniony.
Ten kĹopot moĹźe siÄ pojawiÄ w kaĹźdego rodzaju oprogramowaniu, w dowolnym jÄzyku. Na przykĹad, wolny program dziaĹajÄ cy tylko w Microsoft Windows jest ewidentnie bezuĹźyteczny w Wolnym Ĺwiecie. Ale program dziaĹajÄ cy na GNU/Linuksie takĹźe moĹźe byÄ bezuĹźyteczny, jeĹli zaleĹźy od innego niewolnego oprogramowania. W przeszĹoĹci gĹĂłwnÄ przyczynÄ takich kĹopotĂłw byĹy Motif (zanim powstaĹ LessTif) oraz Qt (zanim twĂłrcy tej biblioteki uczynili jÄ wolnym oprogramowaniem). WiÄkszoĹÄ kart graficznych 3D wykorzystuje w peĹni swoje moĹźliwoĹci tylko z niewolnymi sterownikami, co takĹźe powoduje tego rodzaju problemy. Ale gĹĂłwnym ĹşrĂłdĹem tego problemu jest obecnie Java, gdyĹź osoby piszÄ ce wolne oprogramowanie czÄsto uwaĹźajÄ , Ĺźe Java jest sexy. ZaĹlepieni przez swoje zafascynowanie jÄzykiem, przeoczajÄ kwestiÄ zaleĹźnoĹci i wpadajÄ w PuĹapkÄ Javy.
Wykonana przez firmÄ Sun implementacja Javy nie jest wolna. Blackdown takĹźe nie jest wolne, jest przerĂłbkÄ zastrzeĹźonego kodu Suna. Standardowe biblioteki Javy teĹź nie sÄ wolne. Mamy wolne implementacje Javy, takie jak GNU Compiler for Java (GCJ) i GNU Classpath, ale nie udostÄpniajÄ one jeszcze wszystkich funkcji. Nadal to nadganiamy.
Gdy piszecie program w Javie na platformie Javy oferowanej przez Suna, jesteĹcie podatni na nieĹwiadome wykorzystywanie funkcji wystÄpujÄ cych tylko w implementacji Suna. Kiedy siÄ zorientujecie, moĹźe siÄ okazaÄ, Ĺźe korzystacie z nich od miesiÄcy, a ponowne wykonanie pracy zajÄĹoby kolejne miesiÄ ce. MoglibyĹcie wtedy powiedzieÄ: „To za duĹźo roboty, Ĺźeby zaczynaÄ od poczÄ tku”. WĂłwczas Wasz program wpadnie w PuĹapkÄ Javy, stanie siÄ nieuĹźywalny w Wolnym Ĺwiecie.
NiezawodnÄ metodÄ unikniÄcia PuĹapki Javy jest posiadanie w systemie wyĹÄ cznie wolnej implementacji Javy. Wtedy, jeĹli skorzystacie z jakiejĹ cechy Javy lub biblioteki, ktĂłrej wolne oprogramowanie jeszcze nie obsĹuguje, zorientujecie siÄ od razu i natychmiast bÄdziecie mogli przepisaÄ kod.
Sun nadal rozwija dodatkowe „standardowe” biblioteki Javy, a niemal wszystkie z nich sÄ niewolne. W wielu przypadkach nawet specyfikacja biblioteki jest tajemnicÄ handlowÄ . ZaĹ ostatnia licencja Suna dotyczÄ ca specyfikacji bibliotek zakazuje wydawania implementacji czÄĹciowych, czegokolwiek mniej niĹź peĹna implementacja specyfikacji. (Zob. np. Java Specification Participation Agreement oraz J2ME™ Personal Basis Profile Specification)
Na szczÄĹcie, ta licencja pozwala na wydanie implementacji jako wolnego oprogramowania – temu, kto otrzyma takÄ bibliotekÄ, wolno jÄ zmieniÄ i nie musi siÄ trzymaÄ specyfikacji. Jednak efektem tej klauzuli jest zakaz korzystania z modelu wspĂłlnej pracy nad projektem do wytworzenia wolnej implementacji. Zastosowanie tego modelu pociÄ gaĹoby za sobÄ publikowanie niekompletnych wersji, czego nie wolno robiÄ tym, ktĂłrzy przeczytali specyfikacjÄ.
W pionierskim okresie ruchu wolnego oprogramowania unikniÄcie zaleĹźnoĹci od niewolnych programĂłw byĹo niemoĹźliwe. Zanim mieliĹmy do dyspozycji kompilator GNU C, kaĹźdy program napisany w C (wolny czy nie) zaleĹźaĹ od niewolnego kompilatora C. Zanim dysponowaliĹmy bibliotekÄ GNU C, kaĹźdy program zaleĹźaĹ od niewolnej biblioteki C. Zanim mieliĹmy Linuksa, pierwsze wolne jÄ dro, kaĹźdy program zaleĹźaĹ od niewolnego jÄ dra. Zanim mieliĹmy BASH, kaĹźdy skrypt powĹoki musiaĹ byÄ interpretowany przez niewolnÄ powĹokÄ. To, Ĺźe nasze pierwsze programy poczÄ tkowo byĹy skrÄpowane przez owe zaleĹźnoĹci, byĹo nie do unikniÄcia, ale zaakceptowaliĹmy to, gdyĹź planowaliĹmy stopniowe ich uwalnianie. Nasz ostateczny cel, samodzielny system operacyjny GNU, mieĹciĹ w sobie wolne zamienniki dla wszystkich tych zaleĹźnoĹci. JeĹli osiÄ gnÄlibyĹmy ten cel, oswobodzilibyĹmy wszystkie nasze programy. I tak siÄ staĹo: majÄ c system GNU/Linux, moĹźemy teraz uruchamiaÄ je na wolnych platformach.
Obecnie sytuacja wyglÄ da inaczej. Mamy potÄĹźne wolne systemy operacyjne i wiele wolnych narzÄdzi programistycznych. KaĹźde zadanie, jakie chcecie wykonaÄ, moĹźecie wykonaÄ na wolnej platformie – bez koniecznoĹci akceptowania choÄby tymczasowej zaleĹźnoĹci od niewolnego oprogramowania. GĹĂłwnÄ przyczynÄ tego, Ĺźe obecnie ludzie wpadajÄ w puĹapkÄ, jest to, Ĺźe siÄ nad tym nie zastanawiajÄ . NajĹatwiej rozwiÄ zaÄ problem PuĹapki Javy uczÄ c ludzi, Ĺźeby do niej nie wpadali.
Ĺťeby uchroniÄ swĂłj napisany w Javie kod przed PuĹapkÄ Javy, zainstalujcie wolne Ĺrodowisko programistyczne Javy i uĹźywajcie go. OgĂłlnie rzecz biorÄ c: jakiegokolwiek jÄzyka programowania uĹźywacie, miejcie oczy otwarte i sprawdzajcie status programĂłw, od ktĂłrych zaleĹźy Wasz kod. Najprostszym sposobem zweryfikowania, czy dany program jest wolny jest poszukanie go w Katalogu Wolnego Oprogramowania. JeĹźeli nie ma go w katalogu, moĹźecie porĂłwnaÄ jego licencjÄ z listÄ licencji wolnego oprogramowania.
PrĂłbujemy oswobodziÄ schwytane w puĹapkÄ programy Javy, wiÄc jeĹli lubicie jÄzyk Java, zachÄcamy Was do pomocy w rozwijaniu zbioru bibliotek GNU Classpath. WyprĂłbowanie dziaĹania swoich programĂłw z kompilatorem GCJ i GNU Classpath i zgĹoszenie kĹopotĂłw z klasami juĹź zaimplementowanymi, teĹź jest pomocne. Niemniej jednak, zbudowanie GNU Classpath wymaga czasu; jeĹli wciÄ Ĺź dodawane bÄdÄ kolejne niewolne biblioteki, to pewnie nigdy nie bÄdziemy mieÄ wszystkich najnowszych. Dlatego, prosimy, nie nakĹadajcie swoim wolnym programom kajdan. Kiedy piszecie dziĹ jakiĹ program uĹźytkowy, napiszcie go tak, aby od poczÄ tku dziaĹaĹ korzystajÄ c z wolnego oprogramowania wspomagajÄ cego.