# Linux (núcleo)

O Kernel Linux (Linux kernel em inglês) é um núcleo monolítico de código aberto para sistemas operacionais tipo UNIX. Desenvolvidas para ambos os sistemas computacionais, seja computadores pessoais ou servidores, normalmente na forma de distribuições Linux, e embarcados em diversos dispositivos como roteadores, pontos de acesso sem fio, PABXs, receptores de televisão, Smart TVs, DVRs, e dispositivos de armazenamento em rede. Os sistemas operacionais Android para Tablets, Smartphones, e Smartwatches utilizam serviços providos pelo núcleo Linux para implementar as suas funcionalidades. Enquanto a adoção em computadores de mesa seja considerada baixa, sistemas baseados em Linux dominam praticamente todos os outros segmentos da computação: dos pequenos dispositivos móveis aos robustos Mainframes. Segundo o ranking dos 500 supercomputadores mais poderosos do mundo, de novembro de 2017, todos da lista dos 500 executam Linux.
O núcleo (kernel) Linux foi concebido e criado em 1991 por Linus Torvalds para o seu computador pessoal, sem qualquer intenção multiplataforma, mas desde então tem se expandido, suportando um grande número de arquiteturas de computadores, muito além dos outros sistemas operacionais ou kernels. O Linux rapidamente atraiu desenvolvedores e usuários que os adotaram como núcleo para outros projetos de software livre, nomeadamente o sistema operacional GNU. O núcleo Linux recebeu contribuições de aproximadamente 15 600 programadores de mais de 1400 companhias, incluindo algumas das maiores vendedoras mundiais de software e hardware.
Como um núcleo não trabalha sozinho, o projeto "GNU" ajudou Linus Torvalds, criando assim o GNU/Linux.
A interface de programação de aplicações do núcleo Linux (Linux kernel API, em inglês), na qual programas interagem com o kernel/núcleo, é projetada para ser extremamente estável, e jamais quebrar o espaço de usuário (os programas, especialmente aqueles com interface gráfica, podem ser igualmente dependentes a outras APIs). Como parte das funcionalidades do núcleo, os controladores de dispositivos (drivers) gerem o hardware; especialmente criados para serem também muito estáveis. Já a interface entre o núcleo e os módulos carregáveis, diferente de outros núcleos e sistemas operacionais, no entanto, não requerem tal estabilidade por design/projeto.
Desenvolvido por contribuições de todo o mundo, sob licença GNU General Public License versão 2 (GPLv2), e discussões diárias sobre seu desenvolvimento na LKML (lista de discussão do kernel), o núcleo Linux é um proeminente exemplo de software livre e de código aberto, com versões mantidas por mais de seis anos, e diversas imagens de firmware distribuídas sob licenças não livres até a versão 4.13.
O Linux foi concebido pelo estudante do Departamento de Ciência da Computação da Universidade de Helsinki na Finlândia, Linus Torvalds com ajuda de vários programadores voluntários e por meio de um grupo de discussão da Usenet em 1991.

## História

Em março de 1991, Linus Torvalds, um estudante com 21 anos de idade na Universidade de Helsínquia, Finlândia começava a trabalhar em algumas ideias simples para o desenvolvimento do núcleo de um sistema operacional (SO), como um projeto particular, inspirado pelo seu interesse no sistema operacional Minix, um pequeno sistema UNIX desenvolvido pelo professor Andrew S. Tanenbaum com fins educacionais.
Os passos de desenvolvimento deste primeiro núcleo para um sistema operacional proposto por Linus Torvalds podem ser acompanhados pela lista de discussão comp.os.minix, cujas mensagens podem ser vistas em groups.google.com/g/comp.os.minix. Torvalds começou com um alternador de contexto na linguagem de montagem do Intel 80386 e um controlador de terminal. Em 03 de junho de 1991 Torvalds tentou obter a especificação POSIX, então em 26 de agosto de 1991, Torvalds postou a seguinte mensagem para comp.os.minix, um grupo de notícias na Usenet:
Depois da mensagem anterior a comunidade MINIX contribuiu com códigos e ideias para o Linux. Na verdade muitas pessoas contribuíram com o desenvolvimento de códigos para o projeto.
É valido lembrar que durante a idealização deste sistema operacional, proposto por Linus Torvalds, o mundo basicamente tinha como sistemas operacionais:
* Microsoft Windows 3.0;
* System 7 (Mac OS 7);
* AIX 3.0;
* 4.3BSD;
* MINIX 1.5;
* GNU Hurd.
Na época, o Projeto GNU tinha criado muitos dos componentes exigidos para um sistema operacional livre, mas o seu próprio núcleo estava incompleto e indisponível. O sistema operacional BSD tinha problemas legais. Então, devido a isto, apesar da funcionalidade reduzida das primeiras versões, o Linux acumulou desenvolvedores e usuários ou utilizadores rapidamente.
Na data de setembro de 1991, a versão 0.01 do Linux foi lançada e enviada para o servidor FTP (ftp.funet.fi) da Universidade de Helsínquia de Tecnologia (em inglês: HUT), possuía 10 239 linhas de código. Em setembro de 1991, a versão 0.02 do Linux foi lançada.
Em dezembro de 1991, o Linux 0.11 foi lançado. Esta versão foi a primeira a ser auto-hospedada - O Linux 0.11 podia ser compilado por um computador executando Linux 0.11. Quando lançada a versão 0.12 em fevereiro de 1992, Torvalds adotou a licença GPL - GNU General Public License no lugar da licença anterior, escrita por ele mesmo e que não permitia redistribuição comercial.
Um grupo de notícias conhecido como alt.os.linux foi criado e em 19 de janeiro de 1992, a primeira mensagem do alt.os.linux foi enviada. Em 31 de Março de 1992 o alt.os.linux passou a se chamar comp.os.linux.
O Sistema de Janelas X, que é um ambiente gráfico, logo foi portado para o Linux. Em março de 1992, a versão 0.95 do Linux foi a primeira a ser capaz de executar o sistema de janelas X. Este longo salto de número de versão, da 0.1x para 0.9x, foi devido a impressão de que uma versão 1.0, sem que nenhum recurso faltasse era iminente. No entanto, isto acabou provando-se demasiado otimista e de 1993 até o começo de 1994, apareceram 15 versões em desenvolvimento da versão 0.99 do núcleo Linux.
Finalmente em 14 de março de 1994 é lançado o núcleo 1.0.0 do Linux, com 176 250 linhas de código. Em março de 1995, aparece o Linux 1.2.0 com 310 950 linhas de código.
A versão 2 do Linux, lançada em 09 de junho de 1996, foi sucedida por versões mais importante sob o cabeçalho da versão 2:
* 25 de janeiro de 1999 - Linux 2.2.0 é lançado (1 800 847 linhas de código);
* 18 de dezembro de 1999 - Patches do mainframe da IBM para o 2.2.13 são publicados, permitindo que o Linux seja usado em máquinas de classe empresarial;
* 04 de janeiro de 2001 - Linux 2.4.0 é lançado (3 377 902 linhas de código);
* 17 de dezembro de 2003 - Linux 2.6.0 é lançado (5 929 913 linhas de código);
* 20 de outubro de 2010 - Linux 2.6.36 é lançado (13 419 556 linhas de código).
A versão 3 do Linux foi lançada em 22 de julho de 2011 em comemoração aos 20 anos do Linux, este núcleo foi lançado com 14.647.033 linhas de código. O núcleo Linux a princípio só mudava o primeiro número da versão em caso de mudanças drásticas, mas para comemorar os 20 anos do Linux e reduzir os números de controles de versão, Torvalds resolver mudar para a versão 3 mesmo sem mudanças significativas no núcleo Linux. Em outubro de 2011 é lançada a versão 3.1 do núcleo Linux e em 05 de janeiro de 2012 é apresentada ao mundo a versão 3.2 do Linux com 14 998 737 linhas de código.

## Aspectos Legais
### Termos de Licenciamento

Inicialmente, Linus Torvalds distribuiu o Linux sob uma licença que proibia qualquer aproveitamento comercial. Entretanto, a partir da versão 0.12 do Linux, foi adotada uma licença GPL GNU General Public License, que permite a distribuição e venda de versões possivelmente alteradas ou não do Linux. Uma restrição da licença GPL é que esta exige que todas as cópias sejam distribuídas sob a mesma licença, em companhia do código fonte completo correspondente.
Torvalds descreveu o licenciamento sob a GPL como "a melhor coisa que eu já fiz".

#### Licenciamento GPL

Atualmente, o Linux está licenciado sob a versão 2 da GPL e diferentemente de muitos outros softwares, sob licença GPL, o Linux não tem nenhuma opção para utilizar versões mais recentes da GPL (diferente de muitos outros softwares GPLs). Existem muitas controvérsias sobre quão fácil é modificar a licença do Linux da GPLv2 para outra versão de GPL, tal como a GPL versão 3 e se isto é realmente desejável para o Linux. O próprio Linus Torvalds indicou, até o lançamento da versão 2.4.0, que o seu código está somente sob a versão 2 da GPL. Os termos GPL afirmam que se nenhuma versão é especificada, então qualquer versão pode ser utilizada. Segundo Alan Cox, pouquíssimos colaboradores Linux especificaram uma versão em particular da GPL. Em julho de 2006, uma pesquisa com os 29 principais desenvolvedores do Linux, indicou que 28 preferiam a GPLv2 ao então atual rascunho da GPLv3. Torvalds comentou, "Eu acho que muitos forasteiros... acreditaram que eu era o único estranho no ninho, porque eu não me mostrava publicamente um fã da GPLv3". Desta forma, o núcleo Linux pode ser visto como sendo licenciado quase que exclusivamente pela GPLv2, já que Linus Torvalds e grande parte dos desenvolvedores utilizam esta licença e não existem perspectivas destes utilizarem a versão 3.

