Portál AbcLinuxu, 27. května 2024 23:23

Otevřená Java 1: Přehled, je androidí Dalvik Java?

30. 11. 2010 | Michal Vyskočil
Články - Otevřená Java 1: Přehled, je androidí Dalvik Java?  

Ačkoli je Java jedním z nejpoužívanějších jazyků, (nejen) pro psaní otevřeného software, vlastní otevřené implementace hrály vždy druhé až třetí housle. Následující článek vás zavede do světa otevřených implementací platformy Java, ukážeme si, z jakých částí se skládá a jak s tím souvisí Android Dalvik.

Obsah

Co je to vlastně Java

link

Na úplném začátku je nezbytné si vyjasnit jednu otázku. Co je to vlastně Java? Pojem je to trochu nejednoznačný, jelikož se v dávných dobách, snad v záchvatu čirého nadšení nad šikovnou ochrannou známkou v laboratořích společnosti Sun rozhodli pojmenovat Java úplně vše. Zpátky k původní otázce – co je to vlastně Java? Pokud hovoříme (nejen) o otevřených implementacích, je potřeba specifikovat, o které části vůbec hovoříme. Takže, co všechno je vlastně Java?

Terminologická poznámka

link

Přestože současným vlastníkem společnosti Sun Microsystems je společnost Oracle, podstatná část historie se odehrávala pod taktovkou Sunu, tudíž se budu odkazovat k názvu Sun tam, kde to z hlediska historie má smysl. Navíc, ačkoli si je autor vědom rozdílu mezi svobodným (free) a otevřeným (open source) software, v textu se budu odkazovat pouze na pojem otevřený software.

Takže, co je ta Java vlastně zač.

Programovací jazyk Java

link

Jedná se o staticky typovaný, objektově orientovaný jazyk definovaný Java Language Specification. Ta říká, jak má vypadat příkaz if, jaký význam mají složené, špičaté závorky, středníky a podobně.

Java .class soubor

link

Binární soubor obsahující posloupnosti instrukcí pro virtuální stroj, který je vykonává. Programy v jazyce Java jsou nejčastěji překládány (ale ne nezbytně) právě do tohoto mezikódu. Mezikód je orientován na zásobníkový stroj, tudíž instrukce předpokládají operandy na zásobníku.

Standardní knihovna tříd Java

link

Standardní knihovna definuje základní sadu tříd použitelných v daném programovacím jazyce. Obsahuje třídy pro práci se vstupem a výstupem, řetězci, vlákny, síťováním, grafikou, matematikou a podobně.

Virtuální stroj Java

link

Neboli Java Virtual Machine – JVM – je program vykonávající instrukce nahrávané z Java .class souboru. Ono vykonávání může být od prosté interpretace instrukcí po používání sofistikovaných technik překladu za běhu – Just In Time (JIT). Další významnou úlohou stroje je automatická správa paměti – garbage collecting. A v neposlední řadě pomáhá zakrývat rozdíly mezi platformami. Právě JVM je integrální součástí celého prostředí.

Běhové prostředí

link

Java Runtime Environment – JRE – je tvořeno virtuálním strojem, standardní knihovnou a pár podpůrnými nástroji (keytool) potřebnými pro běh programů v Java.

Vývojové prostředí

link

Java Development Kit – JDK je JRE a další nástroje nezbytné pro překlad kódu, jako překladač javac, nástroj pro tvorbu dokumentace javadoc, nástroj pro práci s Java archívy jar, ladící nástroje, podporu pro JNI a další.

Ostatní

link

Věci jako Java webstart, Java applety, doplňkové knihovny a podobně.

Platforma Java

link

Platforma Java je kombinace běhového či vývojového prostředí spolu se standardní knihovnou. Platforem existuje několik – od "klasické" Java Standard Edition, přes Java EE, což je v podstatě SE verze s obohacenou standardní knihovnou, po Java ME pro mobilní telefony, která používá jiný virtuální stroj, tak i dosti odlišnou standardní knihovnu.

Obchodní značka

link

Poslední právní součást je neméně důležitá – Java je registrovaná známka společnosti Oracle, tudíž ne každý software "náhodou" vypadající jako Java se tak může skutečně nazývat. Společnost Oracle umožňuje používání tohoto názvu pouze v případě, že alternativní implementace projde testy kompatibility.

Právě toto rozdělení (s výjimkou posledního bodu) usnadňuje vývoj opensource implementace – potřebujeme pouštět Java programy na speciální platformě? Napíšeme pouze virtuální stroj. Není nutné psát překladač, nebo podporu pro applety. Většina open source implementací je ve skutečnosti složena z nezávislých částí, protože proč vytvářet standardní knihovnu, když existuje použitelná otevřená verze?

Vztah "Javy" a otevřeného software

link

Zvláštností světa kolem Javy je jeho nejednoznačný postoj k otevřenému kódu. Na jednu stranu existuje ohromné množství otevřeného kódu napsaného v tomto jazyce a vývojáři jsou zvyklí open source kód tvořit i používat. Na straně druhé z hlediska vlastního JDK/JRE existoval a existuje jednoznačný postoj používat výhradně "originál od Sunu", jakožto funkční a referenční implementaci.

Tento stav kritizoval Richard Stallman ve svém článku Java Trap. Cílem FSF (a podle něj i otevřeného software) je vytváření svobodné a otevřené platformy. Tudíž mít otevřený software, závisející na nesvobodném překladači/prostředí, je v rozporu s touto filozofií. Mimochodem stejnou filozofii zastává i většina linuxových distributorů, tudíž neexistence funkčního otevřeného Java prostředí velice ztěžovalo distribuci Java programů.

Proč vůbec vytvářet open source implementace

link

Proč vlastně vytvářet open source implementaci, když ta oficiální je zcela zdarma a funguje? Těch důvodů může být více

GNU Java Compiler

link

GNU Compiler Colection zahrnuje i podporu pro jazyk Java. Tato implementace se liší od ostatních, protože umožňuje překlad Java kódu jak do bytekódu, tak i do nativního kódu. Sada zahrnuje mimo jiné parser z ecj (Eclipse Java compiler), vlastní překladač gcj, interpret gij, a také běhové prostředí pro nativní programy a knihovny libgcj.so. GCJ se obvykle doplňuje o externí nástroje fastjar a gjdoc tak, aby vytvořilo kompletní JDK.

Běhová knihovna tohoto projektu se nazývá GNU Classpath – je to implementace Java SE 1.4.2 a 5.0 pod licencí GNU GPLv2 s takzvanou Classpath výjimkou. Ta umožňuje překlad a běh neGPL Java kódu nad GNU Classpath. Tato výjimka je nezbytná, protože každá třída v jazyce Java je odvozena od java.lang.Object, čímž by se každý kód přeložený pod touto knihovnou musel považovat za dílo odvozené od GNU GPL.

CNI (Compiled Native Interface)

link

Pohled projektu GCJ na jazyk Java je odlišný – jeho autoři jej berou jako každý jiný jazyk přeložitelný do binárního kódu. Doslova jako podmnožinu C++. Rozhraní CNI potom zachovává binární kompatibilitu kódu napsaného v jazyce Java, který je po překladu kompatibilní s kódem v C++. Dále definuje typy pro zachování kompatibility, jako třeba jint v C++ == Integer v Javě.

Apache Harmony

link

Ambiciózní projekt Harmony pod křídly Apache Software Foundation, jednoho z největších producentů open source Java software vůbec. Jedním z cílů projektu bylo spojit existující implementace do jedné, nicméně z důvodu licenční nekompatibility mezi GNU GPLv2 a Apache licencí nebylo možné využít největší část existujícího kódu, knihovnu GNU Classpath. Projekt od počátku počítal s masivní podporou od společností jako IBM, Intel, nebo Google, které se do projektu skutečně zapojily.

CACAO

link

Virtuální stroj napsaný na Vídeňské univerzitě. První verze byla vydána už v roce 1997 a v té době již zvládal kompilaci do nativního kódu. Pro zajímavost, JVM od jisté společnosti Sun Microsystems zvládalo podobné techniky až od roku 1999 díky HotSpot. Později byl uvolněn pod GNU GPL a používá se ve spojitosti s GNU Classpath.

Kaffe

link

Virtuální stroj poprvé vydaný v roce 1996 byl od počátku open source. Ačkoli je pomalejší než jeho konkurence, jeho výhodou je menší velikost a snadná portabilita, díky které se využívá především v embedded světě. Rovněž používá GNU Classpath.

