This translation may not reflect the changes made since 2010-04-04 in the English original.

Please see the Translations README for information on maintaining translations of this article.

Свободен, но в окови – „клопката на Джава“

от Ричард Столман

Встъпителна бележка

През декември 2006 г., „Сън“ вече са започнали да преиздават своята платформа на Джава под GNU GPL. Очакваме, че когато тази промяна на лиценза завърши, Джава вече няма да представлява клопка. Въпреки това, като цяло, описаният тук въпрос ще остане важен, защото всяка несвободна библиотека или платформа за програмиране може да причини подобен проблем. Трябва да си вземем поука от историята на Джава, така че да избягваме други клопки за в бъдеще.

Вижте също и Клопката на JavaScript.

12 април 2004 г.

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

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

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

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

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

Реализацията на Джава от „Сън“ е несвободна. Стандартните библиотеки на Джава също са несвободни. Ние разполагаме със свободни реализации на Джава, като например компилатора на GNU за Джава (GCJ) и GNU Класпат (GNU Classpath), но те все още не поддържат напълно всички възможности. Все още наваксваме.

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

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

„Сън“ продължава да разработва допълнителни „стандартни“ библиотеки на Джава и почти всички те са несвободни. В много случаи, дори спецификацията на библиотеката представлява търговска тайна, а последният лиценз на „Сън“ за тези спецификации забранява издаването на непълни реализации на спецификацията. (Вижте например http://jcp.org/aboutJava/communityprocess/JSPA2.pdf и http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html).

За щастие, този лиценз на спецификацията позволява издаването на нейна реализация като свободен софтуер. Така на трети лица, получили библиотеката, им е разрешено да я променят и не са задължени да се придържат към спецификацията. Но изискването води до забрана на използването на съвместен модел на разработка при произвеждането на свободна реализация. Използването на такъв модел би довело до публикуване на незавършени версии, което не е разрешено на тези, които са чели спецификацията.

В зората на движението за свободен софтуер беше невъзможно да се избегнат зависимостите от несвободни програми. Преди да имаме компилатора на GNU за Си, всяка програма на Си (свободна или не) зависеше от несвободен компилатор за Си. Преди да имаме библиотеката на GNU за Си, всяка програма зависеше от несвободна библиотека за Си. Преди да имаме Линукс, първото свободно ядро, всяка програма зависеше от несвободно ядро. Преди да имаме Bash, всеки скрипт на обвивката трябваше да бъде интерпретиран от несвободна обвивка. Бе неизбежно първите ни програми да бъдат обременени от тези зависимости, но ние приехме това, понеже последващото отърваване на тези програми бе част от нашия план. Нашата голяма цел — самостоятелна операционна система GNU — включваше свободни заместители на всички тези зависимости. Ако постигнехме целта си, тогава всички програми биха били отървани. Така и стана — със системата GNU/Линукс вече можем да изпълняваме тези програми върху свободни платформи.

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

За да предпазите кода си от „клопката на Джава“, инсталирайте свободна среда за разработване на Джава и я използвайте. По-общо казано, какъвто и език да използвате, отваряйте си очите на четири и проверявайте дали са свободни програмите, от които зависи кода ви. Най-лесният начин да проверите дали дадена програма е свободна е да погледнете за нея в Указателя на свободен софтуер (http://www.fsf.org/directory). Ако програмата не е в указателя, можете да сверите лиценза (или лицензите) ѝ спрямо списъка от лицензи за свободен софтуер (http://www.gnu.org/licenses/license-list.html).

Опитваме се да отървем програмите на Джава, които са хванати в капана. Така че, ако харесвате езика Джава, каним ви да помогнете при разработването на GNU Класпат. Също би било полезно изпробването на програмите ви с компилатора GCJ и GNU Класпат и докладването на всякакви проблеми, на които сте се натъкнали при вече реализираните класове. Все пак, завършването на GNU Класпат ще отнеме време — ако постоянно продължават да се добавят несвободни библиотеки, може винаги да ни липсват последните от тях. Така че, моля ви, не оковавайте свободния си софтуер. Днес, когато пишете свободна приложна програма, пишете я така, че от самото начало да се изпълнява върху свободни средства.

Вижте още:

Любопитният инцидент със „Сън“ в късна доба