domingo, 14 de abril de 2019

O Java vai ser pago! E agora?



No início de 2018 a Oracle anunciou que sua distribuição do Java deixaria de ser "free" a partir de janeiro de 2019. Isso gerou muitas dúvidas e preocupações na comunidade Java.

Como apenas no final de 2018 a Oracle liberou sua política de comercialização do Java, a comunidade de usuários passou por momentos de confusão e até desespero sem saber qual seria o futuro da plataforma.
Mesmo com o anúncio da nova política, os comunicados e documentos lançados pela Oracle, devido a sua grande complexidade, ainda deixam a comunidade insegura em relação ao uso do Java.
O objetivo desse post é tentar esclarecer, de forma breve, qual o cenário atual, e algumas das opções disponíveis para os usuários da plataforma Java.
Para entender o cenário atual precisamos, primeiro, analisar alguns pontos: OpenJDK e versões LTS. Logo em seguida são apresentadas algumas opções de distribuições da plataforma Java.

O OpenJDK

Em 2006 a Sun Microsystems anunciou que iria transformar o Java em uma plataforma OpenSource. No ano seguinte foi lançado o projeto OpenJDK, que tornava público o código da plataforma Java.
Após o anúncio da aquisição da Sun a Oracle assumiu o compromisso de manter o código do Java aberto e manteve o projeto OpenJDK. Atualmente o OpenJDK é a base para as demais distribuições Java disponíveis no mercado.

O código do Java está disponível no site do projeto, em https://openjdk.java.net/, e qualquer pessoa pode baixar, compilar, e produzir seus próprios binários do Java, sem custo algum!

Porém, para uma plataforma tão complexa quando o Java, baixar, compilar e manter o código é bastante trabalhoso, e a maioria dos usuários não está disposta a isso. Cada distribuição Java nada mais é do que uma versão do código do Java SDK, que foi baixado do repositório do projeto OpenJDK, compilada e distribuída por alguém.


Versões do Java

Com o lançamento do Java 9, em setembro de 2017, a Oracle declarou que será lançada uma nova versão do Java, através do projeto OpenJDK, a cada seis meses. Outra mudança importante foi em relação aos patches de segurança e correção de bugs. A partir da data de lançamento de uma nova versão do Java, os patches de segurança e correções de bugs não serão mais lançados para as versões anteriores.
Nesse cenário, para ter acesso aos updates do OpenJDK, o usuário deverá fazer o update para a versão mais recente do Java assim que ela for lançada.

Ciclo de vida das versões do Java, incluindo o tempo de suporte para cada versão. Imagem extraida de https://www.azul.com/think-moving-jdk-9-sometime-next-year-think/

Para o usuário doméstico, ou para o desenvolvedor casual, isso não parece ser um grande problema. Fazer o update a cada seis meses, de forma gratuita, ou mesmo ficar sem os patches de correção de bugs e/ou patches de segurança não seja tão crítico. Porém, para empresas que utilizam o Java em uma quantidade grande de máquinas ou são alvos de ataques constantes isso se torna uma grande dor de cabeça. É nesse contexto que entram as distribuições do Java.

Versões LTS vs non-LTS

As versões semestrais do projeto OpenJDK são classificadas como non-LTS (non-Long Term Suport / sem Suporte de Longo Prazo). Essas versões trarão a cada seis meses, novas funcionalidades para a linguagem e plataforma Java, permitindo que os desenvolvedores se familiarizem e utilizem os novos recursos assim que possível. A cada três anos a Oracle vai lançar uma versão LTS (com Suporte de Longo Prazo) a qual receberá correções de bug e patches de segurança por pelo menos cinco anos. Atualmente, o Java 9 e Java 10 são versões non-LTS, e o Java 11, lançado em setembro de 2018 é uma versão LTS. Dessa forma, o Java 11 receberá correções e patches de segurança até 2023. O importante a entender nesse ponto é: Oracle OpenJDK (grátis) somente terá versões non-LTS. Oracle Java (pago) somente terá versões LTS.
Outras distribuições, como a Zulu da Azul Systems, terão suas próprias políticas para as versões non-LTS e LTS.


Principais distribuições do Java

Oracle JDK ( Java SE )