### Módulos carregáveis do núcleo e firmware

É debatido se módulos carregáveis do núcleo (em inglês: LKMs) devem ser considerados Copyleft sob a lei de direito autoral dos Estados Unidos da América (EUA), pois desta maneira os módulos devem se enquadrar nos termos da GPL. Ou seja, se um módulo do núcleo Linux também deve assumir, por padrão, a mesma licença GPL utilizada pelo núcleo Linux. Torvalds acredita que módulos que utilizem um subconjunto limitado e público das interfaces do núcleo Linux podem, algumas vezes, não ser trabalhos derivados, permitindo assim que alguns drivers binários e módulos não herdem a licença GPL do Linux. Entretanto, muitos colaboradores do Linux discordam desta interpretação, até Torvalds concorda que muitos módulos são trabalhos derivados, ele próprio escreveu: "módulos do núcleo SÃO derivados 'por padrão'". Mas em contrapartida, Torvalds também já disse que: "uma área indefinida em particular é algo como um controlador que foi originalmente escrito para outro sistema operacional (isto certamente não é um trabalho derivado originalmente do Linux). [...] ISTO é uma área indefinida e esta é a área em que eu acredito que alguns módulos podem ser considerados como trabalhos não derivados, simplesmente por que eles não foram projetados para o Linux e não dependem de nenhum funcionamento específico dele." Controladores gráficos proprietários, em particular, são amplamente discutidos. Enfim, é provável que tais questões só possam ser resolvidas em um tribunal.
Um ponto de controvérsia sobre o licenciamento é o uso que o Linux faz de "borrões binários" de firmware para suportar dispositivos de hardware. Estes arquivos ou ficheiros são distribuídos sob grande variedade de licenças, muitas delas restritivas e seu código-fonte fundamental exato é desconhecido. Richard Stallman alega que estes "borrões" tornam o Linux parcialmente software de código fechado e que distribuir o Linux pode ser uma violação da GPL, que exige que "código-fonte completo correspondente" esteja disponível. Em resposta, a FSFLA iniciou um projeto chamado Linux-libre, para criar um núcleo completamente livre sem objetos proprietários, o que é usado por algumas distribuições completamente livres. Em 15 de dezembro de 2010, o projeto Debian anunciou que a próxima versão estável do Debian utilizaria um núcleo livre de códigos proprietários.

### Marca registrada

O Linux é uma marca registrada por Linus Torvalds nos Estados Unidos e em alguns outros países. Isto é resultado de um incidente no qual William Della Croce Jr, que não era envolvido no projeto Linux, registrou o nome Linux e depois pediu royalties pelo uso da marca Linux. Vários apoiadores do Linux integraram um conselho legal e entraram com uma ação contra Della Croce, que em 1998 concordou em repassar o registro da marca, para Linus Torvalds.

### Litigação do SCO

Para mais detalhes consulte Disputas SCO-Linux (em inglês).
Em março de 2003, o Grupo SCO (SCO) entrou com um processo contra a IBM reclamando que esta teria violado direitos autorais que o SCO disse possuir sobre o código fonte do Unix, ao contribuir com porções daquele código para o Linux. Além disso, o SCO enviou cartas para inúmeras companhias avisando que o seu uso do Linux sem uma licença do SCO poderia ser uma violação da lei de direitos autorais, e contou à imprensa que eles iriam processar usuários ou utilizadores individuais do Linux. A IBM então prometeu defender os consumidores Linux em seu nome. Esta controvérsia gerou processos pelo SCO contra Novell, DaimlerChrysler (parcialmente indeferido em julho de 2004), e AutoZone, e processos retaliativos pela Red Hat e outras contra o SCO.
No começo de 2007 o SCO preencheu os detalhes específicos do objeto infringido. Não obstante as afirmações anteriores que o SCO era dono por direito de 1 milhão de linhas de código, ele especificou 326 linhas de código, a maioria das quais era inelegível proteção de direitos autorais. Em setembro de 2007, o tribunal no caso Novell decidiu que o SCO não era dono dos direitos autorais do Unix para começo de conversa, embora a Corte de Apelações dos Estados Unidos para o Décimo Circuito tenha decidido em setembro de 2009 que a questão de quem era o dono propriamente dito dos direitos autorais ficava para o júri decidir. O caso foi decidido em 30 de março de 2010, em favor da Novell.

### Submissão do Hyper-V pela Microsoft

Em junho de 2009 a Microsoft "contribuiu" com 20 000 linhas de código para o Linux. A contribuição consistia de controladores (em inglês: drivers) do Hyper-V, que melhoravam a performance do Linux virtualizado no Windows 2008 Hyper-V ou Windows Server 2008 R2 Hyper-V. A Microsoft teve que licenciar seus controladores Hyper-V do Linux sob a GPL, quando o engenheiro chefe da Vyatta e o contribuidor Stephen Hemminger do Linux descobriram que a Microsoft havia incorporado controladores de rede do Hyper-V com componentes de código livre e ligado estaticamente a binários de código fechado (com copyright), o que é uma contravenção à licença GPL. Desta forma, a Microsoft contribuiu com os controladores para corrigir a violação da licença, embora a companhia tenha tentado descrevê-lo como um ato caridoso para evitar uma ação legal contra si.

## Características técnicas

O Linux suporta multitarefa de antecipação (em ambos modo usuário e modo núcleo), memória virtual, bibliotecas compartilhadas, carregamento por demanda, executáveis de cópia-ao-escrever compartilhados, gerenciamento de memória, o conjunto de protocolos de Internet, e execução em linhas.

### Arquitetura

O Linux é um núcleo monolítico. Os controladores de dispositivos e as extensões de núcleo são executadas no espaço de núcleo (anel 0 em muitas arquiteturas de CPU), com acesso completo ao hardware, embora algumas exceções sejam executadas no espaço de usuário. O sistema gráfico, que é o ambiente gráfico mais utilizado no Linux, não é executado no núcleo, em contraste com o encontrado no Microsoft Windows.
Preemptividade do modo de núcleo permite que controladores de dispositivos sejam antecipados sob certas condições. Este recurso foi adicionado para aperfeiçoar o tratamento de interrupções de hardware e melhorar o suporte para multiprocessamento simétrico (em inglês: SMP). Preemptividade também otimiza a latência, aumentando a responsividade e tornando o Linux mais apropriado para aplicações de tempo real.

#### Debate entre Tanenbaum e Torvalds

O fato do Linux ser um núcleo monolítico mais do que um micronúcleo foi o tópico do debate entre Andrew S. Tanenbaum e Linus Torvalds. O debate iniciou em 1992, sobre Linux e arquiteturas de núcleo em geral no grupo de discussão comp.os.minix na Usenet. Tanenbaum argumentou que micronúcleos são superiores a núcleos monolíticos, e portanto, o Linux era obsoleto. Diferentemente de núcleos monolíticos tradicionais, controladores de dispositivos são configurados facilmente como módulos carregáveis, e são carregados ou descarregados durante a execução do sistema. Este assunto foi revisitado em 09 de maio de 2006, e em 12 de maio de 2006 Tanenbaum escreveu uma declaração.

### Linguagens de programação

O Linux é escrito na versão da linguagem de programação C suportada pelo GCC, que introduziu inúmeras extensões e mudanças ao C padrão, aliado a várias seções de código menores escritas na linguagem de montagem, na sintaxe e estilos do GCC e "AT&T", da arquitetura alvo.
Muitas outras linguagens foram usadas de algum modo, essencialmente em conexão com o processo de compilação, os métodos pelos quais as imagens inicializáveis são criadas através do código fonte. Estas incluem Perl, Python, e várias linguagens shell script. Alguns controladores podem até ser escritos em C++, Fortran, ou outras linguagens, mas isto é extremamente desencorajado.

### Conjunto de ferramentas GNU

O GNU Compiler Collection (GCC ou GNU cc) é o compilador padrão para os fontes Linux mainline e é invocado por um utilitário chamado make. Então, o GNU Assembler (mais freqüentemente chamado de GAS ou GNU as) produz os arquivos objeto a partir do código assembly gerado pelo GCC. Finalmente, o GNU Linker (GNU ld) é usado para produzir um arquivo do núcleo executável estaticamente ligado chamado vmlinux. as e ld são parte de um pacote chamado GNU binutils. As ferramentas mencionadas acima são conhecidas coletivamente como o conjunto de ferramentas GNU. O sistema de compilação do Linux oficialmente suporta apenas o GCC, como um compilador de núcleo e controladores.

### Compatibilidade do compilador

Devido às extensões suportadas pela linguagem C, o GCC foi por um longo período o único compilador capaz de compilar o Linux corretamente. Em 2004, a Intel disse ter modificado o Linux para que seu compilador C também pudesse compilá-lo. Outro sucesso foi apresentado em 2009, com um 2.6,22 modificado.
Desde 2010, esforços têm sido feitos para compilar o Linux com Clang, um compilador alternativo para a linguagem C; em 12 de abril de 2014, o núcleo oficial quase poderia ser compilado com o Clang. O projeto dedicado a este esforço recebeu o nome LLVMLinux em homenagem à infra-estrutura do compilador LLVM sobre a qual o Clang foi construído. LLVMLinux não tem como objetivo bifurcar nem o Linux nem o LLVM, portanto é um meta-projeto composto de patches que são eventualmente submetidos aos projetos a montante. Ao permitir que o Linux seja compilado pelo Clang que, entre outras vantagens, os desenvolvedores do núcleo podem se beneficiar de tempos de compilação mais curtos.
Desde a versão 5.3, o núcleo Linux pode ser compilado com o Clang na versão 9.0 para a arquitetura AMD64, na versão 5.6 com o Clang 10 para a arquitetura IBM s390 e na versão 5.9 para a arquietura x86 de 32-bits.

