Compila Java a codigo nativo

El 20 de agosto escribí que .NET podía compilar binarios nativos usando las herramientas de mono, en dicho artículo escribí este párrafo

Hace muchos años quería que Java tuviera algo así, es una pena, aunque ahora .NET al menos Mono puede hacer esto, la belleza de la programación 100% orientada a objetos con portabilidad binaria y ahora incluso redistribución nativa a la plataforma seleccionada.

El párrafo en realidad es válido, porque yo quería hacer esto en MS/Windows, pero olvide mencionar que en GNU/Linux esto es una realidad, no gracias a Java ni cuando SUN ni con Oracle definitivamente. De hecho también es posible hacerlo en Windows pero no nativamente se requiere de Cygwin

En GNU/Linux esto es posible de forma nativa, puedes quitar la maquina virtual y llegar directamente al API del OS y ganar muchísima velocidad, incluso en los programas gráficos, por que también se brinca las librerías GTK y KDE, directamente escribe a X pero sin perder la integración con el sistema

Debes tener el soporte para Java en el compilador de GNU, si lo tienes puedes compiar asi:
gcj –main=clase archivoconlaclase.java -o binarioresultant

En resumen es posible escribir programas 100% objeto con Java y compilar directamente.

Esto no es nuevo, el motivo por el cual existe el compilador es porque Richard Stallman llamaba a Java Runtime como la trampa de Java, esto es porque Java ha sido gratuito pero su código no y no era libre, por lo que el señor se dio a la tarea de agregarle a su colección de compiladores la capacidad de compilar Java, hoy en día existe el OpenJava para el runtime y el OpenJDK para el compilador ambos bajo licencia GPL tal vez como respuesta a las protestas de Richard.

Lo que me llama la atención es que la gente del proyecto de Java haya reaccionado con las versiones GPL Open Java en lugar de demandar a GNU, ¿porque es sorprendente?. Porque la historia de Java es tabu, siempre que alguien quiere truncar Java, Java ataca sea con SUN o con ORACLE.

Sun demando a Windows por que el Visual J++ o Visual Java que no era Java al 100%, la filosofía de Java desde siempre es, “Escribe una vez, ejecuta donde sea“ bajo ese lema las demandas no han faltado si alguien mancilla Java.
Un poco de historia de los 90’s más exactamente por el 1998

Microsoft causo la ira de SUN cuando al trabajar con Visual J++, este creaba binarios que podían amarrarse al sistema operativo una versión llamada sucia o contaminada de Java, que aunque era el pseudo código de Java no necesariamente correría en cualquier OS diferente a Windows, esto anulaba por completo el propósito de Java de que un binario Java debe ejecutarse libremente en cualquier OS

Historia reciente del 2011-2012

Oracle hizo lo mismo en su turno, cuando Google usa a Java como lenguaje oficial de Android, esto es porque aunque el código es Java a la hora de escribirlo, pero a la hora de compilar el código resultante no es Java, es código especial que se ejecuta en un entorno llamado Dalvik, amarrando entonces el binario Java a una plataforma en este caso Dalvik. Aquí Oracle demanda a Google por este motivo. Aunque a diferencia de Microsoft aquí la demanda se desestima por que finalmente solo se usa Java para escribir el programa pero el binario no es Java y por lo tanto no debería violar el propósito de Java, es por este motivo que los Apps de Android son tan rápidos, algunos piensan que el teléfono ejecuta Java, pero no es verdad, solo se escriben en ese lenguaje pero a la hora de compilar dejan de ser Java y pasan una plataforma más ligera y rápida que ejecutarlo directamente como Java.

En conclusión.

El compilador de GNU está en la misma posición que el Dalvik, por que es exactamente el mismo caso, el lenguaje de origen es Java, pero al compilarse no termina como pseudo código de Java, es código nativo de GNU/Linux, esto significa que el binario ha quedado amarrado a la plataforma. Y ni Sun ni Oracle han brincado y que bueno porque realmente es mejor ejecutar código nativo que pseudo código en una maquina virtual. Solo me llama la atención el por qué no ha sido demandado.

Por lo pronto se puede compilar cualquier solución Java a código nativo, asi que si eres experimentado programador de Java, puedes liberar programas en Linux sin que este tenga que tener instalado el runtime de Java

Otros artículos relacionados.

Java vs Mono
Compilando C# a codigo nativo con mono

4 Comments

Add a Comment

Comment spam protected by SpamBam