Uma Linguagem para Torradeiras que Conquistou o Mundo — a História do Java

Uma Linguagem para Torradeiras que Conquistou o Mundo — a História do Java

Como um projeto da Sun para eletrodomésticos fracassou, foi salvo pela web e virou o Java: o Oak, o *7, os applets, a briga com a Microsoft que gerou o C#, o código aberto no OpenJDK, a Oracle contra o Google e o ritmo semestral de versões que renovou a linguagem.
Java

• • 18 min de leitura

Um projeto secreto para eletrodomésticos que fracassou, foi salvo pela web e acabou virando a base de bancos, governos, celulares e do jogo mais vendido da história.

O Java foi criado para o lugar errado. Seus criadores queriam uma linguagem para controlar televisores, videocassetes e aparelhos de TV a cabo. Esse mercado não aconteceu na época, e o projeto quase foi arquivado. Então surgiu a web, que precisava justamente do que eles tinham construído: um jeito de o mesmo programa rodar em qualquer máquina, com segurança. Conhecer essa história explica quase tudo o que você vai ver na linguagem, desde a sintaxe familiar até a máquina virtual e a obsessão com compatibilidade.

Um grupo à parte dentro da Sun

No começo dos anos 1990, a Sun Microsystems era uma das empresas de computação mais importantes do mundo. Vendia estações de trabalho e servidores Unix, e seu lema era "a rede é o computador". Em 1991, a empresa montou uma pequena equipe isolada do resto da companhia, conhecida como Green Team, com uma missão vaga e ambiciosa: descobrir qual seria a próxima onda da computação e se preparar para ela.

A aposta da equipe foi a eletrônica de consumo. Se microprocessadores estavam ficando baratos, logo estariam em todo tipo de aparelho doméstico, e esses aparelhos precisariam de software e de conversar entre si. Entre os membros estavam Patrick Naughton, Mike Sheridan e James Gosling, um engenheiro canadense que já tinha no currículo uma versão do editor Emacs e um sistema de janelas.

O primeiro problema apareceu rápido. A equipe começou a programar em C++, a linguagem da moda para software sério. Mas, para o mundo dos aparelhos, o C++ tinha dois defeitos graves. O primeiro era a portabilidade: um programa em C++ é compilado para um processador específico, e os fabricantes de eletrônicos trocavam de chip conforme o preço do mês. O segundo era a confiabilidade: erros de memória, que em C e C++ são fáceis de cometer, derrubam o programa. Um computador de mesa travado se reinicia. Um aparelho de TV travado vira uma ligação para o suporte técnico e uma devolução.

Gosling decidiu que seria mais fácil criar uma linguagem nova do que domar o C++. Ele a chamou de Oak, carvalho em inglês, por causa da árvore que via da janela do escritório.

O *7 e o fracasso que salvou a linguagem

Em 1992, a equipe apresentou o \*7 ("Star Seven"), um controle remoto portátil com tela sensível ao toque, capaz de comandar vários aparelhos da casa. Na tela, um personagem animado guiava o usuário. Ele se chamava Duke e até hoje é o mascote do Java. Tudo no \*7 era escrito em Oak.

A demonstração impressionou, mas não havia mercado para ela. A equipe tentou então a televisão interativa e disputou contratos para fornecer o software de decodificadores de TV a cabo. Perdeu. Em 1994, o projeto estava sem rumo e sem cliente.

Foi nesse momento que a equipe olhou para a World Wide Web. O navegador Mosaic, lançado em 1993, estava transformando a internet num fenômeno de massa. E a web tinha exatamente o problema que o Oak resolvia. Milhões de computadores diferentes, com processadores e sistemas operacionais diferentes, estavam ligados pela mesma rede, e as páginas eram estáticas: texto e imagens, sem nenhum programa. Um programa que viesse junto com a página precisaria rodar em qualquer uma dessas máquinas e não poderia pôr em risco o computador de quem o recebesse. Portabilidade e segurança eram os dois pilares do Oak.

A equipe construiu um navegador próprio, o WebRunner, depois rebatizado de HotJava, capaz de executar pequenos programas embutidos nas páginas. Esses programas ganharam o nome de applets.

