This translation may not reflect the changes made since 2009-12-15 in the English original.
Please see the Translations README for information on maintaining translations of this article.
Слобода у оковима – замка језика Јава
Напомена
Од децембра 2006., у току је поновно објављивање платформе за Јаву под ГНУ-овом ОЈЛ од стране фирме Сан. Када ова промена лиценце буде завршена, надамо се да Јава више неће представљати замку. Ипак, општи принцип који је овде описан и даље важи, јер и било која друга неслободна библиотека или програмерска платформа може произвести сличан проблем. Морамо да научимо лекцију из Јавине историје, како бисмо убудуће избегли друге замке.
Погледајте и: Замка ЈаваСписа
12. април 2004.
Ако је ваш програм слободан софтвер, он је у основи етичан, али се морате чувати извесне замке. Иако је сам по себи слободан, ваш програм може бити ограничен неслободним софтвером од кога зависи. Пошто је тренутно овај проблем највише изражен у случају програма писаних у Јави, називамо га замком језика Јава.
Програм је слободан софтвер ако су његовим корисницима пружене извесне основне слободе. Укратко, то су: слобода покретања програма, слобода проучавања и измене изворног кода, слобода поновног расподељивања изворног кода и бинарног облика, и слобода објављивања побољшаних верзија. (Видети http://www.gnu.org/philosophy/free-sw.html.) Слобода било ког програма зависи искључиво од смисла његове лиценце.
Али, компликованије питање је да ли се програм може користити у слободном свету, да ли га могу користити људи који желе да живе слободно. То није одређено лиценцом самог програма, јер ниједан програм не ради самостално. Сваки програм зависи од осталих програма. На пример, програм мора да буде преведен или интерпретиран, па стога зависи од преводиоца или интерпретатора. Ако се програм преводи у бајткод, онда он зависи од интерпретатора бајткода. Штавише, њему су потребне библиотеке како би могао да се извршава, а он може и позивати друге програме који се извршавају у засебним процесима. Сви ти програми су предуслови за његово функционисање. Предуслови могу бити неопходни да би се програм уопште покренуо или могу бити неопходни само за одређене одлике. У сваком случају, цео програм или његов део не могу да функционишу без предуслова.
Ако су неки од предуслова програма неслободни, то значи да цео програм или неки његов део не могу да се извршавају на потпуно слободном систему, па тај програм не може да се употребљава у слободном свету. Наравно, могли бисмо да поново расподељујемо програм и да држимо његове примерке на нашим машинама, али нам то није од користи ако он не може да се покрене. Тај програм је слободан софтвер, али је ефективно спутан својим неслободним предусловима.
Овај проблем се може јавити у свим врстама софтвера, у било ком програмском језику. На пример, слободни програм који се може извршавати само под Микрософтовим Виндовсом је очито бескористан у слободном свету. Али, и софтвер који се извршава под ГНУ-ом са Линуксом такође може бити бескористан уколико зависи од другог неслободног софтвера. У прошлости су главни узроци овог проблема били Мотиф (пре него што смо имали Лестиф – LessTif) и Куте – Qt (пре него што су га његови градитељи учинили слободним софтвером). Већина 3Д видео картица ради само са неслободним управљачким програмима, што такође изазива овај проблем. Међутим, тренутно је највећи извор овог проблема Јава, јер је људима који пишу слободни софтвер Јава привлачна. Заслепљени својом привученошћу овим језиком, они занемарују питање предуслова и падају у замку језика Јава.
Саново остварење Јаве је неслободно. Блекдаун (Blackdown) је такође неслободан; он је адаптација Сановог власничког кода. Стандардне Јавине библиотеке су такође неслободне. Ми имамо слободна остварења Јаве, као што је ГНУ-ов преводилац за Јаву – ГПЈ (GNU Compiler for Java – GCJ) и ГНУ-ов Класпат (GNU Classpath), али они још не подржавају све одлике. Још увек заостајемо.
Ако изграђујете програм у језику Јава под Сановом платформом за Јаву, користићете одлике које су специфичне за Сан а да то и не приметите. Могли бисте месецима да их користите док тога не постанете свесни, а поновно писање кода вам може однети још месеци. Највероватније ћете рећи: „поновни почетак је превише напоран“. Тада ће ваш програм упасти у замку језика Јава и биће бескористан за слободни свет.
Поуздан начин да избегнете замку језика Јава је да користите само слободна остварења Јаве на вашем систему. На тај начин ћете одмах открити да ли користите одлику или библиотеку коју слободни софтвер још не подржава, па одмах можете да напишете тај део кода изнова.
Сан наставља да изграђује додатне „стандардне“ Јавине библиотеке, које су скоро све неслободне. Често је чак и спецификација библиотеке трговинска тајна, а најновија Санова лиценца за те спецификације забрањује објављивање било чега што је мање од пуног остварења спецификације. (Примера ради, погледајте http://jcp.org/aboutJava/communityprocess/JSPA2.pdf и http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html).
Срећом, та лиценца спецификације дозвољава издавање остварења у виду слободног софтвера. Другима који приме библиотеку може бити дозвољено да мењају то остварење и да не буду приморани да следе спецификацију. Међутим, тај услов производи ефекат забране коришћења модела изградње који се заснива на сарадњи за производњу слободног остварења. Употреба тог модела би захтевала објављивање непотпуних верзија, што онима који су прочитали спецификацију није дозвољено.
У прво време Покрета за слободни софтвер је било немогуће избећи зависност од неслободних програма. Пре него што смо имали ГНУ-ов преводилац за Це, сваки програм у језику Це (било да је слободан или не) је зависио од неслободног преводиоца за Це. Пре него што смо имали ГНУ-ову библиотеку за Це, сваки програм је зависио од неслободне библиотеке за Це. Пре него што смо имали Линукс, прво слободно језгро, сваки програм је зависио од неслободног језгра. Пре него што смо имали Баш, сваки спис љуске је морао да буде интерпретиран од стране неслободне љуске. Није се могло избећи да у почетку наши први програми буду спутани овим зависностима, али смо то прихватили јер је наш план укључивао и њихово касније спасавање. Наш свеобухватни циљ, самостални оперативни систем ГНУ, је укључио слободне замене за све те предуслове. У случају постизања тог циља, сви наши програми би били спасени. То се и десило. Са системом ГНУ са Линуксом сада можемо да покрећемо те програме на слободним платформама.
Данас је ситуација другачија. Сада имамо моћне слободне оперативне системе и много слободних програмерских алата. Можете обављати све ваше послове на слободној платформи. Нема потребе да прихватате неслободни предуслов чак ни привремено. Главни разлог због кога људи данас падају у замку је што не мисле о њој. Најлакше решење проблема замке језика Јава је научити људе да не упадну у ту замку.
Да бисте сачували ваш код у Јави од замке језика Јава, инсталирајте и користите слободно окружење за изградњу програма у Јави. Уопште, без обзира на то који језик користите, отворите четворе очи и проверите да ли су програми од којих зависи ваш код слободни. Најлакши начин да проверите да ли је програм слободан је да га потражите у каталогу слободног софтвера (http://www.fsf.org/directory). Ако програм није у каталогу, можете проверити да ли је његова лиценца (или његове лиценце) наведена у списку слободних софтверских лиценци (http://www.gnu.org/licenses/license-list.html).
Ми покушавамо да спасемо заробљене програме у језику Јава, па вас позивамо да, уколико вам се свиђа програмски језик Јава, помогнете да се изгради ГНУ-ов Класпат. Користиће нам и испробавање ваших програма у ГНУ-овом Класпату и пријављивање евентуалних проблема у класама које су већ остварене. Међутим, завршавање ГНУ-овог Класпата ће потрајати. Ако неслободне библиотеке буду и даље додаване, можда никада нећемо имати све најновије библиотеке. Зато вас молимо да не окивате ваш слободни софтвер. Када будете писали апликативни програм, од почетка га напишите тако да се извршава под слободним механизмима.
Погледајте и:
Чудновата згода о Сану (Сунцу) у глуво доба