Como a manutenção do OpenJDK funciona na prática?

9

Especificamente, eu gostaria de entender a diferença entre o JDK e o OpenJDK da Oracle em termos de correções de bugs e outros patches.

Qual ramificação recebe as correções primeiro e a Oracle tem o hábito de fazer correções que nunca chegam ao OpenJDK?

Muton
fonte

Respostas:

6

Isso é explicado em muitos detalhes na página do OpenJDK: Perguntas e Respostas sobre a Proposta de Projeto do JDK 7

Este projeto servirá de base para os lançamentos do Oracle JDK 7 Update?

Sim.

Para citar a postagem do blog de Joe Darcy no FOSDEM no OpenJDK 6 :

Em particular, não haverá a mesma dicotomia entre a base de código do OpenJDK 7 e a base de código de atualização 7 que existe entre o OpenJDK 6 e o ​​trem de atualização 6 ...

De acordo com a minha leitura, acima significa essencialmente que os patches e atualizações normalmente vão primeiro ao Open JDK e, com o menor atraso possível, entregues no Oracle JDK.

Para patches de segurança, a imagem parece ser oposta, ou seja, eu prefiro esperar que eles primeiro sejam lançados no Oracle e depois (novamente, com o menor atraso possível) para o OpenJDK:

O 7 Update Project receberá correções de segurança da Oracle?

Sim.

Assim como no OpenJDK 6, as correções de segurança são mantidas em sigilo e aplicadas a uma floresta privada antes de serem enviadas para a floresta pública como parte da publicação sincronizada geral da correção nos trens de liberação do JDK afetados. Além disso, eles não passarão pelo processo de revisão de código público e aprovação de adiamento, e seus problemas correspondentes no rastreador de problemas do Projeto não serão visíveis publicamente.

Quando este projeto receberá correções de segurança da Oracle?

O cronograma das atualizações críticas de patches do Oracle Java SE está disponível ao público .

As correções de segurança para o código-fonte deste projeto serão disponibilizadas no JDK 7 Update Project ao mesmo tempo em que são lançadas nos produtos da Oracle ...


Para entender melhor as razões pelas quais parece haver tanto esforço para manter sincronizados o Oracle e o Open JDKs, faz sentido dar uma olhada na decisão da Oracle no projeto anterior: Mudar para o OpenJDK como o Java SE 7 oficial Implementation Reference :

... A Oracle e os outros membros do Java SE 7 Expert Group estão dando os retoques finais na especificação Java SE 7 ( JSR 336 ). Em sua função de líder de especificação, a Oracle é responsável por fornecer a Implementação de Referência do Java SE 7 ... forneceremos uma Implementação de Referência baseada inteiramente no código-fonte aberto OpenJDK e disponibilizá-lo sob a licença de código-fonte aberto GPL .

O papel da Implementação de Referência (RI) deve ser usado como padrão-ouro para todas as implementações Java. Para ter uma implementação certificada como compatível com Java SE, um implementador deve passar por um grande número de testes de compatibilidade - o Technology Compatibility Kit (TCK). Além disso, as implementações podem ser comparadas ao RI como uma verificação adicional de compatibilidade. Basicamente, se sua implementação foi certificada para ter o mesmo comportamento que o RI, é compatível com Java. Para obter mais informações sobre este tópico, consulte as Perguntas frequentes do JCP .

Historicamente, a Sun sempre usava o Sun JDK como o RI e o disponibilizava sob a BCL (Binary Code License). Isso foi muito conveniente para a Sun, pois significava que a implementação do produto era compatível por definição. No entanto, também era confuso, pois o Sun JDK continha alguns recursos que não faziam parte do padrão, como o Java Plugin. Além disso, a continuação dessa prática dificultaria as coisas para os implementadores de código aberto, pois eles não poderiam estudar e avaliar o código fonte oficial do RI. (O código fonte do Oracle JDK é um pouco diferente do OpenJDK - algo que abordaremos adiante).