Do carvalho ao café

O nome Oak não pôde ser usado, porque já pertencia a outra empresa. Depois de uma sessão de brainstorming, a equipe escolheu Java, o nome de uma ilha da Indonésia e uma gíria americana para café. Por isso o logotipo é uma xícara fumegante, e por isso tantos nomes do ecossistema fazem trocadilhos com café, como "JavaBeans" e o número mágico 0xCAFEBABE que abre todo arquivo compilado de Java.

O Java foi apresentado ao público em 23 de maio de 1995, na conferência SunWorld. No mesmo dia, a Netscape, dona do navegador mais usado da época, anunciou que o Netscape Navigator executaria applets Java. A versão 1.0 do kit de desenvolvimento, o JDK 1.0, saiu em janeiro de 1996.

O slogan da Sun era "write once, run anywhere": escreva uma vez, rode em qualquer lugar. A ideia por trás dele é a peça central de toda a plataforma. O compilador Java não gera código para um processador real. Ele gera bytecode, instruções para um processador imaginário, e cada sistema operacional tem um programa, a Java Virtual Machine, que executa esse bytecode. O mesmo arquivo compilado roda num Windows, num Mac, num Linux ou num celular, desde que ali exista uma JVM. Na próxima aula você vai ver esse bytecode com os próprios olhos.

O que o Java trouxe de novo

Em 1995, Gosling e Henry McGilton publicaram um documento que descrevia os objetivos da linguagem. Ele ficou famoso pela lista de adjetivos: simples, orientada a objetos, distribuída, interpretada, robusta, segura, neutra em relação à arquitetura, portável, de alto desempenho, multithread e dinâmica. Por trás do marketing havia decisões técnicas concretas, e todas elas vão aparecer neste curso:

  • Sintaxe familiar. O Java se parece de propósito com C e C++, para que milhões de programadores o lessem no primeiro dia. Chaves, ponto e vírgula, if, for e while estão todos lá.
  • Gerenciamento automático de memória. Em C, quem aloca memória precisa devolvê-la manualmente, e esquecer causa vazamentos ou falhas. Em Java, um coletor de lixo recolhe os objetos que ninguém mais usa. É o tema de "Quem Recolhe o Lixo".
  • Nada de aritmética de ponteiros. O programador não manipula endereços de memória diretamente, o que elimina uma classe inteira de erros e brechas de segurança.
  • Verificação do bytecode. Antes de executar um código que veio da rede, a JVM confere se ele respeita as regras da linguagem, para que ninguém consiga mandar instruções malformadas para a máquina.
  • Threads na linguagem. Fazer várias coisas ao mesmo tempo era parte do projeto desde o início, e não uma biblioteca acrescentada depois. É o assunto de toda a Fase 7.
  • Uma biblioteca padrão grande. Estruturas de dados, rede, arquivos e interface gráfica já vinham na caixa.

Nem tudo deu certo. Os applets, que motivaram o lançamento, eram lentos para carregar, tinham falhas de segurança recorrentes e foram abandonados ao longo dos anos 2000. Hoje nenhum navegador os executa. O Java sobreviveu por outros motivos.

Sun contra Microsoft

A Microsoft licenciou o Java em 1996 e lançou sua própria implementação, com a ferramenta Visual J++. Mas acrescentou recursos que só funcionavam no Windows e deixou de fora partes que a licença exigia. Para a Sun, aquilo atacava justamente a promessa de portabilidade: um programa escrito com as extensões da Microsoft não rodaria em qualquer lugar.

A Sun processou a Microsoft em 1997. O caso terminou em acordo em 2001, e a Microsoft foi obrigada a abandonar sua versão do Java. A consequência mais duradoura foi outra: sem poder usar o Java, a Microsoft criou sua própria plataforma, o .NET, e sua própria linguagem, o C#, apresentado em 2000 e lançado em 2002. É por isso que as duas linguagens se parecem tanto. O curso de C# deste site conta o outro lado dessa história em "Da Rivalidade com o Java ao Código Aberto: a História do C#".

A conquista do servidor

