1. Como ajudar no desenvolvimento
do kernel Linux?
Fábio Olivé Leite
fabio.olive@gmail.com
2. Tópicos
●
O que é o kernel Linux?
●
Como ele é desenvolvido?
●
Sua hierarquia social
●
Sua estrutura
●
Seu comportamento
●
A mítica figura do kernel hacker
●
Ferramentas para começar
3. O que é o kernel Linux?
●
Núcleo do Sistema Operacional
– Linux é só o caroço
●
É carregado pelo boot loader, inicializa o
hardware, e inicia o primeiro processo
●
Funciona geralmente em benefício dos
processos, por trás dos panos
●
Gnome, KDE, X, login, vi, nada é kernel
4. Como ele é desenvolvido?
●
O processo de desenvolvimento é
massivamente distribuído
●
Funciona 24h por dia
●
Primariamente via emails em listas de
discussão e patches
●
Peer review intenso
5. Sua hierarquia social
●
O time de desenvolvimento é uma
MERITOCRACIA
●
A confiança é conquistada aos poucos,
baseada em quesitos TÉCNICOS
●
As diversas áreas do kernel possuem
pessoas responsáveis
●
Todos são “ casca grossa”
6. Sua estrutura
●
Projeto estruturado muito limpo
●
Interfaces bem definidas entre blocos
Proc 1 Proc 2 Proc 1
Chamadas de Sistema
Protocolos de Rede Sistemas de arquivos Processos
Seriais Rede Bloco Memória
Hardware
7. Sua estrutura
fleite@sleipnir:~/git/linux-2.6
$ ls
arch cscope.out ipc net
block cscope.po.out Kbuild README
COPYING Documentation kernel REPORTING-BUGS
CREDITS drivers lib scripts
crypto fs MAINTAINERS security
cscope.files include Makefile sound
cscope.in.out init mm usr
$ ls net
802 dccp Kconfig nonet.c tipc
...
bluetooth ipv4 netfilter sctp xfrm
bridge ipv6 netlabel socket.c
compat.c ipx netlink sunrpc
core irda netrom sysctl_net.c
8. Seu comportamento
●
Depois do boot, o kernel está sempre:
– Atendendo pedidos dos processos
– Atendendo pedidos do hardware
●
Nunca fica esperando
●
Redes e disco influenciam memória, que
influencia rede e disco; tudo é interligado
9. A mítica figura do kernel hacker
●
“ Mamãe, eu quero ser um kernel hacker!”
●
É complexo, mas nem tanto
– Pode-se começar pequeno, e isto também tem
um valor inestimável (kernel janitors)
●
Antes de mais nada, entender de arquitetura
de computadores, pois o kernel gerencia o
hardware
10. Ferramentas para começar
●
Uma máquina com Linux
●
Um bom editor de textos PARA CÓDIGO
●
Compilador C
●
git para baixar o código fonte
●
cscope para não se perder
●
diff e patch
●
Programa de e-mail bom
11. Ferramentas para começar
Uma máquina com Linux
●
O Linux é desenvolvido usando Linux :)
●
Para mexer no kernel, é necessário uma
máquina bem configurada e funcionando
– Se der problema, pelo menos tu sabes que foi
numa mexida no kernel
– Mexer no kernel tem o poder de estragar todo o
resto
12. Ferramentas para começar
Um bom editor de CÓDIGO
●
Terminal:
– Bom e velho vi (vim!)
– EMACS
●
Gráficos
– Gnome: gedit
– KDE: kate, kwrite
●
CSCOPE!
13. Ferramentas para começar
Compilador C
●
O kernel é feito em C e um pouco de
Assembly
●
Basta instalar os pacotes de
desenvolvimento da sua distro
– Talvez já estejam instalados
●
GCCismos
14. Ferramentas para começar
git para baixar código fonte
●
O git foi desenvolvido especificamente para
versionar o código do kernel, de acordo com
as suas necessidades específicas
●
“ stupid content tracker”
●
Cada repositório é completo
●
Suporta vários modelos de desenvolvimento
15. Ferramentas para começar
cscope para não se perder
●
O cscope gera uma base de dados que
descreve todos os símbolos presentes em
um programa em C
●
Esta base pode ser usada pelos editores de
código para navegar entre arquivos e através
das funções facilmente
16. Ferramentas para começar
diff e patch
●
diff e patch são os “ vovôs” d o versionamento
de código
●
Ainda são usados diariamente
●
diff calcula a diferença entre dois arquivos de
texto (código fonte é texto)
●
patch aplica as modificações contidas num
arquivo gerado pelo diff
17. Ferramentas para começar
Programa de email bom
●
Deve-se ter certos cuidados ao enviar
patches (diffs) por email
●
A forma padrão de envio de patches é por
email, auxiliado pelo git
●
Principais pontos a cuidar
– Tabs e espaços
– Quebras de linha
18. O negócio é começar!
Ninguém nasceu sabendo.
Algumas pessoas resolveram começar.
Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better.
(Samuel Beckett)