Com isso em mente, a Oracle:

  • Crie binários do RI com base apenas no código base do OpenJDK.
  • Disponibilize binários RI sob a BCL (a licença Java normal) para implementadores comerciais e a GPLv2 (com exceção do Classpath) para implementadores de código aberto.
  • Continue fornecendo o TCK aos licenciados comerciais, mas também atualize a licença OCTLA para que ele cubra o Java SE 7. Este último permite aos implementadores de código aberto acesso gratuito ao TCK para verificar suas implementações ...

A decisão acima significa muito esforço para colocar no código Open JDK, para liberar código oficialmente verificado, testado, licenciado e compatível. Se você acrescentar que ele deve ser liberado de acordo com o cronograma público acordado, torna-se óbvio que esse esforço será o mesmo que anteriormente foi colocado nas versões Java "tradicionais" da Sun / Oracle.

Isso torna razoável manter as bases de código Open e Oracle JDK o mais próximas possível: caso contrário, a duplicação de desenvolvimento e as correções para tornar ambos os projetos compatíveis com o TCK podem se tornar proibitivamente assustadores.

Parece que a decisão de usar o Open JDK como uma Implementação de Referência tornou o melhor interesse da Oracle manter o JDK o mais próximo possível em sincronia com o Open JDK - até o lançamento do JDK 7.

Para entender o que poderia motivar a Oracle a manter a sincronização mencionada ainda mais, com os lançamentos de atualização do JDK 7, seria melhor dar uma olhada no projeto Open JDK 8 , cujo objetivo é descrito de maneira semelhante à do Open JDK 7:

O objetivo deste projeto é produzir uma implementação de referência de código aberto da plataforma Java SE 8, a ser definida pelo JSR 337 no Java Community Process .

Pelo mesmo raciocínio explicado acima, com relação à implementação de referência do JDK 7, é de novo interesse da Oracle manter as atualizações dos dois JDKs o mais sincronizadas possível.

Quanto mais diferenças existirem entre esses JDKs agora, mais difícil seria para a Oracle lançar o Java SE 8, devido à duplicação de esforços necessários para adequar seu próprio release ao TCK. O oposto também é verdadeiro, ou seja, quanto mais próximos os dois projetos estiverem agora, menos esforço será necessário para liberar as duas implementações do Java 8.


Já lhe aconteceu dar suporte em paralelo a duas versões ligeiramente diferentes do mesmo software, direcionadas a clientes diferentes? Se sim, é provável que você se lembre do desejo de mantê-los o mais próximo possível e dos inconvenientes que teve quando estavam fora de sincronia. Nos Open e Oracle JDKs, é praticamente assim, apenas em uma escala maior.

mosquito
fonte
O projeto de atualização do JDK 7 receberá patches da Oracle após março de 2015, ou seja, após o final das atualizações gratuitas para Java 7 da Oracle?
Restabeleça Monica - M. Schröder
@ MartinSchröder difícil de dizer sem ler a mente da Oracle. Este, provavelmente, muito depende de Java 8 será / versão oficial apoiado pelo então
mosquito
4

Quase todas as correções de erros passam diretamente pelo projeto OpenJDK e depois pelos fornecedores de JVM downstream (Oracle, Azul, RedHat etc.).

Uma exceção é que alguns patches de segurança são corrigidos nas versões posteriores (em particular o Oracle) antes de serem transportados silenciosamente de volta ao OpenJDK. Isso permite que os fornecedores atualizem a maior parte do mundo com a correção de segurança antes de divulgar a vulnerabilidade no projeto de código aberto.

Alguns fornecedores também optam por não enviar suas alterações de volta ao OpenJDK. Por exemplo, o Google e o Twitter modificaram as versões do OpenJDK que eles usam internamente com correções de bugs e recursos que não voltaram ao projeto principal do OpenJDK.

HTH

Martijn Verburg
fonte