Diferenças entre o Oracle JDK e o OpenJDK

Diferenças entre o Oracle JDK e o OpenJDK

1. Introdução

Neste artigo, exploraremos as diferenças entreOracle Java Development Kit eOpenJDK. Vamos primeiro dar uma olhada rápida em cada um deles e, em seguida, fazer uma comparação. Depois disso, veremos uma lista de outras implementações JDK.

Leitura adicional:

Instalando o Java no Ubuntu

Aprenda a instalar as versões 8 a 11 do OpenJDK e Oracle JDK nos sistemas Ubuntu.

Read more

Diferença entre JVM, JRE e JDK

Um guia para entender a diferença entre JVM, JRE e JDK em Java.

Read more

2. Histórico do Oracle JDK e Java SE

O JDK (Java Development Kit) é um ambiente de desenvolvimento de software usado na programação da plataforma Java. Ele contém um Java Runtime Environment completo, o chamado tempo de execução privado. O nome veio do fato de conter mais ferramentas que o JRE independente, além de outros componentes necessários para o desenvolvimento de aplicativos Java.

Oracle strongly recommends using the term JDK to refer to the Java SE (Standard Edition) Development Kit (também existem plataformas Enterprise Edition e Micro Edition).

Vamos dar uma olhada na história do Java SE:

  • JDK Beta - 1995

  • JDK 1.0 - janeiro de 1996

  • JDK 1.1 - fevereiro de 1997

  • J2SE 1.2 - dezembro de 1998

  • J2SE 1.3 - maio de 2000

  • J2SE 1.4 - fevereiro de 2002

  • J2SE 5.0 - setembro de 2004

  • Java SE 6 - dezembro de 2006

  • Java SE 7 - julho de 2011

  • Java SE 8 (LTS) - março de 2014

  • Java SE 9 - setembro de 2017

  • Java SE 10 (18.3) - março de 2018

  • Java SE 11 (18,9 LTS) - setembro de 2018

  • Java SE 12 (19.3) - março de 2019

Nota: as versões em itálico não são mais suportadas.

Podemos ver que os principais lançamentos do Java SE ocorreram aproximadamente a cada dois anos até o Java SE 7. Foram necessários cinco anos para sair do Java SE 6 e outros três para chegar ao Java SE 8 posteriormente.

Desde o Java SE 10, podemos esperar novos lançamentos a cada seis meses. No entanto, nem todas as versões serão as versões LTS (Long-Term-Support). Como resultado do plano de lançamento da Oracle, os lançamentos de produtos LTS acontecerão apenas a cada três anos.

O Java SE 11 é a versão mais recente do LTS e o Java SE 8 receberá atualizações públicas gratuitas até dezembro de 2020 para uso não comercial.

Este kit de desenvolvimento ganhou seu nome atual depois que a Oracle comprou a Sun Microsystems em 2010. Antes disso, o nome era SUN JDK e era a implementação oficial da linguagem de programação Java.

3. OpenJDK

O OpenJDK é uma implementação gratuita e de código aberto do Java SE Platform Edition. Foi lançado inicialmente em 2007 como resultado do desenvolvimento iniciado pela Sun Microsystems em 2006.

Certamente, devemos enfatizar que oOpenJDK is an official reference implementation of a Java Standard Edition since version SE 7.

Inicialmente, era baseado apenas no JDK 7. Mas,since Java 10, the open-source reference implementation of the Java SE platform is the responsibility of the JDK Project. E, assim como no Oracle, o Projeto JDK também fornecerá novos lançamentos de recursos a cada seis meses.

Devemos observar que, antes desse projeto de longa duração, havia projetos de liberação do JDK que lançavam um recurso e depois foram descontinuados.

Vamos agora verificar as versões do OpenJDK:

  • Projeto OpenJDK 6 - baseado no JDK 7, mas modificado para fornecer uma versão de código aberto do Java 6

  • Projeto OpenJDK 7 - 28 de julho de 2011

  • Projeto OpenJDK 7u - este projeto desenvolve atualizações para Java Development Kit 7

  • Projeto OpenJDK 8 - 18 de março de 2014

  • Projeto OpenJDK 8u - este projeto desenvolve atualizações para Java Development Kit 8

  • Projeto OpenJDK 9 - 21 de setembro de 2017

  • Versão do projeto JDK 10 - 20 de março de 2018

  • Versão do projeto JDK 11 - 25 de setembro de 2018

  • Versão do projeto JDK 12 -Stabilization phase

4. Oracle JDK vs. OpenJDK

Nesta seção, vamos nos concentrar nas principais diferenças entre o Oracle JDK e o OpenJDK.

4.1. Agenda de Liberação

Como mencionamos,Oracle will deliver releases every three years, enquantoOpenJDK will be released every six months.

A Oracle fornece suporte de longo prazo para seus lançamentos. Por outro lado, o OpenJDK suporta as alterações em um release apenas até a próxima versão ser lançada.

4.2. Licenças

Oracle JDK was licensed under Oracle Binary Code License Agreement, enquantoOpenJDK has the GNU General Public License (GNU GPL) version 2 with a linking exception.

Existem algumas implicações de licenciamento ao usar a plataforma Oracle. As atualizações públicas do Oracle Java SE 8 lançadas após janeiro de 2019 não estarão disponíveis para uso comercial, comercial ou de produção sem uma licença comercial, como Oracleannounced. No entanto, o OpenJDK é um código completamente aberto e pode ser usado livremente.

