Diferença entre OpenJDK e Adoptium / AdoptOpenJDK

183

Devido à recente atualização da política do Oracle Java SE Support Roadmap (final de US $ atualizações gratuitas da Oracle após março de 2019 em particular), tenho procurado alternativas ao Oracle Java. Descobri que o OpenJDK é uma alternativa de código aberto. E eu encontrei o AdoptOpenJDK , agora conhecido como Adoptium, que é um binário pré - construído . É quebra-cabeças.

Qual é a diferença entre o OpenJDK e o Adoptium / AdoptOpenJDK?

Mikhail Kholodkov
fonte
Atualização: AdoptOpenJDK mudou seu nome para Adoptium , como parte de sua mudança para a Eclipse Foundation .
Basil Bourque

Respostas:

272

Em resumo:

  • O OpenJDK possui vários significados e pode se referir a:
    • implementação gratuita e de código aberto da plataforma Java, Standard Edition (Java SE)
    • repositório de código aberto - o código-fonte Java, também conhecido como projeto OpenJDK
    • binários OpenJDK pré-criados mantidos pela Oracle
    • binários pré-criados do OpenJDK mantidos pela comunidade OpenJDK
  • AdoptOpenJDK - binários OpenJDK pré- criados mantidos pela comunidade ( licença de código aberto )

Explicação:

OpenJDK pré-construído (ou distribuição) - binários, criados a partir de http://hg.openjdk.java.net/ , fornecidos como um arquivo ou instalador, oferecidos para várias plataformas, com um possível contrato de suporte.

O OpenJDK, o repositório de origem (também chamado de projeto OpenJDK ) - é um repositório de código aberto baseado no Mercurial , hospedado em http://hg.openjdk.java.net . O código-fonte Java. A grande maioria dos recursos Java (da VM e as bibliotecas principais ao compilador) são baseados apenas neste repositório de origem. A Oracle tem uma bifurcação alternativa disso.

O OpenJDK, a distribuição (veja a lista de provedores abaixo) - é gratuito como na cerveja e meio como na fala , mas você não pode ligar para a Oracle se tiver problemas com ela. Não há contrato de suporte. Além disso, a Oracle só lançará atualizações para qualquer versão do OpenJDK (a distribuição) se esse for o release Java mais recente, incluindo os lançamentos LTS (suporte a longo prazo). No dia em que a Oracle lança o OpenJDK (distribuição) versão 12.0, mesmo se houver um problema de segurança com o OpenJDK (distribuição) versão 11.0, a Oracle não lançará uma atualização para o 11.0. Mantido exclusivamente pela Oracle.

Alguns projetos do OpenJDK - como o OpenJDK 8 e o OpenJDK 11 - são mantidos pela comunidade OpenJDK e fornecem versões para algumas versões do OpenJDK para algumas plataformas. Os membros da comunidade assumiram a responsabilidade de liberar correções para vulnerabilidades de segurança nessas versões do OpenJDK.

AdoptOpenJDK, a distribuição é muito semelhante à distribuição OpenJDK da Oracle (na medida em que é gratuita e é uma compilação produzida pela compilação das fontes do repositório de fontes OpenJDK). O AdoptOpenJDK como uma entidade não fará o backport de patches, ou seja, não haverá uma 'fork / versão' do AdoptOpenJDK que seja materialmente diferente do upstream (exceto alguns patches de script de construção para itens como o suporte do Win32). Ou seja, se os membros da comunidade (Oracle ou outros, mas não o AdoptOpenJDK como entidade) corrigirem a segurança do backport para atualizações das versões do OpenJDK LTS, o AdoptOpenJDK fornecerá compilações para eles. Mantido pela comunidade OpenJDK.

OracleJDK - é mais uma distribuição. A partir do JDK12, não haverá versão gratuita do OracleJDK. A oferta de distribuição JDK da Oracle se destina ao suporte comercial. Você paga por isso, mas depois conta com o suporte da Oracle. Diferentemente da oferta OpenJDK da Oracle, o OracleJDK vem com suporte mais longo para versões LTS. Como desenvolvedor, você pode obter uma licença gratuita para uso pessoal / de desenvolvimento apenas desse JDK específico, mas isso é principalmente um problema, pois 'apenas o binário' é basicamente o mesmo que o binário do OpenJDK. Acho que isso significa que você pode baixar versões com patches de segurança de LTS JDKs nos sites da Oracle, desde que prometa não usá-las comercialmente.

Nota . Talvez seja melhor chamar as compilações do OpenJDK da Oracle como "compilações do Oracle OpenJDK".

Donald Smith, gerente de produtos Java da Oracle, escreve :

Idealmente, simplesmente nos referiríamos a todas as compilações do Oracle JDK como "Oracle JDK", sob a GPL ou a licença comercial, dependendo da sua situação. No entanto, por razões históricas, enquanto as pequenas diferenças remanescentes existirem, as consultaremos separadamente à medida que o OpenJDK da Oracle for construído e o Oracle JDK.