Se você ou sua empresa usam Java, especialmente versões anteriores ao Java 9, existe grande probabilidade usar essa distribuição. O OracleJDK é uma versão do OpenJDK compilado e distribuído pela Oracle. Segundo a Oracle, existem apenas algumas bibliotecas de código proprietário que fazem parte da OracleJDK que não estão disponíveis para o projeto OpenJDK. A maioria das bibliotecas estão ligadas ao desenvolvimento de aplicações desktop, como drivers de som ou renderizadores de fonte. Existem alternativas para essas bibliotecas, e uma lista mais detalhada pode ser encontrada aqui.
Licenciamento: A partir de Janeiro de 2019 essa distribuição passou a ser vendida pelo modelo de subscrição. Portanto, para poder utilizar a distribuição da Oracle, para uso comercial ou não, o usuário deverá ter um contrato de subscrição com a Oracle.
Preço: Os dados mais recentes sobre a comercialização dessa versão podem ser encontrados em https://www.oracle.com/java/. Na data atual, segundo a lista de preços da Oracle para o Java SE o preço*, para servidores, é cobrado por core, e pode variar de U$25,00 mensais por core, para licenciamentos de 1 a 99 cores, até U$ 12.50 mensais para licenciamentos acima de 10.000 cores.
Vantagens: Com a subscrição da Oracle adquire-se o direito de uso, de suporte, e de patches de segurança e correções de bugs enquanto o contrato estiver vigente. Uma vez encerrado o contrato, o usuário é obrigado a desinstalar todas as versões do Oracle Java instalados nas máquinas.
A subscrição da Oracle não está atrelada a uma versão específica. Uma vez tendo um contrato vigente, o usuário tem direito a utilizar qualquer versão do Java ( 1.8, 9, 10, 11, ...) sem ter que pagar nenhum valor extra enquanto mantiver a quantidade de cores inalterada.
Plataformas Suportadas: Windows, Linux, Solaris, MacOS (veja a lista completa de plataformas suportadas).
* esse é o preço apresentado na lista global da Oracle. Esse preço pode variar de acordo com a relação comercial de cada empresa com a Oracle. Também podem existir mais descontos baseados nos tipos de processadores utilizados.

Oracle OpenJDK

A Oracle, além das versões do Oracle JDK, fornece binários de versões non-LTS no seguinte site: https://jdk.java.net/. Essas versões são distribuídas seguindo a licença GNU GPLv2. Em resumo elas são grátis para baixar e usar, porém, por serem non-LTS, terão patches de segurança e correções de bug apenas até o lançamento da próxima versão do Java.
Preço: Grátis
Plataformas Suportadas: Windows, Linux, MacOS (Lista de plataformas suportadas para o JDK 11)

AdoptOpenJdk

Em uma iniciativa conjunta, grandes empresas, como IBM, Microsoft, RedHat, Pivotal se uniram para produzir uma plataforma que disponibilizasse binários confiáveis do Java de forma gratuita para toda a comunidade. Detalhes, como a missão e os envolvidos na iniciativa podem ser encontrados aqui: https://adoptopenjdk.net/about.html.
Além dos binários semestrais, o projeto também disponibilizará versões LTS, seguindo a mesma cadência de três anos adotada pela Oracle. Na presente data, o projeto AdoptOpenJDK se compromete a suportar as versões OpenJDK 1.8 até 2023 e a versão OpenJDK 11 até, no mínimo 2022. No site o projeto menciona que os bugs reportados serão corrigidos o mais rápido possível e disponibilizados nas versões seguintes. Também é possível contratar suporte comercial (pago) para os binários distribuídos pelo projeto AdoptOpenJDK. Os parceiros informados no site são a IBM e a JClarity. Os detalhes do suporte podem ser vistos aqui: https://adoptopenjdk.net/support.html
Preço: Grátis (com opção de suporte pago)
Plataformas Suportadas: Windows, Linux, MacOS, AIX, Soalris (Lista de plataformas suportados)

Azul Zulu

Azul Systems é uma empresa focada no desenvolvimento de JVMs de alta performance. O Zulu, a JDK da azul, também é baseado no OpenJDK e tem uma versão gratuita, e uma versão paga, o Zulu Enterprise.
O chamariz para o Zulu Enterprise é, nesse contexto, o suporte para versões LTS por durante 8 anos (lembrando que a Oracle fornece suporte de cinco anos para LTS). Outro diferencial são as versões MTS (medium term suporte ou suporte de médio prazo). Essas versões anuais, normalmente lançadas em setembro de cada ano, para as quais a Azul se compromete a dar suporte por 2.5 anos.
Já a versão grátis do Zulu, pode ser usada para qualquer fim, comercial ou não, porém a Azul não se compromete com o suporte estendido para essas versões. Os detalhes do roadmap de suporte para o Zulu pode ser encontrado em: https://www.azul.com/products/azul_support_roadmap/

