# IcedTea

IcedTea é um software de desenvolvimento e projecto de integração lançado pela Red Hat, em junho de 2007. O objetivo é fazer o software OpenJDK que a Sun Microsystems lançou como software livre em 2007, utilizável sem exigir qualquer outro software que não é livre. Para a Red Hat, isto tornaria possível adicionar o OpenJDK ao Fedora Linux, bem como outras distribuições. Esta meta foi cumprida; e uma versão do IcedTea baseada em OpenJDK foi empacotada com o Fedora 8 em novembro de 2007. Em abril de 2008, viu-se o primeiro lançamento de uma nova variante, IcedTea6, que se baseia no build do OpenJDK6 da Sun, um fork do OpenJDK, com o objectivo de ser compatível com o actual JDK6. Este foi liberada no Ubuntu e Fedora, em maio de 2008. O pacote IcedTea, nessas distribuições, foi renomeado para OpenJDK com o anúncio da marca OpenJDK. Em junho de 2008, o Fedora fez seu build passar nos rigorosos testes TCK da Sun em x86 e x86-64.

## História

Este projeto foi criado na sequência da Sun liberar seu HotSpot Virtual Machine e compilador Java, em novembro de 2006; e mais do código fonte da classe de biblioteca em maio de 2007. No entanto, parte da biblioteca da classe, como a renderização de fontes, gerenciamento de cores e suporte a som, só foram fornecidas como plugins binários proprietários. Isto porque o código fonte para estes plugins pertence a terceiros, em vez da Sun Microsystems. As partes foram liberadas publicadas sob os termos da GNU General Public License, uma licença de software livre.
Devido a estes componentes em falta, não foi possível construir o OpenJDK apenas com componentes em software livre. A Sun é destinada a negociar com os titulares de licença para permitir esse código a ser liberado sob uma licença livre; ou na falta deste, para substituir estes elementos proprietários com implementações alternativas. Com os plugins substituídos, a biblioteca de classes seria então totalmente livre. A Sun tem continuado a usar o código proprietário em seu certificado de versões binárias.
Na sequência do anúncio, o projeto IcedTea foi iniciado e formalmente anunciado em 7 de junho de 2007, com build de um repositório fornecido pela equipe GNU Classpath. A equipe não podia chamar seu software produto de "OpenJDK" porque esta é uma marca comercial de propriedade da Sun Microsystems. Eles decidiram, em vez disso, o nome temporário "IcedTea".
Em 5 de novembro de 2007, quanto à Red Hat e à Sun Contributor Agreement, ambos assinaram um acordo com a Comunidade OpenJDK, a Licença TCK. O comunicado de imprensa sugeriu que isso iria beneficiar o projeto IcedTea. Simon Phipps sugeriu a possibilidade de estar hospedando IcedTea no openjdk.java.net; e Mark Reinhold notou que a assinatura da cessão de direitos autorais poderia permitir que a Red Hat contribuísse com os componentes do IcedTea à Sun para inclusão no JDK mainstream.
Desde então, uma série de patches para IcedTea6 fizeram seu caminho para OpenJDK6, por exemplo.
Em junho de 2008, foi anunciado que IcedTea6 (como a versão do pacote OpenJDK no Fedora 9) passou nos testes Technology Compatibility Kit; e pode-se afirmar uma implementação totalmente compatível com Java 6.

## Objetivos

Especificamente, o projeto IcedTea começou com dois objetivos. Um deles é que seja possível para o GNU Compiler for Java compile o código OpenJDK. O problema era que o único programa que poderia compilar o software proprietário OpenJDK existente era o Sun JDK. Distribuições livres como o Fedora não podem depender de ferramentas proprietárias para construir pacotes, de modo que o projeto IcedTea teve de tornar possível compilar o código utilizando software livre. Quando isso foi feito, a versão resultante do IcedTea do OpenJDK poderia ser utilizada para compilar a si mesma, escapando assim, a necessidade de uso de software não-livre às futuras compilações.
A segunda tarefa foi de fornecer equivalentes livres de plugins binários que existiam no OpenJDK, porque a Sun não foi capaz de liberar todo o código-fonte. A partir de março de 2008, isso já não é necessário para IcedTea6, como o OpenJDK6 build pode ser construído sem plugins binários. Com o lançamento do b10, que substitui o suporte proprietário a som, a partir do projecto Gervill, uma implementação plena do Java 1.6 que podem ser construída sem plugins binários. O único remanescente é um plugin binário para suporte SNMP, que é um provedor opcional de arquitectura JMX e não faz parte das especificações.