Fornecedores e comparação de OpenJDK

-------------------------------------------------- --------------------------------------
| Fornecedor Builds Grátis | Binário livre | Estendido | Comercial | Permissivo |
| | da fonte | Distribuições | Atualizações Suporte | Licença |
| ------------------------------------------------- ------------------------------------- |
| AdoptOpenJDK | Sim Sim Sim Não Sim
| Amazônia - Corretto | Sim Sim Sim Não Sim
| Azul Zulu | Não Sim Sim Sim Sim
| BellSoft Liberica | Não Sim Sim Sim Sim
| IBM Não Não Sim Sim Sim
| jClarity | Não Não Sim Sim Sim
| OpenJDK | Sim Sim Sim Não Sim
| JDK Oracle | Não Sim Não ** Sim Não
| Oracle OpenJDK | Sim Sim Não Não Sim
| ojdkbuild | Sim Sim Não Não Sim
| RedHat | Sim Sim Sim Sim Sim
| SapMachine | Sim Sim Sim Sim Sim
-------------------------------------------------- --------------------------------------

Compilações gratuitas a partir do código-fonte - o código-fonte da distribuição está disponível ao público e pode-se montar sua própria compilação

Distribuições binárias gratuitas - os binários de distribuição estão disponíveis publicamente para download e uso

Atualizações estendidas - aka LTS (suporte a longo prazo) - Atualizações públicas além do ciclo de vida do lançamento de 6 meses

Suporte comercial - alguns fornecedores oferecem atualizações estendidas e suporte ao cliente para clientes pagantes, por exemplo, Oracle JDK ( detalhes do suporte )

Licença permissiva - a licença de distribuição não é protetora, por exemplo, Apache 2.0


Qual distribuição Java devo usar?

Nos dias da Sun / Oracle, geralmente a Sun / Oracle produzia as distribuições proprietárias de JDK a jusante com base em fontes OpenJDK. Recentemente, a Oracle decidiu fazer suas próprias construções proprietárias apenas com o suporte comercial anexado. Eles publicam graciosamente as compilações do OpenJDK também em seu site https://jdk.java.net/ .

O que está acontecendo a partir do JDK 11 é a mudança da mentalidade de fornecedor único (Oracle) para a mentalidade em que você seleciona um provedor que fornece uma distribuição para o produto, nas condições que você preferir: plataformas criadas por eles, frequência e rapidez dos lançamentos , como o suporte é estruturado etc. Se você não confia em nenhum dos fornecedores existentes, pode criar o OpenJDK você mesmo.

Cada construção do OpenJDK geralmente é feita a partir do mesmo repositório original de origem (OpenJDK “the project”). No entanto, cada versão é única - $ gratuita ou comercial, com ou sem marca, pura ou empacotada (por exemplo, o BellSoft Liberica JDK oferece JavaFX empacotado, que foi removido das compilações Oracle a partir do JDK 11).

Se nenhum ambiente (por exemplo, Linux) e / ou requisito de licença definir distribuição específica e se você desejar a compilação JDK mais padrão , provavelmente a melhor opção é usar o OpenJDK da Oracle ou AdoptOpenJDK.


Informação adicional

Hora de olhar além do JDK da Oracle por Stephen Colebourne

Java Is Still Free pela comunidade Java Champions (publicado em 17 de setembro de 2018)

Java is Still Free 2.0.0 pela comunidade Java Champions (publicado em 3 de março de 2019)

Aleksey Shipilev sobre o JDK atualiza a entrevista por Opsian (publicado em 27 de junho de 2019)

Mikhail Kholodkov
fonte
8
Você pode mencionar que outros fornecedores fornecem implementações Java baseadas no OpenJDK, como os produtos Zulu e Zing da Azul Systems . Outro é o projeto Eclipse OpenJ9 .
Basil Bourque
2
@DmitriyPopov É permissiva - github.com/AdoptOpenJDK/openjdk-build/blob/master/LICENSE
Mikhail Kholodkov
1
@MikhailKholodkov Incorreto sobre o licenciamento do Apache. Seu link para o AdoptOpenJDK usando a Apache License 2.0 se aplica apenas aos scripts de criação criados por eles para ajudar a produzir seus binários. Os binários são construídos a partir do código-fonte obtido do projeto OpenJDK usando a GPL com licença de exceção de vinculação.
Basil Bourque
2
O @GarrettWilson AdoptOpenJDK faz apenas duas coisas: (a) Crie binários e instaladores usando o código-fonte fornecido pelo OpenJDK; e (b) execute testes nesses binários. O AdoptOpenJDK não mantém um repositório de código-fonte para implementar a plataforma Java. Portanto: OpenJDK é apenas código fonte, AdoptOpenJDK é apenas binários + instaladores. Os autores do AdoptOpenJDK codificam apenas para suas ferramentas de construção e suítes de teste. Além do AdoptOpenJDK, várias outras empresas também fornecem builds com base no código-fonte fornecido pelo projeto OpenJDK: Azul Systems, Oracle, BellSoft, Amazon AWS, RedHat / IBM, SAP e muito mais.
Basil Bourque
1
@GarretWilson Devo acrescentar que o AdoptOpenJDK faz uma terceira coisa: (c) Cria e mantém ferramentas para dar suporte à construção e testes mencionados no meu comentário anterior.
Basil Bourque
64

