Diferencias entre Oracle JDK y OpenJDK

1. Introducción

En este artículo, exploraremos las diferencias entre Oracle Java Development Kit y OpenJDK. Primero echaremos un vistazo rápido a cada uno de ellos y luego haremos una comparación. Después de eso, veremos una lista de otras implementaciones de JDK.

2. Historial de Oracle JDK y Java SE

JDK (Java Development Kit) es un entorno de desarrollo de software utilizado en la programación de la plataforma Java. Contiene un entorno de ejecución Java completo, un tiempo de ejecución privado. El nombre proviene del hecho de que contiene más herramientas que el JRE independiente, así como los demás componentes necesarios para desarrollar aplicaciones Java.

Oracle recomienda encarecidamente utilizar el término JDK para hacer referencia al kit de desarrollo de Java SE (Standard Edition) (también existen plataformas Enterprise Edition y Micro Edition).

Echemos un vistazo a la historia de Java SE:

  • JDK Beta - 1995
  • JDK 1.0 - enero de 1996
  • JDK 1.1 - febrero de 1997
  • J2SE 1.2 - diciembre de 1998
  • J2SE 1.3 - mayo de 2000
  • J2SE 1.4 - febrero de 2002
  • J2SE 5.0 - septiembre de 2004
  • Java SE 6 - diciembre de 2006
  • Java SE 7 - julio de 2011
  • Java SE 8 (LTS) - marzo de 2014
  • Java SE 9 - Septiembre de 2017
  • Java SE 10 (18.3) - marzo de 2018
  • Java SE 11 (18.9 LTS) - Septiembre de 2018
  • Java SE 12 (19.3) - marzo de 2019

Nota: las versiones en cursiva ya no son compatibles.

Podemos ver que las principales versiones de Java SE llegaron aproximadamente cada dos años hasta Java SE 7. Se necesitaron cinco años para pasar de Java SE 6 y otros tres para llegar a Java SE 8 después.

Desde Java SE 10, podemos esperar nuevas versiones cada seis meses. Sin embargo, no todas las versiones serán versiones de soporte a largo plazo (LTS). Como resultado del plan de lanzamiento de Oracle, los lanzamientos de productos LTS se producirán solo cada tres años.

Java SE 11 es la última versión de LTS, y Java SE 8 recibirá actualizaciones públicas gratuitas hasta diciembre de 2020 para uso no comercial.

Este kit de desarrollo obtuvo su nombre actual después de que Oracle comprara Sun Microsystems en 2010. Antes de eso, el nombre era SUN JDK, y era la implementación oficial del lenguaje de programación Java.

3. OpenJDK

OpenJDK es una implementación gratuita y de código abierto de Java SE Platform Edition. Se lanzó inicialmente en 2007 como resultado del desarrollo que Sun Microsystems inició en 2006.

Ciertamente, debemos enfatizar que OpenJDK es una implementación de referencia oficial de una edición estándar de Java desde la versión SE 7 .

Inicialmente, se basaba solo en el JDK 7. Pero, desde Java 10, la implementación de referencia de código abierto de la plataforma Java SE es responsabilidad del Proyecto JDK . Y, al igual que para Oracle, el proyecto JDK también ofrecerá nuevas funciones cada seis meses.

Debemos tener en cuenta que antes de este proyecto de larga duración, había proyectos de lanzamiento de JDK que lanzaron una función y luego se suspendieron.

Veamos ahora las versiones de OpenJDK:

  • Proyecto OpenJDK 6: basado en JDK 7, pero modificado para proporcionar una versión de código abierto de Java 6
  • Proyecto OpenJDK 7 - 28 de julio de 2011
  • Proyecto OpenJDK 7u: este proyecto desarrolla actualizaciones para Java Development Kit 7
  • Proyecto OpenJDK 8 - 18 de marzo de 2014
  • Proyecto OpenJDK 8u: este proyecto desarrolla actualizaciones para Java Development Kit 8
  • Proyecto OpenJDK 9 - 21 de septiembre de 2017
  • Versión del proyecto JDK del 10 al 20 de marzo de 2018
  • Versión del proyecto JDK del 11 al 25 de septiembre de 2018
  • Versión 12 del proyecto JDK - Fase de estabilización

4. Oracle JDK frente a OpenJDK

En esta sección, nos centraremos en las diferencias clave entre Oracle JDK y OpenJDK.

4.1. Programa de lanzamiento

Como mencionamos, Oracle entregará lanzamientos cada tres años, mientras que OpenJDK se lanzará cada seis meses .

Oracle proporciona soporte a largo plazo para sus lanzamientos. Por otro lado, OpenJDK admite los cambios en una versión solo hasta que se publique la próxima versión.

4.2. Licencias

Oracle JDK fue licenciado bajo el Acuerdo de Licencia de Código Binario de Oracle , mientras que OpenJDK tiene la Licencia Pública General GNU (GNU GPL) versión 2 con una excepción de enlace .

Existen algunas implicaciones de licencia al utilizar la plataforma de Oracle. Las actualizaciones públicas para Oracle Java SE 8 publicadas después de enero de 2019 no estarán disponibles para uso comercial, comercial o de producción sin una licencia comercial, como anunció Oracle. Sin embargo, OpenJDK es completamente de código abierto y se puede usar libremente.

4.3. Actuación

No existe una diferencia técnica real entre los dos, ya que el proceso de compilación de Oracle JDK se basa en el de OpenJDK .

