Compila Java a codigo nativo
By: Date: septiembre 27, 2012 Categories: Programación

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 thoughts on “Compila Java a codigo nativo

  1. Usa: Google Chrome Google Chrome 21.0.1180.89 en Windows Windows 7 - Detectado...

    Siempre paso por tu blog y aprendo algo nuevo, es sorprendente como puedes aportar cosas de valor al mundo informatico, la cuestion es como lo averiguas?

  2. Usa: Internet Explorer Internet Explorer 9.0 en Windows Windows 7 - Detectado...

    Muchas cosas no las averiguo ya las sabia, las supe por que las vivi, como la historia que narro de Java vs Microsoft, para muchos sera historia, para mi es algo que paso, que oi y vi de primera mano incluso que senti sus efectos enfrente del teclado

  3. Usa: Google Chrome Google Chrome 21.0.1180.89 en Windows Windows 7 - Detectado...

    Si entiendo, pero no es lo mismo decir MS modifico a Java y por broncas legales no lo incluyo en XP a la gran explicacion que siempre das, con fechas, hechos o en este caso, como pasar Java a codigo nativo cuando digamos que es un sacrilegio mencionarlo porque se pierde la portabilidad de Java, pero solo a nivel de ejecutable, porque igual y podrias compilar para varias plataformas, tipo el foxpro 2 de hace años que existia para dos, windows, mas y unix.

  4. Usa: Google Chrome Google Chrome 71.0.3578.98 en Windows Windows NT - Detectado...

    No ha ido demandado, por que no hay dinero de por medio. oracle quería sacar dinero de Google…pero en el caso de Linux ¿a quién le sacas el dinero?
    Aún así Google aprendió y ahora usa Kotlin. La verdad es que el futuro de Java no se ve muy bueno, en particular desde que Oracle compró Sun. Ya sabemos el poco amor que tiene Oracle por el software libre.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *