{"id":692,"date":"2012-09-27T03:12:13","date_gmt":"2012-09-27T09:12:13","guid":{"rendered":"http:\/\/www.lastdragon.net\/?p=692"},"modified":"2015-08-18T12:30:05","modified_gmt":"2015-08-18T18:30:05","slug":"compila-java-a-codigo-nativo","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=692","title":{"rendered":"Compila Java a codigo nativo"},"content":{"rendered":"<p>El 20 de agosto escrib\u00ed que <a href=\"https:\/\/www.lastdragon.net\/?p=685\">.NET pod\u00eda compilar binarios nativos<\/a> usando las herramientas de mono, en dicho art\u00edculo escrib\u00ed este p\u00e1rrafo<\/p>\n<blockquote><p>Hace muchos a\u00f1os quer\u00eda que Java tuviera algo as\u00ed, es una pena, aunque ahora .NET al menos Mono puede hacer esto, la belleza de la programaci\u00f3n 100% orientada a objetos con portabilidad binaria y ahora incluso redistribuci\u00f3n nativa a la plataforma seleccionada.<\/p><\/blockquote>\n<p>El p\u00e1rrafo en realidad es v\u00e1lido, porque yo quer\u00eda 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\u00e9n es posible hacerlo en Windows pero no nativamente se requiere de Cygwin<\/p>\n<p>En GNU\/Linux esto es posible de forma nativa, puedes quitar la maquina virtual y llegar directamente al API del OS y ganar much\u00edsima velocidad, incluso en los programas gr\u00e1ficos, por que tambi\u00e9n se brinca las librer\u00edas GTK y KDE, directamente escribe a X pero sin perder la integraci\u00f3n con el sistema<\/p>\n<p><iframe loading=\"lazy\" width=\"420\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/DOz1-XWkxq4\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>Debes tener el soporte para Java en el compilador de GNU, si lo tienes puedes compiar asi:<br \/>\ngcj &#8211;main=clase archivoconlaclase.java -o binarioresultant<\/p>\n<p>En resumen es posible escribir programas 100% objeto con Java y compilar directamente.<\/p>\n<p>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\u00f3digo no y no era libre, por lo que el se\u00f1or se dio a la tarea de agregarle a su colecci\u00f3n de compiladores la capacidad de compilar Java, hoy en d\u00eda 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.<\/p>\n<p>Lo que me llama la atenci\u00f3n es que la gente del proyecto de Java haya reaccionado con las versiones GPL Open Java en lugar de demandar a GNU, \u00bfporque es sorprendente?. Porque la historia de Java es tabu, siempre que alguien quiere truncar Java, Java ataca sea con SUN o con ORACLE.<\/p>\n<p>Sun demando a Windows por que el Visual J++ o Visual Java que no era Java al 100%, la filosof\u00eda de Java desde siempre es, \u201cEscribe una vez, ejecuta donde sea\u201c bajo ese lema las demandas no han faltado si alguien mancilla Java.<br \/>\nUn poco de historia de los 90\u2019s m\u00e1s exactamente por el 1998<\/p>\n<p>Microsoft causo la ira de SUN cuando al trabajar con Visual J++, este creaba binarios que pod\u00edan amarrarse al sistema operativo una versi\u00f3n llamada sucia o contaminada de Java, que aunque era el pseudo c\u00f3digo de Java no necesariamente correr\u00eda en cualquier OS diferente a Windows, esto anulaba por completo el prop\u00f3sito de Java de que un binario Java debe ejecutarse libremente en cualquier OS<\/p>\n<p>Historia reciente del 2011-2012<\/p>\n<p>Oracle hizo lo mismo en su turno, cuando Google usa a Java como lenguaje oficial de Android, esto es porque aunque el c\u00f3digo es Java a la hora de escribirlo, pero a la hora de compilar el c\u00f3digo resultante no es Java, es c\u00f3digo especial que se ejecuta en un entorno llamado Dalvik, amarrando entonces el binario Java a una plataforma en este caso Dalvik. Aqu\u00ed Oracle demanda a Google por este motivo. Aunque a diferencia de Microsoft aqu\u00ed 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\u00eda violar el prop\u00f3sito de Java, es por este motivo que los Apps de Android son tan r\u00e1pidos, algunos piensan que el tel\u00e9fono 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\u00e1s ligera y r\u00e1pida que ejecutarlo directamente como Java.<\/p>\n<p>En conclusi\u00f3n.<\/p>\n<p>El compilador de GNU est\u00e1 en la misma posici\u00f3n que el Dalvik, por que es exactamente el mismo caso, el lenguaje de origen es Java, pero al compilarse no termina como pseudo c\u00f3digo de Java, es c\u00f3digo 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\u00f3digo nativo que pseudo c\u00f3digo en una maquina virtual. Solo me llama la atenci\u00f3n el por qu\u00e9 no ha sido demandado.<\/p>\n<p>Por lo pronto se puede compilar cualquier soluci\u00f3n Java a c\u00f3digo 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<\/p>\n<p>Otros art\u00edculos relacionados.<\/p>\n<p><a href=\"https:\/\/www.lastdragon.net\/?p=561\">Java vs Mono<\/a><br \/>\n<a href=\"https:\/\/www.lastdragon.net\/?p=685\">Compilando C# a codigo nativo con mono<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El 20 de agosto escrib\u00ed que .NET pod\u00eda compilar binarios nativos usando las herramientas de mono, en dicho art\u00edculo escrib\u00ed este p\u00e1rrafo Hace muchos a\u00f1os quer\u00eda que Java tuviera algo as\u00ed, es una pena, aunque ahora .NET al menos Mono puede hacer esto, la belleza de la programaci\u00f3n 100% orientada a objetos con portabilidad binaria&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-692","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=692"}],"version-history":[{"count":1,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/692\/revisions"}],"predecessor-version":[{"id":1464,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/692\/revisions\/1464"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}