Enquanto os applets definhavam, o Java encontrou seu verdadeiro lar no servidor. Em 1998 saiu o Java 2, que no ano seguinte foi dividido em três edições: uma para desktop e uso geral (J2SE), uma para dispositivos pequenos como celulares (J2ME) e uma para aplicações corporativas (J2EE, lançada em 1999). O J2EE padronizou como escrever sistemas que rodam em servidores e atendem milhares de usuários, com especificações como os servlets, programas Java que respondem a requisições da web.

Bancos, seguradoras, companhias aéreas e governos adotaram o Java em massa. A linguagem era mais segura que C++, mais rápida que as linguagens de script da época e tinha a garantia de uma grande empresa por trás. Também em 1998 nasceu o Java Community Process (JCP), o processo formal pelo qual empresas, grupos de usuários e indivíduos propõem e aprovam mudanças na plataforma. O SouJava, grande grupo de usuários brasileiro, é um dos membros desse processo.

Em 2004, o Java 5 trouxe a maior mudança da linguagem até então: genéricos, anotações, enums, autoboxing e o for aprimorado. Todos eles aparecem na Fase 2 e na Fase 3 deste curso.

Código aberto, Oracle e a briga pelo Android

Em novembro de 2006, a Sun anunciou que abriria o código do Java sob a licença GPL. O trabalho foi concluído em grande parte em 2007 e deu origem ao OpenJDK, o projeto de código aberto onde o Java é desenvolvido até hoje. Esse detalhe vai importar na próxima aula, quando você escolher qual JDK instalar.

Em 2008 chegou ao mercado o primeiro celular com Android, o sistema do Google. Os aplicativos Android eram escritos em Java, mas não rodavam numa JVM da Sun: o Google criou sua própria máquina virtual e sua própria implementação da biblioteca, reproduzindo a estrutura de parte das APIs do Java.

A Sun, enquanto isso, perdia dinheiro. Em 2010, a Oracle concluiu a compra da empresa e, com ela, o controle do Java. Gosling deixou a Oracle poucos meses depois. Ainda em 2010, a Oracle processou o Google, alegando que o Android copiava as APIs do Java sem licença. O caso Oracle contra Google durou mais de uma década e chegou à Suprema Corte dos Estados Unidos. Em abril de 2021, por seis votos a dois, a Corte decidiu que o uso que o Google fez das declarações das APIs era uso justo (fair use). A decisão teve peso para toda a indústria de software, porque a reimplementação de interfaces é uma prática comum em programação.

Em 2017, a Oracle transferiu o Java EE para a Eclipse Foundation, onde ele passou a se chamar Jakarta EE. Você vai encontrar os dois nomes em "Java no Servidor".

O renascimento

Durante boa parte dos anos 2000 e início dos 2010, o Java evoluiu devagar. O Java 7 levou cinco anos para sair. Nesse período a linguagem ganhou a fama de verbosa e ultrapassada, enquanto outras linguagens, inclusive o C#, avançavam mais rápido.

A virada começou com o Java 8, em 2014, que trouxe as lambdas e a API de Streams, o assunto da Fase 4. A virada definitiva veio em 2017, com o Java 9 e o sistema de módulos, quando a equipe do Java anunciou um novo modelo de lançamentos. Em vez de grandes versões a cada vários anos, sairia uma versão nova a cada seis meses, em março e setembro, com o que estivesse pronto. A primeira desse modelo foi o Java 10, em março de 2018.

Para quem precisa de estabilidade, algumas versões são marcadas como LTS (long-term support) e recebem atualizações por muitos anos: o Java 11 (2018), o 17 (2021), o 21 (2023) e o 25, lançado em setembro de 2025, que é a versão deste curso. As versões intermediárias, como o Java 27, lançado em setembro de 2026, trazem novidades mais cedo, mas têm suporte curto. Recursos novos costumam passar antes por fases de preview, em que ficam disponíveis para teste e ainda podem mudar. Isso permite que a linguagem evolua rápido sem quebrar o código de ninguém.

Com esse ritmo vieram, entre outros, os text blocks, os records, as sealed classes, o pattern matching, as virtual threads (Java 21) e, no Java 25, os arquivos de código compactos, que permitem escrever um programa sem declarar uma classe. Você vai usar esse último recurso já na próxima aula.

