# Gentoo Linux

Gentoo Linux (pronuncia-se "jentú") é uma metadistribuição baseada no sistema gerenciador de pacotes portage. A nomenclatura usada no desenvolvimento do sistema e seus produtos é inspirada na espécie de pinguim Gentoo. Seu gerenciamento de pacotes é projetado para ser modular, portátil, fácil de manter, flexível e otimizado para a máquina usuária. Diferentemente da maioria das distribuições de software, normalmente os pacotes são compilados a partir do código fonte, mantendo a tradição dos ports nos sistemas BSD, embora, por conveniência, alguns pacotes grandes sejam disponibilizados também como binários pré-compilados para várias arquiteturas.
O Gentoo descreve-se como uma metadistribuição, "devido à sua adaptabilidade quase ilimitada".

## História

O Gentoo foi inicialmente criado por Daniel Robbins como a Distribuição Enoch. O seu objetivo era criar uma distribuição que fosse compilada a partir do código fonte, sem pacotes pré-compilados, otimizada para o Hardware, que incluísse apenas os programas necessários e diminuísse o trabalho de manutenção através de scripts. Pelo menos uma versão do Enoch foi distribuída: 0.75 em Dezembro de 1999.
Problemas de compilação revelaram problemas com o GNU Compiler Collection (gcc), usado para compilar o código fonte. Assim, Daniel Robbins e outros voluntários passaram a utilizar um fork do gcc conhecido como EGCS, desenvolvido pela Cygnus Solutions, que produziu binários com um ganho mínimo real de 10% sobre o GCC em termos de velocidade. Nesta altura, Enoch ganhara reputação devido à sua velocidade, levando a mudança de nome para Gentoo Linux, sendo Gentoo o nome da espécie de pinguim capaz de nadar mais rápido. As modificações logo se tornaram parte da versão oficial do GCC (versão 2.95) e outras distribuições Linux também obtiveram ganhos na velocidade.
Após problemas com um bug no seu próprio sistema, Robbins interrompeu o desenvolvimento do Gentoo e migrou para o FreeBSD por vários meses, depois dizendo "Eu decidi adicionar várias características do FreeBSD para fazer o nosso sistema auto-compilador (agora conhecido como Portage) uma verdadeira nova geração do sistema ports."
O Gentoo Linux 1.0 foi lançado 31 de março de 2002; há 22 anos.
Robbins queria que o Gentoo se tornasse um projeto comercialmente bem-sucedido, mas teve dificuldades em encontrar um modelo de negócios prático. Em 2004 montou a Fundação Sem Fins Lucrativos Gentoo, transferindo todos os direitos autorais e marcas registradas para ela, e renunciou ao cargo arquiteto chefe do projeto.
O atual Conselho Diretivo é composto por cinco membros que foram anunciados (após uma eleição) em 02 de março de 2008 Há também um conselho subsidiário composto por sete membros, os quais decidem sobre problemas técnicos e políticos. Seus membros são eleitos anualmente, para o período de 1 ano, pelos desenvolvedores ativos no projeto Gentoo. Quando um membro do conselho se retira, a próxima pessoa na fila é votada para substituí-la pelos membros remanescentes. (em inglês).
Até recentemente, a Fundação Gentoo era uma 501(c)(6) non-profit foundation (uma fundação sem fins lucrativos), registrada no Estado norte-americano do Novo México. Mais tarde em 2007, a autorização da Fundação foi revogada. Em 19 de Maio de 2008 o Estado do Novo México declarou que a Fundação Gentoo está novamente em situação regular e disponível para negócios.
Em 22 de setembro de 2008 o time de lançamentos decidiu mudar para compilações de mídia semanais e divulgou que os lançamentos anuais estaríam cancelados. No entanto, apesar de sugestões para que novos lançamentos fossem compilados através do Metro, uma ferramenta desenvolvida e criada por Daniel Robbins em 2008, o time de lançamentos manterá as compilações através do compilador de versões Catalyst, utilizada desde a versão 2004.

## Portabilidade