### Portabilidade

O Linux não seria projetado para ser portável em seu projeto inicial, a princípio só seria executado em arquiteturas x386. Entretanto com a ajuda da comunidade, atualmente o núcleo Linux pode ser executado em uma gama extremamente grande de arquiteturas, indo desde um computador de mão iPAQ a um servidor mainframe System z9 da IBM, que é capaz de executar centenas e até milhares de instâncias do Linux simultâneas.
O Linux é o principal sistema operacional dos supercomputadores Blue Gene da IBM. Em junho de 2009, o Linux foi usado como núcleo em mais de 88% dos sistemas na lista Top 500 de supercomputadores.
O Linux hoje funciona em dezenas de plataformas, desde mainframes até um relógio de pulso e várias arquiteturas: x86 (Intel, AMD), x86-64 (Intel EM64T, AMD64), ARM, PowerPC, Alpha, SPARC etc., com grande penetração também em sistemas embarcados, como handhelds, PVR, vídeo-jogos e centros multimídia, entre outros. O Linux possui suporte para muitas arquiteturas de máquinas virtuais.
Além disso, o Linux foi portado para vários dispositivos móveis como o TuxPhone e o iPod da Apple. Sistemas operacionais como o Google Android, o MeeGo (fusão entre o Nokia Maemo e o Intel Moblin), desenvolvidos para dispositivos móveis, utilizam versões modificadas do Linux.

### Processos

Um processo é uma instância de um programa em execução. Todos os processos no Linux têm um pai (processo criador) e um número identificador (PID - Process Identity). O pai de todos os processos em um ambiente Linux é o init, cujo PID é 1. Este processo é criado pelo processo 0, que é um encadeamento (thread) do próprio núcleo. O processo init irá permanecer em execução até o encerramento do sistema e a sua função é monitorizar e criar os processos que implementam as camadas exteriores do sistema operacional.
Os processos são criados pela chamadas de sistema fork (processos tradicionais ou heavy weight) e clone (processos leves ou light weight). Para otimizar a criação de processos tradicionais, o Linux usa o recurso de copy-on-write: quando um processo filho é criado, ele partilha as mesmas páginas de memória do pai. Quando um dos dois tenta escrever na memória, é gerada uma interrupção para o núcleo, que então copia o conteúdo das páginas de memória para novas molduras de páginas e estas são atribuídas ao processo que efetuou a escrita.
Para manter um ambiente multitarefa e possibilitar o multiprocessamento, o Linux mantém algumas estruturas importantes, das quais podemos citar duas: (i) o descritor do processo (task_struct), que contém todas as informações relativas ao processo; (ii) uma fila (runqueue) de processos por processador. Quando o sistema possui mais de um processador, o agendador do Linux faz o balanceamento de carga entre as filas.

#### Escalonamento

Para um compartilhamento justo, do processador entre os processos, o Linux usa duas classificações para avaliar qual a prioridade de um processo, sendo estas: (i) determina a responsividade do processo (tempo real, interativo, em segundo plano); (ii) verifica se o processo usa muito tempo de processador (CPU-bound) ou faz muitas operações de entrada e saída (I/O-bound).
Essas duas classes são razoavelmente independentes. Um processo pode executar em segundo plano (um daemon, por exemplo) e ser consumidor de recursos de entrada e saída (um servidor de banco de dados, por exemplo) ou usar muito tempo de processador (tal como, um compilador). Um processo que executa operações em tempo real foi assim definido pelo seu programador, mas o agendador do Linux necessita fazer uma análise heurística para saber se um processo é interativo ou está executando em segundo plano.
O Linux utiliza um sistema de prioridades, no qual um processo que possui prioridade maior tem precedência sobre um de prioridade menor, para obter o processador. A identificação da prioridade de um processo pode ser estática ou dinâmica e varia de 1, a maior prioridade, a 139, a menor. Os números 1 a 99 são atribuídos a processos de tempo real e 100 a 139 são atribuídos a processos tradicionais (interativos e segundo plano).
Um processo é classificado em "primeiro a entrar, primeiro a sair" (em inglês: firtst-in, first-out FIFO) ou "todos contra todos" (em inglês: Round-Robin RR) e somente será retirado do processador nos seguintes casos: (i) fim de execução; (ii) para ser substituído por um processo de maior prioridade; (iii) executar uma operação de bloqueio; (iv) espontaneamente; (v) é RR e esgotou seu quantum de processamento.
Um processo tradicional tem inicialmente atribuída uma prioridade estática (em geral 120) que determina o seu quantum de processamento, mas pode ter uma prioridade dinâmica, que é o valor analisado pelo agendador quando percorrer a lista de processos para determinar qual irá usar o processador. A prioridade dinâmica pode alterar o valor da prioridade estática em 5 pontos, para mais (penalidade) ou para menos (bônus), dependendo do passado do processo. O passado irá beneficiar o processo se o mesmo ficou muito tempo fora do processador (sleep time). Caso este tempo seja pequeno, o processo será penalizado.
A estrutura anterior pode ser modificada a partir do lançamento do núcleo 2.6.23 ou posterior, com a introdução do "escalonador completamente justo" (em inglês: completely fair scheduler CFS).

### Gerenciamento de memória

O Linux utiliza memória virtual que possui pelo menos 4 funções básicas:
* (i) assegurar que cada aplicação (processo) tenha seu próprio espaço de endereçamento, começando em zero, problema de relocação;
* (ii) proteção de memória, para impedir que um processo utilize um endereço de memória que não lhe pertença;
* (iii) partilha de memória — processos diferentes podem partilhar código ou dados;
* (iv) possibilitar que uma aplicação utilize mais memória do que a fisicamente existente (essa é a função mais óbvia).
Seu código divide-se em duas partes. Uma é dependente da arquitetura, onde são definidos o endereçamento — virtual e físico, o tamanho de página e o tratamento das tabelas de páginas. Na parte independente ficam o controle de alocação e liberação de memória e o esquema de substituição páginas.
O Linux utiliza tamanhos de páginas de acordo com a arquitetura. Os processadores x86 utilizam páginas de 4 KiB (padrão), 2 MiB (caso seja utilizado o recurso de Extensão de Endereço de Página (em inglês: Page Address Extension PAE) – da Intel) ou de 4 MiB. Nas arquiteturas RISC o tamanho padrão é de 8 KiB, mas não é o único.
O endereçamento virtual é dividido em espaço do usuário e espaço do núcleo. O primeiro é privativo de cada processo, com início no endereço lógico zero e terminando no endereço determinado pela macro PAGE_OFFSET . O espaço do núcleo é único e começa depois do espaço do usuário. Na arquitetura x86 PAGE_OFFSET determina um valor de 3 GiB para o espaço do usuário e 1 GiB para o espaço do núcleo.
O código do Linux é carregado no início do espaço do núcleo, sendo seguido pela área fisicamente mapeável (mem_map, estrutura que indexa as páginas físicas e as páginas propriamente ditas). Na arquitetura x86, os últimos 128 MiB do espaço do núcleo são reservados para alocação de memória não contígua e memória alta, limitando a memória física endereçável pelo Linux, na compilação padrão, a 896 MiB.
Um endereço virtual no Linux , é dividido em 5 campos: diretório de páginas (PGD), diretório superior de páginas (PUD), diretório intermediário de páginas (PMD), tabela de páginas (PTE) e deslocamento (offset). A arquitetura x86 possui um espaço de endereçamento de 32 bits; quando são utilizadas páginas de 4 KiB (o padrão) o PUD e o PMD não são utilizados; o PGD e o PTE usam 10 bits cada, e o deslocamento usa 12 bits.
O esquema de substituição de páginas no Linux usa o algoritmo LRU (por aproximação) mantendo duas listas de envelhecimento (em inglês: aging). A primeira (active_list) contém as páginas atualmente em uso (as páginas mais recentemente referenciadas estarão mais próximas do início da lista) e a segunda (inactive_list) contém as candidatas a paginação (em inglês: page out).
A paginação para disco pode ocorrer sob demanda, quando algum processo solicitar página e não houver alguma disponível. Neste caso, a página no final da lista inactive_list é liberada. Entretanto, existe um processo chamado kswapd, inicializado pelo núcleo, que verifica, periodicamente, o número de páginas livres. Caso este número seja menor que pages_low, kswapd é acordado para liberar páginas. Se o valor chegar a pages_min, kswapd entra num regime síncrono para agilizar a liberação. Quando o valor de páginas livres atingir pages_high, kswapd vai dormir.

### Sistema de arquivos

O gerenciamento de arquivos no Linux baseia-se num esquema de vários níveis, onde a camada principal é o VFS (Virtual File System), que esconde da aplicação as características dos diversos sistemas de arquivo reconhecidos pelo Linux. Quando uma aplicação solicita uma operação sobre algum arquivo, essa solicitação é encaminhada para o VFS, que reenvia a solicitação para um dos SA registrados.
O VFS utiliza uma estrutura chamada superbloco para manter as informações referentes aos diversos sistemas de arquivos montados (tipo, ponto de montagem, dispositivo de bloco utilizado, arquivos abertos). Também utiliza index-node ou nós-i, semelhantes aos nós-i do Ext2, com as informações sobre os arquivos (permissões, blocos utilizados, dono, etc.).
Os sistemas de arquivos registrados no VFS podem ser classificados em 3 grupos: (i) dispositivos de blocos (Ext2, Ext3, Ext4, Reiserfs, XFS, VFAT); (ii) associados a rede (NFS, SMB); (iii) dispositivos especiais (procfs, tempfs). Todos esses sistemas podem ser carregados como módulos.
O Ext2 está deixando de ser o padrão de sistema de arquivos utilizado no Linux, particularmente por sua deficiência quando ocorre uma pane. Neste caso, o sistema operacional deve executar uma varredura completa para verificar o estado do sistema (fsck). Outros sistemas foram criados para resolver essa deficiência, utilizando um recurso chamado journaling, que é a utilização de um registro (log) de alterações (journal). Os sistemas de arquivos desse tipo mais importantes são: Ext3, Ext4, Reiserfs, XFS e JFS.

