Diferenças entre Oracle JDK e OpenJDK

oraclejdk vs openjdk

Neste post discutiremos as diferenças entre o Oracle JDK e o OpenJDK, seguido por um destaque no processo de desenvolvimento do JDK. Mas antes de entrar nos detalhes, vamos recapitular o que é o JDK:

O que é JDK?

O Java Development Kit (JDK) é um ambiente de desenvolvimento de software usado para desenvolver aplicativos e applets Java. Inclui o Java Runtime Environment (JRE), um interpretador/carregador (java), um compilador (javac), um arquivador (jar), um gerador de documentação (javadoc) e outras ferramentas necessárias no desenvolvimento Java.

Novatos no Java podem ficar confusos sobre usar o JRE ou o JDK. Para executar aplicações Java, basta fazer o download do JRE. No entanto, para desenvolver aplicativos Java, bem como executá-los, o JDK é necessário.

Existem diferentes JDKs para várias plataformas. As plataformas suportadas incluem Windows, Linux entre outros. Os usuários de MacOS precisam de um kit de desenvolvimento de software próprio, que inclui adaptações de algumas ferramentas encontradas no JDK.

Oracle JDK x OpenJDK

  • O Oracle JDK, antes da aquisição pela Oracle, era chamado de SUN JDK. Após a aquisição, foi nomeada como Oracle JDK sendo agora a equipe da Oracle responsável por mantre o JDK;
  • O OpenJDK é uma implementação de software livre da plataforma Java Standard Edition com contribuição da própria Oracle e da comunidade Java aberta;
  • O OpenJDK é a implementação de referência oficial para o Java Standard Edition do Java SE.
    O OpenJDK é liberado sob licença GPL v2, em que o Oracle JDK é licenciado sob o Oracle Binary Code License Agreement;
  • Na verdade, o processo de criação do Oracle JDK é construído a partir do código-fonte do OpenJDK. Portanto, não há grande diferença técnica entre o Oracle JDK e o OpenJDK;
  • Além do código base, o Oracle JDK inclui a implementação do Java Plugin e do Java WebStart pela Oracle. Também inclui componentes de código-fonte fechado de terceiros e de código-fonte aberto, como rasterizador gráfico e Rhino respectivamente;
  • O OpenJDK Font Renderer e o Oracle JDK Flight Recorder são a grande diferença entre o Oracle JDK e o OpenJDK;
  • Os componentes comerciais do Oracle JDK são agrupados junto com o Oracle JDK que pode ser baixado gratuitamente e para permitir que seja necessário executá-los com sinalizadores explícitos;
  • O Oracle JDK versão comercial é vendido pela Oracle e possui um custo;
  • O OpenJDK é totalmente gratuito e pode ser usado de acordo com a licença GPL v2;
  • As principais distribuições Linux, como Ubuntu, Fedora e Red Hat Enterprise Linux, oferecem um OpenJDK ou sua variante como sua implementação Java SE padrão;
  • O OpenJDK, por ser de código aberto, possui diversas versões derivadas e mantidas por coroporações. Por exemplo o Twitter;
  • Alguns ambientes recomendam expressamente o uso da versão Oracle. Alguns deles são: Android Studio, IntelliJ IDEA, e até mesmo o Minecraft.

Como o Oracle JDK e o OpenJDK são mantidos sincronizados nas versões?

Para uma base de código tão grande, definitivamente deveria ser um processo complexo. Todo o desenvolvimento e correções de erros acontecem no OpenJDK e depois são propagadas para o Oracle JDK. As correções de segurança ocorrem na versão privada sem revisões de código público, ao contrário das correções gerais, depois são enviadas para o Oracle JDK e, em seguida, para o OpenJDK.

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

Projeto IceTea

O IcedTea foi um projeto iniciado pela RedHat em junho de 2007. É um híbrido entre o OpenJDK e o GNU Classpath. O GNU Classpath é um projeto GNU que cria uma implementação de software livre para a biblioteca de classes Java padrão.

O IcedTea é um casamento entre o OpenJDK e o GNU Classpath. O IcedTea atualmente é empacotado como padrão nas distribuições GNU/Linux, como Fedora, Gentoo e Debian.

Contribuições no desenvolvimento do OpenJDK

Qualquer desenvolvedor pode contribuir no desenvolvimento, para isso basta seguir os seguintes passos:

  • O primeiro passo é entrar na lista de discussão do OpenJDK e começar contribuindo para correções de bugs;
  • Escolha um bug de sua preferência e discuta sobre as possíveis soluções no fórum;
  • Após o consenso, faça a correção e submeta o patch;
  • Procure por um patrocinador, figura que desempenha a função de committer;
  • Quando você tem um patrocinador, ela se apropriará desse bug e avaliará, revisará seu patch e o aprovará. Obviamente padrões de qualidade e implementação devem ser respeitados para que esta etapa seja superada;
  • O Mercurial é a ferramenta de controle de origem.

Crie o seu próprio JDK

Não é raro empresas e projetos que demandam a customização do JDK seja por questões de performance seja por questões de hardware. Para criar sua própria versão do Java JDK basta baixar os fontes do OpenJDK como base e personalizar. Se respeitadas as especificações do JAVA SE esta versão poderá ser distribuída na comunidade.

Conclusão

Neste post deixamos claro que não há grandes diferenças entre as duas versões embora já tenhamos presenciado situações que a substituição do OpenJDK pelo Oracle JDK resolve-se problemas de funcionamento de sistemas. Mas em linhas gerais tratam-se do mesmo conjunto de bibliotecas e funções.