OpenJDK ( Open Java Development Kit ) es una implementación gratuita y de código abierto de Java Platform, Standard Edition (Java SE). [2] Es el resultado de un esfuerzo que Sun Microsystems comenzó en 2006. La implementación tiene licencia GPL-2.0 únicamente con una excepción de vinculación . Si no fuera por la excepción de vinculación GPL, los componentes vinculados a la biblioteca de clases Java estarían 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. [3] [4] [5]
El proyecto OpenJDK produce una serie de 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ían abrir estos componentes, pero ni Sun ni Oracle lo han hecho. [6] Las únicas implementaciones de Web Start y complementos gratuitos disponibles actualmente a partir de 2016 [actualizar]son las proporcionadas por IcedTea . [ cita necesaria ]
OpenJDK 9+ admite la compilación AOT ( jaotc
) utilizando GraalVM (JEP 295). [7] La bandera experimental -XX:+EnableJVMCIProduct
permite el uso de Graal JIT (JEP 317). [8]
OpenJDK se basó inicialmente únicamente en la versión JDK 7 de la plataforma Java. [9]
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. [10] A diferencia de los proyectos de lanzamiento de JDK anteriores, que produjeron solo un lanzamiento de funciones y luego terminaron, este proyecto de larga duración producirá todos los lanzamientos de funciones futuros de JDK y enviará un lanzamiento de funciones cada seis meses de acuerdo con un modelo estricto basado en el tiempo. [11]
Debido a que Oracle ya no publica actualizaciones para versiones de soporte a largo plazo (LTS) bajo una licencia permisiva, otros han comenzado a ofrecer compilaciones. [12] [13] [14] Las distribuciones de Linux siempre han ofrecido sus propias versiones, y Windows también ofrece una ahora, que se puede instalar con el Administrador de paquetes de Windows . Por ejemplo, para instalar OpenJDK 17:
winget install Microsoft.OpenJDK.17
Para incluir OpenJDK en Fedora y otras distribuciones gratuitas de Linux , OpenJDK necesitaba poder compilarse utilizando únicamente componentes de software gratuitos . Debido a los componentes sobrecargados en la biblioteca de clases y las suposiciones implícitas dentro del sistema de compilación de que el JDK que se estaba utilizando para compilar OpenJDK era un JDK de Sun, esto no fue posible. Para lograr la apertura, Red Hat inició el proyecto IcedTea en junio de 2007. [40] Comenzó su vida como un híbrido OpenJDK/ GNU Classpath que podría usarse para iniciar OpenJDK, reemplazando las cargas con código de GNU Classpath. [41] [42]
El 5 de noviembre de 2007, Red Hat firmó el Acuerdo de colaborador de Sun y la licencia TCK comunitaria OpenJDK . [43] 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 Fedora , la distribución de Linux, y JBoss , el servidor de aplicaciones, en un entorno Linux. IcedTea proporcionó alternativas de software gratuitas para las pocas secciones propietarias restantes del proyecto OpenJDK.
En mayo de 2008, las distribuciones Fedora 9 [44] [45] y Ubuntu 8.04 [46] incluían IcedTea 6, basado completamente en código fuente libre y abierto . [47] 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 utilizar OpenJDK para el nombre del paquete (a través del acuerdo de marca OpenJDK) en lugar de IcedTea. [44] Ubuntu también empaquetó por primera vez IcedTea7 [48] antes de pasar a IcedTea6. También se crearon paquetes para IcedTea6 para Debian y se incluyeron en Lenny . El 12 de julio de 2008, Debian aceptó OpenJDK-6 en inestable, [49] [50] y luego se incluyó en estable . [51] OpenJDK también está disponible en openSUSE , [52] Red Hat Enterprise Linux y derivados de RHEL como CentOS . [53]
En junio de 2008, Red Hat anunció que los archivos binarios empaquetados para OpenJDK en Fedora 9 , creados con IcedTea 6, habían pasado las pruebas del kit de compatibilidad tecnológica y podían afirmar que eran una implementación de Java 6 totalmente compatible. [54] 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 . [55]
Desde agosto de 2008, OpenJDK 7 se puede utilizar en macOS y otras variantes de BSD . [56]
En Android Nougat , OpenJDK reemplazó al ahora descontinuado Apache Harmony como bibliotecas Java en el código fuente del sistema operativo móvil . Google estaba en una disputa legal con Oracle por reclamaciones de derechos de autor e infracción de patentes mediante el uso de reimplementaciones de API de Java con derechos de autor a través de Harmony. Si bien también afirmó que este cambio tenía como objetivo 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 otorgarlo bajo la licencia GPL. . [57]
Sun anunció en JavaOne 2006 que Java se convertiría en software de código abierto, [58] [59] 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 del núcleo de Java . Plataforma en un plazo de 30 a 60 días. [60]
Sun lanzó la máquina virtual Java HotSpot y el compilador como software gratuito bajo la licencia pública general GNU el 13 de noviembre de 2006, con la promesa de que el resto del JDK (que incluye Java Runtime Environment ) quedaría bajo la GPL en marzo de 2007. , "a excepción de algunos componentes que Sun no tiene derecho a publicar en formato fuente según la GPL". [61] 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 aplica a Java y a los programas escritos en Java. [62]
Siguiendo su promesa de lanzar un kit de desarrollo Java (JDK) basado casi completamente en código libre y de fuente abierta en la primera mitad de 2007, [63] Sun publicó el código fuente completo de la biblioteca de clases Java bajo la GPL el 8 de mayo. 2007, excepto algunas piezas limitadas que habían sido licenciadas a Sun por terceros y Sun no pudo volver a otorgar licencias bajo la GPL. [64] 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. [65] Cuando apareció OpenJDK 6 en mayo de 2008, quedaba menos del 1% (la implementación SNMP , [66] que no forma parte de la especificación Java), [44] lo que hacía posible construir OpenJDK sin ningún complemento binario. [66] El requisito del conector binario se eliminó posteriormente de OpenJDK 7 como parte de b53 en abril de 2009. [67]
Esto fue posible, durante el primer año, gracias al trabajo de Sun Microsystems y la comunidad OpenJDK. Cada gravamen [68] fue lanzado como software gratuito y de código abierto o reemplazado 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 los complementos binarios ya no fueran necesarios. [69]
El 5 de noviembre de 2007, Red Hat anunció un acuerdo con Sun, firmando el amplio acuerdo de contribuyente 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 kit de compatibilidad de tecnología comunitaria OpenJDK (TCK) de Sun. ) Acuerdo de licencia (que le da a la empresa acceso al conjunto de pruebas que determina si un proyecto basado en OpenJDK cumple con la especificación Java SE 6). [70]
También en noviembre de 2007, se creó Porters Group en OpenJDK para ayudar en los esfuerzos por portar OpenJDK a diferentes arquitecturas de procesador y sistemas operativos . El proyecto de portabilidad de BSD liderado por Kurt Miller y Greg Lewis y el proyecto de portabilidad de Mac OS X (basado en BSD) liderado por Landon Fuller han expresado interés en unirse a OpenJDK a través de Porters Group. Desde enero de 2008, ambos forman parte de las discusiones de la lista de correo. Otro proyecto pendiente de formalizar en el Grupo Porters es el Haiku Java Team liderado por Bryan Varner. [71]
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 lanzarlo a las comunidades de código abierto . [72] [73]
OpenJDK tiene procedimientos comparativamente estrictos para aceptar contribuciones de código: cada contribución propuesta debe ser revisada por otro responsable de OpenJDK y el contribuyente debe haber firmado el Acuerdo de Contribuidor de Sun/Oracle (SCA/OCA). [74] Preferiblemente, también debería haber una prueba jtreg [75] que demuestre que el error se ha solucionado. Inicialmente, el proceso de envío de parches externos era lento [76] y, hasta septiembre de 2008, los compromisos con el código base sólo los realizaban los ingenieros de Sun. [77] El proceso ha mejorado y, a partir de 2010 [actualizar], los parches simples y los backports de OpenJDK 7 a OpenJDK 6 pueden realizarse en cuestión de horas en lugar de días. [78]
En 2011, se lanzó por primera vez una adaptación no oficial de OpenJDK 6.0 a OS/2. [79] Este puerto está incluido en el derivado de OS/2 ArcaOS . [80]
El 25 de septiembre de 2013, Microsoft y Azul Systems colaboraron para crear Zulu, [81] una compilación de OpenJDK para usuarios de la nube de Windows Azure. Zulu está disponible como descarga gratuita desde el sitio comunitario Zulu.org. También es posible obtener Zulu en Amazon Web Services [82] a través de Juju Charm Store de Canonical, [83] Docker Hub, [84] y los repositorios de Azul Systems. Azul contribuye con correcciones de errores y mejoras al proyecto OpenJDK y cuenta con varios responsables del proyecto en su personal. [85] Red Hat renunció al liderazgo de OpenJDK 6 a principios de 2017 y luego fue asumido por Azul Systems. [86] [87]
Desde abril de 2016, hay compilaciones comunitarias no compatibles de OpenJDK para Microsoft Windows en GitHub en el proyecto ojdkbuild que se publican al mismo tiempo que 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ó una adaptación de OpenJDK 8 a OpenVMS en la plataforma Itanium . [88]
El número de contribuciones externas a OpenJDK está creciendo desde el inicio del proyecto. OpenJDK 11, lanzado en septiembre de 2018, recibió el 20 % de las correcciones externas [89] y trajo 17 nuevas JEP (características), de las cuales 3 fueron aportadas por la comunidad. A saber, JEP 315: "Mejorar los intrínsecos de Aarch64" (contribuido por BellSoft), JEP 318: "Epsilon: un recolector de basura sin operación" (por Red Hat) y JEP 331: "Perfil de montón de gastos generales bajos" (contribuido por Google) . [90]
El 11 de octubre de 2010, IBM , con diferencia el mayor participante en el proyecto Apache Harmony , decidió unirse a Oracle en el proyecto OpenJDK, trasladando efectivamente sus esfuerzos de Harmony a OpenJDK. [91] [92] 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". [93]
El 12 de noviembre de 2010, Apple Inc. (solo tres semanas después de dejar obsoleto su propio puerto de ejecución Java [94] ) 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, que incluye 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. [95]
El 11 de enero de 2011, se creó el proyecto Mac OS X Port en OpenJDK y Apple hizo la primera contribución pública de código al proyecto. La contribución inicial de Apple se basó en el puerto BSD OpenJDK . [96]
En julio de 2011, SAP AG anunció que SAP se unió oficialmente al proyecto OpenJDK. [97]
AOT genera una nueva herramienta llamada 'jaotc' que utiliza Graal como backend (para generar código)
Sun hizo esa promesa y planeamos cumplirla.
Pero en los seis meses transcurridos desde el anuncio de noviembre de 2006, ha quedado claro que hacer esto es mucho más complejo que simplemente cambiar la licencia y publicar el código fuente.
Thomas Fitzsimmons actualizó las páginas fuente de las notas de la versión de Fedora 9 para reflejar que Fedora 9 se enviaría con OpenJDK 6 en lugar de la implementación IcedTea de OpenJDK 7. Fedora 9 (Sulphur) se lanzará en mayo de 2008.
IBM trasladará su esfuerzo de desarrollo del Proyecto Apache Harmony a OpenJDK.
Para otros que deseen hacer lo mismo, trabajaremos juntos para hacer la transición lo más fácil 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, incluido un Java basado en HotSpot de 32 y 64 bits. máquina virtual, 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.
Me alegra mucho 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 port 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 feliz de que a partir de hoy SAP haya firmado el Acuerdo de Contribuidor 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.