### Falha do núcleo

Uma falha do núcleo (em inglês: kernel panic) é um erro de sistema não-recuperável detectado pelo núcleo, ao contrário de erros gerados em espaço de usuário, como por exemplo, o fechamento inesperado de um aplicativo. O código do núcleo pode indicar essa condição invocando a função panic especificada em sys/system.h. No entanto, grande parte das falhas são geradas a partir de exceções do processador não tratadas no código do núcleo, tal como referências inválidas a posições de memória. Geralmente, a ocorrência de uma falha do núcleo indica um defeito na cadeia de chamadas na inicialização do núcleo. Também pode indicar uma falha de hardware, tais como uma falha em uma célula de memória, erros nas funções aritméticas ou superaquecimento do processador.
Um relatório de falha no núcleo é chamado de "OOPS". O relatório é automaticamente recolhido pelo software kerneloops ou pela extensão kernel oops do abrt e enviado ao kerneloops.org. O Kerneloops.org reúne estes relatórios e publica estatísticas em seu sítio.

### Custo estimado

O custo para criar o Linux novamente, em sua versão 2.6.0, em uma configuração tradicional de desenvolvimento proprietária foi estimada em cerca de $612 milhões USD (€467 milhões de euros, 1,145 bilhão de Reais), com base nos custos de 2004, utilizando o modelo COCOMO de estimativa pessoa-mês. Em 2006, um estudo financiado pela União Europeia colocou os custos de redesenvolvimento do núcleo 2.6.8 ainda mais altos, 882 milhões de euros ($1,14 bilhões USD).
Este assunto foi revisitado em setembro de 2008 por Amanda McPherson, Brian Proffitt e Ron Hale-Evans. Usando a metodologia de David A. Wheelers, eles estimaram que refazer o núcleo 2.6.25 teria custos de $1,3 bilhão USD (parte de um total de $10,8 bilhões (mil milhões) para refazer todo o Fedora 9). Novamente, Garcia-Garcia e Alonso de Magdaleno, da Universidade de Oviedo (Espanha), estimaram que o valor adicionado anualmente ao núcleo entre 2005 e 2007 foi de 100 milhões de euros e, em 2008, 225 milhões de euros; custaria também mais que 1 bilhão (mil milhões) de euros (aproximadamente 1,4 bilhões (mil milhões) USD) para desenvolvê-lo na União Europeia.

### Histórico de recursos

A versão 1.0 do Linux foi lançada em 14 de março de 1994. Este lançamento só suportava sistemas de computador monoprocessados baseados na i386. A portabilidade se tornou uma preocupação e logo, na versão 1.2, lançada em 07 de março de 1995, ganhou suporte as arquiteturas Alpha, SPARC, e MIPS.
A versão 2.0 foi lançada em 09 de junho de 1996. Já haviam sido 41 lançamentos em série. O principal recurso da 2.0 foi o suporte a multiprocessamento simétrico, ou seja, suporte para múltiplos processadores em um único sistema e suporte, também foi incluído suporte para mais arquiteturas de processadores.
A versão 2.2 foi lançada em 26 de janeiro de 1999, que removeu o spinlock global e forneceu suporte melhorado para multiprocessadores, também adicionou suporte para as arquiteturas m68k e PowerPC, assim como a novos sistemas de arquivos, incluindo suporte somente de leitura para o NTFS da Microsoft.
A versão 2.4.0, lançada em 04 de janeiro de 2001, continha suporte para Ligar e Usar ISA, USB, e PC Cards. Ele também incluía suporte ao processador PA-RISC da Hewlett-Packard. Também foram incluídos suporte a Bluetooth, Gerenciador Lógico de Volumes (em inglês: LVM) versão 1, suporte RAID, InterMezzo e sistemas de ficheiro ext3.
A versão 2.6.0 foi lançada em 18 de dezembro de 2003. A série de núcleos 2.6 ainda ativa (em fevereiro de 2012). O desenvolvimento para o 2.6.x se modificou mais ao incluir novos recursos através da duração da série. Entre as mudanças que foram realizadas, estão: integração do µClinux no código-fonte principal do Linux, suporte a Extensão de Endereço Físico (em inglês: PAE), suporte a diversas linhas novas de CPUs, integração da Arquitetura de Som Avançada do Linux (em inglês: ALSA) no código principal do Linux, suporte para até 2$^{32}$ usuários (acima de 2$^{16}$), suporte para até 2$^{29}$ IDs de processo (acima de 2$^{15}$), aumentou substancialmente o número de tipos de dispositivo e número de dispositivos para cada tipo, aperfeiçoou o suporte 64-bits, suporte para sistema de ficheiros de até 16 terabytes, preemptividade no núcleo, suporte para a biblioteca de linhas de execução nativa do POSIX, integração do linux em modo de usuário ao código principal do Linux, integração do SELinux ao código principal do Linux, suporte à InfiniBand, e muito mais. Em destaque estão as adições de vários sistemas de arquivos através dos lançamentos 2.6.x: FUSE, JFS, XFS, ext4 e mais. Detalhes da história da série de núcleos 2.6 podem ser encontradas em registros da mudança (em inglês: changelog) na área de lançamentos dos núcleos 2.6 do sítio kernel.org.
A versão 3.0 foi lançada em 22 de julho de 2011, não houve grandes mudanças no núcleo (como normalmente se espera quando muda o primeiro número da versão). A versão 3.0 foi dada em comemoração aos 20 anos do Linux. A partir desta versão foi alterada a forma de interpretação dos números de versão do núcleo Linux.
A versão 4.0 foi lançada em 12 de abril de 2015.
A versão 5.0 foi lançada em 3 de março de 2019.

### Estrutura do código fonte

