Software Livre

Java nunca foi livre

O texto pode parecer um pouco clickbait, mas acreditem em mim, é algo que já percebo há algum tempo e agora me...

Written by Eduardo Santos · 6 min read >
Javali

O texto pode parecer um pouco clickbait, mas acreditem em mim, é algo que já percebo há algum tempo e agora me sinto um pouco mais confortável para debater sobre o tema. O motivo: não existe mais algo unificado que anteriormente era conhecido como OpenJDK. Talvez essa thread do reddit seja a melhor fonte de informações para entender melhor o que aconteceu. Mas o fato é que hoje o ecossistema Java livre depende do OpenJDK que hoje possui pelo menos três diferentes abordagens: o AdoptOpenJDK, ou agora adoptium, que se moveu para a Eclipse Foundation tendo a IBM como principal patrocinadora, o Amazon Correto, mantido pela Amazon obviamente, e uma última versão gerada pela Red Hat e que ainda vai se chamar OpenJDK. Para entender esse movimento vai ser necessário voltar um pouco no tempo e entender o histórico que nos levou a esse momento

Histórico do Software Livre

Talvez muito de vocês não saibam, mas a existência do que conhecemos como Software Livre aconteceu meio que por acaso e está diretamente relacionada à criação dos Sistemas Operacionais. Na década de 60 dois jovens senhores chamados Dennis Ritchie e Ken Thompson trabalhavam no emblemático Bell Labs e criaram o que posteriormente seria chamado de Sistema Operacional Unix. Por uma razão do destino a AT&T, dona do Bell Labs, não podia comercializar o software que eles haviam acabado de desenvolver. Como podemos ver nessa imagem, isso acabou gerando um efeito cascata que acabou por dar origem a quase todos os sistemas operacionais (comerciais ou não) que desenvolvemos até hoje. Tem um que não está lá e talvez por isso seja tão ruim, mas esse não é o tema de hoje.

Pois bem, lembremos o contexto que tínhamos na computação na década de 60 (meus alunos de sistemas operacionais não podem errar isso). Quase todos os programas eram feitos para processamento em lote e rodavam somente no computador que possuía o código que foram programados (lembrem do Assembly), e não existia sequer o conceito de um programa rodar em mais de um computador. Aí vem a grande sacada de ambos: criar uma linguagem de programação chamada C, que estendia a linguagem B que existia na época, para permitir a construção de sistemas operacionais multi usuários que poderiam rodar programas em diferentes computadores.

Como fazer isso então? Aí vem sua maior contribuição, que talvez seja desconhecida da maioria das pessoas: criar um compilador universal, que posteriormente seria chamado de GCC. Com esse compilador seria possível não só criar novos sistemas operacionais, como todos eles seriam livre de royalties, pois o código do compilador em si era aberto. Talvez não seja possível explicar de maneira simples, no contexto atual, a importância que isso teve. Naquela época não fazia nem sentido para uma empresa pensar em programas genéricos, pois todas elas tinham somente um computador e nem perspectiva de ter um segundo, já que era muito caro. Assim, ao criar o SO e o compilador os dois criaram pela primeira vez a possibilidade de existir uma independência de fornecedor de hardware, além de permitir a escrita de softwares que rodassem em mais de um computador. Ou seja: sem querer praticamente criaram o mercado de software.

Sun como empresa mãe do Software Livre

Outra coisa que talvez não seja tão bem conhecida pelos mais novos foi o papel da Sun como empresa para incentivar o Mercado de Software Livre. Aqui talvez seja possível possível ter uma ideia de como ela fomentou o mercado de tecnologia em geral, mas sua maior contribuição para a comunidade foi justamente reforçar o espírito de colaboração. Um dos fundadores da Sun, Bill Joy, criou um termo que seria conhecido na administração como Lei de Joy:

Não importa o tamanho da sua empresa, a maior parte das pessoas mais capazes trabalham em outro lugar.

Bill Joy

Essa lei reforça a importância de trabalhar de forma aberta e colaborativa, que foi o foco da empresa até sua venda. Só para ter uma ideia, além do Java (criado pela Sun), eles compraram e adquiriram o Star Office (posteriormente Open Office), desenvolveram o Solaris e foram mantenedores do kernel do Linux por muitos anos, além da participação em dezenas de outros projetos por seus funcionários. Falando de quem viveu essa época intensamente, Sun era sinônimo de Software Livre. Não vou entrar aqui nos detalhes de como aconteceu sua venda para a Oracle, mas eles fizeram algumas apostas erradas que prejudicaram a lucratividade da empresa, tornando-se uma presa fácil para posterior aquisição.

Chegada da Oracle e mudança radical

Desde a aquisição ficou muito claro qual era o interesse da Oracle: Java, Solaris e outras patentes. Vou citar dois casos que na época ficaram famosos e que inclusive levaram muito tempo para serem resolvidos. O primeiro tive um papel muito mais de espectador, que foi o processo Oracle versus Google. Já falei bastante por aqui e até sobre a importância que teve a vitória definitiva por parte do Google nas cortes americanas e vou deixar aqui algo que já tinha compartilhado no linkedin:

 