SableVM

link

Další z free software implementací. Ačkoli co do JIT schopností zaostává za konkurenty, jako jedna z mála alternativních implementací zvládá JVMDI (Java Virtual Machine Debugging Interface) a JDWP (Java Debug Wire Protocol).

Android (Dalvik)

link

Dalvik je virtuální stroj pro programy napsané v jazyce Java pro platformu Google Android. Velice často je kladena na roveň platformě Java a právní část otázky je předmětem aktuálně probíhajícího soudního sporu. Čistě technicky se má situace takto. Celá platforma se sestává z těchto částí:

Formát dex a celý stroj Dalvik jsou navíc registrově orientované, na rozdíl od zásobníkového Java. Android je trošku jako chytrá horákyně, nicméně "Java" to není. Jako nejlepší popis je možné uvést: platforma inspirovaná (sice možná o trochu více než třeba .NET) Javou. Není možné vzít libovolný Java program a spustit jej na platformě Android, a to jak z důvodu nekompatibility na úrovni bytekódu, tak i na úrovni standardní knihovny.

IKVM.NET

link

Na rozdíl od výše uvedené Android platformy je IKVM.NET skutečně Javou. Jedinou odlišností je, že celý framework je napsán v .NET a navíc obsahuje nástroje pro překlad Java kódu i do Common Intermediate Language, který pak může být přeložen do standardní .dll knihovny této platformy.

Závěrem

link

Nahlédli jsme do světa otevřených implementací platformy Java – opravdu jen nahlédli, těch implementací existuje mnohem více. Ukázali jsme si, že neexistuje pouze klasická JIT cesta (gcj) nebo že alternativní implementace mohou obsahovat zajímavé vlastnosti. V následujícím díle se zaměříme na projekty OpenJDK, Icedtea, jejich vztah k Oracle Java SE a navíc poodhalíme zákoutí Java Wars.

Odkazy a zdroje

Java Language Specification
Class file format
Java platform Standard Edition
Java platform Enterprise Edition
Java platform Micro Edition
RMS: Java Trap
GNU Compiler for Java
GNU Classpath
GNU Classpath license
About CNI
Apache Harmony
CACAO
Kaffe
SableVM
Dalvik
Android
IKVM.NET

Další články z této rubriky

Týden na ITBiz: Výkonný elektromagnet z 3D tiskárny
Týden na ScienceMag.cz: Neutronové molekuly – neutrony se mohou vázat na kvantové tečky
Týden na ITBiz: Polovina českých firem si není jistá blízkou budoucnosti svého oboru, většina ale počítá s velkým vlivem AI
Týden na ScienceMag.cz: Působivá simulace pádu do černé díry
Týden na ITBiz: Platby výkupného za ransomware vzrostly za poslední rok na pětinásobek

Diskuse k tomuto článku

xvasek avatar 30.11.2010 08:07 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Odpovědět | Sbalit | Link | Blokovat | Admin
No, na začátku jsou sice pěkně zadefinované jednotlivé součásti, ale pak přijde u popisu GNU Classpath zcela nový pojem "Běhová knihovna". Co to je "Běhová knihovna"?
stativ avatar 30.11.2010 08:47 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Tipoval bych to na runtime library.
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
30.11.2010 09:08 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Na míchání anglických a českých termínů bych si měl dávat pozor.

