Apache Harmony es una implementación de Java libre y de código abierto retirada , desarrollada por la Apache Software Foundation . [1] Fue anunciado a principios de mayo de 2005 y el 25 de octubre de 2006, la junta directiva votó para convertir a Apache Harmony en un proyecto de nivel superior. El proyecto Harmony logró (a febrero de 2011) un 99% de completitud para J2SE 5.0 , y un 97% para Java SE 6. [ 2] El sistema operativo Android ha sido históricamente un usuario importante de Harmony, aunque desde Android Nougat depende cada vez más de las bibliotecas OpenJDK . [3]
El 29 de octubre de 2011, el líder del proyecto, Tim Ellison, inició una votación para decidir si se debía retirar el proyecto. El resultado fue de 20 a 2 a favor, [4] y el proyecto se retiró el 16 de noviembre de 2011. [5] [6]
El proyecto Harmony fue inicialmente concebido como un esfuerzo para unir a todos los desarrolladores de las implementaciones libres de Java . Muchos desarrolladores esperaban que fuera el proyecto por encima de [ aclaración necesaria ] las comunidades GNU , Apache y otras. Los desarrolladores de GNU fueron invitados y participaron durante la planificación preparatoria inicial. [7] Apache decidió entonces no usar código de GNU Classpath porque quería que Harmony estuviera disponible bajo la Licencia Apache v2. [8] Los desarrolladores de Apache escribirían entonces las clases necesarias desde cero y esperarían las grandes donaciones de código necesarias de las empresas de software . Varios malentendidos al comienzo del proyecto y propuestas de grandes empresas como IBM para donar grandes cantidades de código existente, llevaron a algunas personas en la comunidad libre de Java a ver el proyecto como un consorcio corporativo en lugar de un proyecto Apache. [9]
Un punto importante de incompatibilidad entre los proyectos GNU Classpath y Apache Harmony eran sus licencias incompatibles: la Licencia Pública General GNU de Classpath con la excepción de enlace versus la Licencia Apache de Harmony . [9]
El 10 de abril de 2007, la Apache Software Foundation envió una carta abierta al CEO de Sun Microsystems , Jonathan Schwartz, con respecto a su incapacidad para adquirir una licencia aceptable para el Kit de compatibilidad tecnológica (TCK) de Java SE 5, un kit de prueba necesario para el proyecto para demostrar la compatibilidad con la especificación de Java SE 5, como lo requiere la licencia de especificación de Sun para Java SE 5. [10] Lo que hace que la licencia sea inaceptable para la Apache Software Foundation es el hecho de que impone restricciones de derechos a través de límites en el "campo de uso" disponible para los usuarios de Harmony, que no cumple con las reglas del Proceso de la Comunidad Java . [11]
Sun respondió en un blog de la empresa [12] [13] que tenía la intención de crear una implementación de código abierto de la plataforma Java bajo GPL , incluido el TCK, pero que su prioridad era hacer que la plataforma Java fuera accesible a la comunidad Linux bajo GPL lo más rápido posible.
Esta respuesta desencadenó algunas reacciones, ya sea criticando a Sun por no responder "de manera suficientemente abierta" a una carta abierta, [14] o más bien a Apache Software Foundation ; algunos piensan que ASF actuó imprudentemente al exigir agresivamente algo que podrían haber obtenido con más diplomacia de Sun, especialmente considerando el cronograma de la biblioteca de clases de apertura. [15] [16]
Sun lanzó OpenJDK en mayo de 2007, junto con una licencia específica para permitir la ejecución de TCK en el contexto de OpenJDK para cualquier implementación GPL derivada sustancialmente de OpenJDK. [17] Esto no cubre Apache Harmony, que no tiene licencia GPL. El 9 de diciembre de 2010, la Apache Software Foundation renunció al Comité Ejecutivo del Proceso Comunitario de Java, [18] en protesta por la dificultad de obtener una licencia aceptable para Apache para su uso con el proyecto Harmony. [19]
La máquina virtual que se utiliza en la plataforma Android de Google ( Dalvik hasta la versión 4.4, y su sucesor, Android Runtime (ART)) utiliza un subconjunto de Harmony para el núcleo de su biblioteca de clases . [20] [21] Sin embargo, Dalvik no se alinea con los perfiles de la biblioteca de clases de Java SE ni de Java ME (por ejemplo , las clases J2ME , AWT y Swing no son compatibles).
Android 7.0 “Nougat” reemplazó a Harmony con OpenJDK . [3]
El 11 de octubre de 2010, IBM , por lejos el mayor participante en el proyecto, decidió unirse a Oracle en el proyecto OpenJDK , cambiando efectivamente sus esfuerzos de Harmony a la implementación de referencia de Oracle . [22] [23] Bob Sutor, jefe de Linux y código abierto de IBM, escribió en su blog que "IBM cambiará su esfuerzo de desarrollo del Proyecto Apache Harmony a OpenJDK". [24] En marzo de 2011, Tim Ellison de IBM anunció que renunció como presidente de gestión de proyectos para Harmony [25] [26] Después de la desvinculación de IBM, el nivel de actividad del proyecto disminuyó considerablemente. [27]
El 29 de octubre de 2011, el líder del proyecto, Tim Ellison, inició una encuesta en la lista de correo harmony-dev para decidir si se debía retirar el proyecto. El resultado, el 3 de noviembre, fue de 20 a 2 a favor de la retirada. [4] El 16 de noviembre de 2011, la junta directiva de la Apache Software Foundation aprobó una moción para dar por terminado el proyecto. [28] Un director, Larry Rosen , emitió un voto en contra, basándose en el momento más que en los méritos de la propuesta; por lo demás, fue unánime. [28] El proyecto se retiró el 16 de noviembre de 2011. [5]
Al principio, Apache Harmony recibió algunas contribuciones de código importantes de varias empresas. Se han llevado a cabo discusiones sobre el desarrollo en listas de correo abiertas. Más tarde, los mentores de la fundación Apache Software hicieron un gran esfuerzo para que el proceso de desarrollo se ajustara más al "estilo Apache", [29] [30] y parece que sus esfuerzos tuvieron éxito.
Apache Harmony fue aceptado entre los proyectos oficiales de Apache el 29 de octubre de 2006.
La máquina virtual de capa de ejecución dinámica consta de los siguientes componentes:
El proyecto proporcionó una implementación portátil que facilita el desarrollo en muchas plataformas y sistemas operativos. El enfoque principal estuvo puesto en los sistemas operativos Windows y Linux en arquitecturas x86 y x86-64. [31]
Las donaciones esperadas de las empresas de software se recibieron efectivamente. Apache Harmony ahora contiene el código funcional, incluido el código Swing , AWT y Java 2D , que fueron aportados por Intel .
En febrero de 2011 [actualizar], el proyecto Harmony alcanzó un grado de completitud del 99% para JDK 5.0 y del 97% para Java SE 6. [ 2]
El progreso del proyecto Apache Harmony se puede seguir en comparación con J2SE 1.4 y Java SE 5.0. [32] Además, hay una rama para Harmony v6.0 en desarrollo para Java SE 6.0.
Los desarrolladores de Apache Harmony integran varios proyectos de código abierto existentes y probados en campo para alcanzar su objetivo (no reinventar la rueda ). Muchos de estos proyectos son maduros y conocidos, y otras partes de la biblioteca tuvieron que escribirse desde cero.
Esta es una lista de componentes de código abierto existentes que se utilizan en el proyecto Apache Harmony; algunos de ellos estaban en uso antes de que comenzara el proyecto.
Harmony está menos documentado que las alternativas de implementación libre de Java. Por ejemplo, en GNU Classpath cada método de la clase central CORBA (ORB) tiene el comentario explicativo tanto en la clase API abstracta estándar [33] como en la implementación. [34] En el proyecto Yoko, utilizado por Harmony, [35] la mayoría de los métodos tanto en la declaración estándar [36] como en la clase de implementación [37] no estaban documentados a fines de octubre de 2006. Además, GNU Classpath admitía características CORBA antiguas y nuevas (igual que la implementación de Sun). Harmony, por el contrario, dejó el método central del estándar anterior ( ORB.connect(Object)
) completamente sin implementar.
Una implementación completa de la plataforma Java también necesita un compilador que traduzca el código fuente de Java en bytecodes , un programa que administre los archivos JAR , un depurador , un visor de subprogramas y un complemento para el navegador web , por nombrar algunos. Harmony tiene el compilador , el visor de subprogramas , jarsigner, javah, javap, keytool , policytool y unpack200 . [38]
Harmony tiene siete implementaciones de máquinas virtuales que ejecutan Harmony Class Library, todas ellas donaciones de grupos externos:
A fines de noviembre de 2006, el soporte de lenguaje proporcionado por estas máquinas virtuales aún era incompleto y las instrucciones de compilación recomendaban utilizar J9, propiedad de IBM, para ejecutar el conjunto de pruebas de la biblioteca de clases. Sin embargo, esto ya no es necesario (a partir de julio de 2007).
En cuanto al resto del proyecto, el desarrollo de la máquina virtual DRLVM se ha estancado (a partir de mayo de 2011). [42]
Desde su concepción, Harmony creció en su capacidad para ejecutar aplicaciones Java no triviales. [43] A julio de 2007 [actualizar], las aplicaciones compatibles incluyen:
Sin embargo, la biblioteca incompleta de Harmony le impidió lanzar algunas otras aplicaciones:
Comenzamos con Java SE 5, ya que es la primera versión de Java SE para la cual la licencia permite una implementación de código abierto, pero continuaremos con Java SE 6 y cualquier versión posterior que siga.
Apache ha preparado una propuesta para su discusión en torno a una implementación j2se totalmente libre, a la que llaman "Harmony". No se trata (por el momento) de código, sino de encontrar una dirección para llegar a semejante bestia. Se pidió a Dalibor, Tom, Jeroen y a mí que los ayudáramos en esa discusión y, posiblemente, que les mostráramos cómo configurar una buena arquitectura para ello.
Todo esto significa que, a pesar de que ahora hay algo de código disponible donado por Intel, no hay una cooperación práctica entre los proyectos de software libre originales que respaldaban a Harmony y el proyecto ahora conocido como Apache Harmony. Todo esto hizo que algunas personas pensaran en Harmony como un consorcio de empresas disfrazado de un proyecto ASF y no como un proyecto comunitario completo.
Sujeto a y condicionado a que su Implementación del Licenciatario se derive sustancialmente del Código OpenJDK y, si dicha Implementación se ha distribuido o se distribuirá a un tercero, se distribuya bajo la Licencia GPL, Sun otorga por la presente al Licenciatario, en la medida de los Derechos de propiedad intelectual de Sun en el TCK, una licencia mundial, personal, no exclusiva, intransferible y limitada para usar el TCK internamente y únicamente con el propósito de desarrollar y probar la Implementación del Licenciatario.
En lugar de proporcionar una versión completa de Java SE o Java ME, Google ha divergido en dos frentes. En primer lugar, se proporciona un subconjunto limitado de los paquetes básicos de Java. (...) Al seguir esta ruta, Android sigue los pasos de otro proyecto de Google, GWT, que utiliza Java como lenguaje de desarrollo pero no es compatible con el JDK completo.
Para aquellos que deseen hacer lo mismo, trabajaremos juntos para que la transición sea lo más sencilla posible. IBM seguirá participando activamente en otros proyectos de Apache.
Larry desea que se tenga en cuenta que no está en contra de la rescisión, simplemente hubiera preferido tener más tiempo para trabajar en el mensaje.