Desenvolvimento do Kernel Linux (Abril 2008)
Publicado por Tiago Veloso e arquivado em Kernel Linux, Software LivrePor The Linux Foundation
Com Que Velocidade está Ocorrendo, Quem está Fazendo, o Que Eles têm Feito e Quem Financia
por Greg Kroah-Hartman, SUSE Labs / Novell Inc., gregkh [oba] novell.com
Jonathan Corbet, LWN.net, corbet [oba] lwn.net
Amanda McPherson, The Linux Foundation, amanda [oba] linux-foundation.org
tradução Tiago Veloso, UNIRIOTEC, tiago.veloso [oba] uniriotec.br
O kernel que forma o núcleo do sistema Linux é o resultado de um dos maiores projetos cooperativos já feitos. Com versões regulares, de 2 a 3 meses saem atualizações estáveis para os usuários Linux, cada uma com significantes novos recursos, suporte a novos dispositivos e aumento de desempenho. A taxa de mudança no kernel é alta e crescente, com quase 10.000 correções indo para as novas versões. Cada uma dessas versões contém o trabalho de aproximadamente 1.000 desenvolvedores representando mais de 100 corporações.
Desde 2005, mais de 3.700 desenvolvedores independentes de mais de 200 empresas diferentes contribuíram para o kernel. O kernel do Linux, assim, se tornou um recurso comum desenvolvido em massiva escala por empresas que são ferozes competidoras em outras áreas.
Introdução
O kernel Linux é o menor nível de software rodando em um sistema Linux. Ele é encarregado da administração do hardware, de rodar programas do usuário e de manter por completo a segurança e integridade de todo o sistema. Isso é o kernel, o qual, após ter sua versão inicial por Linus Torvalds em 1991, impulsionou o desenvolvimento do Linux por um todo. O kernel é uma parte relativamente pequena de software em um sistema Linux completo (muitos outros grandes componentes vem do projeto GNU, do projeto de área de trabalho GNOME e KDE, do projeto X.org e muitas outras fontes), mas ele é o núcleo que determina quão bem o sistema irá funcionar e é a peça que é verdadeiramente única para o Linux.
O kernel Linux é um interessante projeto para estudar por uma série de motivos. Ele é um dos maiores componentes individuais em quase todos os sistemas Linux. Ele também tem a característica de ser um dos maiores processos acelerados de desenvolvimento e envolve mais desenvolvedores que qualquer outro projeto de código aberto. Esse artigo mostra como esse processo funciona, focando nos últimos três anos de história do kernel, os quais são representados pela versão 2.6.11 até a 2.6.21.
Modelo de Desenvolvimento
O ciclo rápido de lançamentos foi escolhido como uma forma de trazer novos recursos aos usuários de uma forma estável com o mínimo de atraso possível. Como resultado, o novo código - recursos, drivers de dispositivos, etc. - é disponível em um kernel estável com poucos meses de sua conclusão, minimizando ou eliminando a necessidade dos distribuidores de criar patches para as versões estáveis. Então, os kernels lançados por distribuidores contém muito poucas modificações específicas da distribuição, rendendo alta estabilidade e poucas diferenças entre distribuições.

Figura 1 – Ciclo de Lançamento do Kernel Linux
A equipe do kernel lançou a versão 2.6.19 como uma versão estável. Então, os desenvolvedores começaram a trabalhar em novos recursos e a lançar versões release candidate como kernels em desenvolvimento para que as pessoas ajudassem a testar e depurar as mudanças. Após todos terem concordado que a versão em desenvolvimento estava suficientemente estável, ela foi lançada como o kernel 2.6.20.
Enquanto o desenvolvimento de novos recursos foi acontecendo, a 2.6.19.1, 2.6.19.2 e outras versões estáveis do kernel foram lançadas, contendo correções de bugs e atualizações de segurança.
Esse artigo foca exclusivamente nas principais versões 2.6.x, excluindo as atualizações estáveis. Essas atualizações são pequenas e, de qualquer forma, o design do processo de desenvolvimento requer que as correções aceitas para o “-stable” sejam também aceitas na próxima grande atualização.
Freqüência de Lançamento

Tabela 1 – Frequência de lançamento do Kernel
Constata-se que eles estavam muito corretos, com a média sendo de 2,7 meses entre os lançamentos.
Velocidade das Alterações

