OpenJDK ( Open Java Development Kit ) es una implementación libre y de código abierto de la plataforma Java, edición estándar (Java SE). [2] Es el resultado de un esfuerzo que Sun Microsystems comenzó en 2006. La implementación está licenciada bajo la Licencia Pública General GNU 2 con una excepción de enlace , lo que impide que los componentes que se vinculan a la biblioteca de clases Java queden sujetos a los términos de la licencia GPL. OpenJDK es la implementación de referencia oficial de Java SE desde la versión 7, y es la distribución más popular del JDK. [3] [4] [5]
Sun anunció en JavaOne 2006 que Java se convertiría en software de código abierto, [6] [7] y el 25 de octubre de 2006, en la conferencia Oracle OpenWorld, Jonathan Schwartz dijo que la compañía tenía la intención de anunciar el código abierto de la plataforma Java central dentro de 30 a 60 días. [8]
Sun lanzó la máquina virtual Java HotSpot y el compilador como software libre bajo la Licencia Pública General GNU el 13 de noviembre de 2006, con la promesa de que el resto del JDK (que incluye el Java Runtime Environment ) se colocaría bajo la GPL en marzo de 2007, "excepto unos pocos componentes que Sun no tiene derecho a publicar en forma de código fuente bajo la GPL". [9] Según el defensor del software libre Richard Stallman , esto pondría fin a la "trampa de Java", el bloqueo del proveedor que, según él, se aplicaba a Java y a los programas escritos en Java. [10]
Tras su promesa de publicar un kit de desarrollo de Java (JDK) basado casi por completo en código libre y de código abierto en la primera mitad de 2007, [11] Sun publicó el código fuente completo de la biblioteca de clases de Java bajo la GPL el 8 de mayo de 2007, a excepción de algunas partes limitadas que habían sido licenciadas a Sun por terceros y Sun no pudo volver a licenciarlas bajo la GPL. [12] En la lista de partes gravadas se incluían varios componentes importantes de la interfaz gráfica de usuario (GUI) de Java. Sun declaró que planeaba reemplazar los componentes propietarios restantes con implementaciones alternativas y hacer que la biblioteca de clases fuera completamente gratuita.
Cuando se lanzó inicialmente en mayo de 2007, el 4% de la biblioteca de clases OpenJDK seguía siendo propietaria. [13] Para la aparición de OpenJDK 6 en mayo de 2008, quedaba menos del 1% (la implementación de SNMP , [14] que no es parte de la especificación de Java), [15] lo que hizo posible construir OpenJDK sin ningún complemento binario. [14] El requisito de complemento binario se eliminó más tarde de OpenJDK 7 como parte de b53 en abril de 2009. [16]
Esto fue posible, durante el primer año, gracias al trabajo de Sun Microsystems y la comunidad OpenJDK. Cada componente [17] se publicó como software libre y de código abierto o se reemplazó por una alternativa. A partir de diciembre de 2010, todos los llamados complementos binarios fueron reemplazados por reemplazos de código abierto , lo que hizo que todo el JDK fuera de código abierto y que los complementos binarios ya no fueran necesarios. [18]
El 5 de noviembre de 2007, Red Hat anunció un acuerdo con Sun, firmando el amplio acuerdo de colaboradores de Sun (que cubre la participación en todos los proyectos de software libre y de código abierto liderados por Sun por parte de todos los ingenieros de Red Hat) y el Acuerdo de Licencia del Kit de Compatibilidad de Tecnología Comunitaria OpenJDK (TCK) de Sun (que le da a la compañía acceso al conjunto de pruebas que determina si un proyecto basado en OpenJDK cumple con la especificación Java SE 6). [19]
También en noviembre de 2007, se creó el Porters Group en OpenJDK para ayudar en los esfuerzos por portar OpenJDK a diferentes arquitecturas de procesador y sistemas operativos . El proyecto de portación de BSD liderado por Kurt Miller y Greg Lewis y el proyecto de portación de Mac OS X (basado en el de BSD) liderado por Landon Fuller han expresado su interés en unirse a OpenJDK a través del Porters Group. A partir de enero de 2008, ambos forman parte de las discusiones de la lista de correo. Otro proyecto pendiente de formalización en el Porters Group es el Haiku Java Team liderado por Bryan Varner. [20]
En diciembre de 2007, Sun trasladó el control de revisión de OpenJDK de TeamWare a Mercurial (y más tarde a Git y GitHub ), como parte del proceso de lanzamiento a las comunidades de código abierto . [21] [22]
OpenJDK tiene procedimientos comparativamente estrictos para aceptar contribuciones de código: cada contribución propuesta debe ser revisada por otro colaborador de OpenJDK y el colaborador debe haber firmado el Acuerdo de Colaboración Sun/Oracle (SCA/OCA). [23] Preferiblemente, también debería haber una prueba jtreg [24] que demuestre que el error ha sido corregido. Inicialmente, el proceso de envío de parches externos era lento [25] y, hasta septiembre de 2008, las confirmaciones al código base solo las hacían los ingenieros de Sun. [26] El proceso ha mejorado y, a partir de 2010 [actualizar], los parches simples y las versiones anteriores de OpenJDK 7 a OpenJDK 6 pueden realizarse en cuestión de horas en lugar de días. [27]
En 2011, se lanzó por primera vez un puerto no oficial de OpenJDK 6.0 para OS/2. [28] Este puerto está incluido en el derivado de OS/2 ArcaOS . [29]
El 25 de septiembre de 2013, Microsoft y Azul Systems colaboraron para crear Zulu, [30] una compilación de OpenJDK para usuarios de la nube de Windows Azure. Zulu está disponible como descarga gratuita desde el sitio de la comunidad Zulu.org. También es posible obtener Zulu en Amazon Web Services [31] a través de Juju Charm Store de Canonical, [32] Docker Hub, [33] y los repositorios de Azul Systems. Azul contribuye con correcciones de errores y mejoras al proyecto OpenJDK y tiene varios colaboradores en el personal. [34] Red Hat renunció al liderazgo de OpenJDK 6 a principios de 2017 y luego fue asumido por Azul Systems. [35] [36]
Desde abril de 2016, existen compilaciones comunitarias de OpenJDK para Microsoft Windows sin soporte en GitHub en el proyecto ojdkbuild [37] que se publican al ritmo de las actualizaciones para Oracle JDK. A partir de la compilación 8u151, el instalador MSI ofrece un componente opcional para usar Java Web Start basado en el proyecto IcedTea-Web .
En 2020, se lanzó un puerto de OpenJDK 8 a OpenVMS en la plataforma Itanium . [38]
La cantidad de contribuciones externas a OpenJDK ha ido creciendo desde el inicio del proyecto. OpenJDK 11, publicado en septiembre de 2018, recibió el 20 % de las correcciones externas [39] y trajo consigo 17 JEP (características) nuevas, de las cuales 3 fueron aportadas por la comunidad. A saber, JEP 315: "Mejorar las características intrínsecas de Aarch64" (aportado por BellSoft), JEP 318: "Epsilon: un recolector de basura sin operaciones" (por Red Hat) y JEP 331: "Profiling de montón de baja sobrecarga" (aportado por Google). [40]
El 11 de octubre de 2010, IBM , por lejos el mayor participante en el proyecto Apache Harmony , decidió unirse a Oracle en el proyecto OpenJDK, trasladando efectivamente sus esfuerzos de Harmony a OpenJDK. [41] [42] Bob Sutor, director de Linux y código abierto de IBM, escribió en su blog que "IBM trasladará su esfuerzo de desarrollo del Proyecto Apache Harmony a OpenJDK". [43]
El 12 de noviembre de 2010, Apple Inc. (apenas tres semanas después de desaprobar su propio puerto de tiempo de ejecución de Java [44] ) y Oracle Corporation anunciaron el proyecto OpenJDK para Mac OS X. Apple contribuirá con la mayoría de los componentes, herramientas y tecnología clave necesarios para una implementación de Java SE 7 en Mac OS X, incluyendo una máquina virtual Java basada en HotSpot de 32 y 64 bits, bibliotecas de clases, una pila de redes y la base para un nuevo cliente gráfico. [45]
El 11 de enero de 2011 se creó el proyecto Mac OS X Port en OpenJDK y Apple realizó la primera contribución pública de código al proyecto. La contribución inicial de Apple se basó en el port BSD de OpenJDK . [46]
En julio de 2011, SAP AG anunció que SAP se unió oficialmente al proyecto OpenJDK. [47]
El proyecto OpenJDK produce varios componentes: los más importantes son la máquina virtual ( HotSpot ), la biblioteca de clases Java y el compilador Java ( javac ).
El complemento del navegador web y Web Start , que forman parte de Oracle Java , no están incluidos en OpenJDK. Sun indicó anteriormente que intentaría convertir estos componentes en código abierto, pero ni Sun ni Oracle lo han hecho. [48] Los únicos complementos y las implementaciones de Web Start disponibles actualmente de forma gratuita a partir de 2016 [actualizar]son los proporcionados por IcedTea . [ cita requerida ]
OpenJDK 9+ admite la compilación AOT ( jaotc
) utilizando GraalVM (JEP 295). [49] La -XX:+EnableJVMCIProduct
bandera experimental habilita el uso de Graal JIT (JEP 317). [50]
OpenJDK inicialmente se basó solo en la versión JDK 7 de la plataforma Java. [51]
Desde JDK 10, el esfuerzo por producir una implementación de referencia de código abierto de la Plataforma Java SE se trasladó al Proyecto JDK. [52] A diferencia de los Proyectos de Lanzamiento de JDK anteriores, que produjeron solo un lanzamiento de características y luego finalizaron, este proyecto de larga duración producirá todos los futuros lanzamientos de características de JDK y enviará un lanzamiento de características cada seis meses de acuerdo con un modelo estricto basado en el tiempo. [53]
Debido a que Oracle ya no publica actualizaciones para versiones de soporte a largo plazo (LTS) bajo una licencia permisiva, otras organizaciones han comenzado a publicar sus propias compilaciones, tanto en términos de soporte regular como de largo plazo. [54] [55] [56] Muchas distribuciones de Linux ofrecen sus propias compilaciones a través de su administrador de paquetes , incluido Microsoft Windows .
Para poder incluir OpenJDK en Fedora y otras distribuciones de Linux gratuitas , OpenJDK debía poder compilarse utilizando únicamente componentes de software libre . Debido a los componentes sobrecargados en la biblioteca de clases y a las suposiciones implícitas dentro del sistema de compilación de que el JDK que se utilizaba para compilar OpenJDK era un JDK de Sun, esto no era posible. Para lograr la apertura, Red Hat inició el proyecto IcedTea en junio de 2007. [81] Comenzó como un híbrido de OpenJDK/ GNU Classpath que podía utilizarse para arrancar OpenJDK, reemplazando los componentes sobrecargados con código de GNU Classpath. [82] [83]
El 5 de noviembre de 2007, Red Hat firmó tanto el Acuerdo de Colaboración de Sun como la Licencia TCK de la Comunidad OpenJDK. [84] Uno de los primeros beneficios de este acuerdo es una alineación más estrecha con el proyecto IcedTea, que reúne las tecnologías de Fedora , la distribución Linux, y JBoss , el servidor de aplicaciones, en un entorno Linux. IcedTea proporcionó alternativas de software libre para las pocas secciones propietarias restantes en el proyecto OpenJDK.
En mayo de 2008, las distribuciones Fedora 9 [15] [85] y Ubuntu 8.04 [86] incluyeron IcedTea 6, basado completamente en código fuente libre y abierto . [87] Fedora 9 fue la primera versión que se envió con IcedTea6, basado en las fuentes OpenJDK6 de Sun en lugar de OpenJDK7. También fue el primero en usar OpenJDK para el nombre del paquete (a través del acuerdo de marca registrada OpenJDK [88] ) en lugar de IcedTea. [15] Ubuntu también empaquetó por primera vez IcedTea7 [89] antes de pasar más tarde a IcedTea6. Los paquetes para IcedTea6 también se crearon para Debian y se incluyeron en Lenny . El 12 de julio de 2008, Debian aceptó OpenJDK-6 en inestable, [90] [91] y más tarde se incluyó en estable . [92] OpenJDK también está disponible en openSUSE , [93] Red Hat Enterprise Linux y derivados de RHEL como CentOS . [94]
En junio de 2008, Red Hat anunció que los binarios empaquetados para OpenJDK en Fedora 9 , creados con IcedTea 6, habían pasado las pruebas del Technology Compatibility Kit y podían afirmar que eran una implementación de Java 6 totalmente compatible. [95] En julio de 2009, una compilación binaria de IcedTea 6 para Ubuntu 9.04 pasó todas las pruebas de compatibilidad en Java SE 6 TCK . [96]
Desde agosto de 2008, OpenJDK 7 se puede utilizar en macOS y otras variantes de BSD . [97]
En Android Nougat , OpenJDK reemplazó al ahora discontinuado Apache Harmony como las bibliotecas Java en el código fuente del sistema operativo móvil . Google estaba en una disputa legal con Oracle por reclamos de violación de derechos de autor y patentes a través de su uso de reimplementaciones de API de Java con derechos de autor a través de Harmony. Si bien también afirmó que este cambio fue para crear una plataforma más consistente entre Java en Android y otras plataformas, la compañía admitió que el cambio fue motivado por la demanda, argumentando que Oracle había autorizado su uso del código OpenJDK al licenciarlo bajo la GPL. [98]
Thomas Fitzsimmons actualizó las páginas de origen de las notas de la versión de Fedora 9 para reflejar que Fedora 9 se distribuiría con OpenJDK 6 en lugar de la implementación de IcedTea de OpenJDK 7. Fedora 9 (Sulphur) se lanzará en mayo de 2008.
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.
Oracle y Apple anunciaron hoy el proyecto OpenJDK para Mac OS X. Apple contribuirá con la mayoría de los componentes, herramientas y tecnología clave necesarios para una implementación de Java SE 7 en Mac OS X, incluida una máquina virtual Java basada en HotSpot de 32 y 64 bits, bibliotecas de clases, una pila de redes y la base para un nuevo cliente gráfico. OpenJDK pondrá la tecnología Java de Apple a disposición de los desarrolladores de código abierto para que puedan acceder y contribuir al esfuerzo.
Estoy muy contento de informarles que hoy hicimos la primera contribución pública de código al proyecto OpenJDK para Mac OS X. Esta contribución inicial se basa en el arduo trabajo del puerto BSD e inicialmente tiene la misma funcionalidad. La contribución de hoy simplemente modifica el proceso de compilación para crear un binario universal y produce un paquete .jdk que es reconocido por las preferencias de Java y la lógica de detección de JVM en Mac OS X.
Estoy muy contento de que a partir de hoy, SAP haya firmado el Acuerdo de Colaboración de Oracle (OCA). Esto significa que, con efecto inmediato, los desarrolladores de SAP JVM pueden unirse oficialmente a las discusiones en las distintas listas de correo de OpenJDK y contribuir con parches y mejoras al proyecto.
AOT presenta una nueva herramienta llamada 'jaotc' que utiliza Graal como backend (para generar código).
Sun hizo esa promesa y tenemos previsto cumplirla. Pero en los seis meses transcurridos desde el anuncio de noviembre de 2006, ha quedado claro que hacerlo es mucho más complejo que simplemente cambiar la licencia y publicar el código fuente.
{{cite web}}
: CS1 maint: bot: estado de URL original desconocido ( enlace )