O Maravilhoso Mundo do Linux 2.6
Joseph Pranevich - jpranevich  kniggit.net
Última atualização: %%date(%c) - Arquivo original em 

%! Style: wwol26.css
%! Encoding: iso8859-1
%! Cmdline: -t html --toc

=O Maravilhoso Mundo do Linux 2.6=

  Apesar de que parece que foi ontem que estávamos iniciando nossos
  primeiros sistemas Linux 2.4, o tempo passou e a equipe de desenvolvimento
  do kernel está próxima da conclusão do kernel v2.6. Este documento tentará
  descrever muitas das novas funcionalidades do kernel 2.6 (com um ênfase na
  versão para i386 do Linux). Diferente de todos os anúncios de pré-releases
  de softwares closed-source, todas as funcionalidades descritas aqui já
  estão disponíveis (algumas com menos bugs que outras) no kernel de
  desenvolvimento 2.5 do Linux (por tradição kerneis com número ímpar na
  versão são somente para os intrépidos). Dito isto, algumas das
  funcionalidades aqui descritas podem vir a ser removidas ou marcadas como
  "experimental" na versão final do 2.6. O desenvolvimento do kernel está
  atualmente em uma fase de congelamento de funcionalidades, e é provável
  que a versão final não irá desviar-se muito do que está descrito aqui. É
  preciso notar também que algumas das "novas" funcionalidades aqui
  discutidas podem vir a ser portadas para a versão 2.4 do Linux após
  aparecerem primeiro no Linux 2.6, ou de forma oficial, ou pelo trabalho de
  alguma distribuição.

  Para tornar este documento um pouco mais complicado, a numeração exata da
  próxima versão do Linux ainda não foi decidida. O número de revisão mais
  provável é v2.6, mas existem algumas sugestões de que seja escolhido o
  número v3.0 devido à inclusão do suporte a NUMA e MMU-less nesta versão
  (mais que na anterior). Por conveniência, este documento irá sempre se
  referir à próxima versão do kernel como sendo v2.6, e no tempo presente.

  O que você está lendo é o primeiro rascunho deste documento, do dia
  13/7/2003, e baseado no kernel de desenvolvimento 2.5.75. Novas revisões
  serão liberadas, conforme o trabalho final no kernel seja completado, mas
  este documento não será "oficialmente" fechado senão após o lançamento da
  versão final do Linux. E, como este é o primeiro rascunho, pode conter
  erros ou omissões. Se você encontrar um ou outro e me avisar, eu ficarei
  feliz em corrigí-los.

==A História...==

  O kernel do Linux foi iniciado em 1991 por Linus Torvalds como um Sistema
  Operacional Minix-like para seu 386. Linus originalmente quis nomear o
  novo sistema Freax, mas todos tivemos a sorte dele ter mudado de idéia. A
  primeira versão oficial do Linux 1.0 foi em março de 1994, que incluiu
  suporte oficial somente para o i386 e somente para máquinas com um único
  processador. O Linux 1.2 foi lançado em março de 1995 e foi a primeira
  versão a incluir suporte oficial para diferentes tipos de sistemas
  (especificamente, Alpha, Sparc, e MIPS). O Linux 2.0 foi lançado em junho
  de 1996 e incluiu suporte para um número de novas arquiteturas, mas
  principalmente foi a primeira revisão a suportar máquinas
  multi-processadas (SMP). O Linux 2.2 foi lançado em janeiro de 1999 como
  um melhoramento incremental que tinha uma performance muito melhorada em
  máquinas multi-processador e novamente suportava uma gama maior de
  hardware. E, finalmente, o Linux 2.4 foi lançado em janeiro de 2001 como
  um grande melhoramento de escalabilidade com o SMP, mas também incluindo a
  a integração de muitas funcionalidades de desktop na linha principal,
  incluindo USB, suporte a PC Card (aka PCMCIA), plug-and-play interno,
  etc. O Linux 2.6 não significará apenas um melhoramento nestas
  funcionalidades, mas também será outro "grande salto" à medida que o Linux
  trabalha bastante no melhoramento do suporte tanto a sistemas
  significativamente maiores e significativamente menores (PDAs e outros
  dispositivos).

=Suporte Multi Plataforma=

  Um dos pontos fortes dos Sistemas Operacionais Linux (como o GNU Operating
  System, o SO e ambiente C distribuído com o Linux e que
  geralmente não é reconhecido como uma entidade separada) é que ele suporta
  um amplo leque de hardware e plataformas. Todas as versões desde a 1.2 tem
  incluído suporte para novos tipos de processadores e funcionalidades. A
  versão 2.6 do kernel Linux não é exceção a esta tendência, e, enquanto
  esta pode não impactar diretamente o uso do Linux em sistemas Intel, é
  muito importante que o Linux esteja tão largamente disponível quando
  possível.

==Escalando para Baixo -- Linux para Sistemas Embarcados==

  Uma das principais formas que o Linux 2.6 aumentou seu suporte para
  múltiplas plataformas foi pela aceitação de muito do projeto uClinux
  dentro do kernel principal. O projeto uClinux (possivelmente pronunciado
  "you-see-Linux", mas mais provavelmente pronunciado com o caracter Grego
  "mu") é o projeto Linux para Micro. Por muitos anos, este
  desdobramento do Linux tem sido um carro-chefe para o suporte de muitos
  processadores embarcados, e é excelente tê-lo mais integrado na linha
  principal do Kernel.

  Diferente dos ports normais do Linux, os ports embarcados descritos aqui não
  tem todos as mesmas funcionalidades do Linux normal devido a limitações de
  hardware. A diferença principal é que estes ports contemplam processadores
  que não tem uma MMU (no mundo Intel, as MMUs foram introduzidas com o 386).
  Apesar destes sistemas serem sistemas Linux multi verdadeiros, eles
  não tem proteção de memória (de forma que qualquer programa pode causar
  falhas em qualquer outro programa) e algumas chamadas de sistema que tratam
  de novos processos estão desabilitadas. E como eles não tem proteção de
  memória (e também quase toda segurança), isto implica que eles não são úteis
  para sistemas multi-usuários.

  Existem quatro linhas principais de processadores embarcados suportados pelo
  Linux 2.6. O primeiro destes novos ports é para a nova linha Motorola de
  processadores m68k embarcados. Estes processadores tem nomes como Dragonball
  e ColdFire e estão incluídos em sistemas e placas de teste feitas pela
  Motorola, Lineo, Arcturus, e outros. A maioria dos usuários Linux terão mais
  familiaridade com estes processadores já que estes estão dentro dos Palm
  Pilots, começando com o primeiro (o Palm 1000), até o Palm III.
  Infelizmente, o suporte para processadores m68k mais s antigos sem MMUs (como
  os 68000s usados pelos primeiros Macintoshes) ainda não está coberto por
  este software. Outras novas plataformas embarcadas suportadas incluem a séria
  H8/300 da Hitachi (ainda não inclui o H8S, mas pode vir a ser integrado em
  breve) e o processador Nec v850.

  É difícil sub-enfatizar a principal mudança de arquitetura que está
  acontecendo com o suporte a sistemas sem MMU no Linux 2.6. Todas as versões
  anteriores do Linux foram derivadas, mesmo que indiretamente, das limitações
  inerentes ao trabalho inicial de Linus em um Intel 80386. Extrapolando
  nesta direção, é possível que outros hardwares mas antigos também possam vir
  a ser suportados no futuro (de fato, existem projetos trabalhando com este
  objetivo) e muitas e excitantes portas tem sido abertas. Diferente do
  trabalho em processadores embarcados modernos e em produção incluídos aqui,
  o suporte a processadores mais antigos será considerado um objetivo de hobby
  e provavelmente não muito úteis para usuários finais (e possivelmente não
  será considerado importante o suficiente para ser incluído nas versões
  oficiais do Linux no futuro).

  Apesar de não ser tecnicamente uma parte da união com o uClinux (por que
  inclui uma MMU), versões recentes do Linux também incluem suporte aos
  processadores ETRAX CRIS ("Code Reduced Instruction Set") da Axis
  Communications (especificamente, o ETRAX 100LX e mais novos são suportados).
  O suporte para este processador foi incluída durante o ciclo de
  desenvolvimento do 2.4, mas foi introduzido após o 2.4.0, por isto merece
  uma menção. É um processador embarcado que é principalmente para uso com
  equipamentos de rede. O ETRAX100 é um processador relacionado mas sem MMU
  que é suportado pelo uClinux, mas o suporte para o mesmo na linha principal
  do kernel Linux não foi integrado.

==Suporte ao Opteron - Linux 64-bit para o Consumidor==

  Outro processador que foi integrado durante o ciclo de desenvolvimento do
  2.4.x mas que merece ser mencionado aqui é o novo suporte do Linux para os
  chips AMD Opteron (baseados na arquitetura AMD64). Este é um novo chip com
  retro-compatibilidade com processadores clones de Intel existentes e que
  pode receber apoio até da Microsoft. Se este processador ou algum da família
  Itanium da Intel virá a se tornar o padrão //de facto// para produtos
  64-bits é algo que ainda veremos.

  Enquanto as últimas versões do kernel 2.4 suportam este processador, existem
  limitações que impedem que o mesmo esteja pronto para produção. A limitação
  mais crítica para os usuários high-end pode ser a de que as aplicações estão
  limitadas individualmente a 512 MB de RAM cada. Adicionalmente, o suporte
  para a execução de binários x86 (32-bit) na plataforma foi melhorado.

==Suporte de Subarquiteturas==

  Além das várias novas arquiteturas de processador que o Linux 2.6 suporta, a
  nova versão do Linux também inclui um novo conceito chamado de
  "subarquiteturas". Anteriormente, o Linux partia da suposição de que os
  tipos de processadores e de hardware andavam juntos. Ou seja, que
  processadores descendentes do i386 eram somente utilizados em servidores
  descendentes do PC/AT. No Linux 2.4 esta hipótese foi abandonada para o i386
  com a adição do suporte à Visual Workstation da SGI, uma plataforma
  "legacy-less" rodando um chip Intel (de fato, a hipótese foi abandonada bem
  antes em muitas outras arquiteturas - por exemplo, o m68k tem há muito tempo
  suportado Amigas, Macintoshes, e outras plataformas). A grande mudança no
  Linux 2.6 é que esta funcionalidade e conceito foi tornada padrão, de forma
  que todas as arquiteturas tratam este aspecto de forma similar, mais limpa,
  que permite uma separação mais clara somente dos componentes que precisam
  ser separados.

  Com esta padronização vieram duas novas plataformas para suportar o i386. A
  primeira é a arquitetura Voyager da NCR. Esta é um sistema SMP (desenvolvido
  antes da especificação Intel MP que é o padrão atual) que suporta
  processadores 486-686 em configurações de até 32 processadores. O número
  real de configurações que foram vendidas com esta arquitetura é
  relativamente pequeno, e nem todas as máquinas tem suporte atualmente (as
  mais antigas não são mais suportadas). A segunda arquitetura suportada é a
  plataforma PC-9800, mais difundida, desenvolvida pela NEC na plataforma
  (praticamente) dominante no Japão até pouco tempo. As máquinas PC-9800
  originais eram vendidas com um processador 8086 e a linha eventualmente
  evoluiu e amadureceu (em paralelo com os descendentes de AT) até possuir
  processadores da classe Pentium e suporte a SMP (obviamente, o suporte para
  Linux está limitado ao 80386 ou melhor). Apesar de ser completamente
  desconhecido nos EEUU, as versões dos produtos Microsoft até o Windows 95
  foram portadas para serem executadas neste hardware. A linha foi
  oficialmente descontinuada pelo fabricante em favor de PCs mais
  "padronizados".

  Ao formalizar o suporte Linux a estes tipos de hardware levemente
  diferentes, torna-se mais fácil permitir que o sistema operacional seja
  portado a outros sistemas, como equipamentos de armazenamento dedicados e
  outros componentes que usam tipos de processadores dominantes na indústria.
  Para ser claro, esta subdivisão não deve receber excessiva atenção. Estas
  sub foram separadas por que certos componentes de baixo nível do
  sistema (como o roteamento de IRQ) são um pouco ou radicalmente diferentes.
  Isto é diferente de executar o Linux em um X-Box, por exemplo, onde
  relativamente pouco mais que alguns drivers de hardware e algumas
  esquisitisses separam o sistema de um sistema i386 "genérico". O suporte ao
  X-Box não deverá ser uma sub.

==Escalando para Cima - NUMA e os Supercomputadores==

  Além do suporte a estes novos tipos de hardware, a nova versão do kernel
  Linux também inclui funcionalidades que o tornam mais aceitável em
  servidores maiores (alguns com processadores i386, outros não). Como este
  suporte é bem novo no Linux, muito trabalho de otimização ainda precisa ser
  feito. Esta é uma área em que o Linux está crescendo e amadurecendo
  rapidamente, e podemos esperar que ele venha a ser um forte contendor neste
  espaço em relativamente pouco tempo.
  
  Uma das grandes mudanças neste respeito é o novo suporte do Linux para
  servidores NUMA. NUMA (ou "Non-Uniform Memory Access") está um passo adiante
  do SMP no mundo do multi-processamento e é um passo adiante para a
  performance em sistemas que possuem muitos processadores. Os sistemas SMP
  foram projetados com algumas das mesmas limitações de suas contra
  uniprocessadas. Uma das ramificações mais limitantes desta escolha de
  projeto é que é baseado em um único conjunto de memórias que é igualmente
  acessível a todos os processadores. Em um sistema multi-processado, existe
  uma taxa de contenção extremamente alta entre os múltiplos processadores
  para o único barramento de memória, levando a gargalos de performance. Os
  servidores NUMA vão além por introduzir o conceito que, para um processador
  específico, algumas memórias estão mais perto que outras. Uma maneira fácil
  (e não muito errada tecnicamente) de imaginar isto é que você tem um sistema
  com placas de expansão contendo CPUs, memória e possivelmente outros
  componentes (I/O, etc.). Existem muitas outras placas em um sistemas e mesmo
  que elas possam todas conversar entre si, é bem claro que as CPUs tem o
  melhor tempo quando se comunicam com a memória local (a memória na própria
  placa em vez de em uma placa separada). De várias formas, a nova arquitetura
  NUMA é um exemplo de um cluster bem unido.
  
  Para suportar apropriadamente estas novas máquinas NUMA, o Linux teve que se
  adaptar em vários aspectos para tornar o novo modelo eficiente. Para
  começar, uma topologia de API interna foi criada para permitir que os
  componentes internos do kernel entendessem os relacionamentos de um
  processamento ou um conjunto de memórias aos dispositivos de I/O e entre si.
  Com este suporte, o escalonador de processos do Linux é agora capaz de
  entender estes relacionamentos e tentará otimizar as tarefas para o melhor
  uso dos recursos locais. Adicionalmente, muitas máquinas NUMA são
  construídas deforma que possuem "buracos" no espaço da memória linear
  "entre" os nós. O novo kernel é capaz de tratar estes casos de
  descontinuidade de uma forma bem razoável. Existem muitas outras mudanças
  internas que foram feitas para permitir ao Linux o suporte a estas máquinas
  de alto desempenho, e esta é definitivamente uma área de crescimento para o
  kernel como um todo. No decurso do próximo ano, podemos esperar este suporte
  eficiência e outros melhoramentos no suporte do Linux a estes sistemas de
  alto desempenho.

=Aspectos Internos do Linux=

  Além de suportar mais e novos tipos de hardware, o Linux 2.6 também oferece
  melhoramentos no suporte para as plataformas existentes conforme elas (e o
  Linux) evoluem. Estão aí incluídas as otimizações específicas de CPU para o
  Crusoe da Transmeta, o Pentium4 Xeon da Intel, o Pentium 3-M, o Pentium 4-M,
  e os processadores para dispositivos móveis AMD. As novas versões do Linux
  também são capazes de contornar um bug em alguns Athlons. E enquanto muitos
  usuários não percebem o bug, o Linux 2.6 também resolveu um problema em que
  alguns sistemas com mais de 16 processadores congelam ou reiniciam.

==Hyperthreading==

  Apesar de não ser novo no Linux 2.6, o kernel começou incluindo suporte para
  "hyperthreading" nos processadores Intel P4 com a versão 2.4.17 (esta
  funcionalidade está incluída aqui porque ela não era parte da versão inicial
  do Linux 2.4 e também devido a grandes mudanças que ocorreram desde então).
  O hyperthreading é a capacidade de um único processador aparecer como dois
  (ou mais) processadores a partir da perspectiva do sistema operacional. A
  coisa mais incrível sobre isto é que o Linux foi o primeiro SO a trazer esta
  funcionalidade ao mercado, apesar de que processadores compatíveis terem
  sido lançados pela Intel quase um ano atrás. Existem boatos de que a
  Microsoft não está certa se vai cobrar a licença para um processador com
  hyperthreading como uma ou duas CPUs. O modelo aberto do Linux (e a ausência
  de licenças) permitiram ao Linux OS ser o primeiro a suportar esta nova
  funcionalidade. Obviamente, um único processador que finge ser dois ainda é
  um único processador e a performance não melhora muito.

  Outra coisa que é nova no 2.5 é que o escalonador e outros componentes foram
  otimizados de forma que o hyperthreading em uma CPU pode representar um
  ganho. Sob o 2.4, isto não acontece sempre e algumas tarefas ficam mais
  lentas se o hyperthreading está habilitado.

