O kernel do Linux tem quase 25 anos . Se eu tivesse que apresentar a versão curta do histórico de desenvolvimento do kernel Linux desde 1991 (sua data de criação) e, em parte, desde 1994 (1.0.0) até hoje, não poderia. O melhor que eu poderia fazer antes de ler todas as notas de versão do kernel seria fornecer o seguinte, quais são os recursos gerais de versão adicionados ao kernel até a versão 3.11 (notas e links omitidos):
- A versão 1.0 do kernel do Linux foi lançada em 14 de março de 1994. Esta versão do kernel do Linux suportava apenas sistemas de computador baseados em i386 de processador único. A portabilidade se tornou uma preocupação e, portanto, a versão 1.2 (lançada em 7 de março de 1995) ganhou suporte para sistemas de computadores usando processadores baseados nas arquiteturas Alpha, SPARC e MIPS.
- A versão 2.0 foi lançada em 9 de junho de 1996. Havia 41 lançamentos na série. O principal recurso do 2.0 era o suporte SMP (ou seja, suporte a vários processadores em um único sistema) e suporte a mais tipos de processadores.
- A versão 2.2 (lançada em 26 de janeiro de 1999) removeu o spinlock global e forneceu suporte aprimorado para SMP e adicionou suporte para as arquiteturas m68k e PowerPC, bem como para novos sistemas de arquivos (incluindo suporte somente leitura para NTFS da Microsoft).
- A versão 2.4.0 , lançada em 4 de janeiro de 2001, continha suporte para ISA Plug and Play, USB e PC Cards. Também incluiu suporte para o processador PA-RISC da Hewlett-Packard. O desenvolvimento do 2.4.x mudou um pouco, pois mais recursos foram disponibilizados ao longo da série, incluindo: suporte para Bluetooth, LVM (Logical Volume Manager) versão 1, suporte a RAID, sistemas de arquivos InterMezzo e ext3.
- A versão 2.6.0 foi lançada em 18 de dezembro de 2003. O desenvolvimento do 2.6.x mudou ainda mais para incluir novos recursos ao longo da duração da série. Entre as mudanças que foram feitas na série 2.6, estão: integração do µClinux às fontes principais do kernel, suporte ao PAE, suporte para várias novas linhas de CPUs, integração do ALSA às fontes principais do kernel, suporte para até 32 usuários ( de 2 16 ), suporte para até 2 29 IDs de processo (somente 64 bits, arcos de 32 bits ainda limitados a 2 15), aumentou substancialmente o número de tipos de dispositivos e o número de dispositivos de cada tipo, suporte aprimorado de 64 bits, suporte para sistemas de arquivos que suportam tamanhos de arquivo de até 16 terabytes, preempção no kernel, suporte para a biblioteca de threads POSIX nativa (NPTL), integração Linux no modo de usuário nas fontes principais do kernel, integração SELinux nas fontes principais do kernel, suporte InfiniBand e muito mais. Também são notáveis a adição de vários sistemas de arquivos nas versões 2.6.x: FUSE, JFS, XFS, ext4 e muito mais. Detalhes sobre o histórico da série 2.6 do kernel podem ser encontrados nos arquivos ChangeLog na área de liberação do código fonte da série 2.6 do kernel.org.
- A versão 3.0 foi lançada em 22 de julho de 2011. Torvalds anunciou que a grande mudança foi: "NADA. Absolutamente nada". Em 30 de maio de 2011, Torvalds anunciou: "... vamos ter certeza de que realmente faremos o próximo lançamento não apenas um número totalmente novo, mas também um bom kernel". Após o esperado processo de desenvolvimento de 6 a 7 semanas, ele seria lançado próximo ao 20º aniversário do Linux.
- Em dezembro de 2012, Torvalds decidiu reduzir a complexidade do kernel, removendo o suporte aos processadores i386, tornando a série 3.7 do kernel a última ainda suportando o processador original. A mesma série de suporte unificado para o processador ARM.
- A versão 3.11 , lançada em 2 de setembro de 2013, adiciona muitos novos recursos, como o novo sinalizador O_TMPFILE para open (2) para reduzir vulnerabilidades temporárias de arquivos, gerenciamento de energia dinâmico experimental AMD Radeon, pesquisa de rede de baixa latência e zswap (cache de troca compactado).
Eu também poderia acrescentar que há muitos anos a Linux Foundation tem relatado sobre o desenvolvimento do kernel. Estes são os Destaques do Desenvolvimento do Kernel 2012-2013:
- Quase 92.000 conjuntos de alterações foram mesclados de 3.738 desenvolvedores individuais, representando 536 empresas (que conhecemos).
- Uma vasta gama de novos recursos importantes foi mesclada na linha principal. Isso inclui operação sem ticks completa, namespaces de usuário, virtualização KVM e Xen para ARM, rastreamento de carga por entidade no planejador, ponto de verificação / reinicialização do espaço do usuário, suporte à arquitetura ARM de 64 bits, suporte a arquitetura ARM de 64 bits, sistema de arquivos orientado a flash F2FS, muitas melhorias de rede destinadas nos problemas de latência e bufferbloat, dois subsistemas independentes que fornecem armazenamento em cache rápido para dispositivos de armazenamento em bloco e muito mais.
- A disputa de longa data sobre os recursos do kernel específicos do Android desapareceu completamente em segundo plano. O discutido recurso "wakelocks" foi silenciosamente substituído por uma solução principal diferente, usada nos dispositivos Android mais recentes.
- O uso de ferramentas automatizadas para encontrar bugs nos kernels de desenvolvimento aumentou significativamente durante esse período. Ferramentas como o testador de fuzz "trinity" e o sistema de compilação e inicialização de dia zero estão encontrando um grande número de bugs nos kernels de pré-lançamento, encurtando o ciclo de desenvolvimento e permitindo que a comunidade forneça lançamentos de qualidade superior.
- As contribuições das indústrias móveis e incorporadas continuam a aumentar. Linaro, Samsung e TI, por exemplo, contribuíram em conjunto com 4,4% das alterações na versão anterior deste artigo; para o período até 3,10, eles contribuíram com quase 11% de todas as alterações.
- O projeto do kernel participou do Programa de Extensão para Mulheres pela primeira vez, levando a 41 inscrições para 7 vagas disponíveis. Durante o processo de aplicação, 374 patches foram enviados ao kernel e mais de 1/3 desses patches foram aceitos na versão 3.10 do kernel. O processo interno está em andamento, mas os resultados não começarão a aparecer até as futuras versões do kernel.
Além disso, quantificar o que está acontecendo com o kernel não é muito difícil, pois temos métricas além das confirmações individuais . Por exemplo, sabemos que o kernel 1.0.0 em 1994 tinha 176 250 linhas de código; e sabemos que um kernel contemporâneo como o 3.10 possui 15 803 499 linhas de código. Consideravelmente mais. A frequência de liberação do kernel aumentou (63 dias para a 3.10), bem como a taxa de alteração (9 confirmações por hora ou mais, enquanto falamos). Para citar a Linux Foundation:
A capacidade de sustentar essa taxa de mudança por anos é sem precedentes em qualquer projeto de software público anterior.
Mas tudo isso traz pouca percepção na minha opinião. Portanto, eu perguntaria:
- A evolução deste quarto de século pode ser resumidamente qualificada além da adição linear de todos os recursos listados que compõem esse kernel ao longo do tempo?
- E isso traz alguma ideia sobre o que é o kernel do Linux ou para onde está indo? Após 25 anos de desenvolvimento, algumas conclusões certamente podem ser tiradas sobre isso?
À procura de uma resposta abstrata em termos leigos, que diz tudo sem recorrer a dizer tudo.