Específicamente, me gustaría entender la diferencia entre JDK de Oracle y OpenJDK en términos de correcciones de errores y otros parches.
¿Qué rama obtiene arreglos primero y Oracle tiene la costumbre de hacer parches que nunca llegan a OpenJDK?
Esto se explica con mucho detalle en la página de OpenJDK: JDK 7 Actualización de la propuesta de proyecto Preguntas y respuestas
¿Servirá este proyecto como base para las versiones de actualización de Oracle JDK 7?
Si.
Para citar la publicación del blog FOSDEM de Joe Darcy en OpenJDK 6 :
En particular, no habrá la misma dicotomía entre la base de código OpenJDK 7 y la base de código de actualización 7 que existe entre OpenJDK 6 y el tren de actualización 6 ...
Según mi lectura, lo anterior esencialmente significa que los parches y las actualizaciones generalmente irán primero a Open JDK y luego, con el menor retraso posible, se entregarán en Oracle JDK.
Para los parches de seguridad, la imagen parece ser opuesta, es decir, prefiero esperar que vayan primero a las versiones de Oracle y luego (nuevamente, con el menor retraso posible) a OpenJDK:
¿El 7 Update Project recibirá correcciones de seguridad de Oracle?
Si.
Al igual que con OpenJDK 6, las correcciones de seguridad primero se mantienen confidenciales y se aplican a un bosque privado antes de ser empujadas al bosque público como parte de la publicación general sincronizada de la corrección a los trenes de lanzamiento de JDK afectados. Además, no pasarán por el proceso de revisión de código público y aprobación de devolución, y sus problemas correspondientes en el rastreador de problemas del Proyecto no serán visibles públicamente.
¿Cuándo recibirá este proyecto correcciones de seguridad de Oracle?
La programación de las actualizaciones de parches críticos de Oracle Java SE está disponible públicamente .
Las correcciones de seguridad para el código fuente de este proyecto estarán disponibles en el proyecto de actualización JDK 7 aproximadamente al mismo tiempo que se lanzan en productos de Oracle ...
Para comprender mejor las razones por las que parece haber tanto esfuerzo puesto en mantener Oracle y Open JDK sincronizados, tiene sentido echar un vistazo a la decisión de Oracle sobre el proyecto anterior: pasar a OpenJDK como la implementación oficial de referencia de Java SE 7 :
... Oracle y los otros miembros del Grupo de expertos de Java SE 7 han estado dando los últimos toques a la especificación de Java SE 7 ( JSR 336 ). En su papel de líder de especificación, Oracle es responsable de entregar la Implementación de referencia de Java SE 7 ... vamos a proporcionar una Implementación de referencia que se base completamente en el código de código abierto OpenJDK y que esté disponible bajo la licencia de código abierto GPL .
La función de la Implementación de referencia (RI) se utilizará como el estándar de oro para todas las implementaciones de Java. Para tener una implementación certificada como compatible con Java SE, un implementador debe pasar una gran cantidad de pruebas de compatibilidad: el Kit de compatibilidad de tecnología (TCK). Además, las implementaciones pueden compararse con el RI como una verificación adicional de compatibilidad. Básicamente, si su implementación ha sido certificada para tener el mismo comportamiento que el RI, entonces es compatible con Java. Para obtener más información sobre este tema, consulte las preguntas frecuentes de JCP .
Históricamente, Sun siempre usó Sun JDK como RI y lo puso a disposición bajo la Licencia de Código Binario (BCL). Esto fue muy conveniente para Sun ya que significaba que la implementación de su producto era compatible por definición. Sin embargo, también era confuso ya que Sun JDK contenía bastantes características que no formaban parte del estándar, como el complemento de Java. Además, continuar con esta práctica dificultaría las cosas para los implementadores de código abierto, ya que no podrían estudiar y evaluar el código fuente oficial de RI. (El código fuente para Oracle JDK es ligeramente diferente de OpenJDK, algo que abordaremos en el futuro).
Con eso en mente, Oracle:
- Cree binarios RI basados solo en la base de código OpenJDK.
- Haga que los binarios RI estén disponibles bajo BCL (la licencia Java normal) para implementadores comerciales y GPLv2 (con la excepción de Classpath) para implementadores de código abierto.
- Continúe proporcionando el TCK a los licenciatarios comerciales, pero también actualice la licencia OCTLA para que cubra Java SE 7. Este último permite a los implementadores de código abierto acceso gratuito al TCK para verificar sus implementaciones ...
La decisión anterior significa mucho esfuerzo para poner en código Open JDK, para liberar código oficialmente verificado, probado, con licencia y compatible. Si agrega que debe publicarse siguiendo el cronograma público acordado, resulta obvio que dicho esfuerzo será casi el mismo que se realizó anteriormente en las versiones "tradicionales" de Sun / Oracle Java.
Esto hace que sea razonable mantener las bases de código Open y Oracle JDK lo más cerca posible: de lo contrario, la duplicación del desarrollo y las correcciones para hacer que ambos proyectos cumplan con TCK podrían volverse prohibitivamente desalentadores.
Parece que la decisión de usar Open JDK como implementación de referencia hizo que lo mejor para Oracle fuera mantener su JDK lo más cerca posible en sincronización con Open JDK, hasta el lanzamiento de JDK 7.
Para comprender qué podría motivar a Oracle a mantener la sincronización mencionada aún más, con las versiones de actualización de JDK 7, sería mejor echar un vistazo al proyecto Open JDK 8 , cuyo propósito se describe bastante similar al de Open JDK 7:
El objetivo de este Proyecto es producir una implementación de referencia de código abierto de la Plataforma Java SE 8, que será definida por JSR 337 en el Proceso de la Comunidad Java .
Por el mismo razonamiento que se explicó anteriormente con respecto a la implementación de referencia de JDK 7, nuevamente, lo mejor para Oracle es mantener las actualizaciones de ambos JDK lo más sincronizadas posible.
Cuantas más diferencias haya entre estos JDK ahora, más difícil será para Oracle lanzar Java SE 8, debido a la duplicación de los esfuerzos necesarios para que su propia versión cumpla con TCK. Lo contrario también es cierto, es decir, cuanto más cerca estén ambos proyectos ahora, menos esfuerzo se requerirá para lanzar ambas implementaciones de Java 8.
¿Alguna vez se te ocurrió admitir en paralelo dos versiones ligeramente diferentes del mismo software, dirigidas a diferentes clientes? En caso afirmativo, es probable que recuerde el deseo de mantenerlos a ambos lo más cerca posible y los inconvenientes que experimentó cuando no estaban sincronizados. Con Open y Oracle JDK, es más o menos así, solo a mayor escala.
Casi todas las correcciones de errores pasan directamente a través del proyecto OpenJDK y luego a los proveedores de JVM posteriores (Oracle, Azul, RedHat, etc.).
Una excepción es que algunos parches de seguridad se corrigen en versiones posteriores (en particular, Oracle) antes de ser portados silenciosamente de nuevo a OpenJDK. Esto permite a los proveedores actualizar la mayor parte del mundo con la solución de seguridad antes de publicar la vulnerabilidad en el proyecto de código abierto.
Algunos proveedores también eligen no enviar sus cambios a OpenJDK. Por ejemplo, tanto Google como Twitter han modificado las versiones de OpenJDK que usan internamente con correcciones de errores y características que no han vuelto al proyecto principal de OpenJDK.
HTH
fuente