Quem usa Java hoje, e por quê

O Java está em lugares que você usa todos os dias, mesmo sem perceber:

  • Sistemas corporativos e financeiros. Bancos, seguradoras, bolsas de valores e governos rodam uma parcela enorme de seus sistemas em Java. No Brasil, o programa da declaração do Imposto de Renda da Receita Federal é escrito em Java.
  • Grandes serviços da internet. A Netflix usa Java e o framework Spring Boot na maior parte dos seus serviços de backend. O LinkedIn criou o Apache Kafka, hoje um dos sistemas de mensageria mais usados do mundo, escrito em Java e Scala. Amazon e Google mantêm bases de código Java gigantescas.
  • Big data e infraestrutura. Hadoop, Kafka, Elasticsearch, Cassandra e o servidor web Tomcat são escritos em Java. O Spark, escrito em Scala, roda sobre a JVM.
  • Android. Desde 2019 o Google recomenda o Kotlin como linguagem preferencial para apps novos, mas o Kotlin é compilado para a mesma plataforma, conversa diretamente com código Java, e uma quantidade imensa de apps e bibliotecas Android existentes é escrita em Java.
  • Jogos. O Minecraft, criado por Markus Persson e lançado publicamente em 2009, foi escrito em Java. A edição original, hoje chamada Minecraft: Java Edition, continua sendo desenvolvida, e sua comunidade de mods existe justamente porque o Java facilita estender um programa.
  • Ferramentas de desenvolvimento. O IntelliJ IDEA, o Eclipse, o Jenkins e o Ghidra, ferramenta de engenharia reversa publicada pela NSA, são escritos em Java.

Vale notar que a JVM é maior que a linguagem Java. Kotlin, Scala, Clojure e Groovy também compilam para bytecode e rodam na mesma máquina virtual. O Nubank, por exemplo, construiu grande parte de seus sistemas em Clojure, sobre a JVM. Quem entende a JVM entende a base de todas essas linguagens.

Os motivos da longevidade são poucos e sólidos. O primeiro é a compatibilidade: um programa compilado há vinte anos, em geral, ainda roda numa JVM atual, e para uma empresa com milhões de linhas de código isso vale mais que qualquer recurso novo. O segundo é o desempenho: a JVM observa o programa enquanto ele roda e recompila os trechos mais usados para código de máquina otimizado, e para servidores de longa duração o resultado compete com linguagens compiladas. O terceiro é o ecossistema: praticamente todo problema de negócio já tem uma biblioteca Java madura, testada e documentada. O quarto são as ferramentas de monitoramento e diagnóstico, que permitem observar uma JVM em produção com um detalhe que poucas plataformas oferecem.

Também é justo registrar as críticas. O Java tem fama de verboso, com razão no passado e cada vez menos hoje. Programas Java demoram mais para iniciar e usam mais memória do que programas nativos equivalentes, um custo que importa em funções que rodam por poucos segundos na nuvem e que os projetos GraalVM e Leyden vêm atacando. E as mudanças de licença da Oracle em 2018 criaram confusão sobre o que é gratuito, confusão que a próxima aula esclarece.

A história acaba aqui, e a prática começa pela peça que tornou possível o "escreva uma vez, rode em qualquer lugar" de 1995: a JVM.

Fontes e leituras recomendadas

Exercícios

Exercício 1

Explique com suas palavras por que a eletrônica de consumo, o mercado original do projeto, exigia portabilidade e confiabilidade mais do que os computadores de mesa da época.

Ver resposta

✓ Resposta: Os fabricantes de aparelhos trocavam de processador com frequência, conforme o custo. Um programa compilado para um chip específico teria de ser recompilado e testado de novo a cada troca, e uma linguagem que gerasse código independente do processador eliminava esse trabalho. Quanto à confiabilidade, um computador de mesa tem um usuário que sabe reiniciá-lo, e travamentos eram tolerados. Um televisor ou decodificador travado gera chamados de suporte e devoluções, e o custo de um erro de memória é muito maior. Por isso o Oak foi desenhado sem aritmética de ponteiros e com gerenciamento automático de memória.