Preço*: Gratis, sem garantia de suporte, ou pago, usando a versão Zulu Enterprise. A Azul tem uma política de preços bem mais simples do que a Oracle. Os preços são baseados na quantidade de Zulu JDKs instalados, independente da quantidade de cores de cada máquina. Os preços variam de U$13.500,00 dólares anuais para até 25 instalações até um máximo de U$ 290.000,00 dólares anuais para instalações ilimitadas. Os detalhes da tabela de preços podem ser encontrados na página do produto em: https://www.azul.com/products/zulu-enterprise/.
Plataformas Suportadas: Windows, Linux, MacOS, Solaris. (Lista de plataformas suportadas)
* O preço mencionado é baseado no 'Standard Support'. Site consultado em 14/04/2019

RedHat OpenJDK

A RedHat é uma das grandes contribuidoras para o projeto OpenJDK e distribui junto com sua versão comercial do Linux, o RedHat Enterprise Linux (RHEL), sua distribuição do OpenJDK.
Para os clientes da RedHat que tenham um contrato de uso do RHEL, ou para os desenvolvedores com subscrição ao sistema operacional da RedHat, o acesso a OpenJDK, aos patches de segurança e correções de bug já está incluso no preço. Outra maneira de se obter o direto de uso do OpenJDK da RedHat é tendo um contrato de uso de algum dos middlewares fornecidos pela empresa que utilizem, como o JBoss EAP, o JBoss Web Server, JBoss Developer Studio ou algum outro produto. Nesse caso o cliente poderá utilizar o OpenJDK na mesma máquina onde o produto da RedHat foi instalado. Em dezembro de 2018 a RedHat lançou uma versão suportada o OpenJDK para a plataforma Windows.
Preço: Pago. Os detalhes de preço das subscrições da RedHat não estão disponíveis no site. É necessário entrar em contato com o setor de vendas para conseguir uma cotação.
Plataformas Suportadas: Windows e Linux - Para detalhes sobre o suporte do RedHat OpenJDK, assim como o Roadmap de suporte, consulte esse artigo da própria RedHat: OpenJDK Life Cycle and Support Policy

Conclusão

O Java deixou de ser grátis? A versão da Oracle sim! Porém isso é só uma parte da história.
Por muitos anos a comunidade Java se acostumou com o fato de existir uma distribuição predominante do JDK, o Oracle JDK. Anterior a 2018, a preocupação de escolher qual distribuição do Java usar raramente passou pela cabeça dos desenvolvedores ou administradores de sistema.
O que vemos acontecer é a mudança de política comercial da Oracle forçar a comunidade Java a olhar para outras alternativas disponíveis e começar a analisar outras versões de JDK.
No início houve muita confusão, e informações desencontradas, em grande parte por culpa da Oracle que mantém termos de uso confusos e fez anúncios parciais de suas políticas comerciais, e em parte por culpa da própria comunidade que, sem informações suficientes, acabou se desesperando.

Atualmente as informações estão mais claras, as políticas comerciais do Java estão declaradas e temos versões grátis ou pagas, dependendo do uso e da necessidade de atualizações.
Chegou o momento de decidir qual é sua estratégia para o futuro do Java na sua empresa ou nos seus projetos. Você já decidiu? Espero que esse material sirva de apoio, ou de ponto de partida para a criação de sua estratégia!

Caso queira discutir algum ponto, estou a disposição!

Att
Giuliano Bortolassi


Material de Referência
https://www.oracle.com/technetwork/java/javase/overview/index.html
https://openjdk.java.net/faq/ -
https://www.azul.com/products/zulu-enterprise/
https://medium.com/@javachampions/java-is-still-free-2-0
https://java.com/en/download/release_notice.jsp
https://blogs.oracle.com/java-platform-group/update-and-faq-on-the-java-se-release-cadence
https://developers.redhat.com/products/openjdk/overview/
https://access.redhat.com/articles/1299013?extIdCarryOver=true&sc_cid=701f2000001OH6kAAG - Consultado em 14/04/2019 - útimo update em 21/03/2019
https://access.redhat.com/articles/1299013?extIdCarryOver=true&sc_cid=701f2000001OH6kAAG
https://developers.redhat.com/products/openjdk/overview/