Atualização: AdoptOpenJDK mudou seu nome para Adoptium , como parte de sua mudança para a Eclipse Foundation .


OpenJDK code código-fonte
Adoptium / AdoptOpenJDK ➙ cria

Diferença entre OpenJDK e AdoptOpenJDK

O primeiro fornece código fonte , o outro fornece compilações desse código fonte.

Vários fornecedores de Java e OpenJDK

O Adoptium da Eclipse Foundation , anteriormente conhecido como AdoptOpenJDK , é apenas um dos vários fornecedores que distribuem implementações da plataforma Java. Esses incluem:

  • Fundação Eclipse (Adoptium / AdoptOpenJDK)
  • Azul Systems
  • Oráculo
  • Red Hat / IBM
  • BellSoft
  • SEIVA
  • Amazon AWS
  • … e mais

Consulte este meu fluxograma para ajudar a guiá-lo na escolha de um fornecedor para uma implementação da plataforma Java. Clique / toque para ampliar.

Fluxograma orientando você na escolha de um fornecedor para uma implementação Java 11

Outro recurso: essa matriz de comparação da Azul Systems é útil e parece verdadeira e justa para mim.

Aqui está uma lista de considerações e motivações a serem consideradas na escolha de um fornecedor e implementação.

Motivações na escolha de um fornecedor para Java

Alguns fornecedores oferecem uma escolha de tecnologias JIT .

Diagrama mostrando o histórico da fusão do HotSpot e do JRockit e o OpenJ9, ambos disponíveis no AdoptOpenJDK

Para entender mais sobre esse ecossistema Java, leia Java Is Still Free

Basil Bourque
fonte
1
Se 'OpenJDK' se referir à fonte, qual é a diferença entre hub.docker.com/_/openjdk e hub.docker.com/_/adoptopenjdk ?
bcoughlan 15/01
1
@bcoughlan Você precisaria perguntar ao editor desses dois produtos: Docker, Inc. Suas páginas da Web vinculadas afirmam que a segunda é mantida pelo projeto AdoptOpenJDK, enquanto a primeira é mantida pela "Comunidade Docker". O primeiro é enganoso no uso do logotipo e na nomeação, pois pode ter lhe dado a impressão de que o projeto OpenJDK o produziu, o que não é o caso. O primeiro pode até estar violando o item # 2 do aviso de marca comercial dado pelo OpenJDK , mas eu não sou advogado.
Basil Bourque
1
@SanderVerhagen Você pode fornecer um link para essa página de download no site do OpenJDK? Não encontro tal oferta. Eu encontro um link para os binários OpenJDK JDK da Oracle para Windows, macOS e Linux em outro site: jdk.java.net . Esse site e seus downloads binários são fornecidos como cortesia à comunidade pela Oracle, não pelo projeto OpenJDK. Como diz a página inicial : O Java Development Kit constrói, da Oracle . Mostro este produto como a segunda bolha no barril azul do meu fluxograma, no canto superior direito.
Basil Bourque
1
@SanderVerhagen Seu link leva a um site diferente , como eu suspeitava, fora do OpenJDK . O site jdk.java.net/14 é não parte do web site do OpenJDK, nem é parte do projeto OpenJDK. Em outras palavras, openjdk.java.net não é jdk.java.net . Mais uma vez, observe as duas bolhas no topo do barril azul no meu fluxograma. O produto Oracle no canto superior esquerdo é o produto comercial. O produto Oracle no canto superior direito é a compilação gratuita e gratuita com licença GPL - seu link leva a esse produto específico.
Basil Bourque
1
@SanderVerhagen Suspeito que você esteja confuso com a nomeação do produto. A palavra “Java” é marca registrada da Oracle e só pode ser usada com sua permissão. Portanto, a maioria dos fornecedores não está usando essa marca comercial. Em vez disso, a maioria dos fornecedores está usando o termo "OpenJDK" como parte de sua nomeação, em vez de "Java". Esses fornecedores estão criando suas compilações a partir do código-fonte obtido no projeto OpenJDK . O projeto OpenJDK fornece apenas código fonte , não compilações, não instaladores. Para um build / instalador, você deve criar o seu próprio ou obter um de um fornecedor. Sugiro ler Java ainda está livre .
Basil Bourque