A organização do código fonte do núcleo Linux permite que múltiplos desenvolvedores trabalhem no núcleo simultaneamente sem causar conflitos com outros desenvolvedores. O diretório raiz do código fonte da versão 5.7 possui 7 arquivos e 22 diretórios. Os arquivos são basicamente descrição de licença, créditos, informações sobre o núcleo e arquivos para compilação. Os diretórios estão estruturados de forma a tornar independente as implementações de código dependente e independente de arquitetura. Além disso, estão organizados baseados nos principais subsistemas do núcleo Linux.
Os principais arquivos são:
* COPYING: licença do núcleo Linux.
* CREDITS: lista parcial das pessoas que contribuem com o núcleo Linux.
* MAINTAINERS: lista dos mantenedores e de como submeter alterações.
* REPORTING-BUGS: procedimento para relatar defeitos (bugs) no núcleo. Este arquivo foi movido para Documentation/admin-guide na versão 4.10.
* README: informações sobre o que é e como compilar o núcleo Linux.
* Makefile, Kbuild, Kconfig: usados na compilação do núcleo Linux.
Os principais diretórios são:
* arch: código dependente de arquitetura de processadores, por exemplo, arch/x86, arch/arm/arm64.
* block: código para acesso a dispositivos de bloco.
* certs: implementação de algoritmos de assinatura digital de módulos. Introduzido na versão 4.3.
* crypto: implementação de algoritmos de criptografia.
* drivers: implementação de drivers de dispositivos. São implementados como módulos do núcleo e divididos em subdiretórios segundo o tipo do driver, por exemplo, drivers/ide.
* firmware: mantém imagens antigas de firmware extraídas de drivers. Novos firmware são adicionados em um novo repositório chamado linux-firmware. Este diretório foi esvaziado na versão 4.14 e removido na versão 5.1.
* fs: código do sistema de arquivos virtual e implementação dos sistemas de arquivos suportados pelo núcleo.
* include: arquivos de cabeçalhos genéricos.
* init: código de inicialização do núcleo, como por exemplo, inicialização dos endereços de página, escalonador, chamadas de sistema, interrupção, entre outros.
* ipc: código para os três sistemas de comunicação entre processos (semáforos, memória compartilhada e filas de mensagens).
* kernel: código dos principais subsistemas do núcleo, como por exemplo, chamada de sistemas, escalonadores, DMA, interrupção. O código específico de arquitetura é mantido em arch/*/kernel.
* lib: bibliotecas do núcleo. O código específico de arquitetura é mantido em arch/*/lib.
* mm: código comum para gerenciamento de memória e do subsistema de memória virtual. O código específico de arquitetura é mantido em arch/*/mm.
* net: código para o subsistema de rede, como por exemplo, implementação de protocolos e soquetes.
* samples: exemplos.
* scripts: scripts e códigos para configurar e compilar o núcleo.
* security: funções de segurança.
* sound: código para o subsistema de som.
* tools: software específico e alguns testes.
* usr: suporte a inicialização do código do núcleo que deve executar em espaço do usuário.
* virt: código de suporte à virtualização.
* Documentation: contém a documentação do código fonte.

### Processo de inicialização

O processo de inicialização do núcleo Linux é composto por diversas etapas. Antes da inicialização propriamente dita, o sistema computacional deve ser inicializado. O sistema possui um software embarcado em uma posição fixa de memória para iniciar o carregamento do núcleo. Em sistemas convencionais, o processo de inicialização ocorre com o carregamento da BIOS e inicialização do hardware. A BIOS, por sua vez, realiza a leitura do primeiro setor do disco (MBR) contendo o carregador de inicialização (bootloader). Os carregadores de inicialização mais comuns para computadores pessoais são o GRUB e LILO. O carregador de inicialização carrega a imagem do núcleo Linux e do sistema de arquivos temporário em memória (opcional). O arquivo de imagem do núcleo Linux é autocompactado e geralmente apresenta a nomenclatura bzImage-versão. O arquivo de disco RAM, que contém o sistema de ficheiros temporário, geralmente apresenta a nomenclatura initrd-versão.img.
Com o núcleo em memória, o controle de execução é repassado para o núcleo. A inicialização do núcleo começa com a execução de rotinas básicas de configuração de hardware e a autodescompactação da imagem por meio de rotinas no início do arquivo. Em seguida, a função start_kernel é chamada e executa a inicialização e configuração dos dispositivos, escalonadores, consoles, entre outros. Por fim, após carregar o disco RAM, executa a função que inicializa o primeiro processo, o init. O init coordena a inicialização e configuração dos serviços do sistema operacional. Em sistemas embarcados, o init pode corresponder a um simples código para iniciar os dispositivos.

## Desenvolvimento
### Linha do tempo

Ref: www.kernel.org
* ver
* discutir

### Modelo de desenvolvimento

O modelo de desenvolvimento atual do Linux é feito para permitir que Linus Torvalds realize o lançamento de novas versões constantemente. Estas versões são chamadas de núcleos "genérico" (em inglês: vanilla) ou "principais" (em inglês: mainline), que significa que estes núcleos são derivados (branch) do código de desenvolvimento principal do núcleo Linux. Uma nova versão do núcleo Linux só é lançada depois de passar por grandes mudanças, por exemplo, primeiro Linus Torvalds recebe e incorpora dos programadores as mudanças no código do núcleo Linux, a partir dai são feitos pré-lançamentos do núcleo e destes são realizadas as correções de possíveis defeitos encontrados, só então é lançada a nova versão do núcleo de sistema operacional Linux. O lançamento de um novo núcleo é feito em média a cada três meses.
No esquema de desenvolvimento atual, a derivação (branch) principal não é a versão "estável" tradicional, pois é ela que incorpora todos os tipos de alterações, tal como últimos recursos, correções de segurança e defeitos. Para usuários que não querem arriscar atualizando para novas versões, contendo código que pode não ter sido testado o bastante, existem um conjunto separado de derivações "estáveis" (uma para cada versão lançada), que são criadas para usuários que querem apenas as correções de segurança e defeitos, mas não uma versão totalmente nova. Estas derivações são mantidas pela equipa estável (em inglês: stable team) (Greg Kroah-Hartman, Chris Wright, talvez outros).
A maioria dos usuários Linux utilizam a versão fornecida pelas suas distribuições. Algumas distribuições fornecem os núcleos "genérico" e/ou "estável". No entanto, muitos distribuidores Linux, como a Red Hat e o Debian, mantém outro conjunto de derivações do Linux que são integradas aos seus produtos. Estes são em geral atualizados em um ritmo mais lento em comparação com a derivação "genérico" e normalmente incluem todas correções da derivação "estável" correspondente, mas ao mesmo tempo podem adicionar suporte a controladores ou recursos que não foram lançados na versão "genérico" em que o distribuidor se baseou originalmente.
A partir do núcleo 2.6 ocorreu uma mudança significativa no modelo de desenvolvimento. Antes desta alteração havia uma derivação estável, por exemplo, a 2.4 em que apenas revisões relativamente pequenas e seguras eram feitas e uma derivação instável a 2.5, na qual mudanças maiores e retiradas de códigos não utilizados eram permitidas. Ambas derivações eram mantidas pelo mesmo grupo de pessoas, lideradas por Torvalds. Isto significada que os usuários sempre teriam uma versão 2.4 bem testada (chamada de estável), contendo as últimas correções de segurança e praticamente sem defeitos, porém esta estabilidade tinha um preço, pois os usuários do núcleo estável sempre estavam um passo a trás, ou seja, estavam desatualizados em relação ao núcleo instável (por exemplo, poderia não ter suporte aos hardwares mais recentes). No fim da série 2.5.x, alguns mantenedores escolheram tentar portar suas alterações para a série de núcleos estáveis, o que resultou em defeitos sendo introduzidos nos núcleos 2.4.x. A derivação 2.5 foi então oficialmente declarada estável, e renomeada para 2.6, mas ao invés de abrir uma derivação instável 2.7, os desenvolvedores escolheram continuar a fazer grandes revisões na derivação 2.6, permitindo lançamentos muito mais rápidos do que a 2.4.x, mas ainda sim, mais lentos do que a 2.5.x. Isto trouxe o efeito desejado de tornar novos recursos rapidamente disponíveis e conseguir mais testes do novo código, que foi adicionado em derivações menores e mais fáceis de testar.
Como resposta a falta de uma árvore de núcleo estável, algumas pessoas coordenaram a coleta de correções e em dezembro de 2005 Adrian Bunk anunciou que ele manteria os lançamentos dos núcleos 2.6.16.y, mesmo quando o time continuasse para o 2.6.17. Ele também incluiu alguns atualizações de controladores, tornando a manutenção da série de núcleos 2.6,16 muito similar às antigas regras de manutenção para uma série estável, como a 2.4. Deste então, o "time estável" (em inglês: stable team) foi criado e poderia continuar atualizando as versões do núcleo com correões. Em setembro de 2008, Adrian Bunk anunciou que iria manter o 2.6.27 por alguns anos como substituto ao 2.6.16. O time estável apoiou a ideia e desde 2010 eles mantêm aquela versão, lançando correções para ela, além das outras.
Após a mudança no modelo de desenvolvimento no núcleo 2.6.x, os desenvolvedores continuaram querendo o que pode-se chamar de uma árvore instável do núcleo, uma que muda tão rapidamente quanto novas correções chegam. Andrew Morton decidiu redirecionar sua árvore -mm de gerenciamento de memória, para servir como destino para todo código novo e ou experimental. Em setembro de 2007 Morton decidiu parar de manter a sua árvore. Em fevereiro de 2008, Stephen Rothwell criou a árvore linux-next (em português: próximo-linux) em que correções que almejam serem incorporadas durante o próximo ciclo de desenvolvimento. Vários mantenedores de subsistemas também adotaram o sufixo -next (em português: próximo(a)) para suas árvores contendo código a ser enviado para inclusão no próximo ciclo de lançamento.

### Manutenção e suporte de longo prazo

A última versão do núcleo e as versões mais antigas do núcleo são mantidas separadamente. A maioria dos lançamentos do núcleo mais recentes foram supervisionados por Linus Torvalds. As versões atuais são lançadas por Greg Kroah-Hartman.
A comunidade de desenvolvedores do núcleo Linux mantém um núcleo estável aplicando correções para bugs de software que foram descobertos durante o desenvolvimento do núcleo estável subsequente. Portanto, www.kernel.org sempre listará dois núcleos estáveis. O próximo núcleo estável do Linux agora é lançado apenas 8 a 12 semanas depois. Portanto, os mantenedores do núcleo Linux designaram algumas versões estáveis do núcleo como de longo prazo, esses núcleos Linux com suporte de longo prazo são atualizados com correções de bugs por dois ou mais anos. Em dezembro de 2024, havia seis núcleos Linux de longo prazo: 6.12.2, 6.6.63, 6.1.119, 5.15.173, 5.10.230 e 5.4.286.

#### Versões antes da 2.0

| Série | Data de lançamento original | Última versão | Mantenedor | Modelo de suporte |
| Versão antiga, já não mantida: 0.01 | 17 de setembro de 1991 | 0.03 | Linus Torvalds | Descontinuado |
| Versão antiga, já não mantida: 0.02 | 5 de outubro de 1991 | | Linus Torvalds | Descontinuado |
| Versão antiga, já não mantida: 0.10 | novembro de 1991 | 0.12 | Linus Torvalds | Descontinuado |
| Versão antiga, já não mantida: 0.95 | 8 de março de 1992 | 0.99.15 | Linus Torvalds | Descontinuado |
| Versão antiga, já não mantida: 1.0 | 14 de março de 1994 | 1.0.9 | Linus Torvalds | Descontinuado |
| Versão antiga, já não mantida: 1.1 | 6 de abril de 1994 | 1.1.95 | Linus Torvalds | Descontinuado |
| Versão antiga, já não mantida: 1.2 | 7 de março de 1995 | 1.2.13 | Linus Torvalds | Descontinuado |
| Versão antiga, já não mantida: 1.3 | 12 de junho de 1995 | 1.3.100 | Linus Torvalds | Descontinuado |
| Versão antiga, já não mantida: pre2.0 | 12 de maio de 1996 | pre2.0.14 | Linus Torvalds | Descontinuado |
| Legenda:Versão antigaVersão mais antiga, ainda mantidaVersão mais recenteVersão de prévia mais recenteLançamento futuro |||||

#### Versão 2.0 até 2.4

| Série | Data de lançamento original | Última versão | Mantenedor | Modelo de suporte |
| Versão antiga, já não mantida: 2.0 | 9 de junho de 1996 | 2.0.40 | David Weinehall | Oficialmente descontinuado com o lançamento da versão 2.2.0 (suportado de junho de 1996 até fevereiro de 2004) |
| Versão antiga, já não mantida: 2.2 | 20 de janeiro de 1999 | 2.2.26 | Marc-Christian Petersen (ex-mantenedor Alan Cox) | Descontinuado (suportado de janeiro de 1999 até fevereiro de 2004) |
| Versão antiga, já não mantida: 2.4 | 4 de janeiro de 2001 | 2.4.37.11 | Willy Tarreau (ex-mantenedor Marcelo Tosatti) | Descontinuado (suportado de janeiro de 2001 até dezembro de 2010) |
| Legenda:Versão antigaVersão mais antiga, ainda mantidaVersão mais recenteVersão de prévia mais recenteLançamento futuro |||||

#### Versão 2.6.x.y

| Série | Data de lançamento original | Última versão | Mantenedor | Modelo de suporte |
| Versão antiga, já não mantida: 2.6 | 17 de dezembro de 2003 | 2.6.10 | Linus Torvalds | Versão estável de curto prazo (suportada de dezembro de 2003 até dezembro de 2004) |
| Versão antiga, já não mantida: 2.6.11 | 2 de março de 2005 | 2.6.11.12 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de março de 2005 a junho de 2005) |
| Versão antiga, já não mantida: 2.6.12 | 18 de junho de 2005 | 2.6.12.6 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de junho de 2005 a agosto de 2005) |
| Versão antiga, já não mantida: 2.6.13 | 28 de agosto de 2005 | 2.6.13.5 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de agosto de 2005 a dezembro de 2005) |
| Versão antiga, já não mantida: 2.6.14 | 27 de outubro de 2005 | 2.6.14.7 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de outubro de 2005 a janeiro de 2006) |
| Versão antiga, já não mantida: 2.6.15 | 2 de janeiro de 2006 | 2.6.15.7 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de janeiro de 2006 a março de 2006) |
| Versão antiga, já não mantida: 2.6.16 | 20 de março de 2006 | 2.6.16.62 | Adrian Bunk (ex-mantenedor Greg Kroah-Hartman) | Versão estável de longo prazo (suportada de março de 2006 até julho de 2008) |
| Versão antiga, já não mantida: 2.6.17 | 17 de junho de 2006 | 2.6.17.14 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de junho de 2006 a outubro de 2006) |
| Versão antiga, já não mantida: 2.6.18 | 19 de setembro de 2006 | 2.6.18.8 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de setembro de 2006 a fevereiro de 2007) |
| Versão antiga, já não mantida: 2.6.19 | 29 de novembro de 2006 | 2.6.19.7 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de novembro de 2006 a março de 2007) |
| Versão antiga, já não mantida: 2.6.20 | 4 de fevereiro de 2007 | 2.6.20.21 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de fevereiro de 2007 a outubro de 2007) |
| Versão antiga, já não mantida: 2.6.21 | 25 de abril de 2007 | 2.6.21.7 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de abril de 2007 a agosto de 2007) |
| Versão antiga, já não mantida: 2.6.22 | 8 de julho de 2007 | 2.6.22.19 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de julho de 2007 a fevereiro de 2008) |
| Versão antiga, já não mantida: 2.6.23 | 9 de outubro de 2007 | 2.6.23.17 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de outubro de 2007 a fevereiro de 2008) |
| Versão antiga, já não mantida: 2.6.24 | 24 de janeiro de 2008 | 2.6.24.7 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de janeiro de 2008 a maio de 2008) |
| Versão antiga, já não mantida: 2.6.25 | 16 de abril de 2008 | 2.6.25.20 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de abril de 2008 a novembro de 2008) |
| Versão antiga, já não mantida: 2.6.26 | 13 de julho de 2008 | 2.6.26.8 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de julho de 2008 a novembro de 2008) |
| Versão antiga, já não mantida: 2.6.27 | 9 de outubro de 2008 | 2.6.27.62 | Willy Tarreau (ex-mantenedores Adrian Bunk e Greg Kroah-Hartman) | Versão estável de longo prazo (suportada de 9 de outubro de 2008 a 17 de março de 2012) |
| Versão antiga, já não mantida: 2.6.28 | 24 de dezembro de 2008 | 2.6.28.10 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de dezembro de 2008 a maio de 2009) |
| Versão antiga, já não mantida: 2.6.29 | 23 de março de 2009 | 2.6.29.6 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de março de 2009 a julho de 2009) |
| Versão antiga, já não mantida: 2.6.30 | 9 de junho de 2009 | 2.6.30.9 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de junho de 2009 a outubro de 2009) |
| Versão antiga, já não mantida: 2.6.31 | 9 de setembro de 2009 | 2.6.31.14 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de setembro de 2009 a julho de 2010) |
| Versão antiga, já não mantida: 2.6.32 | 2 de dezembro de 2009 | 2.6.32.71 | Willy Tarreau (ex-mantenedor Greg Kroah-Hartman) | Versão estável de longo prazo (suportada de 3 de dezembro de 2009 a 12 de março de 2016) |
| Versão antiga, já não mantida: 2.6.33 | 24 de fevereiro de 2010 | 2.6.33.20 | Greg Kroah-Hartman | Versão estável de longo prazo (suportada de fevereiro de 2010 a novembro de 2011) |
| Versão antiga, já não mantida: 2.6.34 | 16 de maio de 2010 | 2.6.34.15 | Paul Gortmaker | Versão estável de longo prazo (suportada de maio de 2010 a fevereiro de 2014) |
| Versão antiga, já não mantida: 2.6.35 | 1 de agosto de 2010 | 2.6.35.14 | Andi Kleen | Versão estável de longo prazo (suportada de agosto de 2010 a agosto de 2011) |
| Versão antiga, já não mantida: 2.6.36 | 20 de outubro de 2010 | 2.6.36.4 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de outubro de 2010 a fevereiro de 2011) |
| Versão antiga, já não mantida: 2.6.37 | 4 de janeiro de 2011 | 2.6.37.6 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de janeiro de 2011 a março de 2011) |
| Versão antiga, já não mantida: 2.6.38 | 14 de março de 2011 | 2.6.38.8 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de março de 2011 a junho de 2011) |
| Versão antiga, já não mantida: 2.6.39 | 18 de maio de 2011 | 2.6.39.4 | Greg Kroah-Hartman | Versão estável de curto prazo final do núcleo 2.6. (suportada de maio de 2011 a agosto de 2011) |
| Legenda:Versão antigaVersão mais antiga, ainda mantidaVersão mais recenteVersão de prévia mais recenteLançamento futuro |||||

#### Versão 3.x.y

| Série | Data de lançamento original | Última versão | Mantenedor | Modelo de suporte |
| Versão antiga, já não mantida: 3.0 | 21 de julho de 2011 | 3.0.101 | Linus Torvalds | Versão estável de longo prazo (suportada de julho de 2011 a outubro de 2013) |
| Versão antiga, já não mantida: 3.1 | 24 de outubro de 2011 | 3.1.10 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de outubro de 2011 até janeiro de 2012) |
| Versão antiga, já não mantida: 3.2 | 4 de janeiro de 2012 | 3.2.102 | Ben Hutchings | Versão estável de longo prazo (suportada de janeiro de 2012 até junho de 2018) |
| Versão antiga, já não mantida: 3.3 | 18 de março de 2012 | 3.3.8 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de março de 2012 até junho de 2012) |
| Versão antiga, já não mantida: 3.4 | 20 de maio de 2012 | 3.4.113 | Greg Kroah-Hartman | Versão estável de longo prazo (suportada de maio de 2012 até outubro de 2016) |
| Versão antiga, já não mantida: 3.5 | 21 de julho de 2012 | 3.5.7 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de julho de 2012 até outubro de 2012) |
| Versão antiga, já não mantida: 3.6 | 30 de setembro de 2012 | 3.6.11 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de setembro de 2012 até dezembro de 2012) |
| Versão antiga, já não mantida: 3.7 | 10 de dezembro de 2012 | 3.7.10 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de dezembro de 2012 até fevereiro de 2012) |
| Versão antiga, já não mantida: 3.8 | 18 de fevereiro de 2013 | 3.8.13 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de fevereiro de 2013 até maio de 2013) |
| Versão antiga, já não mantida: 3.9 | 28 de abril de 2013 | 3.9.11 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de abril de 2013 até julho de 2013) |
| Versão antiga, já não mantida: 3.10 | 30 de junho de 2013 | 3.10.108 | Willy Tarreau (ex-mantenedor Greg Kroah-Hartman) | Versão estável de longo prazo (suportada de junho de 2013 até novembro de 2017) |
| Versão antiga, já não mantida: 3.11 | 2 de setembro de 2013 | 3.11.10 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de setembro de 2013 até novembro de 2013) |
| Versão antiga, já não mantida: 3.12 | 3 de novembro de 2013 | 3.12.74 | Jiří Slabý (ex-mantenedor Greg Kroah-Hartman) | Versão estável de longo prazo (suportada de dezembro de 2013 até maio de 2017) |
| Versão antiga, já não mantida: 3.13 | 19 de janeiro de 2014 | 3.13.11 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de janeiro de 2014 até abril de 2014) |
| Versão antiga, já não mantida: 3.14 | 30 de março de 2014 | 3.14.79 | Greg Kroah-Hartman | Versão estável de longo prazo (suportada de março de 2014 até setembro de 2016) |
| Versão antiga, já não mantida: 3.15 | 8 de junho de 2014 | 3.15.10 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de junho de 2014 até agosto de 2014) |
| Versão antiga, já não mantida: 3.16 | 3 de agosto de 2014 | 3.16.85 | Ben Hutchings (ex-mantenedor Greg Kroah-Hartman) | Versão estável de longo prazo (suportada de agosto de 2014 até junho de 2020) |
| Versão antiga, já não mantida: 3.17 | 5 de outubro de 2014 | 3.17.8 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de outubro de 2014 até janeiro de 2015) |
| Versão antiga, já não mantida: 3.18 | 7 de dezembro de 2014 | 3.18.140 | Greg Kroah-Hartman | Versão estável de longo prazo (suportada de dezembro de 2014 até maio de 2019) |
| Versão antiga, já não mantida: 3.19 | 8 de fevereiro de 2015 | 3.19.8 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de fevereiro de 2015 até maio de 2015) |
| Legenda:Versão antigaVersão mais antiga, ainda mantidaVersão mais recenteVersão de prévia mais recenteLançamento futuro |||||

#### Versão 4.x.y

| Série | Data de lançamento original | Última versão | Mantenedor | Modelo de suporte |
| Versão antiga, já não mantida: 4.0 | 12 de abril de 2015 | 4.0.9 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de abril de 2015 até julho de 2015) |
| Versão antiga, já não mantida: 4.1 | 22 de junho de 2015 | 4.1.52 | Sasha Levin (ex-mantenedor Greg Kroah-Hartman) | Versão estável de longo prazo (suportada de junho de 2015 até maio de 2018) |
| Versão antiga, já não mantida: 4.2 | 30 de agosto de 2015 | 4.2.8 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de agosto de 2015 até dezembro de 2015) |
| Versão antiga, já não mantida: 4.3 | 1 de novembro de 2015 | 4.3.6 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de novembro de 2015 até fevereiro de 2016) |
| Versão antiga, já não mantida: 4.4 | 10 de janeiro de 2016 | 4.4.302 | Greg Kroah-Hartman & Sasha Levin | Versão estável de longo prazo (suportada de janeiro de 2016 até fevereiro de 2022) |
| Versão antiga, já não mantida: 4.5 | 13 de março de 2016 | 4.5.7 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de março de 2016 até junho de 2016) |
| Versão antiga, já não mantida: 4.6 | 15 de maio de 2016 | 4.6.7 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de maio de 2016 até agosto de 2016) |
| Versão antiga, já não mantida: 4.7 | 24 de julho de 2016 | 4.7.10 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de julho de 2016 até outubro de 2016) |
| Versão antiga, já não mantida: 4.8 | 2 de outubro de 2016 | 4.8.17 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de outubro de 2016 até janeiro de 2017) |
| Versão antiga, já não mantida: 4.9 | 11 de dezembro de 2016 | 4.9.337 | Greg Kroah-Hartman & Sasha Levin | Versão estável de longo prazo (suportada de dezembro de 2016 até janeiro de 2023) |
| Versão antiga, já não mantida: 4.10 | 19 de fevereiro de 2017 | 4.10.17 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de fevereiro de 2017 até maio de 2017) |
| Versão antiga, já não mantida: 4.11 | 30 de abril de 2017 | 4.11.12 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de abril de 2017 até julho de 2017) |
| Versão antiga, já não mantida: 4.12 | 2 de julho de 2017 | 4.12.14 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de julho de 2017 até setembro de 2017) |
| Versão antiga, já não mantida: 4.13 | 3 de setembro de 2017 | 4.13.16 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de setembro de 2017 até novembro de 2017) |
| Versão antiga, já não mantida: 4.14 | 12 de novembro de 2017 | 4.14.336 | Greg Kroah-Hartman & Sasha Levin | Versão estável de longo prazo (suportada de novembro de 2017 até janeiro de 2024) |
| Versão antiga, já não mantida: 4.15 | 28 de janeiro de 2018 | 4.15.18 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de janeiro de 2018 até abril de 2018) |
| Versão antiga, já não mantida: 4.16 | 1 de abril de 2018 | 4.16.18 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de abril de 2018 até junho de 2018) |
| Versão antiga, já não mantida: 4.17 | 3 de junho de 2018 | 4.17.19 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de junho de 2018 até agosto de 2018) |
| Versão antiga, já não mantida: 4.18 | 12 de agosto de 2018 | 4.18.20 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de agosto de 2018 até novembro de 2018) |
| Versão antiga, já não mantida: 4.19 | 22 de outubro de 2018 | 4.19.325 | Greg Kroah-Hartman & Sasha Levin | Versão estável de longo prazo (suportada de outubro de 2018 até dezembro de 2024) |
| Versão antiga, já não mantida: 4.20 | 23 de dezembro de 2018 | 4.20.17 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de dezembro de 2018 até março de 2019) |
| Legenda:Versão antigaVersão mais antiga, ainda mantidaVersão mais recenteVersão de prévia mais recenteLançamento futuro |||||

#### Versão 5.x.y

| Série | Data de lançamento original | Última versão | Mantenedor | Modelo de suporte |
| Versão antiga, já não mantida: 5.0 | 3 de março de 2019 | 5.0.21 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de março de 2019 até junho de 2019) |
| Versão antiga, já não mantida: 5.1 | 5 de maio de 2019 | 5.1.21 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de maio de 2019 até julho de 2019) |
| Versão antiga, já não mantida: 5.2 | 7 de julho de 2019 | 5.2.20 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de julho de 2019 até outubro de 2019) |
| Versão antiga, já não mantida: 5.3 | 15 de setembro de 2019 | 5.3.18 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de setembro de 2019 até dezembro de 2019) |
| Versão mais antiga, ainda mantida: 5.4 | 24 de novembro de 2019 | 5.4.286 | Greg Kroah-Hartman & Sasha Levin | Versão estável de longo prazo |
| Versão antiga, já não mantida: 5.5 | 26 de janeiro de 2020 | 5.5.19 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de janeiro de 2020 até abril de 2020) |
| Versão antiga, já não mantida: 5.6 | 29 de março de 2020 | 5.6.19 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de março de 2020 até junho de 2020) |
| Versão antiga, já não mantida: 5.7 | 31 de maio de 2020 | 5.7.19 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de maio de 2020 até agosto de 2020) |
| Versão antiga, já não mantida: 5.8 | 2 de agosto de 2020 | 5.8.18 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de agosto de 2020 até novembro de 2020) |
| Versão antiga, já não mantida: 5.9 | 11 de outubro de 2020 | 5.9.16 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de outubro de 2020 até dezembro de 2020) |
| Versão mais antiga, ainda mantida: 5.10 | 13 de dezembro de 2020 | 5.10.230 | Greg Kroah-Hartman & Sasha Levin | Versão estável de longo prazo |
| Versão antiga, já não mantida: 5.11 | 14 de fevereiro de 2021 | 5.11.22 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de fevereiro de 2021 até maio de 2021) |
| Versão antiga, já não mantida: 5.12 | 25 de abril de 2021 | 5.12.19 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de abril de 2021 até julho de 2021) |
| Versão antiga, já não mantida: 5.13 | 27 de junho de 2021 | 5.13.19 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de junho de 2021 até setembro de 2021) |
| Versão antiga, já não mantida: 5.14 | 29 de agosto de 2021 | 5.14.21 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de agosto de 2021 até novembro de 2021) |
| Versão mais antiga, ainda mantida: 5.15 | 31 de outubro de 2021 | 5.15.173 | Greg Kroah-Hartman & Sasha Levin | Versão estável de longo prazo |
| Versão antiga, já não mantida: 5.16 | 9 de janeiro de 2022 | 5.16.20 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de janeiro de 2022 até abril de 2022) |
| Versão antiga, já não mantida: 5.17 | 20 de março de 2022 | 5.17.15 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de março de 2022 até junho de 2022) |
| Versão antiga, já não mantida: 5.18 | 22 de maio de 2022 | 5.18.19 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de maio de 2022 até agosto de 2022) |
| Versão antiga, já não mantida: 5.19 | 31 de julho de 2022 | 5.19.17 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de julho de 2022 até outubro de 2022) |
| Legenda:Versão antigaVersão mais antiga, ainda mantidaVersão mais recenteVersão de prévia mais recenteLançamento futuro |||||

#### Versão 6.x.y

| Série | Data de lançamento original | Última versão | Mantenedor | Modelo de suporte |
| Versão antiga, já não mantida: 6.0 | 2 de outubro de 2022 | 6.0.19 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de outubro de 2022 até janeiro de 2023) |
| Versão mais antiga, ainda mantida: 6.1 | 11 de dezembro de 2022 | 6.1.119 | Greg Kroah-Hartman & Sasha Levin | Versão estável de longo prazo |
| Versão antiga, já não mantida: 6.2 | 19 de fevereiro de 2023 | 6.2.16 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de fevereiro de 2023 até maio de 2023) |
| Versão antiga, já não mantida: 6.3 | 23 de abril de 2023 | 6.3.13 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de abril de 2023 até julho de 2023) |
| Versão antiga, já não mantida: 6.4 | 25 de junho de 2023 | 6.4.16 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de junho de 2023 até setembro de 2023) |
| Versão antiga, já não mantida: 6.5 | 27 de agosto de 2023 | 6.5.13 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de agosto de 2023 até novembro de 2023) |
| Versão mais antiga, ainda mantida: 6.6 | 30 de outubro de 2023 | 6.6.63 | Greg Kroah-Hartman & Sasha Levin | Versão estável de longo prazo |
| Versão antiga, já não mantida: 6.7 | 7 de janeiro de 2024 | 6.7.12 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de janeiro de 2024 até abril de 2024) |
| Versão antiga, já não mantida: 6.8 | 10 de março de 2024 | 6.8.12 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de março de 2024 até maio de 2024) |
| Versão antiga, já não mantida: 6.9 | 12 de maio de 2024 | 6.9.12 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de maio de 2024 até julho de 2024) |
| Versão antiga, já não mantida: 6.10 | 14 de julho de 2024 | 6.10.14 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de julho de 2024 até outubro de 2024) |
| Versão antiga, já não mantida: 6.11 | 15 de setembro de 2024 | 6.11.11 | Greg Kroah-Hartman | Versão estável de curto prazo (suportada de setembro de 2024 até dezembro de 2024) |
| Versão estável atual: 6.12 | 17 de novembro de 2024 | 6.12.2 | Greg Kroah-Hartman & Sasha Levin | Última versão estável de longo prazo |
| Versão de prévia mais recente de um lançamento futuro: 6.13 | 1 de dezembro de 2024 | 6.13-rc1 | Linus Torvalds | Versão em desenvolvimento |
| Lançamento futuro: 6.14 | TBA | | Linus Torvalds | Versão em desenvolvimento |
| Legenda:Versão antigaVersão mais antiga, ainda mantidaVersão mais recenteVersão de prévia mais recenteLançamento futuro |||||
Outros programadores do Linux que mantêm subsistemas dentro do núcleo incluem:
* Robert Love: núcleo preemptível, inotify.
* Ingo Molnár: arquitetura x86, escalonador, travas.
* David S. Miller: rede, arquitetura Sparc.
* Hans Peter Anvin: arquitetura x86, automontador do núcleo.

### Versões iniciais

* 0.01 - Setembro de 1991 - primeira versão (10.239 linhas de código).
* 0.02 - Outubro de 1991 - primeira versão disponibilizada publicamente.
* 0.12 - Janeiro de 1992 - primeira versão sob GPL (19.645 linhas de código).
* 0.95 - Março de 1992 (20.882 linhas de código).

### Versões estáveis

* 1.0 - Março de 1994 - Suportava apenas máquinas monoprocessadoras i386 (176.250 linhas de código);
* 1.2 - Março de 1995 - Adicionado suporte para Alpha, SPARC e MIPS(310.950 linhas de código);
* 2.0 - Junho de 1996 - Adicionado suporte para mais processadores e foi incluído suporte para SMP (777.956 linhas de código);
* 2.2 - Janeiro de 1999 (1.800.847 linhas de código);
* 2.4 - Janeiro de 2001 (3.377.902 linhas de código);
* 2.6 - Dezembro de 2003 (5.929.913 linhas de código);
* 3.0 - Julho de 2011 (14.647.033 linhas de código);
* 3.1 - Outubro de 2011 (14.770.555 linhas de código);
* 3.2 - Janeiro de 2012 (14.998.737 linhas de código);
* 4.1 - Junho de 2015 (19.512.593 linhas de código);
* 4.7 - Julho de 2016 (21.720.955 linhas de código);
* 4.8 - Outubro de 2016 (22.071.048 linhas de código);
* 4.9 - Dezembro de 2016 (22.348.356 linhas de código);
* 4.10 - Fevereiro de 2017 (22.839.659 linhas de código);
* 4.11 - Abril de 2017 (23.137.402 linhas de código);
* 4.12 - Julho de 2017 (24.170.860 linhas de código);
* 5.0 - Março de 2019 (26.203.035 linhas de código);
* 5.7 - Maio de 2020 (28.442.486 linhas de código);
* 5.8 - Agosto de 2020 (28.994.508 linhas de código);
* 5.9 - Outubro de 2020 (29.461.375 linhas de código).

### Controle de revisões

O código do Linux costumava ser mantido sem ajuda de um sistema de controle de versão, principalmente devido ao desgosto de Linus Torvalds com relação a sistemas centralizados.
Em 2002, o desenvolvimento do Linux mudou para o BitKeeper, um sistema de controle de versões que satisfazia os requerimentos técnicos de Linus Torvalds. BitKeeper foi disponibilizado para Linus e outros gratuitamente, mas não era software livre, o que criou controvérsias. O sistema não oferecia interoperabilidade alguma com sistemas livres como CVS e Subversion.
Em abril de 2005, no entanto, esforços para realizar a engenharia-reversa do sistema BitKeeper por Andrew Tridgell levou BitMover, a empresa que mantinha o BitKeeper, a parar de suportar a comunidade de desenvolvimento Linux. Em resposta, Linus Torvalds e outros, escreveram um novo sistema de controle de versões para a tarefa, chamado Git. O novo sistema foi criado em semanas e em dois meses o primeiro lançamento oficial do núcleo foi realizado utilizando o git. O git logo se tornou um projeto independente do núcleo Linux e foi largamente adotado como sistema de controle de versão/revisão da comunidade de software livre.

### Numeração de versões

O núcleo Linux já passou por três esquemas de numeração de versões.
A primeira versão do núcleo foi 0.01. Esta foi sucedida por 0.02, 0.03, 0.10, 0.11, 0.12 (a primeira versão sob GPL), 0.95, 0.96, 0.97, 0.98, 0.99 e então 1.0. A partir da 0.95 houve vários lançamentos de correções entre as versões.
Após o lançamento da versão 1.0 e até o lançamento da 2.6, as versões eram compostas de "A.B.C", na qual A era definido como a versão do núcleo, B como a grande revisão do núcleo e C a revisão menor do núcleo. A versão era alterada somente quando ocorriam grandes alterações no código e/ou no conceito do núcleo, isto aconteceu duas vezes na história do núcleo: em 1994 (versão 1.0) e em 1996 (versão 2.0). As grandes revisões foram usadas de acordo com o sistema de numeração par-ímpar tradicional. A revisão menor foi alterada quando correções de segurança, defeitos ou novos recursos eram implementados no núcleo. Em 2011 foi lançada a versão 3.0 do núcleo Linux, apesar da versão mudar da 2.x para a 3.x nenhuma grande mudança ocorreu no núcleo, a mudança se deu em comemoração ao vigésimo aniversário do Linux. Na versão 3.x o esquema de numeração continua basicamente o mesmo da versão introduzida a partir do núcleo 2.6.0, mas utilizando o segundo número, por exemplo a versão 3.1 surge poucos meses depois da 3.0. O terceiro número agora é adicionado quando for necessário indicar correções de segurança e correções de erros, por exemplo 3.0.18.
Desde 2004, após o lançamento da versão 2.6.0, os desenvolvedores do núcleo discutiram sobre o esquema de lançamento e versões e por fim, Linus Torvalds e outros decidiram que um ciclo de lançamentos menor seria melhor. Desde então, a versão foi composta de três ou quatro números. Os primeiros dois se tornaram bastante irrelevantes, sendo o terceiro número a versão atual do núcleo e o quarto número conta apenas com atualizações para correções de segurança e defeitos.
O primeiro uso do quarto número ocorreu quando um grave erro, que exigia correção imediata, foi encontrado no código do NFS da 2.6.8. No entanto, não havia outras alterações para legitimar o lançamento de uma nova revisão menor (que teria sido a 2.6.9). Então, a 2.6.8.1 foi lançada, com apenas uma alteração sendo feita para corrigir o defeito. Com a 2.6.11, esta foi adotada como a nova política oficial para versões. Depois, se tornou comum portar grandes correções para versões já lançadas e indicar isto atualizando o quarto número.
Pré-lançamentos regulares de desenvolvimento são nomeados candidatos a lançamento, o que é indicado adicionando o sufixo rc a versão do núcleo, seguido por um número ordinal.
Alguma vezes também, a versão vai possuir um sufixo como tip, indicando outra derivação de desenvolvimento, geralmente, mas não sempre, são adicionadas as iniciais da pessoa que o criou. Por exemplo, ck significa Con Kolivas, ac Alan Cox, etc. Algumas vezes, as letras são relacionadas à área de desenvolvimento principal do ramo do qual o núcleo é compilado, exemplo: wl indica uma compilação de teste de rede sem fio (em inglês: WireLess). Além disso, distribuições GNU/Linux podem criar seus próprios sufixos, com diferente sistemas de numeração e para correções para as suas versões de distribuição "Empresariais" (ex.: estável, mas mais antigo).

### Versões

Torvalds e sua equipa têm continuado a lançar novas versões, consolidando contribuições de outros programadores e introduzindo alterações suas. Antes do lançamento da versão 2.6, o número de versão menor (o segundo componente) par indicavam uma série estável: 1.0.x, 1.2.x, 2.0.x, 2.2.x e 2.4.x; os lançamentos com um número de versão menor ímpar correspondiam a versões de desenvolvimento. O terceiro componente do número de versão correspondia a correções (releases) da versão. A partir da versão 2.6, Torvalds alterou esse padrão, criando um quarto dígito. Assim, a árvore estável e a de desenvolvimento confundem-se. Atualmente, considera-se uma versão tanto mais estável quanto maior o quarto dígito. Enquanto que Torvalds continua a lançar as versões de desenvolvimento mais recentes, a manutenção das versões "estáveis" mais antigas é delegada a outros, incluindo David Weinehal (2.0), Alan Cox e mais tarde Marc-Christian Petersen (2.2), Marcelo Tosatti e depois Willy Tarreau (2.4) e o próprio Torvalds, Andrew Morton e Adrian Bunk (2.6). Para além dos núcleos "oficiais", "árvores" alternativas podem ser obtidas de outras fontes. Distribuidores de sistemas operativos completos mantêm as suas próprias versões do Linux, onde, por exemplo, incluem controladores de dispositivos que não se encontram incluídos na versão oficial.

## Mascote

O mascote do Linux (núcleo e tudo que é relacionado) é um pinguim chamado Tux, criado por Larry Ewing. O motivo pelo qual a mascote é um pinguim é, como Torvalds disse, "O Linus gosta de pinguins. É isso." O nome Tux foi sugerido para representar Torvalds' Unix, e assim ficou.