Embora originalmente desenhado para a arquitetura x86, o Gentoo foi portado para muitas outras e atualmente roda nas arquiteturas x86, x86-64, IA-64, PA-RISC; PowerPC, PowerPC 970, UltraSparc, MIPS, DEC Alpha, System Z/s390, PS3 Microprocessador Cell, ARM e SuperH. O suporte oficial para hardware Sparc 32bits foi abandonado. O Gentoo foi a primeira distribuição a oferecer um ambiente de computação Linux 64 bits totalmente funcional (Espaço de usuário e núcleo).$^[$
Há também um Projeto "Gentoo para Mac OS X" que permite que usuários do Mac OS X usem o Portage do Gentoo para instalar pacotes, similar ao modo disponibilizado pelo Fink. Embora ainda seja um trabalho em progresso, o projeto pode coexistir com o Fink porque utiliza o mesmo ambiente que o Mac OS X, ao invés de criar um novo.
Portabilidade com relação a outros sistemas operacionais, como derivados BSD, está sob desenvolvimento ativo pelo Projeto Gentoo/ALT. O Projeto Gentoo/FreeBSD já possui um lançamento funcional, enquanto que Gentoo/NetBSD, Gentoo/OpenBSD e Gentoo/DragonFly estão sendo desenvolvidos. Há também um projeto para fazer o Portage funcionar no GNU Hurd, apesar do próprio GNU Hurd estar sob desenvolvimento, e no OpenSolaris.

## Portage

Portage é o sistema de gerenciamento de pacotes do Gentoo. Ele é similar ao ports do BSD: o design original foi baseado no ports do FreeBSD. Em contraste, a árvore do Portage não contém diretórios com makefiles, mas com as chamadas ebuilds, scripts bash que descrevem funções separadas para baixar, configurar, compilar, instalar e remover um pacote, além de funções adicionas que podem ser utilizadas no ambiente operacional para um pacote.
A principal ferramenta de gerenciamento de pacotes do Portage é a emerge. Trazida junto com outros scripts úteis, a ferramenta emerge é escrita em Python e pode ser usada por usuários privilegiados para inspecionar e alterar facilmente o conjunto de pacotes no Gentoo. O emerge pode ser utilizado para operar de modo similar ao modo como outras coleções do ports funcionam, ao entrar em um diretório da árvore e utilizar o emerge (ao invés do make) para realizar operações relacionadas ao gerenciamento de pacotes. O portage lê configurações no arquivo /etc/make.conf, mantendo a sua similaridade com o ports, e pode ser usado, por exemplo, para determinar onde a(s) árvore(s) do Portage são mantidas.
Gerenciadores de pacotes alternativos como o Paludis e o pkgcore estão sob intenso desenvolvimento$^[$. Ambos pretendem ser utilizados em conjunto com ou como alternativa ao conjunto oficial de ferramentas Portage, para desenvolvimento e praticidade. Como ambos são projetos competidores que pretendem substituir ferramentas oficiais, um esforço foi feito para tentar padronizar a Application programming interface das ebuilds para todos os gerenciadores de pacote, em um projeto chamado Especificação do Gerenciamento de Pacotes ou PMS (Package Manager Specification)

## Sistema Init

O sistema init do Gentoo é outra característica importante. Ele é similar ao init do System V que a maioria das distribuições de Linux utilizam, mas usa scripts baseadas em dependência e os run levels nomeados ao invés dos numerados. Ele também inclui um comando chamado rc-update que gerencia os run levels.
As Scritps de Inicialização do Gentoo utilizam o interpretador shell runscript, ao invés de uma shell mais tradicional.
Originalmente, o sistema rc do Gentoo foi compilado no baselayout 1 e escrito inteiramente em bash. Isto trouxe severas limitações, por exemplo, certas chamadas de sistema precisavam ser acessadas durante o boot e isto exigia que callouts baseadas em C fossem adicionadas. Essas callouts eram linkadas estaticamente, fazendo com que o sistema rc inchasse ao longo do tempo.
Além do mais, conforme o Gentoo se expandia para outras plataformas como o Gentoo/FreeBSD e Gentoo Embedded, ficou difícil, e muitas vezes impossível depender de um sistema rc baseado em bash. Isto levou ao desenvolvimento do baselayout 2, escrito em C, que precisa somente de uma shell compatível com POSIX. Durante o desenvolvimento do baselayout 2, foi determinado que seria melhor se o baselayout apenas providenciasse os arquivos base e o layout do systema de arquivos para o Gentoo e que o sistema rc fosse colocado em seu próprio pacote - OpenRC.
O OpenRC é desenvolvido primariamente por Roy Marples e suporta o Gentoo e todas as suas variantes (Gentoo/FreeBSD, Gentoo Embedded, Gentoo Vserver, etc) e outras plataformas como FreeBSD e NetBSD.

## Instalação

O Gentoo pode ser instalado de várias formas. A mais comum é utilizar o minimal cd do Gentoo com uma tarball do stage 3, que é inclusivamente o método recomendado para utilizadores finais. Como muitas distribuições Linux, ele também pode ser instalado pela maioria dos Live Cds e instalações existentes do Linux.
A instalação do Gentoo pode ser completada seguindo o Gentoo Handbook. Além disso, vários outros métodos de instalação estão listados no Alternative Installation Method HOWTO; a maioria dos quais está focada em usuários experientes ou usuários incapazes de fazer o processo de boot utilizando o Live Cd do Gentoo.
Na versão 2006.0, a Fundação Gentoo lançou um instalador baseado em GTK+ para simplificar drasticamente o processo de instalação do Gentoo a partir do zero, usuários mais avançados também foram capazes de perceber que o novo instalador trazia de volta a instalação usando o stage 1 (veja abaixo) como um método de instalação comum. No entanto, o projeto não recebeu apoio o suficiente para seu desenvolvimento, e não é mais suportado desde a versão 2008.0.
Diferentemente da maioria das distribuições GNU/Linux, um passo inicial e mandatório durante o processo de instalação é a compilação do seu próprio núcleo/kernel. Considerada amplamente como uma tarefa complexa, o Gentoo provê documentação e ferramentas como o Genkernel para simplificar o processo e torná-lo simples para usuários neófitos.

### Catalyst

A partir da versão 2004.0, Gentoo trouxe uma ferramenta chamada Catalyst, que é usada para compilar todos os lançamentos do Gentoo e pode ser usado para criar uma mídia customizado de instalação.

### Stages

Tradicionalmente uma instalação pode ser iniciada a partir de um dos três stages (estágios) básicos:
* Stage1: O sistema deve passar pelo processo de bootstrapping e o sistema base deve ser compilado.
* Stage2: O sistema já passou pelo processo de bootstrapping, mas o sistema base deve ser compilado.
* Stage3: O sistema ja passou pelo processo de bootstrapping e o sistema base já foi compilado.
Desde Novembro de 2005, apenas instalações no stage3 são oficialmente suportadas. Entretanto, tarballs para o stage1 e stage2 ainda são distribuídas, mas as instruções para instalar a partir deles foram removidas do handbook e colocadas na FAQ do Gentoo.

### Live USB

Um Live USB do Gentoo Linux pode ser criado manualmente ou com o UNetbootin.

## Sistema de Versões

Uma vez instalado, o Gentoo se torna "sem versão"; isto é, uma vez feito emerge update, o sistema está na última versão, com os pacotes mais atualizados disponíveis, mas sujeitos a qualquer restrições especificadas pelo usuário ao Portage. Por exemplo, se um sistema, foi instalado por um CD da versão 2005.0, então quando a versão 2005.1 for lançada, um emerge update do sistema atualiza o sistema Gentoo instalado da forma que deve resultar uma instalação limpa baseada na versão 2005.1 do mesmo sistema.
Em 22 de setembro de 2008, foi anunciado que a versão 2008.1 havia sido cancelada e que um novo modelo de lançamentos estava a ser considerado. Este novo modelo de lançamentos resultou em compilações automáticas (stage 3 e minimal cd), ainda que Live CD e DVD tenham mantido o seu ciclo anual de lançamentos.$^[$

## Vantagens
### Dependências leves

    Já que os pacotes são compilados pelo código-fonte, dependências entre os pacotes são mais flexíveis do que as de distribuições binárias, e podem ser explicitamente ativadas ou desativadas em muitos dos casos. Distribuições binárias tipicamente oferecem flexibilidade similar ao fornecer várias versões do mesmo pacote com apelidos diferentes, ou dividindo pacotes em componentes mais modulares quando possível. Já que o número de configurações possíveis se torna combinatória conforme o número de opções no momento de compilação aumenta, não é viável manter binários para todas as possíveis combinações. Por isso o Gentoo é capaz de oferecer uma variedade muito maior de opções de pacotes no momento da compilação, onde outras distribuições famosas não são.

### Pacotes Mais Atuais

    Ao sincronizar regularmente a sua árvore do portage, usuários Gentoo são capazes de usar a versão mais recente dos pacotes disponíveis, ao invés de ficarem fixos a uma data de lançamento em particular. Geralmente isso resulta em versões mais novas de software disponíveis no gerenciador de pacotes do que as disponibilizadas em outras distribuições Linux em qualquer momento específico, particularmente aquelas que são presas a um determinado lançamento, apenas com atualizações de segurança. Isto também pode ser considerado um inconveniente; ao utilizar um sistema Gentoo, não há garantias com relação a compatibilidade com versões anteriores na atualização pacotes, já distribuições que fazem apenas um combo reduzido de lançamentos para os pacotes disponíveis são capazes de gerenciar melhor a compatibilidade entre cada lançamento. O Gentoo Linux dá um passo além, oferecendo aos próprios desenvolvedores a opção de utilizar um overlay, que é nome dado a árvores secundárias, mas relativas à árvore principal do Portage. Isso permite que os usuários testem novas funções antes mesmo de serem lançadas, ou seja, no exato momento em que estão sendo feitas. Overlays são uma excelente maneira de testar a estabilidade e o progresso de determinados projetos, e muito comuns no Gentoo, oferecendo um controle privilegiado sobre a própria distribuição, sobre quais e quando pacotes podem ou não ser disponibilizados sob a premissa de serem estáveis.

### Clareza e Flexibilidade

    O Sistema Portage mostra, comparado com outras distribuições Linux, muito do que eles está fazendo. Para muitos passos de instalação, os comandos executados são mostrados, enquanto muitas distribuições Linux apenas descrevem o que elas estão tentando conseguir. Fato relacionado é o fato de qualquer usuário pode modificar o comportamento do sistema por inteiro de forma relativamente simples, já que grande parte dos programas no gerenciamento de pacotes são scripts. Devido tudo isso, o Gentoo pode ser útil para desenvolvedores de código, por que eles podem fazer uma instalação completa com o código-fonte nos seus servidores (por exemplo servidores de revisão) usando um simples comando.

### Construa o sistema dos seus sonhos

    A estrutura atual do Gentoo é basicamente modular, constituída de muitos meta-dados, tornando extremamente fácil escolher entre uma enorme variedade de opções, entre softwares e suas configurações. Essa modulização usa entre outros conceitos, o sistema de overlays do Gentoo, criando árvores paralelas e interligadas à árvore central, com pacotes constituídos unicamente de meta-dados, capazes selecionar, compilar e configurar pacotes, utilizando determinadas opções, pré-definidas ou não. Essa estrutura possui inúmeras vantagens, por exemplo, uma vez que os projetos são autônomos, eles ficam responsáveis pelo seu próprio ambiente, precisam se focar apenas em coisas menores, isto também acaba com a necessidade de possuir uma autoridade central e reguladora, limitando-a apenas à árvore principal, contendo o núcleo do sistema, e que determina quais projetos são oficialmente mantidos. Utilizando essa alta modulização, também torna-se mais simples executar forks, assim, se, por qualquer motivo alguém achar que o mozilla não está sendo mantido corretamente, ele pode criar a sua própria árvore e aplicar os patches e correções que acredita serem necessários, e, com o tempo, se este novo projeto realmente for melhor, ele irá lentamente substituir o primeiro, se tornando um projeto oficial.

## Desvantagens
### Instalação lenta de pacotes

    Compilar a partir do código-fonte significa que alguns pacotes são mais demorados para instalar. Demoras na instalação levam a uma instalação inicial mais longa se muitos pacotes são instalados. Em casos extremos como KDE e OpenOffice.org, a instalação de pacotes pode levar horas, ou até mesmo dias em hardware antigo. A compilação destes pacotes também vai exigir bastante espaço em disco, enquanto estiver sendo feita (4–6 GB para o OpenOffice.org – dê uma olhada na ebuild do app-office/openoffice para mais detalhes). No geral, usuários do Gentoo aceitam os custos do tempo de compilação para poderem usar suas próprias configurações na compilação. Agora, no entanto, binários pré-compilados para aplicações muito usadas como o KDE, OpenOffice.org, e Mozilla Firefox estão disponíveis, na forma como seus mantenedores upstream os disponibilizam, mas ao utilizar estes binários, você perde a chance de personalizar a escolha de características e otimizações para estes pacotes, mesmo embora o tempo de instalação dos pacotes seja reduzido para alguns minutos.
    Numa instalação padrão, as críticas acima são basicamente válidas$^[$. Porém, deve-se notar que há várias ferramentas/soluções para evitar parcialmente problemas de compilações longas. Elas podem ser usadas separadamente ou em qualquer combinação entre uma e outra:
    A primeira é alterar o número de instâncias paralelas do make que podem estar em execução. Iso pode ser especificado globalmente no arquivo /etc/make.conf ou utilizando a diretriz MAKEOPTS="-jX". Setando o valor de X = 1 + "# de núcleos de CPU", funcionando bem em muitas configurações. Note que esta configuração deve refletir o número de núcleos através de todas as máquinas ao utilizar o distcc (veja a terceira opção abaixo).$^[$
    A segunda, aplicável para configurações com >512-1024MB de RAM, é um script envoltório para o comando emerge chamado temerge que move o diretório temporário do emerge para(em inglês) no tmpfs (um RAM drive). Isto pode reduzir substancialmente o tempo de compilação para muitos pacotes, especialmente aqueles com atividade intensa de entrada/saída nos discos da área de compilação.
    A terceira, aplicável a usuários com múltiplas máquinas Linux, através do uso da ferramenta distcc, que é capaz de distribuir os tempos de compilação através de múltiplas máquinas. Isto é especialmente benéfico ao compilar sistemas a partir de imagens do "stage1" ou "stage2", quando a compilação de pacotes é exigida consideravelmente.$^[$
    A quarta é a opção buildpkg do portage(em inglês) para tarballs binários de pacotes compilados. Estes podem ser unidos numa máquina de arquitetura compatível e make.conf configurado de maneiras similares a de uma Distribuição Linux (binária). Isto também pode ser usado para a recuperação do sistema ou usado para compilar pacotes em uma máquina potente para depois instalar em outras menos potentes.

### A promessa de otimização

    O Gentoo foi muito criticado por sua suposta promessa de executar programas mais rapidamente; por design ele permite que usuários especifiquem suas flags de compilação. Alguns websites foram criados especialmente para satirizar esta aproximação falsa a computação. Na realidade, otimizações nem sempre beneficiam a execução de um programa a tal ponto que importe recompilar todo o sistema e seus softwares, ao invés de usar pacotes pré-compilados como outras distribuições Linux normalmente fazem. A verdade é que o gerenciamento de pacotes do Gentoo, no entanto, oferece mais opções, que permitem também a seus usuários instalar menos bibliotecas do que aqueles aplicativos normalmente instalariam, o que pode resultar em um ambiente operacional mais magro e limpo, capaz de executar aplicativos (ou pelo menos durante a inicialização) mais rapidamente do que qualquer sistema com bibliotecas e serviços desnecessários em execução em segundo plano.$^[$

### Requer uma boa conexão com a internet

    Isto está mais relacionado a downloads do que a compilar pacotes. Logo, qualquer outra distribuição Linux que possui atualizações na internet precisa baixar pacotes binários ao invés, e o tamanho dos pacotes binários e códigos geralmente é comparável. Atenuando este inconveniente há a possibilidade de fazer o download de arquivos necessários em segundo plano utilizando as flags -f ou --fetchonly do emerge, ou o download pode ser feito automaticamente, também em segundo plano, durante a compilação, ao ativar a característica parallel-fetch. Outro modo de se fazer isto é realizar os downloads em outra máquina utilizando o comando emerge e mover o código-fonte para o diretório /usr/portage/distfiles correspondente na máquina desejada; deste modo, se o usuário possuir uma velocidade de conexão baixa, ele pode realizar os downloads em outro lugar.$^[$

## Logotipo e mascotes

O logotipo Oficial do Gentoo é o G estilizado lembrando um magatama. Como mascote oficial, Knurt o pires voador. Mascotes não oficiais incluem Larry o vaca. Na verdade, como Larry apareceu no sítio oficial, ele pode ser ser considerado como semi-official.

## Distribuições baseadas no Gentoo

* Bintoo
* Calculate Linux
* Gentoox
* iloog
* Incognito
* Knopperdisk
* Kororaa
* Librix
* Navyn OS
* Pentoo
* Phaeronix
* Sabayon Linux
* Saxana
* SystemRescueCD
* Tin Hat Linux
* Tutoo-Linux
* Ututo
* VidaLinux
* Funtoo
* Chromium OS