Jinak je to runtime library.
When your hammer is C++, everything begins to look like a thumb.
xvasek avatar 30.11.2010 12:36 xvasek | skóre: 21 | blog: | Zlín
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Přeložit si to umím, ale která konkrétně komponenta Javy (z výše uvedených) to je? Celé JRE, nebo jenom standardní knihovna? Já trochu rozumím, jak funguje Sun/Oracle Java (typicky interpretuju bytekód v JVM, které je externí), ale tady u té GNU Javy nevím vůbec, co je co a jak to funguje a článek mi v tom moc nepomáhá. Odstavec o Harmony je mi jasný ještě méně - vůbec nevím, které komponenty ho tvoří, v jakém je stavu a jaký je jeho vztah ke GNU Java, je tam jenom popsané, co chtěli autoři před oněmi deseti (?) lety, když Harmony zakládali, udělat. Já bych nerad, aby to vypadalo jako bohapusté remcání, mě to opravdu zajímá a z článku to nechápu.
30.11.2010 13:25 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Přeložit si to umím, ale která konkrétně komponenta Javy (z výše uvedených) to je? Celé JRE, nebo jenom standardní knihovna?
GNU CLasspath je jenom knihovna, tj rt.jar (a případně nějaký ten bordel jako plugin.jar a podobně).
Odstavec o Harmony je mi jasný ještě méně - vůbec nevím, které komponenty ho tvoří, v jakém je stavu a jaký je jeho vztah ke GNU Java
Harmony je kompletní implementace JDK, tudíž knihovna, virtuální stroj, překladač a podobně.
When your hammer is C++, everything begins to look like a thumb.
30.11.2010 13:28 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Mimochodem, ta část o Apache Harmony je skutečně hodně nepovedená, jak si to tak po sobě čtu.
When your hammer is C++, everything begins to look like a thumb.
30.11.2010 21:16 anonym
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
u androida je dvakrát bod o dalvikVM
30.11.2010 21:48 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
No on i ten první odstavec není úplně perfektní. Před v laboratořích společnosti Sun nemá být čárka a pak je tam typo: Zpátky s→k původní otázce.
30.11.2010 09:20 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Odpovědět | Sbalit | Link | Blokovat | Admin
Končně to někdo dal na jedno místo. Mnoho "diskutérů" zde na abc by si měli číst článek po celý týden den co den. Palec nahoru.
Later --- Lukáš Zapletal
30.11.2010 09:46 Radek
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Souhlas, konečně to někdo trochu rozplete. Těším se na další díly.
30.11.2010 12:25 dad
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
mne se ten clanek take velmi libi, ale je to zejmena tim, jak autor pise - mam rad takovou strohou, primou, faktickou mluvu.

Co ale nechapu, proc bychom to my 'mnozi' meli porad cist?
30.11.2010 10:58 Saha
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Odpovědět | Sbalit | Link | Blokovat | Admin
Není věta "...je program vykonávající instrukce nahrávané z Java." nějak nedokončená? Tipoval bych, že tam patří z Java .class souboru.
30.11.2010 11:05 JS
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Odpovědět | Sbalit | Link | Blokovat | Admin
Nema byt misto "tudíž operandy předpokládají instrukce na zásobníku" spis "instrukce predpokladaji operandy na zasobniku"?
30.11.2010 11:09 2X4B-523P | skóre: 38 | blog: Zelezo_vs_Debian
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Odpovědět | Sbalit | Link | Blokovat | Admin
Zvláštností světa kolem Javy je jeho nejednoznačný postoj k otevřenému kódu. - apokaliptická věta :-D
Jardík avatar 30.11.2010 12:37 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Odpovědět | Sbalit | Link | Blokovat | Admin
Bohužel java je poměrně nepoužitelná a bude pořád, dokud nepřidají neznaménkové typy. Implementovat v javě algoritmy jako blowfish, md5 (které pracují s neznaménkovými typy), nebo prostě jen načíst 2 64bit čísla ze souboru a něco nad nimi provést, to je bolest. Řešit to použitím většího typu, nebo k tomu přidat o několik bitových operací víc, to je bolest a algoritmus zašije nechutné zpomalení. Je tedy lepší napsat nativní verzi a tu volat z javy. Ale to potom už můžu udělat nativně všechno, že? Protože tím se ztratí smysl javy.
Věřím v jednoho Boha.
30.11.2010 18:59 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
ty mas furt neco. posledne to bylo, ze v jave nejde mapovat do pameti soubory vetsi nez 2GB.
nebo prostě jen načíst 2 64bit čísla ze souboru a něco nad nimi provést, to je bolest.
souhlasim, v normalnim jazyce se nemusis starat o velikost datoveho typu :-]]
Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
Jardík avatar 30.11.2010 21:48 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
V normalnim jazyce se nemusis starat o velikost datoveho typu
Myslím, že pro mě žádný normální jazyk neexistuje, na všech mi něco vadí :-)
Věřím v jednoho Boha.
1.12.2010 07:35 JS
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Smysl Javy je obchodni. Kdyz se nejake firme podari prosadit svou (novou) platformu, je to jako vyhrat jackpot - nemusite skoro nic investovat a zakaznici (kteri nemohou nikam premigrovat) vam plati sami. Proto to take firmy delaji, ze vytvareji nove platformy. Takova nova platforma nepochybne jistou inovaci je, jinak by nebyla zajimava (ale velka cast je marketing). Firma by samozrejme mohla inovovat i v ramci uz existujicich platforem, ale co z toho? Proto inovace v IT spociva ve zmene platformy - jasne z teorie her.

