Dalvik, la machine virtuelle d'Android

Dalvik était la machine virtuelle pour le langage Java des applications du système d'exploitation Android de Google. Elle a été remplacée par ART.

Le nom provient d'une ville d'Islande, d'où le créateur est originaire. Dalvik est produit par l'Open Handset Alliance qui regroupe une centaine d'entreprises.
Il a été créé pour remplacer la machine virtuelle de Java car même si elle est sous licence GPL2 en version ordinaire, il y a une exception sur la version pour mobiles Java ME, ce qui permet à Oracle de demander des droits sur son utilisation.

dalvik

Les applications pour Android sont écrites en Java, le code est d'abord compilé en bytecode par un compilateur Java classique, puis ensuite recompilé dans le code reconnu par Dalvik.
Les fichiers .class sont convertis en fichier .dex. Mais un tel fichier comprend plusieurs classes et est équivalent en taille à un fichier jar.
Dalvik n'utilise par la librairie de classes Java mais une librairie propre basée sur une alternative de la fondation Apache, Harmony. Android n'utilise ni la machine virtuelle Java ME, ni la librairie SE de Java.

Dalvik est une machine JIT (Just In Time), il compile le bytecode en temps réel, mais sera remplacé à l'avenir par un compilateur AOT, qui compile et stocke le bytecode avant l'exécution. Cette nouvelle machine virtuelle nommée ART (Android RunTime), est encore en développement en 2014 et fonctionne sur option dans Android 4.4. Le byte code dans le fichier .dex reste compatible aussi le développeur n'a pas à s'en soucier.

Dalvik vs. Java ME

Il y a des différences entre les machines virtuelles, notamment Dalvik exécute les applications dans une environnement propre comme le font les navigateurs, ce qui est plus sûr.

Deux citations dans la documentation d'Android résument le différence entre Dalvik et Java Micro Edition:

"Chaque application Android tourne dans un processus propre, qui est son instance personnelle de la machine virtuelle Dalvik. Dalvik a été écrit de sorte qu'un matériel puisse faire fonctionner plusieurs MV efficacement."

"La MV Dalvik exécute les fichiers au format Dalvik Executable (.dex) qui est optimisé pour une occupation mémoire minimale. La MV est basée sur des registres et fait tourner des classes compilées par un compilateur de langage Java qui ont été transformées au format .dex par l'outil inclut "dx"."

En outre une part des fonctions ont été reportée sur le backend, en l'occurence Linux:

"La MV Dalvik dépend du kernel Linux pour les fonctions système telles que les processus et la gestion mémoire de bas niveau."

Source: Android developer site. Traduction des citations par Scriptol.fr.

Autres machines virtuelles

Dalvik Turbo: Créée par Myriad, une machine virtuelle compatible qui se veut plus rapide que Dalvik.

ART: Nouvelle machine virtuelle de Google, qui fonctionne en AOT.

VMKit: Une implémentation de la machine virtuelle Java en LLVM. Il exécute du code Java et fonctionne sur tout système.

Oracle contre Dalvik

Le 12 août 2010, Oracle qui a acheté Sun et donc Java en 2009 a déposé une plainte contre Google pour violation de Copyright et de brevets.
L'objet essentiel de cette plainte est la machine virtuelle Dalvik, qui selon la plainte, utilisait des technologies couvertes par des brevets logiciels dont Oracle serait maintenant possesseur.
Google a répondu en estimant que la plainte n'avait aucun fondement et aussi que Dalvik est le produit de l'Open Handset Alliance et non de Google.
L'issue du litige portait sur la validité des brevets logiciels prétendument utilisé dans Dalvik.

Il faut comprendre qu'avec l'immense popularité de d'Android (qui en août 2010 se vendait à raison de 200 000 exemplaires par jour), la machine virtuelle JME d'Oracle ne peut rien leur rapporter. Android est même porté sur des appareils conçus pour d'autres OS comme ceux de RIM.
Mais Java ME aurait-il été choisi par les fabricants comme moteur de leur applications alors qu'il est sujet à royalties?

Mise à jour 2013: Oracle à perdu son procès contre Google en première instance. Il a fait appel, mais a renoncé à ses prétentions sur les brevets, à défaut de mieux, il s'est reporté sur l'API Java, dont il prétend qu'elle est sous copyright, c'est une nouveauté. En appel Oracle l'a emporté.

Ressources