Navigation

El Java de Android no es tan Java

Android Google Phone

El otro día comentaba el lanzamiento de Android, el nuevo framework aplicativo de Google para el mundo de los móviles. Se ha creado la lógica expectación, ya que todo lo que rodea a Google tiene ese halo de «rey Midas». Ya sabéis, el que transformaba en oro todo lo que tocaba. Y claro, ahora todo el mundo se apunta al carro de Android, ya sea para participar o para criticarlo a muerte.

Lo que se presentó al final de cuentas no deja de ser otro framework para móviles más. Cierto es que muy completo y muy atractivo si se ponen en venta dispositivos que soporten todo lo prometido. Entre la lista de características que se presentó en el SDK Overview, hubo una que me llamo la atención. Se trata de lo que ellos denominan «Dalvik virtual machine optimized for mobile devices». ¿Máquina virtual Dalvik?, ¿qué?, nunca había oído hablar de algo así.

Uno se recorre las páginas de la documentación, mira los ejemplos de código y ve que la base de programación es Java. En eso no hay ninguna duda. Y bienvenido es para los que sean expertos en el lenguaje. Pero sin embargo, la máquina virtual que se incluye para ejecutar las aplicaciones se denomina como Dalvik (?). Y además leo que Google quiere hacer firmar a todos los miembros de la Open Handset Alliance un compromisio para evitar la fragmentación en las implementaciones de Android y usar todos la misma máquina virtual.

Pero… ¿qué es todo esto de Dalvik? ¿por qué quiere Google que firmen este documento? ¿y dónde está y qué dice Sun, como padres de Java, en toda esta historia?

Pues leyendo un poco mas, lo que ocurre es que Google ha creado su propia máquina virtual. Pero esta máquina no ejecuta bytecode de Java, ejecuta su propio bytecode. Digamos que comprende el lenguaje y las clases Java, pero las compila, usando una heramienta llamada dx, en su propio formato, el Dalvik Executable (.dex). A parte de esto, dicen que la máquina está más optimizada en necesidades de memoria, permite varias instanciaciones de la máquina y otorga la gestion de procesos y memoriade directamente a Linux para un mejor aislamiento de los mismos.

Aún está por ver las consecuencias directas de esta decisión de Google en el rendimiento y compatibilidad del sistema. Pero lo que ya sabemos es que a Sun no le ha sentado muy bien la jugada. El código escrito para J2ME puede ser ejecutado sin problemas en Android, pero Google se salta a la torera la licencia J2ME de Sun y evita el pago de royalties. Google dice que las razones son puramente técnicas y que no se busca el evitar ningún pago. Sun se está pensando enviar o no a los tribunales a Google por este tema. Algo difícil, ya que si lo hace tendrá en contra a la comunidad open source, pero si no lo hace, está arriesgando la pérdida de posibles royalties.

Ah, por cierto, Dalvík es un pueblo en Islandia del que son originarios los antepasados del principal responsable del desarrollo de la máquina virtual, Dan Bornstein.

Y para los que no habéis entendido nada de este post, os recomiendo un par de lecturas. Primero sobre Java y luego sobre Android.