Figura 2 – Alterações por versão do Kernel
A disciplina força os desenvolvedores do kernel a dividir suas mudanças em pequenas porções lógicas; como resultado, cada mudança pode ser revista ampliando sua qualidade e exatidão. Outro resultado é que o número de mudanças individuais que vão em cada versão do kernel é muito grande, como pode ser visto na Figura 2.

Figura 3 – Alterações por hora por versão do Kernel
Então, da versão 2.6.11 a 2.6.24 do kernel (um total de 1140 dias), temos, na média, 2,83 patches aplicados na árvore do kernel por hora. E esses são somente os patches que foram aceitos. A habilidade de manter essa taxa de alterações por anos não encontra precedentes em qualquer outro projeto público de software.
Tamanho do Fonte do kernel
O kernel do Linux mantém-se crescendo em tamanho ao longo do tempo a medida que mais hardware é suportado e novos recursos são adicionados. Para os números a seguir, nós contabilizamos tudo lançado no pacote fonte do Linux como “código fonte”, mesmo uma pequena porcentagem do total sendo os scripts utilizados para configurar e contruir o kernel, assim com uma pequena quantia sendo documentação. Esses arquivos também são parte de um grande trabalho e, assim, merecem ser contabilizados.

Figura 4 – Tamanho por versão do Kernel
Além desses lançamentos, a equipe do kernel tem uma taxa de crescimento constante de 10% ao ano - um número muito impressionante dado o tamanho da árvore de código. Mas o kernel não está só crescendo. Com cada alteração que é feita na árvore fonte do kernel, linhas são adicionadas, modificadas e deletadas de forma a acompanhar as mudanças necessárias. Olhar para esses números, divididos por dias, mostra quão rapidamente a árvore fonte do kernel está sendo trabalhada ao longo do tempo. Isso pode ser visto na Figura 5.

Figura 5 – Taxa de alteração por versão do Kernel
Somando esses números chegamos a impressionantes 3.621 linhas adicionadas, 1.550 linhas removidas e 1.425 linhas alteradas todos os dias há dois anos e meio. Essa velocidade de alteração é maior que a de qualquer outro projeto público de software, de qualquer tamanho.
Quem está Fazendo o Trabalho

Tabela 2 – Número de desenvolvedores independentes e empregadores
De fato, a comunidade de desenvolvimento individual dobrou nos últimos três anos.

Tabela 3 – Colaboradores independentes do Kernel
Quem está Financiando o Trabalho
O kernel do Linux é um recurso utilizado por uma vasta variedade de empresas. Muitas delas nunca participaram do desenvolvimento do kernel; elas estão satisfeitas com o software como está e não sentem a necessidade de ajudar a trilhar seu desenvolvimento em nenhuma direção em particular. Mas, como pode ser visto na Tabela 4, um crescente número de empresas estão trabalhando voltadas para o aprimoramento do kernel.

