Pont ez az integetés az, ami megindokolja, hogy miért kell nekünk egy új programozási nyelv, amikor olyan jól megvoltunk mi az X-szel (itt mindenki behelyettesítheti a kedvencét). Ugyan a Jáva nyelv tulajdonságainak felsorolásánál megtalálhatunk számos olyan divatos kifejezést - pl. objektumorientált, párhuzamos, elosztott, stb. -, amik nélkül manapság egyetlen a valamire való programozót sem lehetne elcsábítani a kedvenc, ódivatú nyelvének pontosvesszõi és zárójelei mellõl, de ez még kevés lenne a sikerhez, elvégre világmegváltó nyelvek napról napra születnek. Szerintem a várható sikernek ezen felül két jelentõs indoka van: elõször is sok befolyásos számítástechnikai cég elhitte, hogy van benne fantázia és most - remélhetõleg - dõl a pénz a fejlesztésre.
A felhasználók szempontjából sokkal fontosabb a másik érv: a Jáva nyelv összeházasodott napjaink legdivatosabb számítástechnikai játékszerével, az Internet hálózattal. A házasságból egyelõre két gyermek született, a Sun HotJava- illetve a Netscape WWW böngészõ programjának új, 2.0 verziója. Bár mindkét gyermek fejletlenke még, csak béta korúak, de már ki-kimutatják oroszlánkörmeiket, sõt újabb gyerekek érkezése is várható. Mellesleg a HotJava teljes egészében Jáva nyelven íródott, azt bizonyítandó, hogy a nyelv eléggé izmos ilyen méretû feladatok megoldására.
Egy ilyen Jávát értõ böngészõvel az egér egyetlen óvatlan kattintására nem csak adatokat, de teljes, futni képes programokat is letölthetünk a kiszolgálóról, amely aztán el is indul a mi számítógépünkön. Akinek errõl a vírusok, férgek és egyéb rosszindulatú programok jut az eszébe, nyugodjon meg, késõbb még lesz errõl is szó!
Mire jó egy ilyen program? Hát természetesen bármire - a Jáva általános célú programozási nyelv -, a program nálunk fut, nem terheli az eredeti kiszolgálót, jópofa dolgokat rajzol, menükkel, párbeszédablakokkal tarkítja a képernyõnkre, hangokat ad, egyszóval életet lehel a letöltött dokumentumba. Persze ennél többet is tehet, például felveheti a kapcsolatot azzal a kiszolgálóval, ahonnan hozzánk került és a két gép tisztességes elosztott rendszerként buzgón kommunikálni kezd, abból pedig bármi kisülhet.
A hagyományos böngészõk képesek arra, hogy az általuk ismert, elõre beprogramozott protokollokat - HTTP, FTP, Gopher, News, ... - használva felvegyék a kapcsolatot egy-egy kiszolgálóval és onnan adatokat töltsenek le, amelyeket, amennyiben a formátumát korábban ismerték - HTML, GIF, JPEG, ... -, akkor megjelenítsék. Viszont ha az URL-ben (a kiszolgáló gépet és az ott tárolt információt megadó címben) ismeretlen protokollt adtunk meg, akkor szegény böngészõ kétségbeesetten széttárja a karját. Ha csak az adat formátuma ismeretlen, a helyzet egy fokkal jobb: a böngészõ letölti a teljes adathalmazt, majd - ha szerencsénk van - továbbpasszolja a megjelenítés feladatát egy másik programnak, legrosszabb esetben tárolhatja azt a helyi lemezünkön, hátha majd egyszer megértjük, mi van benne. A Jávát értõ böngészõkben viszont a kiszolgálóról letöltött Jáva programok bõvíthetik a felhasználható kommunikációs protokollokat (protocol handler) és a megjeleníthetõ adattípusokat (content handler).
Az önállóan futtatható programok (application) és a böngészõk által letölthetõ és futtatható "programkák" (applet) között nem nagy a különbség, legfeljebb csak a biztonsági meggondolások miatt a böngészõk szigorúbban figyelik, korlátozzák a hálózatról letöltött programkákat. Önálló programnál ilyen védelem nincs, a felhasználó nyilván tudja, mit és miért indított el.
A halózaton letölthetõ programok ötlete új színt hoz az elosztott rendszerekben divatos ügyfél-kiszolgáló paradigmába: a programok igény szerinti letöltése (distributed on demand) elmossa a kiszolgáló és az ügyfél közötti éles határokat.
A projekt kezdetben a C++ nyelvet használta, ám a fejlesztõk ezt is, a többi, akkor hozzáférhetõ programozási nyelvet is alkalmatlannak találták a célkitûzéseik maradéktalan megvalósítására, hát új nyelvet terveztek maguknak. Kiindulási alapként a C++ nyelvet használták, kigyomlálva belõle - az általuk - bonyolultnak, nem megbízhatónak talált szerkezeteket, hozzáadva innen-onnan átvett, hasznosnak tûnõ ötleteket, nyelvi elemeket.
A felhasználói elektronikai alkalmazások lassabban fejlõdtek, mint azt elõre várták, a projekt szép csendben el is halt volna, ha közben az Internet hálózat nem indul rohamos fejlõdésnek. Szerencsére észrevették, hogy az Internet hálózat hasonló körülményeket teremt és hasonló igényeket támaszt egy új programozási technológiával szemben.
Egyszerû | A nyelv szintaxisa és szemantikája nagyban hasonlít
a sokak által ismert C illetve C++ programozási nyelvhez,
megkönnyítve a kezdeti ismerkedést. A C++ nyelvbõl
elhagytak néhány - programozói vagy fordítóprogram
írói szempontból - bonyolult elemet. Kimaradt például
az operátorok felüldefiniálásának lehetõsége
(operator overloading), a többszörös öröklõdés.
Eltûnt a goto utasítás, az automatikus típuskonverziók
(coercion), az összetett adatszerkezetek közül a
union, illetve C++-ban már amúgy is szükségtelen
struct.
Azért szerencsére nem gyomláltak ki mindent a C++-ból, megmaradt például a futásidejû hibák lekezelésének mechanizmusa, az. ún. kivételkezelés (exception handling). Bár az "igazi programozók" megkönnyezik az eltávozott goto utasítást, de helyette címkézett ciklusokat, többszintû break és continue utasítást kaptunk. Sokaknak elsõre - többeknek talán másodszorra is - furcsa, de a Jáva nem használ mutatókat (pointer), egy csapásra megszûntetve ezzel a C programozók kedvelt programozási hibáinak egész seregét. A programozó munkáját nagymértékben megkönnyíti az is, hogy a nyelv automatikusan felszabadítja a már nem használt tárterületeket (szemétgyûjtés, garbage collection). Ízelítõül álljon itt a kötelezõ "Szervusz világ" program egy kicsit módosított változata, amely az elsõ paraméterben megadott szöveget írja ki a "World" helyett, már amennyiben van ilyen. class HelloWorldApp { public static void main (String args[]) { System.out.println("Hello "); if (args.length == 0) System.out.println("World!"); else System.out.println(args[0] + "!"); } } |
|
Objektum-
orientált |
Manapság az objektumorientáltság divatos programozási
paradigma, bár a szakirodalom nem teljesen egységes a kritériumainak
meghatározásában. A Jáva lényegében
a C++ objektumorientált tulajdonságait tartalmazza. A programozó
absztrakt adattípusként viselkedõ osztályokat
definiálhat, az osztályok mûveleteket - módszereket
- tartalmaznak, amelyek a rejtett adatreprezentáción (egyedváltozók)
operálnak. Létrehozhatunk objektumokat, azaz egyes osztályokba
tartozó egyedeket. Osztályok definiálásánál
felhasználhatunk már meglévõ osztályokat,
az új osztály (a leszármazott) örökli a
szülõ adatait, módszereit. A módszerek hívásánál
a meghívott módszer futási idõben, objektum
aktuális típusának megfelelõen kerül kiválasztásra
(virtuális módszerek, polimorfizmus).
Az egyes osztályokban definiált változók és módszerek láthatóságát a C++-ban megismert módon - private, protected és public - lehet megadni. Eltérést jelent a C++-hoz képest, hogy a Jávában a beépített, egyszerû adattípusú - numerikus, logikai és karakter típus - változók kivételével minden objektum; az egyetlen összetett adattípus, a tömb (array) teljes értékû osztályként viselkedik. A program nem tartalmaz globális változókat és globális eljárásokat, minden adat és eljárás valamilyen objektumhoz, esetleg osztályhoz kötõdik. Persze a C++-t ismerõk tudják, hogy a globális változókat és függvényeket helyettesíteni lehet ún. osztályváltozókkal és statikus függvényekkel, ezek itt is használhatók. A Jávában minden módszerhívás - a fent említett statikus módszerek kivételével - virtuális. A C++-hoz hasonlóan lehetõségünk van az egyes objektumok típusát futási idõben lekérdezni (ez a C++-ban is viszonylag új nyelvi elem az ún. RTTI, Run-Time Type Interface), sõt itt akár az osztályok forrásprogramban definiált nevét futás közben is felhasználhatjuk például objektumok létrehozására. Az osztályok mellett a Jáva az Objective-C programozási nyelvbõl átvette az Interface fogalmat. Az Interface nem más, mint módszerek egy halmaza - adatszerkezeteket, egyedváltozókat nem tartalmaz -, amelyet egyes osztályok megvalósíthatnak (implementálhatnak). A Jáva a C++-szal ellentétben nem engedi meg a többszörös öröklõdést, viszont Interface-ek használatával, egyszerûbben, kevesebb implementációs problémával hasonló hatást lehet elérni. |
|
Architektúra-
független és hordozható |
Napjaink hálózatait heterogén hardver- és
szoftver architektúrájú számítógépek
alkotják. A programok fejlesztését nagymértékben
megkönnyítené, ha a forráskódból
elõállított program bármely architektúrán
azonos módon futna. Ezen cél elérése végett
a Jáva nyelv nem tartalmaz architektúra- vagy implementációfüggõ
elemeket. A C nyelvvel ellentétben a beépített adattípusok
(pl. int) mérete - tárolásához szükséges
memória mérete, a típus értelmezési
tartománya - nyelvi szinten meghatározott.
Ahhoz, hogy a lefordított program változtatás nélkül futtatható legyen különbözõ hardver architektúrákon, a fordítóprogram a programot nem egy konkrét processzor gépi kódjára, hanem egy képzeletbeli hardver - virtuális gép (virtual machine) - utasításrendszerére fordítja le. Az így létrejött közbülsõ, ún. Byte kódot töltjük le a célarchitektúrára, ahol a virtuális gépet megvalósító program értelmezi és hajtja végre. A hordozhatóság nem csak a virtuális gépi utasítások, hanem a nyelv mellet szabványosított rendszerkönyvtárak szintjén is jelentkezik, ezek a könyvtárak valósítják meg a legfontosabb, operációs rendszerekhez kötõdõ feladatokat, mint például a be- és kiviteli rendszert, vagy a programok grafikus kezelõi felületét. Egy új architektúrán akkor futtathatók a Jáva programok, ha már implementálták rá a virtuális gépet, beleértve a rendszerkönyvtárakat is. A virtuális gépet C-ben írták, a kód POSIX.1 szabványnak megfelelõ operációs rendszert tételez fel, így viszonylag kis munkával hordozható. A hordozhatóság érdekes aspektusa a fejlesztõi környezet hordozhatósága. A környezet egyes részei, mint például a fordítóprogram, nyomkövetõ eszközök, vagy maga a HotJava böngészõ is Jáva nyelven íródott. Na és ha a Jáva programok hordozhatók, akkor hipp-hopp (?), az egész környezet is átkerült az új architektúrára. |
|
Interpretált
és dinamikus |
Az interpretált végrehajtás - kombinálva
a klasszikus kapcsolatszerkesztõ (linker) helyett futás
idejû betöltéssel - a fejlesztési ciklust nagy
mértékben felgyorsítja. A Jávából
eltûntek a C-bõl ismert header állományok, feltételes
fordítás, más programállományok fordítás
közbeni beolvasása (#include). A lefordított
programok tartalmaznak a szerkesztéshez szükséges minden
információt. Elég csak a megváltozott állományokat
lefordítanunk - nincs szükség a C-nél megszokott
make programra, a forrásállományok közötti
függõségek feltérképezésére
-, a program máris futtatható. Egyébként a
Jáva támogatja a nagybani programozást, összetartozó
osztályok egy csomagba (package) foghatók, egyszerre
fordíthatók. A láthatóság is figyelembe
veszi a csomagokat, a C++ explicit friend deklarációjának
szerepét itt a csomagra - de csak a csomagra - vonatkozó
láthatóság veszi át. A kapcsolatszerkesztõ
helyét az ún. osztály-betöltõ (class-loader)
veszi át, amely futás közben - ha szükség
van rá - betölti az egyes osztályokat megvalósító
lefordított, Byte kódú programállományokat.
Az osztály-betöltõ nem csak helyi állományokból,
de szükség esetén a hálózaton keresztül
is képes kódot letölteni.
Többek között a betöltõ feladatának megkönnyítése végett a Byte kód tartalmaz a forráskódból átvett szimbolikus- illetve típus információkat. Lássunk egy példát arra, hol jöhet jól ez az információ. Az objektumorientált programozási paradigma egyik nagy ígérete, hogy általános célú, könnyen felhasználható osztály-könyvtárakat, "szoftver-IC-ket" hozhatunk létre a segítségével. Sajnos a C++ nyelv ilyen tekintetben nem váltotta be teljesen a hozzá fûzött reményeket. Nagyon nehéz olyan osztályokat tervezni, amelyeket késõbb nem kell majd úgy módosítani, hogy ne kelljen azt például új - bár a programozók elõl rejtett - adatkomponensekkel vagy módszerekkel bõvíteni. Bár az osztály külsõ interfésze nem feltétlen változott meg, ám a C++ az osztály reprezentációját, tárbeli elrendezését kihasználó fordítási mechanizmusa miatt ilyenkor az összes, a megváltozott osztályt - akár csak öröklésen keresztül - felhasználó programot újra kell fordítani. Ezt hívják "törékeny alaposztály" (fragile base class) problémának. A Jáva ezt a problémát úgy kerüli meg, hogy az osztályok adatkomponenseire, módszereire a Byte kódban is szimbolikusan hivatkoznak, a hivatkozások konkrét címekké kötése csak futási idõben, a virtuális gépben történik meg. A közbülsõ kódban megmaradt szimbolikus információk megkönnyítik a programok nyomkövetését. Sajnos az interpretált végrehajtásnak van egy nagy hátránya is, a programok sokkal - becslések szerint 10-20-szor - lassabban futnak, mint a gépi kódú megfelelõik. Bár a virtuális gép elég ügyesen lett kitalálva és a fordítóprogram is mindent megtesz azért, hogy ezt a virtuális architektúrát a lehetõ legjobban kihasználja, de még így sem vetekedhet a gépi utasítások sebességével. Ehhez még hozzáadódik a szimbolikus hivatkozások feloldásának ideje, a különbözõ betöltési- és futásidejû ellenõrzések - ld. késõbb -, a tárgazdálkodási modellel járó szemétgyûjtési algoritmus futásához szükséges idõ. E lassúság ellen jelenleg nem sokat tehetünk, legfeljebb azzal vigasztalhatjuk magunkat, hogy az alkalmazások jelentõs részénél - gyakori felhasználói közremûködést, vagy hálózati kommunikációt igénylõ programoknál - a program sebessége nem a legfontosabb követelmény. Persze a Jáva programok meghívhatnak gépi kódú (native) eljárásokat is, de ezzel elvesztjük az architektúra- függetlenség, hálózaton letölthetõség tulajdonságát. De bejelentettek olyan fordítóprogramot is, amely közvetlenül gépi kódra fordít. Legígéretesebbnek az úgynevezett "röptében fordítás" (just-in-time, on-the-fly compilation) ötlete tûnik. A Byte kód úgy tele van tömve szimbolikus információkkal, hogy elvileg nem nehéz - ezt kiindulási nyelvnek tekintve - optimalizáló fordító programot írni hozzá. Ráadásul a virtuális gép utasításrendszere nagyon hasonlít napjaink processzoraiéhoz, könnyû belõle jó kódot generálni. A fordítás történhet az egyes osztályok betöltésekor - a szükséges ellenõrzések után -, esetleg végrehajtás közben. Futás közben esetleg az is eldõlhet, hogy érdemes-e az adott programrészletet lefordítani, mert gyakran használjuk, avagy megmaradhat interpretáltnak. Másik érdekes kísérlet, hogy a Sun a Jáva virtuális gépet sziliciumon is megvalósítja, hamarosan kaphatók olyan mikroprocesszorok, amelyek a Jáva Byte kódot közvetlenül futtatják. |
|
Robusztus
és biztonságos |
Ez a két fogalom a Jáva esetében kéz a
kézben jár. Robusztus egy nyelv, ha megakadályozza
vagy futás közben kiszûri a programozási hibákat,
biztonságos, ha megakadályozza, hogy rosszindulatú
programok kerüljenek a rendszerünkbe. Mindkét célkitûzés
eléréséhez gyakran hasonló módszereket
használhatunk.
A robusztusság nyelvi szinten a szigorú, statikus típusosságban jelenik meg. Minden adatnak fordításkor jól definiált típusa van, nincsenek automatikus konverziók, az explicit konverzió csak kompatibilis típusoknál sikerül, egyébként legkésõbb futtatáskor programhibát (exception) okoz. A mutatók eltûnésével rengeteg potenciális hibalehetõség eltûnt a nyelvbõl - pl. NULL pointer hivatkozás, levegõben lógó mutatók -, persze elvesztettük az "igazi programozók" egyik kedvencének, az int-eknek és a mutatóknak ide-oda alakítgatásának lehetõségét is. A dinamikus szemétgyûjtés megkímél bennünket a hasznos memória elszivárgásától (memory leak). Az egyedüli összetett adatszerkezet, a tömb használatakor a túlcímzést futási idõben ellenõrzik. Az osztály-betöltõ arra is figyel, hogy a módszereket megfelelõ típusú paraméterekkel hívjuk meg. A biztonság (security) a robusztussággal kezdõdik, a fordító csak korrektül viselkedõ programokat ad ki magából. Ez elegendõ lehet önálló alkalmazásoknál, de a programkák letöltésénél ennél többre van szükség. Kezdjük azzal, hogy ki garantálja, hogy a letöltött Byte kódot valóban egy megbízható Jáva fordító hozta létre, nem pedig egy bit-betyár barkácsolta össze a hexadecimális szerkesztõjével? A Byte kód minden utasítása információt tartalmaz az operandusok típusáról, az osztály-betöltõ - függetlenül attól, hogy a helyi háttértárról vagy a hálózatról tölt be - ellenõrzi, hogy a program megfelel-e a nyelv szabályainak. Eldönti például, hogy minden operandus valóban a megfelelõ típusú, nem használjuk ugyanazt az adatot más-más típusúként is. Ellenõrizhetõ az is, hogy a módszerek a vermüket konzisztensen használják-e, valamint hogy a kód nem fér-e hozzá számára nem engedélyezett - a nyelv definíciója szerint láthatatlan, rejtett - adatkomponensekhez, módszerekhez. A betöltõ egy hivatkozott osztályt elõször mindig a helyi háttértárból próbál betölteni, csak akkor fordul a hálózaton elérhetõ kiszolgálóhoz, ha az osztály nincs meg a helyi rendszeren. Így elkerülhetõ, hogy trójai falóként valamelyik rendszerkönyvtár helyett azonos nevû, távolról betöltött programot futtassunk. Ha a betöltött programkák átjutottak a betöltõ konzisztencia-ellenõrzésén, akkor a virtuális gép felügyelete alatt kezdenek futni, ez ellenõrzi, hogy a programok csak engedélyezett tevékenységet hajtanak végre. Szigorúan szabályozott - vagy teljesen tiltott - például helyi állományokhoz való hozzáférés, tiltott más helyi programok indítása, jelentõsen korlátozott a hálózaton felvehetõ kapcsolatok címzettje. Sajnos ezen biztonsági szabályok erõsen korlátozzák a programkák képességeit. Biztonsági szempontból legfeljebb a helyi rendszerbõl betöltött - többé-kevésbé megbízható -, illetve hálózatról letöltött - eleve gyanús - osztályok között lehet különbséget tenni. Késõbbiekben lehetõség lesz nyilvános kulcsú titkosítás segítségével azonosítható forrású, garantáltan eredeti, változatlan, "megbízható" programok letöltésére és futtatására is. |
|
Többszálú | A programok jelentõs része párhuzamosan végrehajtható
részletekre - vezérlési szálakra - bontható.
Így jobban kihasználható a számítógép
központi egysége, a programok a külsõ - például
felhasználói - eseményekre gyorsabban reagálhatnak.
Az egymással kommunikáló, viszonylag laza kapcsolatban
álló szálakra bontott feladat könnyebben áttekinthetõ,
megvalósítható és belõhetõ. A
többszálú programozáshoz a Jáva nyelvi
szinten biztosítja az automatikus kölcsönös kizárást:
szinkronizált (synchronized) módszerek vagy utasítások,
valamint a szálak létrehozásához, szinkronizációjának
megvalósításához a rendszerkönyvtár
tartalmaz egy ún. Thread osztályt. A Thread
osztály a Hoare-féle feltételes változók
(conditional variable) modelljét követi. Természetesen
az összes, a rendszerkönyvtárakban definiált osztály
használható többszálú programokból
anélkül, hogy aggódnunk kellene az esetleges hibás
mûködés miatt (thread-safeness).
A Jáva virtuális gép a szálak futtatásához prioritáson alapuló preemptív - de nem feltétlenül idõosztásos - ütemezõt tartalmaz. Ez magyarázza például azt, hogy - a jelentõs felhasználói igények ellenére - nem született még Jáva virtuális gép a Microsoft Windows 3.1-es - csak kooperatív ütemezést tartalmazó - rendszerére. A többszálú programozás támogatása ellenére a Jáva nyelv - legalábbis mostani változatában - valósidejû programok írására nem alkalmas. A virtuális gép nem tartalmaz határidõs ütemezési képességeket, de még a prioritás-öröklést sem ismeri, a jelenleg implementált szemétgyûjtõ algoritmus sem alkalmas valósidejû futtatásra - bár ez utóbbi a virtuális gép "magánügye", a programok változtatása nélkül könnyen lecserélhetõ. |
|
Elosztott | A Jáva technológiát beharangozó ismertetõk
mindenhol kiemelik, hogy a technológia elosztott (distributed)
rendszerek létrehozását támogatja. Itt azért
én megjegyezném, hogy az elosztottság eléggé
cseppfolyós fogalom, a Jáva jelenleg sokkal kevesebbet tud,
mint amit sokak - köztük én is - szeretnének.
Az elosztottság jelenleg két formában jelenik meg: mint már említettem, az osztály-betöltõ képes Jáva Byte kódot a hálózaton letölteni. Ezen túl a rendszerkönyvtárak tartalmaznak a TCP/IP protokollcsalád alacsonyabb, szállítási (TCP és UDP), valamint magasabb, alkalmazói (pl. FTP, HTTP) szintû protokollok kezélésére szolgáló osztályokat. De egy Jáva program nem elosztott objektumorientált rendszer, nincs mód távoli objektumok létrehozásra, transzparens távoli módszerhívásra. Viszont komoly, biztató kisérletek történnek a Jáva és a CORBA (Common Object Request Broker Architecture) összeházasítására, de láttam már a hálózaton CORBA-tól független, de hasonló funkciókat nyújtó kisérleti osztály-könyvtárat is. |
Persze a Jáva képességeivel nem egyedülálló napjaink számítástechnikájában. Hasonló úton indult el az Apple a Dylan rendszerével, a Microsoft pedig a Blackbird-del, emlegetnek egy Python nyelvet, a Free Software Foundation is foglalkozik virtuális gépen alapuló program-interpretálással és még lehetne sorolni a hasonól célú nyelveket, rendszereket.
Ha a Jáva nyelv mégis elterjed - márpedig szerintem erre minden esély megvan -, akkor ehhez hozzájárul a jó reklám, az ügyes marketing stratégia valamint a felhasználók és legfõképpen a szoftvergyártók erkölcsi és anyagi támogatása. Márpedig a szoftvergyártók tényleg ráharapni látszanak az új technológiára, olyannyira, hogy reménytelennek látszik teljes felsorolást adni azokról a cégekrõl, amelyek csatlakoztak, forrás licenszet vásároltak. Remélem nem sértem meg a kimaradókat, a teljesség igénye nélkül: a Sun-nál külön részleget hoztak létre a Jáva fejlesztésekre. A WWW szempontjából talán a legjelentõsebb esemény, hogy a Netscape megvásárolta a technológiát és integrálja az új böngészõjébe. Windows 95 alatti fejlesztõrendszerrel jelent meg a Symantec, hasonló termék kifejlesztését jelentette be a Borland, megvásárolta a technológia felhasználási jogát az IBM, sõt még a Microsoft is komolyan érdeklõdik.
Ha már a licenszekrõl beszéltem: nincs szükség licenszre ahhoz, hogy valaki Jáva programot illetve programkákat fejlesszen, a lefordított programot terjessze. Azon OEM szoftverfejlesztõk, akik a Jáva technológiát integrálni akarják termékeikbe, forrás licenszet vásárolhatnak.
A Jáva technológiához kapcsolódóan csomó név és grafika a Sun - regisztrált - védjegye. Ezek közül a cikk elején látott Duke és a HotJava szimbóluma, a gõzölgõ kávéscsésze csak a Sun által használható. Hamarosan lesz egy ún. "Jávával turbósított" (Java Powered) grafika az olyan WWW lapokhoz, amelyek Jáva programkákat tartalmaznak, valamint egy "Jávával kompatibilis" (Java Compatible) grafika azon OEM termékeknek, amelyek elõállítói megvásárolták a forrás licenszet, termékükbe beépítették ezt a technológiát - pl. új architektúrára implementálták a virtuális gépet - és sikeresen megfeleltek a - most készülõ - kompatibilitási tesztnek.
Ha valaki Jáva programokat akar fejleszteni, legegyszerûbb, ha a Sun-tól ingyenesen letölthetõ Jáva Fejlesztõi Csomagot (Java Development Kit) használja, ami tartalmaz egy fordítóprogramot (javac), egy nyomkövetõt, hibakeresõt (jdb) a futtatáshoz szükséges virtuális gépet és egy a programkákat futtató alkalmazást (AppletViewer). A Sun a JDK-t csak a Solaris 2.x, Windows 95 és Windows NT operációs rendszerekre készítette el, de más fejlesztõk nagyon sok egyéb elterjedt operációs rendszerre is hordozták. Igen, van a Linux-on is.
Komoly fejlesztéshez használhatók az integrált fejlesztõi környezetek (Integrated Development Environment, IDE), jelenleg a legismertebbek a Sun, a Microsoft és a Symantec termékei. A programkák futtatására pedig jók például a Netscape Navigator, illetve a Microsoft Internet Explorer Web böngészõk is. A Netscape csaknem minden elterjedt architektúrán fut, a Microsoft egyelõre csak a Windows 95/NT rendszeren, bár mindkét cég igéri a Windows 3.11-es változatát is.
Az sem látszik még, hogy a technológiát mennyire fogja egy-két erõs cég a saját érdekeinek megfelelõ irányba elvinni, avagy megmarad-e szélesebb körû érdekeket, véleményeket tükrözõ, nyílt technológiának. A C++ nyelvre is ráfért az elmúlt években bekövetkezett, széles felhasználói kört megmozgató tisztázási, szabványosítási eljárás, gondolom a Jávának sem ártana. Nem látom például, hogy azon felül, hogy a Jáva karakterei 16 bites Unicode rendszerben vannak ábrázolva, valaki foglalkozna a nemzetköziesítés (internalization) kérdéseivel.
Sokan attól is félnek, hogy a "végleges" verzió megjelenése után a SUN szigorít a licensz politikáján, túl költségessé teszi a fejlesztõrendszerét, vagy pl. a HotJava-t. A WWW hálózat terjedésében jelentõs szerepet játszott az a tény, hogy a szükséges programok - kiszolgálók is, böngészõk is - szabadon hozzáférhetõk, ingyenesek voltak. Bár jelenleg a Netscape uralni látszik a böngészõk piacát, de nem biztos, hogy mindenki meg tudja, vagy akarja fizetni ennek az árát. Kérdés, hogy más kereskedelmi, vagy szabadon terjesztett böngészõk mennyire veszik át a Jáva technológiát, a WWW szerverek üzemeltetõi, a HTML lapok szerzõi mekkora potenciális, Jávát értõ olvasótáborra számíthatnak.
Kiváncsi vagyok, hogy a felhasználók - fõleg a nagy cégek - mennyire fogadják el a rendszerbe beépített biztonsági mechanizmusokat. Elsõ ránézésre megbízhatónak - ha néha túl korlátozottnak is - tûnik a rendszer, ám tapasztalatok szerint a vírusírók zseniálisak. Ha elõbukkan néhány biztonsági luk, a felhasználók bizalma hamar megcsappanhat, elvégre a hálózaton letöltött programok hiányos védelmi rendszer mellett potenciálisan hatalmas zûröket okozhatnak a helyi rendszerben.
Mindezen kérdések ellenére én bizalommal tekintek a Jáva jövõjére.
Lábjegyzetek
updated: 96/06/15, http://www.eunet.hu/infopen/cikkek/java/article.htm