A kdyz novy jazyk, co mrknout na Common Lisp?
30.11.2010 17:34 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Odpovědět | Sbalit | Link | Blokovat | Admin
IKVM.NET - implementace Javy v .Net. LOL :-D
Co takhle ještě implementovat .Net v Javě a spustit tyhle dva několikrát nad sebou?
Mám pocit, že možná i s dementním kumodule jsem udělal užitečnější práci než tihle... :-D
What Big Oil knew about climate change
30.11.2010 18:19 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
tjv…

K otázce v nadpisu: Odpověď je zřejmá. Dalvik neimplementuje JVM Specification, takže ač se pro Android programuje v Javě, na Androidu žádná Java neběží.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
30.11.2010 19:37 Espinosa | skóre: 24 | blog: Espblog | London
Rozbalit Rozbalit vše Poznamky ke GCJ
Odpovědět | Sbalit | Link | Blokovat | Admin
Na "shrnujici" clanek mi tam znacne chybi linky na jednotlive projekty, rozsirujici clanky, pouzite zdroje :( Skoda, jindak docela podareny prehled.

GCJ

Chybi dulezite upozorneni, ze se jedna o zmirajici projekt: ""As of 2009[update] there have been no new developments announced from gcj. The product is currently in maintenance mode"" (Wikipedia) Dale dodnes neni mozne prelozit programy pouzivajici Swing/AWT, coz je vada dost zasadni, pouziva se vyhradne na Eclipse/SWT aplikace. http://lwn.net/Articles/130796/ - clanek z doby kdy budoucnost byla ruzova. V dobach nejvetsi slavy a optimismu napriklad Fedora Core (a zrejmem i dalsi distribuce) dodavala Eclipse prelozenou prave GCJ, tedy jako plne nativni aplikaci. Ovsem nativni verze se ukazala v praxi jako pomalejsi nez ta bezici pod JVM. Otevreni Javy pod GPL vzalo dalsi argument pro pokracovani ve vyvoji.
Luboš Doležel (Doli) avatar 30.11.2010 19:38 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Poznamky ke GCJ
Na konci článku je celá velká sekce Zdroje a odkazy.
1.12.2010 12:36 Espinosa
Rozbalit Rozbalit vše Re: Poznamky ke GCJ
Tak to se omlouvam. Skutecne jsem tuto "sedou" cast preskocil jako nepatrici primo k clanku, neco jako reklamu ;) To je pozadavek Abc aby to vypadalo takhle? Lepsi by byl relevantni odkaz hned u prislusneho odstavce.
1.12.2010 10:20 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Odpovědět | Sbalit | Link | Blokovat | Admin
Hovorí sa, že ak nadpis článku končí otáznikom, odpoveď je "Nie". :-D
1.12.2010 11:21 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Poznámka k SableVM
Odpovědět | Sbalit | Link | Blokovat | Admin
SableVM sa dostalo len po Javu 1.4 a nie ďalej a podľa webovej stránky:
THIS PROJECT HAS MET ITS RESEARCH GOALS AND IS NOT ACTIVELY MAINTAINED ANYMORE.
Čo je škoda, pretože na rozdiel od Sunovskej javy prešiel cez valgrind bez frflania.
2.12.2010 12:30 methuz | skóre: 7 | blog: robutek
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Odpovědět | Sbalit | Link | Blokovat | Admin
A co na to Vera Pohlova? ... Tyhle afery kazdeho jenom otravuji. Ja bych vsechny ty Javy a JDKcka zakazala!
The only problem with troubleshooting is that sometimes trouble shoots back ..
6.12.2010 21:00 Věra Pohlová, důchodkyně
Rozbalit Rozbalit vše Re: Otevřená Java 1: Přehled, je androidí Dalvik Java?
Moje řeč..

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.