Exercício 2

O projeto Green fracassou no mercado para o qual foi criado. Que característica da web, em 1994–1995, fez dele a tecnologia certa na hora certa?

Ver resposta

✓ Resposta: A web ligava milhões de computadores heterogêneos, com processadores e sistemas diferentes, e as páginas eram estáticas. Para enviar um programa junto com uma página, era preciso que ele rodasse em qualquer uma dessas máquinas (portabilidade, resolvida pelo bytecode e pela JVM) e que não pudesse prejudicar o computador de quem o recebia (segurança, resolvida pela verificação do bytecode e pela ausência de ponteiros). Esses eram exatamente os dois requisitos que a equipe já tinha resolvido para os aparelhos domésticos.

Exercício 3

Qual foi a consequência mais duradoura do processo da Sun contra a Microsoft, e por que ela interessa a quem estuda Java hoje?

Ver resposta

✓ Resposta: A consequência mais duradoura foi a criação do .NET e do C#. Impedida de usar e estender o Java, a Microsoft desenvolveu uma plataforma própria com ideias muito parecidas: máquina virtual, código intermediário, coletor de lixo e sintaxe inspirada em C. Para quem estuda Java, isso significa que boa parte do que se aprende aqui se transfere quase diretamente para o C#, e o inverso também vale. Além disso, as duas plataformas competem até hoje, e muitos recursos modernos de uma inspiraram a outra.

Exercício 4

Uma empresa usa o Java 17 em produção e está decidindo se migra para o Java 21, para o 25 ou para o 27. Com base no que você leu sobre LTS, que opções fazem sentido e qual você recomendaria?

Ver resposta

✓ Resposta: O Java 21 e o 25 são LTS e recebem atualizações de segurança por vários anos, o que é o requisito de quase toda empresa. O 27 é uma versão de suporte curto: ele deixa de receber atualizações seis meses depois, quando sai a versão seguinte, e obrigaria a empresa a migrar de novo em pouco tempo. Entre as duas LTS, o 25 é a recomendação natural, porque é a mais recente, tem o horizonte de suporte mais longo e inclui tudo o que veio no 21. O 21 só faria sentido se alguma biblioteca ou servidor de aplicação usado pela empresa ainda não fosse compatível com o 25. Nesse caso, seria uma escala antes do 25, e não o destino.

Exercício 5

A decisão do caso Oracle contra Google tratou da declaração das APIs, isto é, dos nomes das classes e métodos e de como eles se organizam, e não do código que as implementa. Por que a distinção importava para a indústria de software?

Ver resposta

✓ Resposta: A declaração de uma API funciona como um contrato: diz quais operações existem, com que nomes e parâmetros. Quando outra empresa reimplementa essas mesmas declarações com código próprio, programadores podem reaproveitar o que já sabem e programas existentes podem funcionar em outra plataforma. Muita tecnologia depende disso, de sistemas compatíveis com Unix a bancos de dados que aceitam o mesmo SQL e serviços de armazenamento que imitam a API de um concorrente. Se a simples reprodução das declarações exigisse licença, a interoperabilidade entre sistemas ficaria nas mãos de quem criou a interface original. A Corte não decidiu se APIs podem ou não ter direitos autorais. Decidiu que, naquele caso, o uso foi justo, o que deu segurança prática a quem reimplementa interfaces.

Comentários

Mais em Java

O Programa que Escolhe e Repete — if, switch e Laços
O Programa que Escolhe e Repete — if, switch e Laços

O if e a condição que precisa ser boolean, o switch clássico com fall-through…

A Primeira Pedra — ServerSocket e a Leitura do HTTP/1.1
A Primeira Pedra — ServerSocket e a Leitura do HTTP/1.1

Nesta aula nasce o projeto do Farol: um leitor de requisições que trabalha…

Quando as Coisas se Tocam — Colisão e o Primeiro Jogo: Asteroids
Quando as Coisas se Tocam — Colisão e o Primeiro Jogo: Asteroids

Nesta aula você aprende a detectar colisões com círculos, retângulos e…