Obsah
1. Přednášky o Javě na konferenci FOSDEM 2011
2. Plánovaný rozpis přednášek o Javě
4. Budoucnost JDK 7 a OpenJDK 7
5. Nové vlastnosti JDK 7 a OpenJDK 7
6. SystemTap – sledování procesů běžících v systému
1. Přednášky o Javě na konferenci FOSDEM 2011
Konference FOSDEM neboli Free and Open Source Software Developers' European Meeting je jedna z největších evropských konferencí zabývajících se otevřeným softwarem. Historie této konference je již poměrně dlouhá, protože její první ročník proběhl již v roce 2001, tehdy ovšem ještě pod názvem OSDEM (rozšíření názvu této konference o slovo Free bylo provedeno na žádost Richarda Stallmana, který mimochodem měl na této konferenci i několik přednášek). Témata, o kterých se na FOSDEMu přednáší, zasahují do prakticky všech oblastí, v nichž se otevřený software používá – od různých přenosných či jednoúčelových zařízení až po servery či dnes tak populární cloudy. Od roku 2004 a především pak po vydání OpenJDK společností Sun Microsystems v roce 2006 se na této konferenci začaly čím dál tím více množit i přednášky o programovacím jazyku Java, běhovém prostředí tohoto jazyka i technologiích, které jsou nad Javou či jeho běhovým prostředím postaveny.
V letošním ročníku konference FOSDEM byla pro přednášky týkající se přímo programovacího jazyka Java či implementací Javy a jejího rozšíření na různé platformy vyhrazena v obou víkendových dnech samostatná přednášková místnost, která však většinou neměla dostatečnou kapacitu pojmout všechny posluchače (to je ovšem na FOSDEMu běžné a taktéž pochopitelné, protože celkový počet účastníků se nepočítá ani v desítkách nebo stovkách, ale v tisících). Sice se jednalo o stejnou místnost, jaká byla pro Javu vyhrazena předchozí rok, ovšem počet přednášek i jejich celková délka narostla. V následujících odstavcích se zmíním o některých přednáškách, které se týkaly především nových vlastností implementovaných v OpenJDK 7 a taktéž toho, jakým směrem bude další vývoj JDK a především OpenJDK s velkou pravděpodobností směřovat. Na tomto místě je vhodné dodat, že mezi přednášejícími byli i zaměstnanci firmy Oracle a diskuse o některých problematických věcech, například o způsobu práce JCP [link] či o způsobu obsazení OpenJDK Governing Board [link], byla kupodivu velmi otevřená, a to jak ze strany komunity, tak i ze strany zástupců společnosti Oracle.
2. Plánovaný rozpis přednášek o Javě
V následující dvojici tabulek je uveden původní rozpis přednášek týkajících se buď přímo programovacího jazyka Java nebo některé z technologií, které s tímto jazykem nebo jeho virtuálním strojem a běhovým prostředím souvisí. Ve skutečnosti však některé přednášky neproběhly. Jedná se například o přednášku Why Linux Distributions Hate Java, která mohla být již podle svého názvu a abstraktu velmi zajímavá.
Sobota 5. 2. 2011
Přednáška | Přednášející |
---|---|
Welcome to Java Sans Frontiéres | Tom Marble |
State of OpenJDK | Mark Reinhold, Joe Darcy |
IcedRobot: The GNUlization of Android | David Fu Mario Torre |
Why Linux Distributions Hate Java | Thierry Carrez |
The Java Packaging Nightmare | Torsten Werner |
Guide to Packaging for Developers | Stanislav Ochotnicky |
What Makes IcedTea Tick? | Mark Wielaard |
What in the World Is This ‚IcedTea-Web‘ Project? | Deepak Bhole |
The Free JavaWS Implementation in IcedTea-Web | Omair Majid |
Lessons Open Sourcing Java Taught Me | Simon Phipps |
The Rise and Fall and Rise of Java | Steve O'Grady |
Neděle 6. 2. 2011
Přednáška | Přednášející |
---|---|
The Free Java Jigsaw Puzzle | Tom Marble |
The Modular Java Platform | Mark Reinhold |
Project Coin | Joe Darcy |
Observing HotSpot with SystemTap | Mark Wielaard |
JamVM Gets a New Flavour | Robert Lougher |
IndyDroid | Rémi Forax |
Azul's Foray into Open Source | Cliff Click |
Free Java | Ben Evans Martijn Verburg |
PHP.reboot | Rémi Forax |
Rhino and RingoJS | Hannes Wallnöfer |
AltosUI | Bdale Garbee |
Low latency in Gervill and JavaSound | Karl Helgason |
Garbage Collection | Tom Marble |
3. Současný stav OpenJDK 6
O současném stavu a taktéž o nejbližší budoucnosti OpenJDK 6 se mluvilo hned na několika přednáškách, ovšem pravděpodobně nejdůležitější a nejsledovanější byla slova, která pronesli Joe Darcy a Mark Reinhold – zaměstnanci firmy Oracle, kteří v této společnosti hrají poměrně důležitou úlohu v dalším směřování jazyka Java. Uživatele OpenJDK 6 a taktéž i JDK 6 bude jistě zajímat, že tato již více než čtyři roky stará verze Javy bude udržována minimálně do června roku 2012. To znamená, že alespoň do této doby budou pravidelně vydávány bezpečnostní aktualizace a když bude zapotřebí, tak i běžné aktualizace, které by se však neměly dotknout API všech standardních knihoven (API knihoven je ostatně jedna z věcí testovaných pomocí Java Compatibility Kit (JCK)). Perioda vydávání bezpečnostních aktualizací by se pravděpodobně měla sjednotit s ostatními produkty firmy Oracle takovým způsobem, aby tyto aktualizace byly vydávány pravidelně čtyřikrát do roka.
V případě, že by se ovšem z nějakých důvodů opozdilo vydání JDK 7 / OpenJDK 7 (viz též další kapitolu), může se podpora pro OpenJDK 6 prodloužit na blíže nespecifikovanou dobu, minimálně však na jeden rok od vydání oficiální verze JDK 7 / OpenJDK 7. Situace tedy bude velmi pravděpodobně vypadat tak, že šestá verze Javy bude bezplatně podporována zhruba do poloviny roku 2012 a od té doby budou vydávány bezpečnostní aktualizace pouze platícím zákazníkům. Joe Darcy na své přednášce také mluvil o tom, z jakého důvodu je OpenJDK 6 založeno na zdrojových kódech JDK 7 a nikoli na zdrojových kódech JDK 6. Jedná se o poměrně známý důvod – OpenJDK bylo vydáno v době, kdy byly zdrojové kódy JDK 6 již poměrně stabilní a autoři v nich nechtěli kvůli jejich „otevření“ dělat větší (nezbytné) změny. Proto byly jako základ pro OpenJDK 6 použity zdrojové kódy JDK 7, z nichž byly odstraněny části nekompatibilní se specifikací JDK 6 (rozšíření API knihoven apod.).
4. Budoucnost JDK 7 a OpenJDK 7
Z hlediska budoucnosti JDK7 a taktéž OpenJDK 7 byla velmi zajímavá přednáška Marka Reinholda, který pracuje ve společnosti Oracle na pozici Chief Architect of Java Platform Group, tj. jedná se o člověka, který má (jak už jsem se zmínil o několik odstavců výše) velký vliv na to, kdy bude JDK 7/OpenJDK 7 vydána a jaké nové vlastnosti v ní budou implementovány. Zatímco při psaní článků o nových vlastnostech JDK 7/OpenJDK 7 [první díl], [druhý díl], [třetí díl] ještě nebylo zcela jisté, kdy bude tato verze JDK skutečně vydána ani to, jaké vylepšení v ní budou implementovány, na FOSDEMu již byl Mark Reinhold konkrétnější.
Cyklus závěrečného testování by měl začít 8. 6. 2011 a oficiální verze JDK 7 i OpenJDK 7 by měla být vydána zhruba o měsíc a půl později, konkrétně 28. 7. 2011. Mark Reinhold taktéž velmi otevřeně zmínil čtyři priority vedení firmy Oracle, které se týkají programovacího jazyka Java. Tyto priority mj. vyplývají i z toho, že ve firmě Oracle pracuje několik tisíc programátorů a testerů na vývoji aplikací v Javě (nejedná se tedy o vlastní JDK ale o aplikace JDK využívající). Jedná se o následující priority:
- Java musí dále existovat jako jedna z nejdůležitějších vývojových platforem současnosti
- Nepřímé zisky z Javy a s ní souvisejících technologií
- Přímé zisky z Javy a s ní souvisejících technologií
- Snížení ceny (implementace, nasazení, údržby)
Další zajímavostí Markovy přednášky byla informace o složení OpenJDK Governing Board, okolo níž byla vedena živější diskuse, protože složení této komise je při pohledu na počty patchů a fixů přidávaných do OpenJDK 6 i OpenJDK 7 (roztříděných podle jednotlivých firem a sdružení) minimálně diskutabilní:
Chair: Adam Messinger, Oracle Vice-Chair: Jason Gartner, IBM OpenJDK Lead: Mark Reinhold, Oracle At-Large (2x): Prof. Doug Lea, SUNY, Mike Milinkovich, Eclipse
5. Nové vlastnosti JDK 7 a OpenJDK 7
S novými vlastnostmi, které by se měly objevit v JDK 7 či OpenJDK 7, jsme se již na Rootu seznámili v trojici článků Novinky v JDK 7 aneb mírný pokrok v mezích zákona (1), Novinky v JDK 7 aneb mírný pokrok v mezích zákona (2) a Novinky v JDK 7 (3) + co v JDK 7 naopak nenajdeme. Joe Darcy ze společnosti Oracle ve své přednášce Project Coin víceméně potvrdil, že se všechny vlastnosti popsané ve zmíněné trojici článků v oficiálním vydání OpenJDK 7 skutečně objeví – jedná se především o nové možnosti zápisu celočíselných konstant s možným oddělením jednotlivých číslic pomocí podtržítka, podporu pro zápis čísel v dvojkové soustavě, podporu pro použití řetězcových konstant (literálů) v příkazu switch, operátor „diamantu“ zjednodušující především deklarace proměnných s použitím generik, automatické zavírání prostředků v příkazovém bloku try–catch–finally a taktéž o možnost použití jednoho bloku catch pro různé typy výjimek.
Kromě výše zmíněného projektu Coin bude OpenJDK 7 podporovat i novou instrukci bajtkódu invokedynamic, která je velmi důležitá a užitečná při implementaci skriptovacích jazyků běžících nad virtuálním strojem Javy. Bližší informace o této nové instrukci lze najít například na stránkách simple Java linkage: an invokedynamic apéritif, invokedynamic now lives in JDK7 a především na stránce JSR 292: Supporting Dynamically Typed Languages on the JavaTM Platform (k této nové funkcionalitě se ostatně ještě vrátíme v dalších článcích). Podle předpokladů bylo taktéž potvrzeno, že se s dalšími plánovanými vlastnostmi Javy setkáme až v některé z jejich dalších oficiálních verzí. Jedná se především o možnost deklarace kolekcí i s jejich inicializací („collection literals“) a taktéž o projekty Jigsaw a Lambda, s nimiž se pravděpodobně setkáme v OpenJDK 8, která by mohla být vydána již v roce 2012.
6. SystemTap – sledování procesů běžících v systému
Další zajímavou přednášku měl Mark Wielaard, který popisoval projekt SystemTap. Jedná se o nástroj, který umožňuje monitorovat běžící procesy. Na rozdíl od částečně podobných trasovacích nástrojů typu strace, ltrace či ftrace je však projekt SystemTap založen na takzvaných „sondách“ (probes), které mohou reagovat na různé události, které v běžícím procesu nastanou. V případě, že je taková událost sondou zachycena, může sonda spustit handler události napsaný v poměrně jednoduchém programovacím jazyce (tento jazyk nabízí například tvorbu podmínek, práci s proměnnými atd.). Díky takto koncipovanému způsobu práce SystemTapu lze získat mnoho přesně cílených informací o běžícím procesu bez toho, aby se musely zkoumat soubory generované výše zmíněnými nástroji typu strace apod. nebo aby se musel spouštět gdb (debugger).
Mark se na přednášce zmiňoval i o tom, proč byla podpora tohoto nástroje v případě OpenJDK problematická – hotspot je totiž psaný převážně v programovacím jazyku C++ a obsahuje velké množství maker a inline assembleru. Musely se tudíž provést takové úpravy, aby SystemTap vracel smysluplné informace (a aby bylo možné sondy přesně umístit). Tímto zajímavým nástrojem se ještě budeme zabývat v některé z dalších částí seriálu o programovacím jazyku Java, protože se jedná o nástroj velmi dobře použitelný pro sledování alokace a dealokace paměti, monitorování práce správce paměti atd. Další informace lze prozatím nalézt na stránkách projektu SystemTap či na stránce s demonstračními sondami: http://icedtea.classpath.org/~vanaltj/stapexamples/.
7. Projekt PHP.reboot
Rémi Forax je mezi komunitou vývojářů používajících programovací jazyk Java poměrně známou osobností, zejména proto, že se podílel na rozšíření JRE takovým způsobem, aby JRE podporovala (dynamicky typované) skriptovací jazyky. Právě o novém skriptovacím jazyku byla i letošní druhá Rémyho přednáška, na níž posluchače stručně seznámil s programovacím jazykem nazvaným PHP.reboot. Jedná se o velmi rychlý dynamicky typovaný programovací jazyk, který je zvláštní tím, že umožňuje v jediném zdrojovém kódu kombinovat větší množství různých syntaxí – (X)HTML, XML, SQL, JSON atd. – to vše bez nutnosti používat zvláštní sekvenci znaků pro oddělení jednotlivých bloků. Tento jazyk není vázaný pouze na Oracle JDK nebo OpenJDK – naopak, může běžet například i na dalších JDK nebo i na Androidu.
Zajímavá je taktéž implementace tohoto programovacího jazyka. Programový kód je interpretovaný, ovšem interpret v době běhu programu získává mnoho informací o prováděném kódu (skriptu). Jakmile se detekují často volané metody nebo programové smyčky, interpret tyto části skriptu optimalizuje (rozbalí smyčky, zjednoduší práci se zásobníkem…) a následně tuto část skriptu přeloží do bajtkódu virtuálního stroje Javy. Další optimalizace jsou již plně ponechány na JRE. Prozatím se jedná o velmi „mladý“ projekt, ale práci Rémyho je velmi zajímavé sledovat a to i v případě, že PHP.reboot v poměrně silné konkurenci dynamicky typovaných jazyků běžících nad JRE nakonec neuspěje…
8. Obsah druhé části článku
Ve druhé části tohoto článku se zmíním o některých dalších přednáškách zabývajících se programovacím jazykem Java nebo jeho běhovým prostředím (JRE), které na konferenci FOSDEM proběhly. Především se jednalo o přednášky na téma vytváření balíčků s javovskými aplikacemi pro různé distribuce Linuxu. Tyto přednášky by mohly (možná bych si dovolil říci, že dokonce měly) zajímat všechny autory, kteří vytváří javovské aplikace s otevřeným zdrojovým kódem. Příště se taktéž zmíním o projektu Jigsaw, který částečně souvisí právě s vytvářením balíčků, i když původní poslání tohoto projektu je poněkud odlišné – je jím vytvoření modulární platformy Javy, která by obsahovala pouze ty součásti, které jsou nezbytné pro provozování dané aplikace.
Posledním tématem následující části tohoto článku bude popis projektu IcedTea-web, který v sobě implementuje dvě částečně související technologie. První z těchto technologií je podpora pro spouštění appletů z webových prohlížečů, samozřejmě i s nabídkou aplikačního programového rozhraní (API), pomocí kterého může applet komunikovat s JavaScriptovými programy na webové stránce. Druhou implementovanou technologií je Java Web Start umožňující spouštět javovské aplikace přímo z webového prohlížeče, ovšem s tím rozdílem, že tyto aplikace jsou spuštěny ve vlastním okně a současně i v takzvaném sandboxu, což je samozřejmě důležité z hlediska bezpečnosti (konfigurace sandboxu je však většinou odlišná od konfigurace použité pro spouštění appletů).
9. Odkazy na Internetu
- FOSDEM 2011
http://www.fosdem.org/2011/ - Free Java devroom
http://www.fosdem.org/2011/schedule/track/free_java_devroom - OpenJDK Governing Board
http://openjdk.java.net/groups/gb/ - JCP
http://jcp.org/en/home/index - SystemTap
http://sourceware.org/systemtap/ - Systemtap scripts using hotspot and hotspot_jni tapsets from IcedTea
http://icedtea.classpath.org/~vanaltj/stapexamples/ - Novinky v JDK 7 aneb mírný pokrok v mezích zákona (1)
http://www.root.cz/clanky/novinky-v-nbsp-jdk-7-aneb-mirny-pokrok-v-nbsp-mezich-zakona-1/ - Novinky v JDK 7 aneb mírný pokrok v mezích zákona (2)
http://www.root.cz/clanky/novinky-v-nbsp-jdk-7-aneb-mirny-pokrok-v-nbsp-mezich-zakona-2/ - Novinky v JDK 7 (3) + co v JDK 7 naopak nenajdeme
http://www.root.cz/clanky/novinky-v-nbsp-jdk-7–3-co-v-nbsp-jdk-7-naopak-nenajdeme/ - IcedRobot: The GNUlization of Android
http://fosdem.org/2011/schedule/event/icedrobot - State of OpenJDK
http://fosdem.org/2011/schedule/event/openjdk - The Modular Java Platform
http://fosdem.org/2011/schedule/event/modularjava - Guide to Packaging for Developers
http://fosdem.org/2011/schedule/event/devpackaging - Project Coin
http://fosdem.org/2011/schedule/event/projectcoin - PHP.reboot
http://code.google.com/p/phpreboot/