4.3. atuação

Existeno real technical difference between the two since the build process for the Oracle JDK is based on that of OpenJDK.

Quando se trata de desempenho,Oracle’s is much better regarding responsiveness and JVM performance. Ele coloca mais foco na estabilidade devido à importância que dá aos clientes corporativos.

O OpenJDK, por outro lado, entregará lançamentos com mais frequência. Como resultado, podemos encontrar problemas com instabilidade. Com base emcommunity feedback, sabemos que alguns usuários do OpenJDK encontraram problemas de desempenho.

4.4. Recursos

Se compararmos recursos e opções, veremos queOracle product has Flight Recorder, Java Mission Control, and Application Class-Data Sharingfeatures, enquantoOpenJDK has the Font Renderer feature.

Além disso,Oracle has more Garbage Collection options and better renderers, como podemos ver emanother comparison.

4.5. Desenvolvimento e Popularidade

Oracle JDK is fully developed by Oracle Corporation enquantoOpenJDK is developed by Oracle, OpenJDK, and the Java Community. No entanto, empresas de primeira linha como Red Hat, Azul Systems, IBM, Apple Inc. e SAP AG também participam ativamente de seu desenvolvimento.

Como podemos ver no link da subseção anterior, quando se trata depopularity with the top companies that use Java Development Kits in their tools,, como Android Studio ou IntelliJ IDEA,the Oracle JDK used to be more preferred, but both of them have switched to the OpenJDK based JetBrains builds.

Por outro lado, as principais distribuições Linux (Fedora, Ubuntu, Red Hat Enterprise Linux) fornecem o OpenJDK como a implementação padrão do Java SE.

5. Mudanças desde o Java 11

Como podemos ver emOracle’s blog post, existem algumas mudanças importantes começando com Java 11.

Em primeiro lugar,Oracle will change its historical “https://www.oracle.com/technetwork/java/javase/terms/license/index.html[BCL]” license with a combination of an open source GNU General Public License v2, with the Classpath Exception (GPLv2+CPE) and commercial license ao usar o Oracle JDK como parte de um produto ou serviço Oracle, ou quando software de código aberto não é bem-vindo.

Cada licença terá compilações diferentes, mas elas serão funcionalmente idênticas a apenas algumas diferenças cosméticas e de embalagem.

Além disso, tradicionalmente "recursos comerciais", como Flight Recorder, Java Mission Control e Application Class-Data Sharing, bem como o Z Garbage Collector, agora estão disponíveis no OpenJDK. Portanto,Oracle JDK and OpenJDK builds are essentially identical from Java 11 onward.

Vamos verificar as principais diferenças:

  • O kit da Oracle para Java 11 emite um aviso ao usar a opção-XX:+UnlockCommercialFeatures, enquanto em compilações OpenJDK, esta opção resulta em um erro

  • O Oracle JDK oferece uma configuração para fornecer dados de log de uso à ferramenta "Advanced Management Console"

  • A Oracle sempre exigiu que fornecedores de criptografia de terceiros fossem assinados por um certificado conhecido, enquanto a estrutura de criptografia no OpenJDK possui uma interface de criptografia aberta, o que significa que não há restrições quanto a quais fornecedores podem ser usados.

  • O Oracle JDK 11 continuará a incluir instaladores, marcas e pacotes JRE, enquanto as compilações do OpenJDK estão disponíveis atualmente como arquivoszipetar.gz

  • O comandojavac –release se comporta de maneira diferente para os destinos Java 9 e Java 10 devido à presença de alguns módulos adicionais no lançamento da Oracle

  • A saída dos comandosjava –version ejava -fullversion distinguirá as compilações da Oracle das compilações do OpenJDK

6. Outras implementações de JDK

Vamos agora dar uma olhada rápida em outras implementações ativas do Java Development Kit.

6.1. Livre e de código aberto

As seguintes implementações, listadas em ordem alfabética, são de código aberto e de uso gratuito:

  • AdoptOpenJDK

  • Amazon Corretto

  • Azul Zulu

  • Bck2Brwsr

  • CACAU

  • Codinome Um

  • DoppioJVM

  • Eclipse OpenJ9

  • GraalVM CE

  • HaikuVM

  • Ponto de acesso

  • Jamiga

  • JamVM

  • Jelatine JVM

  • Jikes RVM (Máquina virtual da Jikes Research)

  • JVM.go

  • leJOS

  • Maxine

  • Mecanismo Multi-OS

  • RopeVM

  • uJVM

6.2. Implementações proprietárias

Também existem implementações protegidas por direitos autorais:

  • Azul Zing JVM

  • CEE-J

  • Excelsior JET

  • GraalVM EE

  • Imsys AB

  • JamaicaVM (aicas)

  • JBlend (Aplix)

  • MicroJvm (IS2T - Tecnologia de software inteligente industrial)

  • OJVM

  • PTC Perc

  • SAP JVM

  • Waratek CloudVM para Java

Junto com osactive implementations listados acima, podemos ver a lista deinactive implementationse uma breve descrição de cada implementação.

7. Conclusão

Neste artigo, nos concentramos nos dois kits de desenvolvimento Java mais populares atualmente.

Primeiro descrevemos cada uma delas e depois enfatizamos as diferenças mais notáveis ​​entre elas. Em seguida, prestamos atenção especial às mudanças e diferenças desde o Java 11. Por fim, listamos outras implementações ativas disponíveis hoje.