THE DARKEST PLACE
Stručná historie Javy
Dec 4, 2016
Java letos oslavila čtvrt století existence. Co začalo jako malý projekt pro televizní boxy postupně přerostlo přes dominantní platformu pro "hloupé" mobilní telefony a nakonec serverové prostředí pro distribuované aplikace. Na desktopu, na nějž byla zpočátku cílena především, se kvůli mnoha technickým problémům a špatným strategickým rozhodnutím nikdy neuchytila a vzhledem k vývoji trhu nejspíš už nikdy neuchytí.

Společnost Sun začala na začátku 90. let vyvíjet prostředí pro televizní boxy, jehož součástí měl být i nový jazyk. Jednalo se o malý nevýznamný projekt, neboť Sun se v té době zaměřoval na servery a příslušné operační systémy. Na tomto poli Sun ve spolupráci s NeXTem vyvinul OpenStep, otevřené API pro objektově-orientované aplikace na tehdy běžnými operačními systémy. Na svou dobu se jednalo o velmi pokročilou technologii s bohatou standardní knihovnou a vizuálními vývojovými nástroji. Sun nad OpenStepem vyvinul například systém pro distribuované objekty a aby nemusel psát všechny možné aplikace od nuly, koupil společnost Lighthouse Design, jež se na vývoj pro NeXTStep, z nějž OpenStep vycházel, specializovala. Tento krok měl, jak uvidíme, na vývoj Javy v počátcích velký vliv.

Původní projekt Oak selhal a nikdy se nedostal ani do fáze testů, nicméně vedení Sunu se rozhodlo po roztržce s NeXTem již vyvinutý systém "přeorientovat" právě na serverovou oblast. Kromě změny názvu jazyka došlo k rozšíření jeho syntaxe a standardní knihovny. Tato rozšíření byla inspirovaná jazykem Objective-C, na němž byl OpenStep založen, a vnesená do Javy Patricken Naughtonem, jedním z hlavních architektů Javy (James Gosling nebyl jediný). Například myšlenka rozhraní je přímo převzata z protokolů ve ObjC, třídy jako Integer apod. jsou přímo inspirované shluky tříd (class clusters) v ObjC atd. Další aspekty z ObjC vnesli do Javy vývojáři z Lighthousu, donucení psát nově v Javě.

Deklarovanými cíli Javy byl bezpečný běh programů a jednoduchost jazyka, aby i průměrní programátoři mohli rychle psát komplikovanější aplikace bez zásadních chyb. Prvního cíle bylo plně dosaženo, ovšem za cenu pomalosti běhu programů (viz níže). Druhého cíle moc dosaženo nebylo, ostatně i dnes se setkáváme se špatným kódem napsaným někým, kdo si jen myslí, že umí programovat. Java to takovým bohužel usnadňuje, přičemž opravdovému vývoji spíše hází klacky pod nohy.

Okolo přelomu tisíciletí se Java sice prakticky nepoužívala na desktopech, ale rozšířila se na mobilních telefonech. Tomu učinil přítrž až iPhone, který naštěstí Java nepodporoval, čímž ji v mobilním světě (spolu s Flashem) pohřbil. Java se ovšem mezitím zabydlela na serverech, kde víceméně poklidně přežívá dodnes (na rozdíl od desktopu, kde se navzdory několika pokusům nikdy neuchytila).

Je zřejmé, že Sun učinil několik technicky a strategicky chybných rozhodnutí. Především pochopitelně neměl vůbec házet přes palubu OpenStep, k jehož otevřenému API měl práva. Tím zahodil technologii, která - jak bylo už tehdy zřejmé - předběhla svou dobu a nabízela jen samé výhody jako rychlost vývoje, bezpečnost, multiplatformnost atd. Zásadním technickým problémem bylo založit Javu na virtuálním stroji. Dnes (zpětně) vidíme, že stejně dobrý, ne-li lepší jazyk se dá udělat i bez VM (viz Go a Swift). Třetím problémem bylo špatně navržené API pro GUI, jež prakticky zařízlo Javu na desktopech. Po technické stránce se jako chyba ukázalo použití plně automatické správy paměti. Dnes už víme, jak jí dosáhnout (v Go i Swiftu je správa paměti plně automatická a zároveň velmi efektivní), ovšem v devadesátých letech toto rozhodnutí učinilo z Javy pomalý a vysmívaný moloch. Jeho tíhu Java sebou ostatně vláčí - přes veškerý pokrok a různé "moderní" GC - dodnes. V souvislosti s posledně uvedeným je velkým problémem i fakt, že Java zcela ignoruje hodnotové typy, čož neúměrně a naprosto zbytečně zatěžuje GC, neboť všechny objekty se draze (de)alokují na haldě.

Kde Java stojí dnes? Kromě serverových aplikací našla uplatnění na Androidu (Google má vlastní VM nazvanou Dalvik), ovšem Google už nějakou uvažuje - hlavně kvůli sporu s Oraclem - o náhradě. Na serverech Java přežívá díky setrvačnosti (na lidské a technické rovině) a nějakou dobu tomu tak jistě ještě bude, i když mnohé nové velké projekty vznikají převážně v jiných jazycích (Go, node.js, Rust...). Z univerzálně zamýšleného jazyka se tak během cca. dvaceti let stala platforma pro úzce vymezené oblasti, kde se prozatím drží. Inovativní ale není a vlastně nikdy ani nebyla.