sobota 17. listopadu 2007

Případ Android

Android logoGoogle v průběhu tohoto týdne spustil pekelný sled událostí. Prstem na spoušti se stalo oznámení platformy Android pod záštitou The Open Handset Alliance. Android je zajímavý nejen z technického hlediska, ale především kvůli bezprecedentnímu přístupu k Jave, který může znamenat její samotné rozštěpení. Zkusme se tedy podívat na všechny aspekty případu Android.

Aspekt technický

Android je open source stack pro běh aplikací cílených na mobilní zařízení. Skládá se ze třech základních vrstev: operační systém, middleware pro běh aplikací a základní (systémové) aplikace.

  • Základem celé platformy je Linux Kernel verze 2.6 (doufám, že na hardwaru daných mobilních zařízení bude fungovat lépe než na mém notebooku ;-), který slouží jako vrstva pro přístup k hardwaru.
  • Nad kernelem je postavená hradba céčkových knihoven poskytujících základní služby a rozhraní pro vyšší vrstvy. Mezi základní služby patří 2D/3D (včetně podpory akcelerace) knihovna, embedded relační databáze a webový prohlížeč a nebo knihovna pro práci s audio/video formáty. Hned vedle leží takzvaný runtime což je virtual machine a sada základních systémových API.
  • O patro výše sedí aplikační framework, který poskytuje základní API například pro tvorbu uživatelského rozhraní nebo sdílení dat mezi aplikacemi. Zároveň umožňuje fungovat jako service registry, kde se mohou registrovat jednotlivé služby, které jsou nabízeny k další konzumaci.
  • Úplně na vrchu sedí základní aplikace jako emailový klient, mapa, kontakty atd.

Zatím jsme mluvili v abstraktních pojmech jako API, knihovna, virtual machine a teď se na ně podíváme detailněji. Ona zmiňovaná virtual machine se nazývá Dalvik a je speciálně odladěná pro mobilní zařízení s ohledem na co nejmenší paměťovou náročnost. Každá aplikace běží ve svém vlastním procesu ve vlastní instanci VM. Všechny krabičky z obrázku, které jsou vybarvené modře, jsou psané v jazyce, který je přeložen do meziformátu, který je VM interpretován.

Aspekt politický

Poznámka: nejsem právník.

Bystrého čtenáře jistě napadne paralela s programovacím jazykem Java a JVM (Java Virtual Machine). Jenže Android není ani Java, ani JVM, dokonce ani J2ME a ani J2SE. Důvod je jednoduchý a jmenuje se licence Androidu. Ten je totiž kromě kernelu, který je pod GPL v2, vydán pod Apache Software Licence (dále ASL) a to je kámen úrazu.

Všechny klíčové části, které mohly být použity z platofrmy Java, jsou pod GPL v2 licencí a Sun dobře ví co dělá. Oblast mobilních zařízení je jedna z mála, ve kterých mu Java generuje zisk a proto bylo rozumné držet si určité věci pod kontrolou. Google se ovšem zachoval jako chytrá horákyně. Nemají JVM, ale Davlik VM, který zpracovává Dalvik Executable (.dex) formát což je mírně modifikovaný byte code produkovaný standardním java kompilátorem.

Vývojář tedy píše klasicky ve vývojovém prostředí pro Javu. Před tím než spustí aplikaci v Androidu, je potřeba zavolat speciální konvertor, který převede byte code do Davlik formátu. Další zajímavostí je, že core API Androidu obsahuje každému vývojáři dobře známe knihovny ze standardní Javy jako java.lang.Object a další. Při bližším pohledu člověk zjistí, že to nejsou knihovny všechny. Například chybí knihovny pro tvorbu grafického rozhraní - Swing a AWT.

Je na místě ptát se, jak může Android vzít API Javy a prostě z něj vyextrahovat co potřebuje a dát to pod jinou licencí. Může jednoduše, protože na Core API se uplatňuje takzvaná classpath výjimka. Výjimka existuje proto, aby programy využívající toto API nemusely být vydávané pod GPL v2 licencí a zároveň, aby mohly vznikat další open source implementace Javy s jiným typem open source licence.

Roumenova interpretace:

Google ale vubec nepouziva Sunovsky kod (pouziva kod z projektu Harmony a tim padem je jedno pod jakou licenci jsou zdrojove kody Sunovskeho API pro Java SE nebo Java ME). Navic Classpath exception slouzi pouze k tomu, aby aplikace pouzivajici OpenJDK nemusely byt licencovane pod GPL v2, neumoznuje vsak volbu licence implementacim Javy odvozenych od OpenJDK. Naopak implementace Javy odvozene od OpenJDK MUSI byt licencovane pod GPL v2.

Jinymy slovy, Google nema pravo vzit API Sun Javy, vyextrahovat co chce a publikovat pod jinou licenci jak ty pises. Muze vsak urcite pouzit kod projektu Harmony, kdyz zachova licenci, coz udelal. Classpath vyjimka neexistuje kvuli tomu, aby umoznila implementace Javy s jinym typem open source licence. Implementace Javy s jinym typem open source licence existovaly uz davno pred tim nez OpenJDK bylo licencovano pod GPL v2 s classpath vyjimkou (Harmony, GCJ, atd.). Tomu zadna licence nezabrani, existuji ale jine ochranne prvky (copyright pro ochranu zdrojovych kodu - aby nikdo nekopiroval Sunovsky kod, trademark pro ochranu znacky Java a loga Java a pak jeste patenty pro jednotlive principy, kterych ale Sun z principu nezneuziva a jen je sbira kvuli obrane proti firmam, ktere se rady soudi). Jinym implementacim Javy, ktere nevychazeji z OpenJDK, se nemuze rikat "Java" kvuli trademarku a proto Google na tento trademark nema u Androidu opravneni. OpenJDK umoznuje vytvaret derivaty pouze pod licenci GPL v2 a classpath exception s ostatnima implementacema Javy nema co do cineni.

Přesně tohoto faktu využil Google, který nevzal originál zdrojáky Sunu, ale ty z projektu Harmony, který jsou již pod ASL licencí. Zajímavé je zaptrát po důvodech, které vedly Google k tomu, že byl Android licencován pod ASL. Google zřejmě vsadil na to, že ASL licence umožňuje dobře kombinovat open a closed source projekty. Celkem detailně je to rozebráno v článku Why Google chose the Apache Software License over GPLv2 for Android.

Aspekt sociální

Android si vzal z Javy jenom to co se mu hodilo zrovna do krámu (syntaxe, částečně API). To by mohlo ovšem znamenat nebezpečný precedent do budoucna. Klidně se může stát, že se bude opakovat historie v podobě Mictosoft Javy a vznikne něco co se bude tvářit jako Java, ale Java to ve skutečnosti nebude. Bylo by špatné, kdyby mělo dojít k nějakému štěpení Javy. V případě Androidu je to nebezpečné především díky jeho síle, protože je potenciálně mířen na obrovský segment mobilních zařízení. Bude zajímavé sledovat, jak se k celému problému postaví Sun, který nevydal zatím žádné oficiální stanovisko.

Další zajímavé články k tématu