Cuando se trata de rendimiento, Oracle es mucho mejor en cuanto a capacidad de respuesta y rendimiento de JVM . Se centra más en la estabilidad debido a la importancia que le da a sus clientes empresariales.

OpenJDK, por el contrario, entregará lanzamientos con más frecuencia. Como resultado, podemos encontrarnos con problemas de inestabilidad. Según los comentarios de la comunidad, sabemos que algunos usuarios de OpenJDK han encontrado problemas de rendimiento.

4.4. Caracteristicas

Si comparamos las características y opciones, vamos a ver que el producto Oracle cuenta con registradores de vuelo, control de la misión de Java, y el compartimiento de clases-Datos de programa características , mientras que OpenJDK tiene la característica de fuente Procesador .

Además, Oracle tiene más opciones de recolección de basura y mejores renderizadores.

4.5. Desarrollo y popularidad

Oracle JDK está completamente desarrollado por Oracle Corporation, mientras que OpenJDK es desarrollado por Oracle, OpenJDK y la Comunidad Java . Sin embargo, las empresas de primer nivel como Red Hat, Azul Systems, IBM, Apple Inc., SAP AG también participan activamente en su desarrollo.

Como podemos ver en el enlace de la subsección anterior, cuando se trata de la popularidad entre las principales empresas que utilizan Java Development Kits en sus herramientas, como Android Studio o IntelliJ IDEA, Oracle JDK solía ser más preferido, pero ambos de ellos se han cambiado a las compilaciones JetBrains basadas en OpenJDK.

Por otro lado, las principales distribuciones de Linux (Fedora, Ubuntu, Red Hat Enterprise Linux) proporcionan OpenJDK como la implementación predeterminada de Java SE.

5. Cambios desde Java 11

Como podemos ver en la publicación del blog de Oracle, hay algunos cambios importantes que comienzan con Java 11.

En primer lugar, Oracle cambiará su licencia "BCL" histórica con una combinación de una licencia pública general GNU de código abierto v2, con la excepción Classpath (GPLv2 + CPE) y una licencia comercial cuando se utilice Oracle JDK como parte de un producto de Oracle o servicio, o cuando el software de código abierto no es bienvenido.

Cada licencia tendrá diferentes versiones, pero serán funcionalmente idénticas con solo algunas diferencias cosméticas y de empaque.

Además, las "funciones comerciales" tradicionales como Flight Recorder, Java Mission Control y Application Class-Data Sharing, así como Z Garbage Collector, ahora están disponibles en OpenJDK. Por lo tanto, las compilaciones de Oracle JDK y OpenJDK son esencialmente idénticas desde Java 11 en adelante .

Veamos las principales diferencias:

  • El kit de Oracle para Java 11 emite una advertencia cuando se usa la opción -XX: + UnlockCommercialFeatures , mientras que en las compilaciones OpenJDK, esta opción genera un error
  • Oracle JDK ofrece una configuración para proporcionar datos de registro de uso a la herramienta "Consola de administración avanzada"
  • Oracle siempre ha requerido que los proveedores criptográficos de terceros estén firmados por un certificado conocido, mientras que el marco de criptografía en OpenJDK tiene una interfaz criptográfica abierta, lo que significa que no hay restricciones en cuanto a qué proveedores se pueden utilizar.
  • Oracle JDK 11 continuará incluyendo instaladores, marca y empaque JRE, mientras que las compilaciones de OpenJDK están actualmente disponibles como archivos zip y tar.gz
  • El comando javac –release se comporta de manera diferente para los destinos Java 9 y Java 10 debido a la presencia de algunos módulos adicionales en la versión de Oracle.
  • La salida de los comandos java –version y java -fullversion distinguirá las compilaciones de Oracle de las compilaciones de OpenJDK

6. Otras implementaciones de JDK

Ahora echemos un vistazo rápido a otras implementaciones activas de Java Development Kit.

6.1. Gratis y de código abierto

Las siguientes implementaciones, enumeradas en orden alfabético, son de código abierto y de uso gratuito:

  • AdoptOpenJDK
  • Amazonas Corretto
  • Azul Zulu
  • Bck2Brwsr
  • CACAO
  • Nombre en clave uno
  • DoppioJVM
  • Eclipse OpenJ9
  • GraalVM CE
  • HaikuVM
  • HotSpot
  • Jamiga
  • JamVM
  • Jelatine JVM
  • Jikes RVM (Máquina virtual de investigación de Jikes)
  • JVM.go
  • leJOS
  • Maxine
  • Motor de varios sistemas operativos
  • RopeVM
  • uJVM

6.2. Implementaciones propietarias

También hay implementaciones con derechos de autor:

  • Azul Zing JVM
  • CEE-J
  • Excelsior JET
  • GraalVM EE
  • Imsys AB
  • JamaicaVM (aicas)
  • JBlend (Aplix)
  • MicroJvm (IS2T - Tecnología de software inteligente industrial)
  • OJVM
  • PTC Perc
  • SAP JVM
  • Waratek CloudVM para Java

Junto con las implementaciones activas enumeradas anteriormente, podemos ver la lista de implementaciones inactivas y una breve descripción de cada implementación.

7. Conclusión

En este artículo, nos centramos en los dos kits de desarrollo de Java más populares en la actualidad.

Primero describimos cada uno de ellos y luego enfatizamos las diferencias más notables entre ellos. Luego, prestamos especial atención a los cambios y diferencias desde Java 11. Finalmente, enumeramos otras implementaciones activas que están disponibles hoy.