Versões baseadas em tempo do Java
1. Introdução
Neste artigo, discutiremos os novos lançamentos baseados em tempo do Java e o impacto em todos os tipos de desenvolvedores.
As alterações no agendamento da liberação incluem a atualização dos níveis de entrega e suporte de recursos para versões do Java. No geral, essas mudanças são distintas do Java suportado pela Oracle desde 2010.
2. Por que lançamentos de seis meses?
Para aqueles de nós acostumados com a cadência de lançamento historicamente lenta do Java, esta é uma mudança bastante significativa. Por que uma mudança tão dramática?
Originalmente, o Java definia seus principais lançamentos em torno da introdução de grandes recursos. Isso tendia a criar atrasos, como todos os que experimentamos no Java 8 e 9. Isso também diminuiu a inovação de idiomas, enquanto outros idiomas com ciclos de feedback mais rígidos evoluíram.
Simplificando, períodos de liberação mais curtos levam a passos menores e mais gerenciáveis à frente. E recursos menores são mais fáceis de adotar.
Esse padrão combina bem nas condições atuais e permite que o desenvolvimento do JDK funcione em metodologias ágeis semelhantes à comunidade que ele suporta. Além disso, torna o Java mais competitivo com tempos de execução como NodeJS e Python.
Obviamente, o ritmo mais lento também traz seus benefícios e, portanto, o ciclo de lançamento de seis meses também desempenha um papel em uma estrutura maior de Suporte a Longo Prazo, que veremos na Seção 4.
3. Alteração do número da versão
Um aspecto mecânico dessa alteração é um novo esquema de número de versão.
3.1. Esquema de cadeia de versão do JEP 223
Estamos todos familiarizados com o antigo, codificado emJEP 223. Esse esquema tornou os números de versão incrementais e retransmitiu informações extras.
Actual Hypothetical
Release Type long short
------------ ------------------------
Security 2013/06 1.7.0_25-b15 7u25
Minor 2013/09 1.7.0_40-b43 7u40
Security 2013/10 1.7.0_45-b18 7u45
Security 2014/01 1.7.0_51-b13 7u51
Minor 2014/05 1.7.0_60-b19 7u60
Se executarmosjava -version em uma JVM para a versão 8 ou anterior, veremos algo como:
>java -version
java version "1.6.0_27"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.6.0_27-b07)
Java HotSpot(TM) Client VM (build 1.6.0_27-b13, mixed mode, sharing)
Nesse caso, podemos supor que seja para o Java 6, que está correto, e a 27ª atualização, que está errada. O esquema de numeração não é tão intuitivo quanto parece.
As versões secundárias eram múltiplas de 10 e as versões de segurança preenchiam todo o resto. Normalmente, veríamos a string curta anexada às nossas instalações locais, comoJDK 1.8u174.. A próxima versão pode serJDK 1.8u180, que seria uma versão secundária com novas correções.
3.2. Novo esquema de cadeia de versão
O novo esquema de string de versão será “recast version numbers to encode not compatibility and significance but, rather, the passage of time, in terms of release cycles,”according to Mark Reinhold in the JEP.
Vamos dar uma olhada em alguns:
9.0.4
11.0.2
10.0.1
À primeira vista, isso parece ser um versionamento semântico; however, this is not the case.
Com o controle de versão semântico, a estrutura típica é$MAJOR.$MINOR.$PATCH, mas a nova estrutura de versão do Java é:
$FEATURE.$INTERIM.$UPDATE.$PATCH
$FEATURE is what we might think of as the major version, mas aumentará a cada seis meses, independentemente das garantias de compatibilidade. E$PATCH é para versões de manutenção. Mas é aqui que as semelhanças param.
Primeiro,$INTERIM é um espaço reservado, reservado pela Oracle para necessidades futuras. For the time being, it will always be zero.
E, em segundo lugar,$UPDATE is time-based like $FEATURE, updating monthly após o lançamento do recurso mais recente.
E, finalmente, zeros à direita são truncados.
Isso significa que11 é o número do lançamento do Java 11, lançado em setembro de 2018,11.0.1 é seu primeiro lançamento de atualização mensal em outubro e11.0.1.3 seria um hipotético terceiro lançamento de patch da versão de outubro .
4. Distribuições de várias versões
A seguir, vamos ver como escolher a versão certa.
4.1. Estabilidade
Simplificando, o Java agora tem um canal rápido, a cada seis meses, e um canal lento, a cada três anos. Cada versão do terceiro ano é chamada de versão LTS.
No canal rápido, o idioma libera recursos na incubação. Esses recursos de idioma estabilizam na versão LTS.
Portanto, para empresas que podem adotar a volatilidade em troca de usar novos recursos, elas podem usar o canal rápido. Para empresas que apreciam a estabilidade e podem esperar para atualizar, elas podem atualizar a cada versão do LTS.
A experiência com versões do JDK permite que os desenvolvedores encontrem o melhor ajuste.
4.2. Apoio, suporte
Também há, é claro, a questão do suporte. Agora que o suporte ao Java 8 terminou, o que fazemos?
E, conforme discutido anteriormente, a resposta vem em versões LTS,Java 11 being the most recent LTS release and 17 being the next. As atualizações estarão disponíveis e suportadas por fornecedores como Oracle e Azul.
Se podemos confiar no suporte da comunidade, Redhat, IBM e outros declararam seu apoio à aplicação de correções de bugs no OpenJDK. Além disso, o projetoAdoptOpenJDK fornece binários pré-compilados para OpenJDK.
4.3. Licenciamento
Uma área de confusão para alguns é a diferença entre o OpenJDK e o Oracle JDK.
Na verdade, eles são quase idênticos, diferindo apenas em quais correções de bugs e patches de segurança foram obtidos,according to Brian Goetz.
OpenJDK acts as the source of most derived JDKs and remains free. A partir do Java 11, a Oracle cobrará taxas de licença comercial do Oracle JDK com suporte e serviços adicionais incluídos.
4.4. Fragmentação
Com lançamentos mais frequentes, a fragmentação pode se tornar um problema. Hipoteticamente, todo mundo poderia estar executando em diferentes versões do Java, com recursos diferentes ainda mais do que agora.
Obviamente, a conteinerização pode ajudar a resolver isso. Do Docker e CoreOS ao OpenShift da Red Hat, a conteinerização fornece o isolamento necessário e não força mais um local de instalação do Java a ser usado no servidor.
5. Conclusão
Em conclusão, podemos esperar muito mais da equipe Java da Oracle com um lançamento regular do Java a cada seis meses. Como desenvolvedor Java, a perspectiva de novos recursos de linguagem a cada seis meses é empolgante.
Vamos ter em mente algumas das implicações ao decidirmos qual é o nosso canal de atualização se precisarmos de suporte e licenciamento, e como lidar com a fragmentação.