Além disso, houve outro momento de bastante tensão que vivenciei de perto que envolve a TV Digital. Não sei o tanto que o público conhece, mas a TV Digital no Brasil no começo envolvia duas partes: uma desenvolvida pela PUC-RJ que é o Ginga-NCL e outra desenvolvida pela UFPE chamada Ginga-J. A primeira é baseada na linguagem Lua, desenvolvida pela PUC e totalmente Open Source, e a segunda é baseada em Java como o nome diz. Para executar o Ginga-J na TV Digital era necessário ter o Java instalado no setup-box, que é aquela caixinha que você conecta nos aparelhos antigos para pegar o sinal. Hoje, no formato final, o Ginga-J foi removido e o padrão se chama Ginga, e aí começa minha desconfiança com a Oracle.

Java Corporativo

Talvez isso vá surpreender muitas pessoas, mas o Java executado no ambiente corporativo não é o mesmo que você baixa gratuitamente pela Internet. Justamente por se tratar de um software cuja máquina virtual é fundamental para o desempenho na execução, a versão padrão disponível na Internet não é suficiente para o ambiente corporativo. Praticamente todas as grandes empresas que trabalham com Java possuíam algum tipo de contrato com a Sun que envolvia desde a configuração da JVM até a disponibilização de SDKs especializadas. E foi justamente nisso que a Oracle estava de olho quando comprou a empresa.

Agora pensa comigo que coisa maluca: você passa vários anos gastando muito dinheiro para desenvolver software e não vai mais conseguir executar, a não ser que você pague um dízimo para a empresa que é “dona” da plataforma. É justamente isso o que acontece no ecossistema do Java, pois de nada adianta ter o código sem a JVM para executar. Essa é a mesma razão pela qual a Microsoft se esforça tanto para emplacar o .NET desde sempre, passando pela, no mínimo, curiosa tentativa de estabelecer o Mono. E como expliquei acima a versão aberta nunca foi uma opção para essas empresas.

Trazendo para o exemplo da TV Digital, o ponto que estávamos era o seguinte: se o Ginga-J tivesse continuado algum valor teria que ser enviado à Oracle para cada TV vendida no Brasil. Não me lembro de valores nem como estava a negociação, se parte dos royalties ia ser cedido, quem ia ter que pagar, etc, mas o fato é que por causa dessa postura ficava muito difícil garantir que durante todo o tempo haveria segurança jurídica suficiente para garantir a continuidade do projeto baseado em licenças livres. A comunidade Java chegou a se organizar para obrigar o governo a exigir a presença do Java na TV Digital, mas não lembro em que pé ficou e espero que não tenha ido pra frente.

Java não é livre

Se você chegou até aqui talvez tenha concluído que os problemas do Java não recaem nos programadores, e sim nas grandes empresas que vão precisar pagar pelo ambiente corporativo, certo? Talvez seja preciso então relembrar as quatro liberdades de software para ser considerado livre:

  1. A liberdade de executar o programa como você desejar, para qualquer propósito;
  2. A liberdade de estudar o programa e adaptá-lo às suas necessidades;
  3. A liberdade de redistribuir cópias;
  4. A liberdade de distribuir cópias de suas versões modificadas para outros.

Observem que, ao restringir a execução em ambiente corporativo, estamos atacando diretamente a primeira liberdade, ou seja, a possibilidade de executar como desejar, para qualquer propósito. Qual o problema disso? A princípio nenhum; não sou especialmente contra o software proprietário. Acredito pessoalmente no software livre e já levei essa defesa às últimas instâncias. Minha maior defesa é pelo respeito ao desejo do desenvolvedor. Meu único problema está em considerar esse Java como Software Livre, pois como podemos ver acima não é.

Existem então versões de Java que são livres? Sim, existem, como o pessoal da Sou Java já explicou aqui com diferentes versões, longas e curtas, sobre o licenciamento do Java. Entendo a razão pela qual algumas pessoas vão continuar defendendo o Java como livre, mas continuo com a mesma opinião. É possível e até provável que muitas dessas versões do OpenJDK baseadas em GPL ganhem escala e se tornem importantes, a exemplo do que aconteceu com o LibreOffice após o projeto OpenOffice ter um destino semelhante ao Java dentro da Oracle. Contudo, isso traz bastante confusão para o usuário comum e passa a ser uma questão de ter muita certeza do ambiente de execução do seu software antes de decidir colocá-lo em produção. E isso dói justamente quando o seu projeto passa a ter sucesso e você precisa de uma versão corporativa.

Para finalizar, não estou diretamente atacando os programadores Java (apesar de ser divertido) nem a linguagem Java (que realmente não gosto). Acho importante esclarecer para todos os riscos envolvidos em todo o ambiente de tecnologia a começar pela linguagem de programação. Se não fosse o GCC talvez não tivéssemos videogames ou possivelmente sistemas embarcados como o Arduino, que permite a execução de forma totalmente livre de royalties em qualquer ambiente. Gostaria de estar aqui dizendo que o Java tomou o mesmo caminho, mas sinceramente não acredito. Espero que o tempo prove que eu estava errado e alguma dessas soluções se tornou o Java de fato, assim como o LibreOffice se tornou o OpenOffice de fato. Mas vale lembrar que a Oracle está sempre na espreita para cobrar o dízimo.

P.S.: A comunidade possui entre suas lideranças algumas das pessoas mais incríveis que já tive o prazer de conhecer, como o saudoso Java Man Daniel Oliveira. Isso não diminui em nada o trabalho incansável e respeitável feito por todos eles na inclusão digital por meio do ensino de programação.

Written by Eduardo Santos
Desenvolvedor Open Source por vocação, Mestre em Computação Aplicada pela Universidade de Brasília (UnB), professor universitário e cientista de dados (data scientist). Profile

Leave a Reply

%d bloggers like this: