Linux (núcleo)

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de Linux (kernel))
Ir para: navegação, pesquisa
Linux
Tux.svg
Captura de tela
Inicialização do Linux 2.6.25.17
Desenvolvedor Linus Torvalds, Andrew Morton e milhares de colaboradores
Plataforma alpha, arm, hppa, ia64, loongson, m68k, mips, ppc, ppc64, s390, s390x, sh, sparc32, sparc64, x86, x86-64
Modelo do desenvolvimento Software Livre
Lançamento setembro de 1991 (22 anos)
Versão estável 3.666 (29 de abril de 2013; há 68 semanas e 3 dias)[1] [+/-]
Versão em teste 3.9-rc8 (21 de abril de 2013; há 69 semanas e 4 dias)[2] [+/-]
Idioma(s) Inglês
Escrito em C ~90%
(asm, perl, shell, outras)
Sistema operacional Tipo unix
Gênero(s) Núcleo monolítico
Licença GNU GPLv2 (apenas)[3] [4] e vários borrões binários com licenças variadas[5]
Estado do desenvolvimento Corrente
Página oficial kernel.org (em inglês)
A onipresença da Núcleo Linux

O núcleo do Linux (Linux Kernel) forma a estrutura base do sistema operacional/sistema operativo GNU/Linux, que é um sistema operacional tipo unix[6] . O núcleo do Linux é um dos exemplos mais proeminentes de software livre[7] , pois pode prover alicerce para o desenvolvimento e execução de outros softwares livres.

O núcleo Linux é distribuído sob a licença GNU General Public License versão 2 (GPLv2)[4] , sendo desenvolvido por colaboradores em todo o mundo. O desenvolvimento ocorre a partir da lista de e-mail do núcleo Linux (Linux kernel mailing list).

O Linux foi concebido pelo estudante do Departamento de Ciência da Computação da Universidade de Helsinki na Finlândia[8] , Linus Torvalds com ajuda de vários programadores voluntários por meio da Usenet (antecessora da Internet) em 1991.

História[editar | editar código-fonte]

Em Março de 1991, Linus Torvalds, um estudante com 21 anos de idade na Universidade de Helsinki, 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 [9] .

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/group/comp.os.minix/topics (em inglês) . 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[10] , então em 26 de Agosto de 1991, Torvalds postou a seguinte mensagem para comp.os.minix, um grupo de notícias na Usenet:

Olá todo mundo que utiliza o minix -

Eu estou fazendo um sistema operacional (livre) (apenas como passatempo, não vai ser grande e profissional como o GNU) para clones AT 386(486). Ele têm amadurecido desde Abril e está começando a ficar pronto. Eu gostaria de quaisquer comentários sobre coisas que as pessoas gostam/desgostam no minix, já que meu SO lembra um pouco o minix (mesma disposição física do sistema de arquivos (devido a razões práticas) entre outras coisas).

Eu já portei o bash (1.08) e o gcc (1.40), tudo parece estar funcionando. Isso significa que eu vou conseguir algo prático dentro de alguns meses e eu gostaria de saber que características as pessoas gostariam que houvesse. Todas sugestões são bem vindas, mas eu não prometo que serão incorporadas :-)

Linus (torva...@kruuna.helsinki.fi)

PS. Sim - ele é livre de qualquer código do minix e possui um sistema de arquivos com múltiplas linhas de execução (multi-threaded), ele NÃO é portável (usa troca de contexto do 386 etc) e provavelmente nunca vai suportar nada além dos discos rígidos AT, já que é tudo que eu possuo :-(. [11]

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:

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 rapidamente [18] [19] ;.

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 Helsinki 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[20] .

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[21] .

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[22] . Em 31 de Março de 1992 o alt.os.linux passou a comp.os.linux[23] .

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 um pouco superotimista 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.499.457 linhas de código).[24]

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 13.872.245 linhas de código. O núcleo do Linux a principio 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 do 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.1 do núcleo do Linux com 14.304.901 linhas de código [25] .

Aspectos Legais[editar | editar código-fonte]

Termos de Licenciamento[editar | editar código-fonte]

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 [26] .

Torvalds descreveu o licenciamento sob a GPL como "a melhor coisa que eu já fiz".[27]

Licenciamento GPL[editar | editar código-fonte]

Atualmente, o Linux está licenciado sob a versão 2 da GPL[4] 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[28] . 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[29] . 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[30] . 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"[31] . Desta forma, o núcleo Linux pode ser visto como sendo licenciado quase que exclusivamente pela GPLv2, já que o Linus Torvalds e grande parte dos desenvolvedores utilizam esta licença e não existem perspectivas destes utilizarem a versão 3 [32] .

Módulos carregáveis do núcleo e firmware[editar | editar código-fonte]

É debatido se módulos carregáveis do núcleo (em inglês: LKMs) devem ser considerados Copyleft [33] 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 do Linux[34] . 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."[35] 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 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.[36] 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 [37] [38] . 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[39] .

Marca registrada[editar | editar código-fonte]

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[editar | editar código-fonte]

Para mais detalhes consulte Controvérsias 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 a impressa que eles iriam processar usuários individuais do Linux. A IBM então prometeu defender seus 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 às 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 para direitos autorais.[40] 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,[41] embora a Corte de Apelações dos Estados Unidos para o Décimo Circuito decidiu em Setembro de 2009 que a questão de quem era o dono propriamente dito dos direitos autorais ficava para o júri decidir.[42] O caso foi decidido em 30 de Março de 2010, em favor da Novell.[43]

Submissão do Hyper-V pela Microsoft[editar | editar código-fonte]

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 [44] [45] [46] [47] .

Características técnicas[editar | editar código-fonte]

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[editar | editar código-fonte]

Mapa do Linux e mapa maior e interativo.

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[editar | editar código-fonte]

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.[48] O debate iniciou em 1992, sobre Linux e arquiteturas de núcleo em geral no grupo de discussão comp.os.minix na Usenet.[49] 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,[50] e em 12 de Maio de 2006 Tanenbaum escreveu uma declaração.[51]

Linguagens de programação[editar | editar código-fonte]

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. 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.[52] Outro sucesso foi apresentado em 2009, com um 2.6,22 modificado.[53] [54]

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. O sistema de compilação do Linux oficialmente suporta apenas o GCC, como um compilador de núcleo e controladores.

Portabilidade[editar | editar código-fonte]

Galaxy Nexus, o smartphone com Android

O Linux não seria projetado para ser portável em seu projeto inicial, a principio ele só seria executado em arquiteturas x386. Entretanto com a ajuda da comunidade, atualmente o núcleo do 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 da Blue Gene da IBM. Desde Junho de 2009, o Linux é usado como núcleo em mais de 88% dos sistemas na lista Top 500 de supercomputadores.[55]

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.[56] [57] [58] .

Processos[editar | editar código-fonte]

Um processo é uma instância de um programa em execução[59] . Todo processo no Linux tem 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 desligamento do sistema e sua função é monitorar 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 compartilha 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[editar | editar código-fonte]

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[editar | editar código-fonte]

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[59] [60] ;
  • (ii) proteção de memória, para impedir que um processo utilize um endereço de memória que não lhe pertença [60] ;
  • (iii) compartilhamento de memória—processos diferentes podem compartilhar código ou dados;[60]
  • (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[editar | editar código-fonte]

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.

Pane do núcleo[editar | editar código-fonte]

Pane do núcleo.

Uma pane 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 panes 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 pane 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" [61] . O relatório é automaticamente coletado pelo software kerneloops [62] ou pela extensão kernel oops do abrt [63] e enviado ao kerneloops.org. O Kerneloops.org reúne estes relatórios e publica estatísticas em seu sítio[64] .

Custo estimado[editar | editar código-fonte]

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.[65] 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 ($1,14 bilhões USD).[66]

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 para refazer todo o Fedora 9).[67] 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 de euros (aproximadamente 1.4 bilhões USD) para desenvolvê-lo na União Europeia.[68]

Histórico de recursos[editar | editar código-fonte]

A versão 1.0 do Linux foi lançada em 14 de Março de 1994[69] . 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[70] , ganhou suporte as arquiteturas Alpha, SPARC, e MIPS.

A versão 2.0 foi lançada em 09 de Junho de 1996[71] . 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[72] , 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 leitra para o NTFS da Microsoft[73] .