==O Tamanho Importa - Avanços na Escalabilidade==

  Além do suporte ao NUMA, o Linux 2.6 também tem outras alterações para
  servidores Intel que estão no topo da cadeia alimentar. Primeiro e
  principalmente está o suporte completo para o PAE da Intel ("Physical
  Address Extension") que permite que a maioria dos novos sistemas 32-bit x86
  acessem até 64 GiB de RAM, mas em um modo paginado. Além disso, através de
  um suporte melhorado ao APIC e outras mudanças, o balanceamento de IRQ
  melhorou significativamente em sistemas multiprocessados.

  Em muitos outros aspectos, os limites internos tem sido aumentados quando
  possível. O número de usuários únicos em um sistema Linux saltou de 65.000
  para mais de 4 bilhões (16-bit para 32-bit). Isto torna o Linux mais prático
  em grandes servidores de arquivo e autenticação, em que era possível atingir
  o limite anterior. De forma semelhante, o número de PIDs (Process IDs) antes
  de retornar ao início aumentou de 32.000 para 1 bilhão. Esta alteração,
  combinada com outras eficiências no subsistema PID, irá ajudar a melhorar a
  performance inicial de aplicações em sistemas bastante atarefados ou com
  vida longa. Apesar do número máximo de arquivos abertos não ter sido
  aumentado, com o kernel 2.6 o Linux não irá exigir que você pré-configure o
  limite, este número irá auto-escalar. E, finalmente, o Linux2.6 irá incluir
  um suporte 64-bit melhorado para dispositivos de bloco que suportarem o
  mesmo, mesmo em plataformas 32-bit como o i386. Isto permite filesystems de
  até 2TB.

==Interatividade e Responsibilidade do Kernel==

  Uma das áreas de foco do Linux 2.6 tem sido tornar o sistema mais responsivo
  para usuários de desktop e outros usos que necessitam de um alto grau de
  controle sobre quando os eventos acontecem. Cada um destes objetivos tem
  desafios bem diferentes, mas existem muitas alterações que podem beneficiar
  a ambos.

  Uma alteração interna principal presente no kernel 2.6 que não pode ser
  subestimada é que o próprio kernel é agora preemptivo. Em todas as versões
  anteriores do Linux, quando o SO estava fazendo alguma coisa no kernel, ele
  não poderia ser interrompido (e em máquinas multi-processadas, isto era
  verdadeiro em uma base por-CPU). A partir do Linux 2.6, o kernel agora
  permite que seja interrompido em meio a uma tarefa de forma que as
  aplicações possam continuar a ser executadas mesmo se o kernel esteja
  fazendo alguma coisa complicada (para evitar as race conditions óbvias que
  esta funcionalidade pode causar, o kernel tem certas seções de código
  bloqueadas, de forma que não possam ser interrompidas enquanto em execução).
  O benefício primário desta alteração é que a performance interativa (para
  usuários de desktop, por exemplo) recebeu um melhoramento, e o sistema irá
  "parecer" mais rápido para coisas como entrada de usuário.

  Uma outra mudança que irá ajudar a fazer do Linux um sistema operacional
  mais responsivo com aplicações que suportam o mesmo é a inclusão do suporte
  para novas "futextes" (ou "Fast User-Space Mutexes", se isto ajuda). Futexes
  são uma forma em que múltiplos processos ou threads podem serializar eventos
  de forma que eles não se atropelem (uma "race condition"). Diferente das
  operações mutex tradicionais que a maioria das bibliotecas de threading
  suportam, este é parcialmente baseado no kernel (mas somente no caso de
  contenção) e também suporta a configuração de prioridades para permitir que
  aplicações ou threads de prioridade elevada acessem o recurso concorrido
  primeiro. Ao permitir que um programa especifique que uma tarefa em espera é
  mais importante que outra, ele permite maior responsividade no que podem ser
  as áreas mais críticas de tempo de uma aplicação.

  Os subsistemas de I/O também tem experimentado grandes alterações para
  permitir que se torne mais responsivos sob todos os tipos de carga. Estas
  alterações incluem uma reescrita completa do subsistema de escalonamento de
  I/O, o código do kernel que determina quais processos vão ler os
  dispositivos e quando. A camada recém reescrita tem agora uma melhor
  capacidade de garantir que nenhum processo fique travado aguardando em linha
  por I/O por muito tempo, ao mesmo tempo que permite as antigas otimizações
  que certificam-se que as leituras, por exemplo, aconteçam na ordem mais
  eficiente para o hardware.

  Enquanto os programadores de aplicações "real time" (RTOS) irão beneficiar-se
  destas mudanças, o Linux 2.6 não será um kernel real-time completo.
  Entretanto, esta e outras mudanças criam as bases para que uma versão
  completamente RTOS do Linux seja possível, e patches externos tem sido
  disponibilizados (embora ainda não aprovados e integrados em uma versão
  oficial do kernel) que podem oferecer este suporte para usuários e
  programadores que precisam da mesma agora.

==Subsistema de Módulos - Drivers de Dispositivos==

  O susbsitema de módulos é outra área que avançou bastante com o advento do
  Linux 2.6. Muito do código foi reescrito com a intenção de melhorar a
  estabilidade e tornar o sistema mais transparente. Além destas alterações
  externas óbvias, muitas coisas mudaram internamente, na forma que o kernel
  vê e usa os módulos.

  A primeira e mais óbvia mudança (pelo menos funcionalmente) nos drivers de
  dispositivos no Linux 2.6 é que a extensão dos arquivos mudou. Em vez de
  ser ".o" (uma extensão comum para arquivos "objeto", arquivos geralmente
  criados durante a compilação de qualquer programa, antes que a fase de
  linking seja feita para criar uma aplicação executável), a nova extensão é
  ".ko" ("kernel object"). Esta é uma alteração apenas cosmética, e apenas
  torna mais claro que os módulos não são realmente arquivos intermediários.

  Completamente não cosmético é o trabalho extensivo para eliminar as race
  conditions que tem estado presentes no código por muitas revisões. O xis do
  problema é que era possível ter um dispositivo usando um módulo enquanto o
  mesmo estava sendo descarregado, mas após o módulo ter feito as verificações
  para garantir que ninguém o estava usando. O novo código de módulos do
  kernel torna esta condição mais difícil de disparar. Para levar esta solução
  um passo adiante, também é agora possível simplesmente desabilitar a
  descarga de módulos em geral.

  Uma maior transparência é outra funcionalidade no novo subsistema de
  módulos. Em quase todas as versões anteriores do Linux, os módulos eram
  espertos o suficiente para detectar dispositivos que podiam suportar fazendo
  pesquisas nos barramentos (como o PCI, ISA PnP, e PC Card) por IDs de
  dispositivos que ele reconhecia. No Linux 2.6, muito deste suporte foi
  padronizado e tornado externo ao kernel, de forma que será fácil para
  programas externos e carregadores de módulos ver quais dispositivos um
  módulo em particular irá suportar. Isto irá permitir que os vários programas
  de gerenciamento de hardware (como o "kudzu" da RedHat) tomar decisões
  inteligentes sobre hardware, mesmo quando eles não estão familiarizados com
  os dispositivos em que estão trabalhando. E, no caso de você saber mais que
  a versão atual do driver, ainda é possível (via uma interface com o novo
  filesystem "sys", veja abaixo) forçar um driver a tentar trabalhar com um
  dispositivo específico, mesmo se ele não sabe que é suportado.

==Outros Melhoramentos==

  Além das muitas alterações descritas acima, existem outras mudanças internas
  genéricas no Linux que irão melhorar a performance em muitos casos. Estas
  incluem mais remoções do "Big Kernel Lock" (travas não granulares que eram
  usadas nos primórdios do suporte do Linux a multi-processadores),
  otimizações nas leituras e escritas do filesystem, e manipulação de pequenos
  arquivos, e outras.

  Existe mais um problema de estabilidade que foi resolvido com o Linux 2.6:
  não é mais possível alocar mais que a quantia máxima de RAM (mais swap) que
  você tem no sistema. Anteriormente, o Linux iria permitir que a chamada a
  malloc() ("memory allocation") tivesse sucesso em alguns casos, mesmo quando
  não houvesse mais memória livre. A lógica de sobrecompromisso foi revisada e
  este caso deverá ser agora impossível (obviamente, se você usar toda a RAM
  do sistema, mesmo sem exceder o máximo, você tem problemas piores para se
  preocupar).

  O Linux sempre foi um divulgador dos benefícios dos padrões abertos. Uma das
  grandes alterações internas é que a infraestrutura de threading do Linux foi
  reescrita para permitir que a Native POSIX Thread Library (NTPL) seja
  executada sobre ele. Isto representa um grande melhoramento de performance
  para o processador Pentium Pro e processadores superiores em aplicações que
  fazem uso extensivo de threading em muito dos grandões na área do
  "enterprise" tem pedido por isto (a RedHat fez um backport deste suporte
  para o Linux 2.4 e inclui o mesmo no RedHat 9.0). Isto inclui novos
  conceitos ao espaço de thread do Linux incluindo grupos de thread, memória
  local para threads individuais, sinais no estilo POSIX, e outras mudanças.
  Um dos maiores problemas é que aplicações (como o Java da Sun) que não foram
  escritas segundo padrões e que esperam o comportamento de antigos Linuxismos
  irão falhar se o novo suporte estiver habilitado. Como os benefícios superam
  o custo (e com tantos jogadores grandões no jogo), é claro que as aplicações
  mais importantes irão suportar as alterações não muito tempo depois que o
  novo kernel seja lançado.

  E, finalmente, apesar de não haver um benefício direto para a maioria das
  aplicações do Linux, o kernel 2.6 agora inclui a capacidade de desabilitar
  completamente o suporte a swap durante a compilação. Isto irá permitir que o
  Linux seja executado com um consumo de memória um pouco menor e pode ser
  útil para dispositivos embarcados, em que é pouco provável que um
  dispositivo de swap venha a ser usado.

=Modelo Unificado de Dispositivos=

  Geralmente visto como um componente separado de um sistema operacional, um
  modelo de dispositivo é essencial para um SO que seja projetado para
  executar em uma grande variedade de hardware. Em resumo, o modelo de
  dispositivos é a infraestrutura dentro do kernel que detecta e determina o
  uso de recursos de todos os componentes opcionais do sistema. Todos os
  sistemas operacionais (e algumas versões do Linux) possuem intrinsecamente
  algum conceito de dispositivo. Versões mais antigas do Linux (2.2 e
  anteriores), possuem apenas uma abordagem crua ao gerenciamento de
  dispositivos. Existem drivers para diferentes tipos de barramentos de
  hardware e os vários barramentos possuem várias e incompatíveis APIs para o
  tratamento de várias operações. O Linux 2.4 foi o primeiro estágio para um
  modelo de dispositivos "unificado" ao reunir PCI, PC Card e ISA
  Plug-and-Play em uma única estrutura de dispositivos com uma interface
  comum. O Linux 2.6 expandiu enormemente estes esforços para produzir uma
  visão completamente nova de como o kernel Linux vê o hardware em que está
  sendo executado e que é universal no sistema.

==Abstração de Objetos do Kernel==

  O núcleo central da nova infraestrutura de modelo de dispositivos é uma nova
  interface orientada a objetos que todos os tipos de dispositivos de baixo
  nível precisam usar. Esta estrutura de objetos dispositivos do kernel
  (chamada "kobject") inclui todas as interfaces para contagem de referência e
  para tratamento de sub-dispositivos. Os dispositivos de nível mais baixo
  (como barramentos de sistema) agora usam esta camada comum para apresentar
  uma visão unificada do sistema tanto no kernel como no user-space. Agora que
  tudo isto foi centralizado, é possível para o Linux fazer muitas coisas
  úteis com estas informações.

  Com estas novas informações todas no kernel, é possível ao Linux oferecer um
  suporte melhorado para sistemas em que um conhecimento profundo do hardware
  é necessário. Um exemplo óbvio de onde esta informação é útil ocorre no
  gerenciamento de energia. O novo padrão de gerenciamento de energia nos
  últimos anos é o ACPI. O suporte a ACPI, "Advanced Configuration and Power
  Interface", foi introduzido inicialmente no Linux 2.4. Diferente do APM, os
  sistemas com esta nova interface devem informar individualmente todos os
  dispositivos compatíveis no sistema que eles precisam mudar seu estado de
  energia. O novo sistema do kernel é exatamente o que o doutor prescreveu
  para permitir que o sistema controle os dispositivos que precisam ser
  desligados ou que precisam de outras alterações. Um segundo exemplo onde
  esta informação é útil é com barramentos que suportem "hot plug". A
  capacidade de um dispositivo de ser acrescentado a um sistema depois da
  inicialização agora parece bastante comum e direta, mas o suporte real do
  Linux a estes dispositivos não apareceu até o Linux 2.2. Desde o Linux 2.4,
  este suporte foi melhorado e foi acrescentado suporte para fot-plugging de
  dispositivos PCI, PC Card, USB, e Firewire. A nova revisão do sistema
  centralizado de dispositivos do kernel expande este suporte ao remover as
  diferenças entre dispositivos hot-plug e dispositivos legados. Quando você
  inicia o seu computador, a rotina de detecção de dispositivos
  sistematicamente "pluga" todos os dispositivos em seu sistema. Como um
  objeto de kernel é criado para todos os objetos no sistema quando eles são
  descobertos, e como isto é essencialmente igual se o dispositivo é
  descoberto durante a inicialização ou mais tarde, muito da infraestrutura
  que trata dos dispositivos plugáveis foi simplificada.

==O Filesystem do Sistema==

  Possivelmente, a mais óbvia ramificação visível ao usuário deste novo modelo
  de gerenciador é a criação de um novo filesystem de sistema (unindo-se ao
  'proc' dos processos, 'devfs' para dispositivos, e 'devpts' para os
  pseudo-terminais UNIX98), chamado 'sysfs'. Este filesystem (que se pretende
  seja montado em '/sys') é uma representação visível da árvore de
  dispositivos, como o kernel vê a mesma. O kernel obtém toda a informação
  através do acoplamento com o subsistema de objetos de kernel: quando um
  objeto de kernel é criado, também é criado um arquivo ou diretório
  apropriado (é possível para um kobject explicitamente não ter um registro no
  sysfs, se houver uma razão para tal).

  Uma vez que cada dispositivo (ou cada kobject) no sistema recebe uma única
  estrutura de diretório, o próximo passo lógico foi exportar os vários
  atributos conhecidos (nome do dispositivo, modo de energia, irq, e este tipo
  de coisas) do dispositivo para a árvore de forma que eles pudessem ser lidos
  e escritos por um administrador de sistema. Isto trouxe um efeito colateral
  benéfico (apesar de inicialmente confuso) de que muitos usos de /proc/sys
  específicos para dispositivos puderam ser movidos para /sys, ou o serão em
  uma data futura.

=Suporte a Hardware Básico=

  À medida que o Linux avançou pelos anos e em direção à popularidade, cada
  iteração do kernel pareceu um salto e estava melhor amarrada que as versões
  anteriores em termos dos tipos de dispositivos suportados tanto em termos de
  suporte a tecnologia emergentes (USB no 2.4) e de suporte a velhas
  tecnologias "legadas" (MCA no 2.2). Entretanto, quando chegamos no kernel
  2.6, o número de dispositivos que o Linux não suporta é relativamente
  pequeno. Existem poucos, se os houver, ramos do universo de hardware PC
  ainda a conquistar. É por esta razão que a maior parte (mas certamente não a
  totalidade) do melhoramento no suporte a hardware PC (incluindo o modelo de
  dispositivos, descrito acima) está relacionado ao fortalecimento do suporte
  que já está presente.

==Barramentos de Dispositivos Internos==

  Quase tão importante quanto o processador, os barramentos em um sistema são
  a cola que mantém as partes unidas. O mundo do PC tem sido abençoado com
  abundância das tecnologias de barramento, desde a velha ISA (encontrada no
  IBM PC original) aos barramentos seriais externos e wireless modernos. O
  Linux tem sido sempre rápido em se adaptar a novos barramentos e tipos de
  dispositivos conforme eles tem se tornado populares com os dispositivos
  comercializados, e significantemente menos rápido a se adaptar a
  tecnologias que são de relativamente pouco uso.

  Um exemplo em que o Linux veio a suportar um tipo de barramento tardiamente
  foi quando finalmente foi incluído suporte à extensão ISA Plug-and-Play
  (PnP) no Linux 2.4, muito depois que os SOs comerciais populares incluíram
  suporte ao mesmo (era possível fazer com que o mesmo funcionasse utilizando
  alguns utilitários meia-boca de user-space antes do 2.4). O Linux 2.6 inclui
  uma atualização enorme neste subsistema, tornando-o praticamente completo no
  que toca a funcionalidades e melhor integrado com o resto do novo modelo de
  dispositivos. As novas funcionalidades incluem suporte completo a PnP BIOS,
  um banco de dados de nomes de dispositivos, e outras alterações que tornam o
  suporte mais robusto. A soma de todas estas modificações resulta que agora o
  Linux é um "verdadeiro" SO Plug-and-Play e pode ser configurado como tal em
  qualquer BIOS de máquinas compatíveis.

  As alternativas (relativamente impopulares) ao PnP na era do ISA eram o MCA
  (ou Microchannel Architecture) e EISA (ou Extended Industry Standard
  Architecture). Os dois subsistemas receberam algumas atualizações durante o
  ciclo de desenvolvimento do 2.6 para suportar o novo modelo de dispositivo.
  Além disto, o EISA recebeu alguma padronização com os outros subsistemas
  através da inclusão de um banco de dados de dispositivos.

  Além destes pontos importantes, houveram várias outras mudanças no suporte
  do Linux a barramentos de hardware. O barramento PCI do Linux, o mais
  prevalente e importante de todos os barramentos, recebeu um ênfase durante o
  desenvolvimento do Linux 2.6, incluindo um suporte melhorado a hot-plug e
  gerenciamento de energia. De forma semelhante, a nova versão também inclui
  suporte para sistemas com múltiplas AGPs ("accellerated graphics ports" --
  um barramento de alta velocidade separado que também usa o protocolo PCI),
  como as workstations gráficas de alto desempenho. Em termos de suporte a
  estes aspectos internos do PC, o Linux está acompanhando as tendências de
  hardware do mercado.

  Em acréscimo a todos os barramentos de dispositivos "reais", o Linux 2.6
  acrescentou (pelo menos internamente) o conceito de barramento "legado".
  Este é um tipo de barramento que é específico a cada arquitetura que contém
  todos os dispositivos que se espera encontrar. Em um PC, por exemplo, este
  pode incluir portas on-board seriais, paralelas e PS/2 -- dispositivos que
  existem mas que não são enumerados por nenhum barramento real no sistema. Em
  algumas plataformas, este suporte legado pode envolver coisas mais
  complicadas (tais como consultar o firmware), mas em geral é apenas uma
  camada que permite que estes dispositivos sejam tratados de uma forma
  padronizada dentro do novo paradigma.

==Barramentos de Dispositivos Externos==

  Enquanto estes padrões antigos de dispositivos amadureceram mas tiveram
  poucas funcionalidades novas acrescentadas, este não é o caso com o USB. O
  Universal Serial Bus viu numerosos melhoramentos durante o ciclo de
  desenvolvimento mais recente. A mudança mais notável é que o novo kernel irá
  suportar dispositivos USB 2.0. O USB2 é o novo padrão que suporta uma
  largura de banda de dispositivo de até 480 megabits por segundo (compare com
  os 12 mbit/seg do USB atual). Os dispositivos que suportam este padrão
  geralmente são chamados de dispositivos USB de "alta velocidade" e estão
  gradualmente tomando conta do mercado. Um padrão novo e relacionado, o USB
  On-the-Go (ou USB OTG), uma variante ponto-a-ponto no protocolo USB para
  conectar dispositivos diretamente (por exemplo, para conectar uma câmera
  digital a uma impressora sem ter um PC no meio) atualmente não é suportado
  no Linux 2.6 (alguns patches para esta funcionalidade estão disponíveis, mas
  ainda não fazem parte da versão oficial). Além do suporte a dispositivos,
  muito da forma que os dispositivos USB são enumerados internamente foi
  revisado, de forma que agora é possível ter muitos mais dispositivos do
  mesmo tipo, todos acessíveis no Linux. Este aspecto irá beneficiar primeiro
  grandes servidores de impressão e armazenamento (apesar de que os últimos
  provavelmente irão usar um barramento de armazenagem dedicado). Esta é
  definitivamente uma área em que a tecnologia cresceu significantemente os
  últimos anos, e o Linux está trabalhando para se manter no ritmo do mercado.

==Dispositivos Wireless==

  A tecnologia wireless tornou-se realmente popular nos últimos anos. Às vezes
  parece que cabos (exceto os de energia) serão uma coisa do passado em alguns
  anos. Os dispositivos wireless englobam tanto os dispositivos de rede (o
  tipo mais comum atualmente), e também dispositivos mais genéricos, como
  PDAs, etc.

  Em se tratando de dispositivos de rede wireless, os dispositivos podem ser
  geralmente divididos em dispositivo de longo alcance (por exemplo, o AX.25
  sobre dispositivos de rádio amador) e curto alcance (normalmente 802.11, mas
  existem alguns protocolos mais antigos). O suporte a ambos os tipos tem sido
  uma marca do Linux desde as primeiras versões (v1.2) e os dois receberam
  atualizações durante o desenvolvimento do 2.6. A maior mudança aqui é que os
  principais componentes da pequena gama de subsistemas para as várias placas
  e protocolos suportados foram reunidos em um único subsistema  e API
  "wireless". Esta união resolveu um certo número de pequenas
  incompatibilidades na forma que diferentes dispositivos tem sido tratados e
  fortaleceu o suporte do Linux para os mesmos ao criar um conjunto central de
  ferramentas para o userspace que irão funcionar com todos os dispositivos
  suportados. Além da padronização, o Linux 2.6 introduz um certo número de
  melhoramentos, incluindo uma capacidade melhorada de notificar eventos como
  uma mudança de estado (como quando um dispositivo que tenha um estado
  "roaming") e alterações ao TCP para tratar melhor os pulsos de atraso
  periódicos que ocorrem em dispositivos wireless. Devido a pressão de
  melhorar o suporte a dispositivos wireless no Linux 2.4, muitas destas
  alterações já estão presentes no kernel disponível.

  No espaço de dispositivos wireless, houveram também alguns avanços
  similares. O IrDA (o protocolo para infravermelho que recebeu o nome do
  grupo Infrared Data Associates) recebeu alguns avanços desde a última versão
  principal, como gerenciamento de energia, e integração no novo modelo de
  drivers do kernel. Os avanços reais foram feitos no suporte do Linux a
  dispositivos Bluetooth. O Bluetooth é um novo protocolo wireless que foi
  projetado para ter um alcance curto e baixo consumo de energia, mas não tem
  as mesmas limitações de linha de visada que o IrDA tem. O Bluetooth, como um
  protocolo, foi projetado para ir "em qualquer lugar" e tem sido implementado
  em dispositivos como PDAs, celulares, impressoras, e coisas mais bizarras
  como equipamentos automotivos. O protocolo em si tem dois tipos diferentes
  de links de dados: SCO, ou "Synchronous Connection Oriented", para
  aplicações atenuadas de áudio, e L2CAP, ou "Logical Link Control and
  Adaptation Protocol", para uma conexão mais robusta, que suporta
  retransmissão, etc. O protocolo L2CAP também suporta vários sub-protocolos
  (incluindo o RFCOMM para redes ponto-a-ponto e BNEP para redes tipo
  Ethernet). O suporte Linux para as coisas que o Bluetooth pode fazer
  continua crescendo e podemos esperar que amadureça significativamente à
  medida que mais dispositivos chegam às mãos dos consumidores. Também deve
  ser mencionado que o suporte inicial para o Bluetooth foi integrado nas
  últimas edições do kernel 2.4.

=Suporte a Dispositivos de Bloco=

==Barramentos de Armazenagem==

  Barramentos dedicados de armazenagem, como o IDE/ATA e o SCSI, também
  receberam uma atualização durante o ciclo do 2.6. As principais alterações
  estão centradas no sub-sistema IDE, que foi reescrito (e novamente
  reescrito) durante o desenvolvimento do novo kernel, resolvendo muitos
  problemas de escalabilidade e outras limitações. por exemplos, drives CD/RW
  IDE agora podem ser escritos diretamente no driver de disco IDE real, uma
  implementação muito mais limpa que a anterior (anteriormente era também
  necessário usar um driver especial de emulação SCSI o que era confuso e
  geralmente difícil). A camada IDE agora é capaz de consultar a BIOS da
  máquina quando encontra um controlador que não é reconhecido de forma que
  pode usar valores razoáveis para temporizações e outros dados necessários.
  No lado dos SCSI, houveram também pequenos melhoramentos espalhados pelo
  sistema tanto tratando de um maior suporte quanto escalabilidade. Um
  melhoramento específico para sistemas antigos é que agora o Linux suporta
  dispositivos multivias SCSI-2 que possuem mais que 2 LUNs em um dispositivo
  (o SCSI-2 era a versão anterior do padrão de dispositivos SCSI, de 1994).
  Outra mudança importante é que o Linux agora pode retornar ao teste de mídia
  como o Microsoft Windows faz, para ser mais compatível com dispositivos que
  não seguem completamente a especificação. Conforme estas tecnologias se
  estabilizaram no tempo, também o suporte do Linux às mesmas também
  estabilizou-se.

  Apesar de não ser propriamente um barramento de armazenagem, o Linux agora
  inclui suporte para acessar a nova BIOS EDD (Enhanced Disk Device)
  diretamente para ver como o servidor vê seus próprios dispositivos de disco.
  A EDD BIOS inclui informações sobre todos os barramentos de armazenagem que
  estão conectados ao sistema que a BIOS conhece (incluindo tanto IDE quanto
  SCSI). Além de obter informações de configuração e outras informações dos
  dispositivos conectados, há outras vantagens nisto. Por exemplo, esta nova
  interface permite que o Linux saiba de qual dispositivo o sistema foi
  inicializado, o que é útil em novos sistemas em que isto nem sempre é óbvio.
  Isto permite que programas de instalação inteligentes considerem estas
  informações quando estão determinando onde colocar o GRUB (o carregador de
  boot do Linux), por exemplo.

  Além de todas estas alterações, deve ser enfatizado novamente que todos os
  tipos de barramentos de dispositivos (hardware, wireless, e armazenamento)
  foram integrados no novo subsistema de modelo de dispositivos do Linux. Em
  alguns casos, estas mudança são cosméticas. Em outros casos, existem mais
  alterações significantes envolvidas (em alguns casos, por exemplo, mesmo a
  lógica de como os dispositivos são detectados teve de ser alterada).

==Filesystems==

  O uso mais óbvio para um dispositivo de blocos no Linux (ou outro sistema) é
  para montar um filesystem no mesmo, e o suporte do Linux para filesystems
  avançou bastante desde a versão 2.4 em vários aspectos. Uma mudança chave é
  o suporte para atributos estendidos e controles de acesso no estilo POSIX.

  O segundo (e terceiro) filesystem estendido, o sistema que a maioria das
  instalações de Linux usam como padrão, tem sido a que mais melhorou durante o
  desenvolvimento do Linux 2.6. A principal alteração é o suporte a "atributos
  estendidos", ou metadados que podem ser inseridos no próprio filesystem para
  um arquivo específico. Alguns destes atributos estendidos serão usados pelo
  sistema e só poderão ser lidos e escritos pelo superusuário. Muitos outros
  sistemas operacionais, como o Windows e o MacOS, fazem uso extensivo deste
  tipo de atributos. Infelizmente, a herança UNIX de sistemas operacionais
  geralmente não inclui um excelente suporte a estes atributos e muitas
  ferramentas de usuário (como o 'tar', etc) deverão ser atualizadas para
  poderem salvar e restaurar esta informação adicional. Esta é outra área de
  crescimento do Linux, e o suporte a atributos estendidos está amadurecendo.

  O primeiro uso do novo subsistema de atributos estendidos é a implementação
  de listas de controle de acesso POSIX. O controle de acesso POSIX é um
  superconjunto das permissões padrão do UNIX, que permitem um controle mais
  granular. Quando necessário (por exemplo, ao exportar arquivos via NFS),
  estes controles podem ser mapeados (cuidadosamente) para as permissões de
  usuário/grupo padrão.

  Além destas alterações ao ext3, existem várias outras pequenas alterações. O
  tempo de execução do journal do filesystem pode ser configurado para ficar
  mais apropriado para os usuários de laptop (que podem precisar aumentar a
  rotação do disco se ele estiver em um modo de economia de energia), opções
  padrão de montagem podem agora ser armazenadas no próprio filesystem (e,
  portanto, não precisam ser informados na montagem), e pode-se agora marcar
  um diretório como "indexado" para aumentar a velocidade de pesquisa de
  arquivos neste diretório.

  O Linux também apresenta vários melhoramentos na camada de filesystem para
  melhorar a compatibilidade com o sistema operacional de PC dominante. Para
  começar, o Linux 2.6 agora suporta o Logical Disk Manager do Windows (aka
  "Dynamic Disks"). é um novo esquema de tabela de partição que o Windows XP e
  os posteriores adotaram que permitem o fácil redimensionamento e a criação
  de múltiplas partições (obviamente, é improvável que os sistemas Linux
  venham a usar o novo esquema para novas instalações tão cedo). O Linux 2.6
  também possui um suporte melhorado (e reescrito) ao filesystem NTFS (que
  agora é também usado em produtos comerciais) e agora é possível montar um
  volume NTFS para leitura/escrita. O suporte à escrita ainda é experimental e
  está sendo gradualmente melhorado, e pode ou não estar habilitado na versão
  final do kernel. E, finalmente, o suporte Linux para FAT12 (o filesystem DOS
  utilizado em sistemas realmente antigos e disquetes) foi melhorado para
  contornar alguns bugs presentes em alguns MP3 players que usam aquele
  formato. Manter-se atualizado com as outras tecnologias PC é uma das áreas
  principais de foco das novas revisões do kernel Linux.

  A compatibilidade com outros sistemas operacionais também foi melhorada. O
  suporte a atributos estendidos no filesystem HPFS (usado pelo OS/2 e outros)
  foi atualizado. Os atributos no estilo OS/2 foram separados em um espaço de
  nomes diferente. O filesystem XFS também foi atualizado para ser compatível
  em disco com o sistema operacional IRIX.

  Além destas alterações, há um grande número de alterações espalhadas pelo
  suporte a filesystems do Linux. O suporte a quotas foi reescrito para
  permitir que um número maior de usuários seja suportado em um sistema.
  Diretórios individuais podem agora ser marcados como síncronos, de forma que
  todas as alterações (arquivos adicionais, etc.) sejam atômicas (esta
  característica é mais útil para sistemas de correio e bancos de dados
  baseados em diretório, além de apresentar uma recuperação melhor caso ocorra
  uma falha de disco). Compressão transparente (uma extensão única ao Linux)
  foi acrescentada ao filesystem ISO9660 (o filesystem utilizado em CD-ROMs).
  e, finalmente, um novo filesystem baseado em memória ("hugetlbfs") foi
  criado exclusivamente para oferecer um suporte melhorado a bancos de dados
  de memória compartilhada.

=Dispositivos de Entrada / Saída=

  Um dos lados mais "externos" de qualquer sistema computacional são os
  dispositivos de entrada e saída, as partes importantes que nunca parecem
  importantes. Estas incluem as coisas mais óbvias como mouse e teclados,
  placas de vídeo e som, e menos óbvias como joysticks e dispositivos de
  acessibilidade. Muitos dos subsistemas de usuário final do Linux foram
  expandidos durante o ciclo de desenvolvimento do 2.6, mas a maioria dos
  dispositivos comuns já estava bem amadurecida. Em sua maioria, os
  melhoramentos do Linux 2.6 a estes dispositivos derivam diretamente do
  suporte melhorado do kernel a barramentos externos, como teclados wireless
  Bluetooth, e similares. Existem, entretanto, um número de áreas em que o
  Linux fez grandes melhoramentos.

==Dispositivos de Interface Humana==

  Uma mudança interna notável no Linux 2.6 é que a camada de interface humana
  foi revista. A camada de interface humana é o centro da experiência do
  usuário de um sistema Linux, incluindo a saída de vídeo, mouse e teclados.
  Na nova versão do kernel, esta camada foi reescrita e modularizada em uma
  extensão nunca feita antes. É possível agora criar um sistema Linux
  completamente "headless" sem a inclusão de nenhum suporte para display ou
  outra coisa. Os primeiros benefícios desta modularidade podem ser para os
  desenvolvedores de dispositivos embarcados que podem fazer dispositivos que
  só possam ser administrados pela rede ou pela porta serial, mas o benefício
  aos usuários finais é que foi feita uma modularização de todas as suposições
  internas sobre dispositivos e arquiteturas foram modularizadas. Por exemplo,
  anteriormente era assumido que se você tivesse um PC, você precisaria do
  suporte a um controlador padrão AT (i8042) de teclado. A nova versão do
  Linux remove esta exigência de forma que o código desnecessário pode ser
  mantido fora de sistemas sem componentes legados.

  O suporte ao tratamento da saída de monitor do Linux também recebeu várias
  alterações, apesar que a maioria destas são úteis somente em configurações
  que usam o susbsitema interno de framebuffer console do kernel (a maioria
  dos computadores Intel Linux não são configurados desta forma, mas este não
  é o caso para muitas outras arquiteturas). Na minha humilde opinião, a
  melhor funcionalidade é que o logo de boot (um pinguinzinho bonitinho, caso
  você nunca tenha visto-o) agora suporta resoluções de até 24bpp. Fora isto,
  outras novas funcionalidades para o console incluem redimensionamento e
  rotação (para PDAs e similares) e expandiu o suporte a aceleração para mais
  hardwares. E, finalmente, o Linux agora incluiu suporte no kernel à consulta
  a monitores VESA para obter informações de capacidades, apesar que o XFree86
  e a maior parte dos sistemas de instalação de distribuições já cobriu este
  detalhe em user-space.

  Além das alterações mais extensas, o Linux 2.6 também inclui um certo número
  de pequenas alterações para a interação humana. Touch screens, por exemplo,
  agora já são suportadas. Os drivers de keyboard e mouse foram atualizados e
  padronizados para somente exportar um único nó de dispositivo
  (/dev/input/mouse0, por exemplo), sem preocupar-se com o hardware ou
  protocolo subjacentes. Mouses bizarros (com múltiplas rodas, por exemplo)
  agora também são suportados. Mapeamentos de teclas também foram
  atualizados para seguir o "padrão" Windows de teclas estendidas. O suporte a
  joystick também foi melhorado não só graças à adição de novos drivers
  (incluindo o XBox gamepad), mas também por incluir novas funcionalidades,
  como o force-feedback. E, finalmente (mas não menos importante), a nova
  versão também inclui suporte para o dispositivo braille TTY Tieman Voyager,
  que permite que usuários deficientes visuais tenham um melhor acesso ao
  Linux (esta funcionalidade é importante o suficiente para que tenha sido
  back-ported para o Linux 2.4).

  Como uma nota lateral, cabe comentar que o Linux também mudou a interface de
  "system request", para suportar melhor os sistemas sem teclado. A interface
  system request ("sysrq") é o método para os administradores de sistema
  obterem informação de depuração, forçar um reboot do sistema, remontar
  filesystems read-only, e fazer outras coisas do tipo no console local. Como
  o Linux 2.6 agora suporta um sistema completamente headless, agora também é
  possível disparar estes eventos usando o filesystem /proc (obviamente, se o
  seu sistema congelar e você precisar forçar que ele faça alguma coisa, isto
  pode não ser de muita ajuda).

==Áudio==

  Uma das novas funcionalidades mais antecipadas para os usuários desktop do
  Linux 2.6 é a inclusão do ALSA (a "Advanced Linux Sound Architecture") em
  lugar do velho sistema de som. O velho sistema, conhecido como OSS, de "Open
  Sound System", serviu o Linux desde os primeiros dias, mas possuía muitas
  limitações na sua arquitetura. O primeiro grande melhoramento com o novo
  sistema é que ele foi projetado desde o início para ser protegido de threads
  e sistemas SMP, corrigindo problemas com muitos dos velhos drivers onde eles
  não podiam funcionar fora do paradigma "desktop-significa-uma-única-cpu"
  esperado. Mais importante, os drivers foram projetados para serem modulares
  desde o início (usuários de versões antigas do Linux irão lembrar que a
  modularidade foi adaptada no sistema de som pelo Linux 2.2), e que isto
  permite um suporte melhorado para sistemas com múltiplas placas de som,
  incluindo múltiplos tipos de placas de som. Não importa o quão bonitos estes
  aspectos internos são, o novo sistema não seria um melhoramento para os
  usuários se ele não tivesse novas funcionalidades, e o novo sistema de som
  há muitas destas. Uma das mais importantes é o suporte para hardwares mais
  novos (incluindo dispositivos USB de áudio e MIDI), playback e gravação
  full-duplex, mixing não entrelaçado e de hardware, suporte para a
  "combinação" de dispositivos de som, e outras coisas. Seja você um
  audiófilo, ou só alguém que gosta de tocar MP3s, o suporte melhorado a sons
  no Linux é um avanço bem-vindo.

==Multimídia==

  Muito além de simples áudio, hoje em dia, o que os usuários querem é suporte
  para o hardware realmente legal, como webcams, adaptadores de rádio e TV, e
  gravadores de vídeo digital. Em todos os três casos, o suporte do Linux foi
  melhorado com a versão 2.6.

  Apesar de o Linux já ter suporte (em maior ou menor medida) placas de rádio
  (quase sempre em userspace) por muitas iterações, o suporte a sintonizadores
  de televisão e câmeras de vídeo somente foi acrescentado na última revisão,
  ou na anterior. Aquele subsistema, conhecido como Video4Linux (V4L), recebeu
  uma extensa atualização durante o trabalho na nova edição do kernel,
  incluindo tanto uma limpeza na API quanto o suporte a mais funcionalidades
  das placas. A nova API não é compatível com a anterior e muitas aplicações
  que suportam a mesma precisarão atualizar-se com o kernel.

  E, seguindo um caminho completamente novo, o Linux 2.6 inclui o primeiro
  suporte interno para equipamentos de Digital Video Broadcasting (DVB). Este
  tipo de equipamento, comum em computadores set-top, pode ser usado para
  tornar o servidor Linux em um dispositivo como o Tivo, com o software
  apropriado.

=Avanços de Software=

  Os melhoramentos do Linux não estão apenas focados em suporte de hardware e
  infraestrutura. Sem o software de suporte (como filesystems e protocolos de
  rede), o hardware suportado é só um peso morto.

==Redes==

  Infraestrutura de rede moderna sempre foi um dos principais valores do
  Linux. O Linux, como SO, já tem suporte a maioria dos protocolos de rede
  dominantes no mundo, incluindo o TCP/IP (v4 e v6), AppleTalk, IPX, e outros
  (de fato, os únicos comuns que vêm à memória são os protocolos
  NetBIOS/NetBEUI da Microsoft).

  Como a maioria das alterações nos outros subsistemas, grande parte das
  alterações a suporte de equipamento de rede no Linux 2.6 está escondida na
  capa e não é óbvia. Entre estas estão incluídas as alterações de baixo nível
  que aproveitam-se do modelo de dispositivo e atualizações a muitos dos
  drivers de dispositivos. Por exemplo, o Linux inclui agora um subsistema MII
  (Media Independent Interface, ou IEE 802.3u) separado que é usado em por
  vários drivers de dispositivos de rede. Este novo subsistema substitui
  muitas cópias em que cada driver estava tratando o suporte MII do
  dispositivo de diferentes formas e com código e esforço duplicados. Outras
  alterações incluem atualizações substanciais no ISDN e em outras coisas.

  Do lado do software, uma das maiores alterações é o novo suporte do Linux
  para os protocolos IPsec. O IPsec, ou IP Security, é uma coleção de
  protocolos para o IPv4 (o IP "normal") e o IPv6 que permitem o uso de
  segurança criptográfica no nível de protocolo de rede. E como a segurança
  está no nível de protocolo, as aplicações não precisam tomar conhecimento do
  mesmo. Isto é similar ao SSL e outros protocolos de túnel/segurança, mas a
  um nível muito mais baixo. A criptografia suportada atualmente pelo kernel
  inclui vários sabores do SHA ("secure hash algorithm"), DES ("data
  encryption standard"), e outros.

  Fora do aspecto de protocolo, o Linux melhorou o seu suporte a redes
  multicast. Redes multicast são redes em que um pacote é enviado para ser
  recebido por vários computadores (compare com as redes ponto-a-ponto
  tradicionais, onde você está conversando com apenas um outro computador por
  vez). Em princípio, esta funcionalidade é utilizada por sistemas de
  mensagens (como o Tibco), e softwares de conferência com áudio/vídeo). O
  suporte do Linux 2.6 melhorou ao incluir vários protocolos SSM (Source
  Specific Multicast) novos, incluindo o MLDv2 (Multicast Listener Discovery)
  e o IGMPv3 (Internet Group Messaging Protocol). Estes são protocolos padrão
  que são suportados pela maioria do fabricantes de equipamento de rede de
  primeira linha, como o Cisco.

  O Linux 2.6 também tem uma pilha LLC separada. O LLC, ou protocolo Logical
  Link Control (IEEE 802.2), é um protocolo de baixo nível que é usado abaixo
  de vários protocolos de rede de nível mais elevado como o NetBEUI da
  Microsoft, o IPX, e o AppleTalk. Como parte desta mudança, os drivers do
  IPX, AppleTalk, e Token Ring, foram reescrito para aproveitar-se do novo
  subsistema comum. Além disto, uma fonte externa colocou uma pilha NetBEUI
  funcional e ainda veremos se ela será integrada no kernel oficial.

  Além destas alterações, existem várias outras alterações menores. O IPv6
  recebeu muitas alterações e agora pode rodar em redes Token Ring. O suporte
  do Linux a NAT/mascaramento foi estendido para suportar melhor protocolos
  que requerem múltiplas conexões (H.323, PPTP, etc.). No front do Linux
  router, o suporte à configuração de VLANs no Linux não está mais marcado
  como "experimental".

=Filesystems de Rede=

  Sobre o robusto suporte a protocolos de rede do Linux está o também robusto
  suporte para filesystems de rede. A montagem (e algumas vezes a exportação)
  de um filesystem de rede é uma das poucas operações de alto nível de rede
  que o kernel toma conta diretamente (a outra operação óbvia, o "network
  block device", não recebeu muitas alterações para o 2.6 e é geralmente
  utilizado para aplicações especializadas, em que se acaba fazendo algo
  parecido com um filesystem com ela, de qualquer forma). Todas as outras
  operações de redes foram relegadas ao user-space e fora do domínio dos
  programadores do kernel.

  No mundo Linux e dos clones UNIX, o tipo mais comum de filesystem de rede é
  o Network File System, ou NFS. O NFS é um protocolo de compartilhamento de
  arquivos complicado que tem raízes profundas no UNIX (e especialmente na
  excelente implementação do Sun Solaris). O protocolo primário de transporte
  pode utilizar TCP ou UDP, mas vários sub-protocolos adicionais são
  necessário, cada um com um protocolo RPC ("remote procedure call") separado.
  Estes incluem protocolos separados de "mount" para autenticação e NLM
  ("network lock manager") para bloqueios de arquivos (a implementação comum
  também está associada a outros protocolos comuns baseados em RPC, incluindo
  o NIS -- "network information service" -- para a autenticação. O NIS não é
  utilizado comumente em máquinas Linux devido a problemas fundamentais de
  segurança). Talvez por conta desta complexidade que o NFS não recebeu uma
  aceitação maior como protocolo "Internet".

  No Linux 2.6, este filesystem básico Linux recebeu muitas atualizações e
  melhoramentos. O maior dos melhoramentos é que agora o Linux suporta
  experimentalmente a nova versão do protocolo NFSv4, ainda não muito popular,
  tanto em sua implementação servidor quanto cliente (versões anteriores do
  Linux incluíam suporte para as versões v2 e v3 do protocolo). A nova versão
  suporta autenticação mais segura (com criptografia), um bloqueio de arquivos
  mais inteligente, suporte para pseudo-filesystems, e outras mudanças. Nem
  todas as novas funcionalidades do NFSv4 foram implementadas no Linux, mas o
  suporte está relativamente estável e pode ser utilizada para algumas
  aplicações de produção. Além disto, a implementação do servidor NFS Linux
  foi melhorada para ser mais escalável (até 64 vezes mais usuários
  concorrentes e filas de solicitação maiores), para ser mais completa
  (suportando o serviço por TCP, além de UDP), mais robusta (drivers de
  filesystems individuais podem adaptar a forma que os arquivos estão sendo
  exportados para atender suas particularidades), e de manutenção mais fácil
  (o gerenciamento é feito via um novo filesystem nfsd, em vez de system
  calls). Existem também outras alterações internas, incluindo a separação de
  lockd e nfsd e o suporte para //zero-copy networking// nas interfaces
  suportadas. O lado do cliente NFS também beneficiou-se de vários
  melhoramentos na implementação do protocolo RPC, incluindo uma estrutura de
  cache, controle de conexão por UDP, e outros melhoramentos para o TCP. O
  suporte Linux ao uso de volumes compartilhados NFS como filesystem root
  (para sistemas disk-less) também foi melhorado, já que o kernel agora
  suporta NFS sobre TCP para isto.

  Além de melhorar o suporte a filesystems de rede no estilo UNIX, o Linux 2.6
  também traz vários melhoramentos aos filesystems de rede estilo Windows. O
  filesystem compartilhado padrão para servidores Windows (bem como para o
  OS/2 e outros sistemas operacionais) tem sido o protocolo SMB (//"server
  message block"//), e o kernel Linux tem um excelente suporte cliente para o
  protocolo SMB há várias versões. Entretanto, o Windows 2000 padronizou em um
  superconjunto atualizado do protocolo SMB, conhecido como CIFS (//"common
  internet filesystem"//). A intenção por trás desta atualização é limpar e
  refinar certos aspectos do SMB que haviam se tornado uma confusão completa
  (o protocolo em si foi definido de forma vaga e tão geralmente extendido que
  haviam casos em que a versão do Win95/98/ME era incompatível com a versão do
  WinNT/Win2k). O CIFS foi desenvolvido com esta intenção e acrescentou o
  suporte a UNICODE, melhorou o bloqueio de arquivos, os links físicos,
  eliminou os últimos vestígios de dependências do NetBIOS, e acrescentou
  algumas outras funcionalidades para os usuários Windows. Como os usuários
  Linux não gostam de ficar no escuro por muito tempo, o Linux 2.6 agora
  inclui um suporte completamente reescrito para a montagem nativa de
  filesystems CIFS. O Linux 2.6 também inclui suporte às extensões SMB-UNIX
  aos protocolos SMB e CIFS, que permitem que o Linux acesse tipos de arquivos
  não-Windows (como nós de dispositivos e links simbólicos) em servidores SMB
  que suportam o mesmo (como o Samba).

  Apesar de não ser tão comum atualmente, o Linux não esqueceu completamente
  os usuários de Novell NetWare. O Linux 2.6 permite que os clientes Linux
  montem até um máximo de 256 compartilhamentos em um único volume NetWare
  usando seu driver de filesystem NCP (//"NetWare Core Protocol"//) interno.

  O Linux 2.6 também inclui um suporte melhorado para o domínio relativamente
  novo dos filesystems distribuídos de rede, sistemas em que os arquivos em um
  único volume lógico podem estar espalhados por vários nós. Além do
  filesystem CODA, introduzido no Linux 2.4, o Linux agora inclui algum
  suporte para dois outros filesystems distribuídos: AFS e InterMezzo. O AFS,
  ou //Andrew FileSystem// (tem este nome por que foi desenvolvido
  originalmente na CMU) atualmente é bastante limitado e restrito a operações
  de leitura. O segundo filesystem novo, o InterMezzo (também desenvolvido na
  CMU), também está debutando no Linux 2.6 e permite mais funcionalidades
  avançadas, como operação desconectado (permitindo que você trabalhe em
  arquivos que estão no cache local) e é apropriado para aplicações de alta
  disponibilidade, em que você precisa garantir que a armazenagem nunca está
  indisponível (ou simulada, se estiver fora do ar). Ele também tem aplicações
  para manter os dados em sincronia entre múltiplos computadores, como um
  laptop ou PDA e um computador desktop. Muitos dos projetos que fornecem
  suporte a estes novos tipos de filesystem foram inicialmente desenvolvidos
  no Linux, colocando o Linux bem além da curva em termos de suporte a estas
  novas funcionalidades.

=Funcionalidades Miscelânea=

==Segurança==

  Outra das grandes alterações no Linux 2.6 que não recebe atenção suficiente
  é a riqueza de novas alterações relacionadas à segurança. Mais
  fundamentalmente, toda a segurança baseada em kernel (os poderes do super
  usuário em um sistema operacional UNIX-like) foi modularizado para ser um de
  um número potencial de outros módulos de segurança alternativos (atualmente,
  o único modelo de segurança é o padrão e um módulo exemplo de como fazer o
  seu próprio). Como parte desta mudança, todas as partes do kernel agora
  foram atualizadas para usar //"capabilities"// como a base do acesso de
  usuários granular, em vez do velho sistema do "superusuário". Quase todos os
  sistemas Linux continuarão a ter uma conta "root" que tem acesso completo,
  mas este esquema possibilita que um sistema Linux-like seja criado que não
  tenha esta suposição interna. Outra alteração relacionada à segurança é que
  os módulos binários (por exemplo, drivers disponibilizados por um fabricante
  de hardware) não podem mais "sobrepor" as chamadas de sistema com as suas
  própria e não podem mais ver e modificar a tabela de chamadas de sistema.
  Esta providência restringe significativamente o acesso que módulos não
  open-source podem ter ao kernel e possivelmente fecha alguns furos em torno
  da GPL. A mudança final que é de alguma forma relacionada à segurança é que
  o Linux com o novo kernel pode agora usar geradores de números aleatórios de
  hardware (como os que estão presentes em alguns novos processadores), em vez
  de basear-se em uma fonte de entropia (que até que é boa) baseada em
  flutuações randômicas de hardware.

==Virtualizando o Linux==

  Uma das mais interessantes das novas funcionalidades do Linux 2.6 é a
  inclusão de uma arquitetura de //"user-mode"//. Esta é essencialmente um
  port (como para uma diferente família de hardware) do Linux para si mesmo,
  permitindo que seja executado um ambiente Linux-no-Linux completamente
  virtualizado. A nova instância do Linux é executada como se fosse uma
  aplicação normal. "Dentro" da aplicação, pode-se configurar interfaces de
  rede falsas, filesystems, e outros dispositivos através de drivers que se
  comunicam com a cópia hóspede do Linux de uma forma segura. Esta
  funcionalidade é bastante útil, tanto para desenvolvimentos (//profiling//,
  etc.) quanto para análises de segurança e //honeypots//. Apesar da maioria
  dos usuários nunca precisar deste tipo de suporte, esta é uma funcionalidade
  incrivelmente //"cool"// para ter no seu computador (impressione seus
  amigos!).

==Laptops==

  Além de todo o suporte genérico descrito acima (APM e ACPI melhorados,
  melhoramentos no suporte a wireless, etc.) o Linux também inclui duas outras
  funcionalidades difíceis de classificar, que ajudarão mais aos usuários de
  laptops. A primeira é que a nova edição do kernel agora suporta
  completamente a funcionalidade //software-suspend-to-disk// para o usuário
  Linux. A nova versão também suporta a habilidade de processadores modernos
  para sistemas móveis de mudar a velocidade (e necessidades de energia)
  baseado no fato de você estar ou não conectado.

==Suporte Legado==

  Apesar de o Linux 2.6 representar um grande avanço, a diferença para as
  aplicações de usuário será praticamente inexistente. Uma exceção a esta
  regra parece estar na //threading//: algumas aplicações podem fazer coisas
  que funcionavam nas versões 2.4 e 2.2, mas não serão mais permitidas. Estas
  aplicações serão a exceção à regra. Obviamente, aplicações de baixo nível,
  como ferramentas para módulos definitivamente não irão funcionar. Além
  disto, alguns dos arquivos e formatos nos diretórios /proc e /dev mudaram, e
  qualquer aplicação que dependa disto pode não funcionar corretamente (isto é
  especialmente verdadeiro à medida que mais coisas são colocadas no novo
  filesystem virtual /sys. No caso do /dev, a compatibilidade com nomes de
  dispositivos pode ser facilmente configurada).

  Além dos avisos padrão, existe um número de outras pequenas alterações que
  podem afetar alguns ambientes. Primeiro, arquivos de swap muito antigos (do
  Linux 2.0 ou anteriores) precisarão ser reformatados antes que possam ser
  usados com o 2.6 (arquivos de swap não contém nenhum dado permanente, este
  procedimento não deverá ser nenhum problema para os usuários Linux). O
  //daemon// kHTTPd que permite que o kernel sirva páginas WEB diretamente
  também foi removido, já que a maioria dos gargalos de performance que
  impediam que o Apache, Zeus, et. al. de responderem na mesma velocidade do
  kernel foram resolvidos. O suporte para "disk managers" DOS antigos, como o
  OnTrack e o EzDrive, para discos rígidos bem antigos e compatibilidade com o
  DOS foram removidos. O suporte para o uso de um setor de boot com o kernel
  para iniciar o computador com um disquete também foi removido, de forma que
  o SysLinux deve ser utilizado no seu lugar. E, finalmente, o suporte a
  "soundmodem" (para brincadeiras acústicas com a placa de som, fazendo-a um
  modem) foi removida, há uma versão para //user-space// com melhor manutenção
  e mais atualizada.

=Finalizando=

  Este documento foi montado principalmente a partir de longas horas de
  observação dos changelogs do BitKeeper, examinando o kernel e brincando com
  o código fonte, lendo mensagens das listas de email, e muitas e muitas
  pesquisas no Google e Lycos por documentação disto e daquilo. Por isto,
  podem haver trechos em que algo pode ter sido esquecido ou mal compreendido,
  e lugares em que alguma coisa pode ter retornado após o fato (eu fui
  bastante cuidadoso com as duas versões do suporte IDE que estavam
  funcionando durante este período, mas existem outros exemplos). Eu também
  tentei examinar cuidadosamente de páginas web de projetos que foram
  integrados no kernel, já que elas geralmente estão "um pouco adiante" do que
  está suportado oficialmente. Se você encontrar algum erro neste documento ou
  quiser mandar uma mensagem perguntando como estou, pode fazê-lo no email
  jpranevich  kniggit.net.

  Para pessoas com mentalidade mais técnica que querem apenas uma lista de
  itens, Dave Jones montou um excelente resumo do progresso do Linux 2.5 em
  http://www.codemonkey.org.uk/post-halloween-2.5.txt. Qualquer semelhança
  entre este documento e o trabalho dele é puramente coincidência, já que
  ambos estávamos usando os fontes originais e ambos estamos mais ligados ao
  i386.

  Este documento tem o Copyright 2003, Joseph Pranevich. A redistribuição
  online sem modificações é permitida, mas por favor mande um email se você
  está interessado em distribuição offline (revistas, etc). Como cortesia, eu
  gostaria de receber uma mensagem em qualquer caso, como uma nova versão
  disponível.

====================  

=Nota do Tradutor=

  Esta tradução tem o Copyright (C) 2003, César Grossmann. Todas as limitações
  do texto originais aplicam-se a esta tradução. Peço que quaisquer erros e
  imprecisões deste texto **não** sejam encaminhadas ao autor original, Joseph
  Pranevich, mas ao tradutor, no email cesarakg@bol.com.br.

  Este documento foi produzido com o auxílio do txt2tags, que pode ser
  encontrado em http://txt2tags.sf.net/. O arquivo original está
  [aqui wwol26-ptBR.txt].

    Source: geocities.com/br/cesarakg

               ( geocities.com/br)