Tabela 4 – Empresas trabalhando voltadas para o aprimoramento do Kernel
A seguir veremos com mais atenção as empresas que estão empregando desenvolvedores do kernel. Para cada desenvolvedor, a filiação corporativa é obtida atráves de um ou mais dos seguintes: (1) o uso de endereços de email da empresa, (2) informações do patrocinador inclusas no código que ele submeter, ou (3) simplesmente perguntando aos desenvolvedores diretamente. Os números apresentados são necessariamente aproximados; desenvolvedores ocasionalmente mudam de empresas, além de que eles podem fazer trabalho pessoal fora do escritório. Mas eles serão precisos o suficiente para gerar várias conclusões.
Existe uma série de desenvolvedores para quem não podemos determinar uma filiação corporativa; eles estão agrupados sobre o “Unknown” na Tabela 4. Com poucas exceções, todas as pessoas nessa categoria contribuíram com 10 ou menos alterações no kernel durante os últimos três anos, ainda que o grande número desses desenvolvedores ocasionem numa contribuição total bastante elevada.
A categoria “None”, ao contrário, repesenta os desenvolvedores que são conhecidos por fazerem o trabalho por si próprio, sem contribuição financeira proveniente de nenhuma empresa.
Os 10 maiores colaboradores, incluindo os grupos “Unknown” e “None”, somam mais de 75% do total de colaborações para o kernel. Vale notar que, mesmo se assumirmos que todos os colaboradores “Unknown” estão trabalhando em seu próprio tempo, mais de 70% de todo o desenvolvimento do kernel é comprovadamente feito por desenvolvedores que estão sendo pagos pelo seu trabalho.
O que nós vemos aqui é que um pequeno número de empresas é responsável por uma larga porção do total de alterações do kernel. Mas há uma longa lista de empresas que fizeram alterações significativas. Não devem haver outros exemplos como este de um vasto recurso comum sendo financiado por um tão vasto quanto grupo de atores independentes numa forma colaborativa.
Por que Empresas Financiam o Desenvolvimento do kernel
A lista de empresas participando no desenvolvimento do kernel do Linux inclui muitas das empresas tecnológicas de maior sucesso na existência. Nenhuma dessas empresas está financiando o desenvolvimento do Linux como um ato de caridade; em cada caso, essas empresas encontram em aprimorar o kernel um auxílio para serem mais competitivas em seus mercados. Alguns exemplos:
- Empresas como IBM, Intel, SGI, MIPS, Freescale, HP etc. estão todas trabalhando para assegurar que o Linux vá rodar bem em seu hardware. Isso faz com que suas ofertas sejam mais atrativas para usuários Linux, resultando em um aumento das vendas.
- Distribuidores como Red Hat, Novell e MontaVista têm um claro interesse de fazer do Linux o mais competente que ele puder ser. Apesar dessas empresas competirem fortemente umas contras as outras por consumidores, todas elas trabalham juntas para fazer o kernel do Linux melhor.
- Empresas como Sony, Nokia e Samsung embarcam Linux como componente de seus produtos como câmeras de vídeo, televisões e telefones celulares. Trabalhar com o processo de desenvolvimento ajuda essas empresas a assegurar que o Linux continuará a ser uma base sólida para seus produtos no futuro.
- Empresas que não estão no negócio de tecnologia da informação podem ainda assim encontrar benefícios em trabalhar com o Linux. O kernel 2.6.25 incluirá a implementação do protocolo de rede PF_CAN que foi construído pela Volkswagen. PF_CAN permite comunicações seguras entre componentes num ambiente suscetível a interferências - igual ao encontrado em automóveis. Linux trouxe a Volkswagen uma plataforma na qual ela pôde contruir seu código de rede; a empresa então viu que valia à pena contribuir com o código para que ele pudesse ser mantido com o restante do kernel. http://lwn.net/Articles/253425/ (em inglês) para mais informações sobre esse trabalho.
Existem inúmeras boas razões para empresas financiarem o kernel do Linux. Como resultado, Linux tem uma ampla base de suporte que não depende de nenhuma empresa isolada. Mesmo que o maior colaborador desfaça sua participação amanhã, o kernel do Linux irá manter sua base sólida com uma comunidade de desenvolvimento vasta e ativa.
Conclusão
O kernel do Linux é um dos maiores e mais bem sucedidos projetos de código aberto que já existiu. A imensa velocidade de alterações e o número de colaboradores independentes mostra que há uma comunidade vibrante e ativa, constantemente causando a evolução do kernel em resposta de uma série de diferentes ambientes em que ele é usado. Existem empresas suficientes participando para financiar o volume de esforço pelo desenvolvimento, mesmo que muitas empresas que poderiam beneficiar-se contribuindo com o Linux tem, até aqui, escolhido não fazer. Com a atual expansão do Linux no servidor, no desktop e nos mercados embarcados, é razoável esperar que esse número de empresas colaboradoras - e de desenvolvedores independentes - continue a crescer.
Agradecimentos
Os autores gostariam de agradecer as centenas de colaboradores independentes do kernel; sem eles, artigos como este não seriam interessantes para ninguém.
Recursos
Gostaríamos também de atestar que a ferramenta gitdm do Jonathan Corbet’s foi usada para criar uma série dessas diferentes estatísticas. As informações para esse artigo foram retiradas diretamente das versões do kernel do Linux no site kernel.org e do repositório git do kernel. Alguns dos logs do repositório git foram arrumados à mão devido a endereços de email trocados ao longo do tempo e pequenos erros em informações de autoria. Uma planilha foi usada para computar uma série de estatísticas. Todos os logs, scripts e planilhas podem ser encontrados no http://www.kernel.org/pub/linux/kernel/people/gregkh/kernel_history (em inglês).
* Baseado em um artigo originalmente publicado no 2006 Linux Symposium
Veja a publicação original (em inglês) em
Linux kernel Development (April 2008)
Posts (RSS)