A versão 2.4.0, lançada em 04 de Janeiro de 2001[74] , continha suporte para Ligar e Usar ISA, USB, e PC Cards[75] . Ele também incluía suporte ao processador PA-RISC da Hewlett-Packard. Também foram incluídos suporte a Bluetooth, [[Logical Volume Manager (Linux)|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[76] . 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é 232 usuários (acima de 216), suporte para até 229 IDs de processo (acima de 215), 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[77] (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 versionamento do núcleo Linux[77] .

Estrutura do código fonte[editar | editar código-fonte]

A organização do código fonte do núcleo do 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 3.2.2 possui 8 arquivos e 21 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 [78] .

Os principais arquivos são [25] :

  • 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.
  • 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[25] :

  • arch: código dependente de arquitetura de processadores, por exemplo, arch/x86, arch/arm/arm64.
  • block: código para acesso a dispositivos de bloco.
  • 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.
  • 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[editar | editar código-fonte]

O processo de inicialização do núcleo do Linux é composto por diversas etapas[79] . 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 do 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 arquivos 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[editar | editar código-fonte]

Linha do tempo[editar | editar código-fonte]

Ref:www.kernel.org[80]

Modelo de desenvolvimento[editar | editar código-fonte]

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 "baunilha" (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 do 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 pelo time 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 "baunilha" 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 "baunilha" 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 "baunilha" 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[81] . 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[82] . 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[83] . O time estável apoiou a ideia[84] e desde de 2010 eles continuar a manter 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[85] . 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[86] [87] . 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[editar | editar código-fonte]

Enquanto que Linus Torvalds supervisa as alterações no código e os lançamentos para as últimas versões do núcleo, ele delegou a manutenção das versões anteriores para outros programadores. Lançamentos importantes tão antigos quanto o 2.0, oficialmente obsoleto com o lançamento do 2.2.0 em Janeiro de 1999, são mantidos conforme a necessidade, embora a uma velocidade muito lenta.

Série Versão Mantenedor Modelo de suporte
2.0 2.0.40[88] David Weinehall Oficialmente obsoleto com o lançamento da versão 2.2.0
2.2 2.2.27-rc2[89] Marc-Christian Petersen (former maintainer Alan Cox)
2.4 2.4.37.7[90] Willy Tarreau (ex-mantenedor Marcelo Tosatti)
2.6.16 2.6.16.62[91] Adrian Bunk Lançamento estável de longo prazo [92]
2.6.27 2.6.27.44[93] Greg Kroah-Hartman[84] Lançamento estável de longo prazo. De 09 de Outubro de 2008[94] a Setembro de 2010[92] [95]
2.6.32 2.6.32.4[96] Greg Kroah-Hartman[97] Lançamento estável de longo prazo. De 03 de Dezembro de 2009 [98] a 2011/2012[95]
2.6.33 2.6.33.20[99] Greg Kroah-Hartman Versão estável de março de 2011 a novembro 2011.
2.6.34 2.6.34.10[99] Paul Gortmaker Versão estável longo prazo de janeiro de 2011 a 201?.
2.6.35 2.6.35.14[99] Andi Kleen Versão estável longo prazo de dezembro de 2010 a 201?.
2.6.39 2.6.39.4[99] Linus Torvalds Última versão estável do núcleo 2.6.
3.0 3.0.78[100] Linus Torvalds Versão estável longo prazo de julho de 2011 a 201?[101]
3.4 3.4.45 Greg Kroah-Hartman Versão estável longo prazo(atualizado constantemente).
3.8 3.8.13 Greg Kroah-Hartman Versão estável com suporte de curto prazo[102]
3.9 3.9.2 Linus Torvalds Última versão estável(atualizado constantemente).
3.10-rc1 3.10-rc1 Linus Torvalds Última versão em desenvolvimento(atualizado constantemente).

Outros programadores do Linux que mantêm subsistemas dentro do núcleo[103] incluem:

Versões iniciais[editar | editar código-fonte]

  • 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.258 linhas de código).

Versões estáveis[editar | editar código-fonte]

  • 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 (13.872.245 linhas de código);
  • 3.1 - Outubro de 2011 (13.997.741 linhas de código);
  • 3.2 - Janeiro de 2012 (14.304.901 linhas de código).

Controle de revisões[editar | editar código-fonte]

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[104] . 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[editar | editar código-fonte]

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[105] . 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 [106] . 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[107] [108] 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 ramal 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 transportes de correções para suas versões de distribuição "Empresariais" (ex. estável, mas mais antigo).

Versões[editar | editar código-fonte]

Tux, mascote do projeto.

Torvalds e sua equipe 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[editar | editar código-fonte]

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 ficou assim.

Referências

  1. The Linux Kernel Archive. Página visitada em 2013-04-29.
  2. Linux Kernel Mailing List. Página visitada em 2013-04-22.
  3. InfoWorld. Linux creator Torvalds still no fan of GPLv3.
  4. a b c COPYING
  5. Stallman, Richard (2006-10-11). Linux, GNU, and freedom. Free Software Foundation. Página visitada em 2007-02-21.
  6. README
  7. Linus Torvalds (2006-09-25). Re: GPLv3 Position Statement.
  8. Marjorie Richardson (1 November 1999). Interview: Linus Torvalds. Linux Journal. Página visitada em 20 August 2009.
  9. MINIX. Minix 3. Disponível em http://www.minix3.org/. Acessado em 25 de Janeiro de 2012
  10. TORVALDS, Linus. Gcc-1.40 and a posix-question. 03 de julho de 1991. Disponível em http://groups.google.com/group/comp.os.minix/msg/a4ea0f118ba82dd0. Acessado em 18 de janeiro de 2009.
  11. "What would you like to see most in minix?". comp.os.minix. (Web link).
  12. WIKIPEDIA. Windows 3.x. Disponível em http://pt.wikipedia.org/wiki/Windows_3.0. Acessado em 25 de Janeiro de 2012
  13. WIKIPEDIA. System 7. Disponível em http://pt.wikipedia.org/wiki/System_7. Acessado em 25 de Janeiro de 2012
  14. WIKIPEDIA. IBM AIX. Disponível em http://en.wikipedia.org/wiki/IBM_AIX. Acessado em 25 de Janeiro de 2012
  15. WIKIPEDIA. Berkeley Software Distribution. Disponível em http://en.wikipedia.org/wiki/4.3BSD#4.3BSD. Acessado em 25 de Janeiro de 2012
  16. MINIX. Minix 3. Disponível em http://www.minix3.org/. Acessado em 25 de Janeiro de 2012
  17. GNU. GNU Hurd. Disponível em http://www.gnu.org/software/hurd/. Acessado em 25 de Janeiro de 2012
  18. GNU. GNU Hurd. Disponível em http://www.gnu.org/software/hurd/. Acessado em 25 de Janeiro de 2012
  19. WIKIPEDIA. Berkeley Software Distribution. Disponível em http://en.wikipedia.org/wiki/4.3BSD#4.3BSD. Acessado em 25 de Janeiro de 2012
  20. "Free minix-like kernel sources for 386-AT". comp.os.minix. (Web link).
  21. Torvalds, Linus. Release Notes for Linux v0.12. The Linux Kernel Archives. Página visitada em 2007-02-21.
  22. (19 January 1992). "Troubles with Partitions". comp.os.minix. (Web link). Retrieved on 2007-01-07.
  23. (31 March 1992). "It's here!". comp.os.linux. (Web link). Retrieved on 2007-01-07.
  24. "Linux Kernel Data."
  25. a b c KERNEL, (2012). The Linux Kernel Archives. Disponível em http://www.kernel.org. Acessado em 27 de Janeiro de 2012
  26. WIKIPEDIA. Software Livre. Disponível em http://pt.wikipedia.org/wiki/Software_livre. Acessado em 25 de Janeiro de 2012
  27. Yamagata, Hiroo (1997). The Pragmatist of Free Software. HotWired. Página visitada em 2007-02-21. Cópia arquivada em 2012-08-25.
  28. Corbet, Jonathan (2006-01-31). GPLv3 and the kernel. LWN.net. Página visitada em 2007-02-21.
  29. Torvalds, Linus (2000-09-08). Linux-2.4.0-test8. Linux-kernel mailing list archive. Unix Systems Support Group of Indiana University. Página visitada em 2007-02-21.
  30. Cox, Alan (2006-01-20). Re: GPL V3 and Linux. Linux-kernel mailing list archive. LWN.net. Página visitada em 2007-02-21.
  31. Shankland, Stephen (25 September 2006). Top Linux programmers pan GPL 3. News.com. Página visitada em 2007-02-21.
  32. WIKIPEDIA. Linux. Disponível em http://pt.wikipedia.org/wiki/Linux. Acessado em 25 de Janeiro de 2012
  33. WIKIPEDIA. Derivative Work. Disponível em http://en.wikipedia.org/wiki/Derivative_work. Acessado em 25 de Janeiro de 2012
  34. WIKIPEDIA. Derivative Work. Disponível em http://en.wikipedia.org/wiki/Derivative_work. Acessado em 25 de Janeiro de 2012
  35. Re: Linux GPL and binary module exception clause?
  36. Stallman, Richard (2006-10-11). Linux, GNU, and freedom. Free Software Foundation. Página visitada em 2007-02-21.
  37. Linux-libre project. www.fsfla.org. Página visitada em 2009-10-05.
  38. Trisquel GNU/Linux-libre. trisquel.info. Página visitada em 2009-10-05.
  39. Debian 6.0 "Squeeze" to be released with completely free Linux Kernel
  40. Report from the Courthouse 7 March. Groklaw article
  41. Court Rules: Novell owns the UNIX and UnixWare copyrights. Groklaw article
  42. Ryan, Justin (August 2009). SCO Will Try Again. Página visitada em 2009-08-30.
  43. Harvey, Tom (2010-03-30). Jury says Novell owns Unix copyrights. The Salt Lake Tribune. MediaNews Group. Página visitada em 2010-03-30.
  44. Paul, Ryan (July 2009). Microsoft aims at VM market with Linux kernel code offering. Página visitada em 2009-07-22.
  45. Holwerda, Thom (July 2009). Microsoft's Linux Kernel Code Drop Result of GPL Violation. Página visitada em 2009-07-23.
  46. Microsoft (July 2009). Microsoft Contributes Linux Drivers to Linux Community. Página visitada em 2009-07-23.
  47. Richmond, Gary (August 2009). Yes Linus, Microsoft hating is a disease. And it's a pandemic. Página visitada em 2009-08-01.
  48. O'Reilly (1999). The Tanenbaum-Torvalds Debate. O'Reilly. Página visitada em 2006-11-22.
  49. (29 January 1992). "LINUX is obsolete". comp.os.minix. (Web link). Retrieved on 2006-05-10.
  50. Torvalds, Linus (9 May 2006). Hybrid kernel, not NT. Página visitada em 2007-01-06.
  51. Tanenbaum, Andy (12 May 2006). Tanenbaum-Torvalds Debate: Part II. Página visitada em 2007-01-06.
  52. Linux kernel patch for Intel Compiler
  53. [1]
  54. [2]
  55. Operating system Family (em ingles). Top 500 Supercomputer Sites (June 2009).
  56. Greg Kroah-Hartman (2010-02-02). Android and the Linux kernel community (em ingles). Página visitada em 2010-02-03.
  57. Linux developer explains Android kernel code removal (em ingles). ZDNet (2010-02-02). Página visitada em 2010-02-03.
  58. Maemo platform described as beeng based on Linux kernel (em ingles). Maemo community (2010-04-09). Página visitada em 2010-04-09.
  59. a b TANENBAUM, Andrew. Sistemas operacionais modernos. Rio de Janeiro: LTC. 1999.
  60. a b c STALLINGS, William. Operating systems: internals and design principles. 5.ed. Upper Saddle River: Pearson Prentice Hall. 2005.
  61. http://lkml.indiana.edu/hypermail/linux/kernel/0303.1/0009.html.Report
  62. http://linux.die.net/man/8/kerneloops
  63. http://fedoraproject.org/wiki/Features/ABRTF12
  64. http://www.kerneloops.org/
  65. David A. Wheeler. Linux Kernel 2.6: It's Worth More!.
  66. Economic impact of FLOSS on innovation and competitiveness of the EU ICT sector, Table 3 on page 50.
  67. Estimating Total Development Cost Of a Linux Distribution, Tabela na página 6.
  68. The Billion Dollar Kernel. Linux.slashdot.org (2010-02-24). Página visitada em 2010-11-12.
  69. Kernel 1.0 Source Code Release (acessado pela última vez em 2008-10-27)
  70. Kernel 1.2 Source Code Release (acessado pela última vez em 2008-10-27)
  71. Kernel 2.0.x Source Code Releases (acessado pela última vez em 2008-10-27)
  72. Kernel 2.2.x Source Code Releases (acessado pela última vez em 2008-10-27
  73. The Wonderful World of Linux 2.2 (acessado pela última vez em 2008-10-27)
  74. Kernel 2.4.x Source Code Releases (acessado pela última vez em 2008-10-27)
  75. The Wonderful World of Linux 2.4 (acessado pela última vez em 2008-10-27)
  76. Kernel 2.6.x.y Source Code Releases (last checked 2008-10-27)
  77. a b Linux 3.0-rc1, Linus Torvalds, 30 May 2011, accessed 31 May 2011
  78. Rusling, David A. (1999), "The Linux Kernel". Disponível em http://tldp.org/LDP/tlk/tlk.html.
  79. Jones, Tim M, (2006), "Por Dentro do Processo de Inicialização do Linux". Disponível em: http://www.ibm.com/developerworks/br/library/l-linuxboot/. Acessado em 31 de Janeiro de 2012
  80. [3]
  81. [4]
  82. [5]
  83. [6]
  84. a b Greg Kroah-Hartman (2009-09-08). "Re: 2.6,27 maintenance plans after 2.6.32 is released". linux-kernel mailing list. http://marc.info/?l=linux-kernel&m=125245118518458. 
  85. 2.6.23-rc6-mm1, "This Just Isn't Working Any More", from KernelTrap
  86. [7]
  87. [8]
  88. David Weinehall (2004-02-08). [ANNOUNCE] Linux-kernel 2.0.40 aka ``The Moss-covered Tortoise''. Cópia arquivada em 2012-05-30.
  89. Marc-Christian Petersen (2005-01-13). Linux 2.2.27-rc2. Cópia arquivada em 2012-05-30.
  90. Willy Tarreau (2009-07-26). "Linux 2.4.37.7". linux-kernel mailing list. http://marc.info/?l=linux-kernel&m=125761436627901. 
  91. Adrian Bunk (2008-07-21). "Linux 2.6.16.62". linux-kernel mailing list. http://marc.info/?l=linux-kernel&m=121667337007967. 
  92. a b http://marc.info/?l=linux-kernel&m=122375909403298&w=2
  93. Greg Kroah-Hartman (2009-09-15). "Linux 2.6.27.44". linux-kernel mailing list. http://marc.info/?l=linux-kernel&m=126384067101404. 
  94. http://kernelnewbies.org/Linux_2_6_27
  95. a b http://lkml.indiana.edu/hypermail/linux/kernel/1001.2/00858.html
  96. Greg Kroah-Hartman (2010-01-18). "Linux 2.6.32.4". linux-kernel mailing list. http://lkml.indiana.edu/hypermail/linux/kernel/1001.2/00844.html. 
  97. Greg Kroah-Hartman (2010-01-18). "Stable kernel tree status, January 18, 2010". linux-kernel mailing list. http://lkml.indiana.edu/hypermail/linux/kernel/1001.2/00858.html. 
  98. http://kernelnewbies.org/Linux_2_6_32
  99. a b c d Linux 2.6.32.47. gmane.org. Página visitada em 2010-11-08.
  100. [9]
  101. http://www.h-online.com/open/features/Kernel-Log-15-000-000-lines-of-code-3-0-promoted-to-long-term-kernel-1408062.html?page=2
  102. http://www.linuxfoundation.org/news-media/blogs/browse/2013/02/linux-38-not-longterm-kernel
  103. See the Linux MAINTAINERS file.
  104. Linux Kernel Mailing List (2005-06-17). Linux 2.6.12.
  105. Linux Kernel Archives - Volume 1 (Riley Williams)
  106. [10]
  107. [11]
  108. [12]

Ver também[editar | editar código-fonte]

  • TORVALDS, Linus; DIAMOND, David (2001). Just For Fun: The story of an accidental revolutionary. HarperBusiness. ISBN 0-06-662072-4 (hardcover); HarperAudio ISBN 0-694-52539-1 (audio tape, abridged ed., read by David Diamond) - on the beginnings of the Linux kernel; No Brasil: Só por Prazer. Campus. ISBN 85-352-0801-1.
Portal A Wikipédia possui o portal:
Portal A Wikipédia possui o portal:
Wikilivros
O Wikilivros tem um livro chamado Guia foca Linux
Commons
O Commons possui imagens e outros ficheiros sobre Linux (núcleo)

Ligações externas[editar | editar código-fonte]

 ver·editar  Portal do LinuxTux.svg


Arch  · Debian  · Fedora  · Ubuntu  · Mandriva  · Linux Mint  · OpenSUSE  · PCLinuxOS  · Puppy  · Sabayon  · Slackware Linux  · Kurumin  · Big Linux  · Poseidon Linux  · Ekaaty Linux  · DreamLinux