## Benefícios

O IcedTea fornece um plugin Java Web browser em software livre. Foi o primeiro a trabalhar em navegadores de 64 bits em Linux de 64 bits, uma característica proprietária do JRE da Sun conduzida mais tarde. Isto o torna adequado para habilitar o suporte a Java applets em Firefox de 64 bits, entre outros. Além disso, o suporte Java Web Start é por meio do NETX. Sun fez promessas sobre lançar seu plugin e implementação de Web Start, como parte do OpenJDK, mas até agora não cumpriu, apesar da contínua pressão da comunidade. O desenvolvimento do plugin IcedTea continua, com a última versão da próxima geração do plugin com suporte ao Google Chromium. O desenvolvimento atual tem lugar no rojeto separaddI cedTea Web.
IcedTea fornece também build de sistema mais familiar, proporcionando um wrapper em torno do OpenJDK makefiles utilizando o GNU Autotools. Isso elimina a necessidade de lembrar um grande número de variáveis do ambiente para configurar e construir (o actual IcedTea constrói um conjunto de cerca de 40 dessas variáveis à construção subjacente ao OpenJDK). Também tem desde cedo um lugar para trabalhar em características que acabarão por aparecer nas principais builds do OpenJDK, como Gervill; e ao trabalho nos portes para outras plataformas.

## Evolução e avaliação

Em junho de 2007, o Fedora está trabalhando no IcedTea; e uma porção significativa da Mauve, a suíte de testes do GNU Classpath, executado com êxito no mesmo. Em maio de 2008, o suporte foi adicionado ao IcedTea para rodar os testes de regressão Sun jtreg.
IcedTea é o padrão na JVM no Ark Linux.
IcedTea está disponível no Ubuntu 7.10 (Gutsy Gibbon), a partir do "universo" repositório; e IcedTea6 no 8.04 (Hardy Heron).
IcedTea está disponível no Fedora 8 e IcedTea6 no Fedora 9 (como java-1.6.0-openjdk), a partir do repositório "yum". Pacotes (e builds) para IcedTea6 estão disponíveis no Gentoo no repositório oficial, mas eles são marcados como instáveis.
Pode ser construído e executado no Debian. Pacotes binários foram apresentadas em 20 de abril. Em abril de 2008, mas foram rejeitados devido a problemas com alguns arquivos de licenciamento. Um novo pacote foi carregado em junho de 2008; e entrou instável em 12 de julho de 2008.

## Arquitectura

OpenJDK contém aproximadamente (no lançamento, em maio de 2007) 4% de código sobrecarregado, que só foi empacotado como plugins binários. Esses eram necessários para construir e usar o JDK. OpenJDK6 foi lançada com apenas 1% de código sobrecarregado; e seu suporte a som também já foi substituído. IcedTea6 baseia-se nesta versão. IcedTea6 ainda fornece suporte web browser, o suporte Web Start, como a implementação da Sun continua a ser proprietária.
IcedTea substitui o plugins binários com o equivalente ao código GNU Classpath, compilando tudo com GCJ e opcionalmente bootstraps a si mesma, usando o HotSpot e Java Virtual Machine; e o javac, compilador Java, que apenas dá um built.

## Zero e Shark

Portes de HotSpot e (OpenJDK; Virtual Machine) são difíceis, porque o código contêm bastantes optimizações em Assembly para além do núcleo C++. O projecto IcedTea desenvolveu um porte genérico do interpretador HotSpot zero-assembler Hotspot (ou zero), com quase nenhum código assembly. Este porte é destinado a permitir adaptar o Linux na arquitetura do processador, tornando potencial infinito em portáteis. O código do HotSpot zero-montador é utilizado para todos os não-x86 portes do HotSpot (PPC, IA64, S390 e ARM) desde a versão 1.6.
O rojetoI cedTea já está desenvolvendo uma plataforma independente de compilador just-in-time chamado Shark para HotSpot, utilizando LLVM, para complementar Zero. Concluindo este trabalho, fará com que o Java Virtual Machine seja independente da arquitetura de CPU.