núcleo do linux (kernel linux)

81
Software Livre e o Núcleo do Linux Frank Helbert Luiz Arthur Rodrigo Campiolo 1 O trabalho “Software Livre e o Núcleo do Linux” de Frank Helbert, Luiz Arthur F. dos Santos e Rodrigo Campiolo foi licenciado com uma Licença Creative Commons - Atribuição - NãoComercial 3.0 Não Adaptada.

Upload: luiz-arthur

Post on 18-Dec-2014

6.254 views

Category:

Documents


9 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Núcleo do Linux (Kernel Linux)

Software Livre e oNúcleo do Linux

Frank Helbert

Luiz ArthurRodrigo Campiolo

1

O trabalho “Software Livre e o Núcleo do Linux” de Frank Helbert, Luiz Arthur F. dos Santos e Rodrigo Campiolo foi licenciado com uma Licença Creative Commons - Atribuição - NãoComercial 3.0 Não Adaptada.

Page 2: Núcleo do Linux (Kernel Linux)

Vamos falar sobre Linux!

Mas, o que é Linux?

Linux é um SISTEMA OPERACIONAL:

Segundo Andrew Tanenbaum,

Sistema Operacional gerência software e hardware dos computadores.

2

Page 3: Núcleo do Linux (Kernel Linux)

Vamos falar sobre Linux!

Mas, o que é Linux?

Linux é um SISTEMA OPERACIONAL!

Segundo Andrew Tanenbaum,

Sistema Operacional gerencia hardware e software dos computadores.

3

Page 4: Núcleo do Linux (Kernel Linux)

O que é Núcleo do Linux?

O Núcleo do Linux, em inglês Linux Kernel, é a base do Sistema Operacional!!!

4

Page 5: Núcleo do Linux (Kernel Linux)

O que é Núcleo do Linux?

O Núcleo do Linux, em inglês Linux Kernel, é a base do Sistema Operacional!!!

5

Usuário

Shell

Kernel

Page 6: Núcleo do Linux (Kernel Linux)

Um breve histórico/introdução sobre o Linux:

Março/1991 – Linus Torvalds com 21 anos, inicia o desenvolvimento do núcleo, inspirado pelo Minix;

Agosto/1991 – Linus posta uma mensagem a um grupo de notícias (comp.os.minix) dizendo:

● Estou fazendo um Sistema Operacional baseado no x386 (provavelmente não vai ser portável);

● Não é uma cópia do Minix, mas livre deste;

● Já possui o bash e o gcc;

● Está escrito na linguagem de programação C.6

Page 7: Núcleo do Linux (Kernel Linux)

71991

1992

1993

1994

..

1995

1996

..

2000

..

..

2005

..

..

2010

2011

2012

Setembro/1991Lançada a versão 0.01 do Linux~10.239 linhas de código;

Dezembro/1991:Linux 0.11, Hospedado em site próprio;

Março/1994Linux 1.0.0 ~176.250 linhas de código;

ANOS / Versão do Núcleo Linux

Linha de tempo das versões Linux:

0.01

1.3

Page 8: Núcleo do Linux (Kernel Linux)

81991

1992

1993

1994

..

1995

1996

..

2000

..

..

2005

..

..

2010

2011

2012

Junho/1996:Linux versão 2,~1.800.847 linhas de código;

ANOS / Versão do Núcleo Linux

Linha de tempo das versões Linux:

0.01

1.3 2.0

2.0.40

2.2

2.2.27

2.4

2.6

2.4.37.11

2.6.39.4

Outubro/2010Linux 2.6.36, ~13.499.457 linhas de código;

Page 9: Núcleo do Linux (Kernel Linux)

91991

1992

1993

1994

..

1995

1996

..

2000

..

..

2005

..

..

2010

2011

2012

Julho/2011: Comemoração aos 20 anos,Lançada a versão 3, ~13.872.245 linhas de código;

Janeiro/2012:Linux 3.2, ~14.304.901 linhas de código.

ANOS / Versão do Núcleo Linux

Linha de tempo das versões Linux:

0.01

1.3 2.0

2.0.40

2.2

2.2.27

2.4

2.6

3.02.4.37.11

2.6.39.4 3.2

Page 10: Núcleo do Linux (Kernel Linux)

Impacto do Linux no mundo dos computadores:

Sistemas Operacionais antes do Linux:

- Microsoft Windows 3.0;- System 7 (Mac OS);- AIX 3.0;- 4.3BSD;- MINIX 1.5;- GNU Hurd (em desenvolvimento).

Quando o Linux foi idealizado em 1991 o GNU Hurd estava incompleto e o BSD estava com problemas legais.

10

Page 11: Núcleo do Linux (Kernel Linux)

Impacto do Linux no mundo dos computadores:

Números de usuários Linux nos últimos 20 anos, fonte linuxcounter.net.

11

Page 12: Núcleo do Linux (Kernel Linux)

Impacto do Linux no mundo dos computadores:

Número de usuários Linux obtidos em linuxcounter.net nos últimos 12 meses.

12

Page 13: Núcleo do Linux (Kernel Linux)

Uso do Linux em relação a outros Sistemas Operacionais, no ano de 2011. Fonte w3schools.com.

13

2011 Win7 Vista Win2003 WinXP Linux Mac Móvel

Dezembro 46.1% 5.0% 0.7% 38.5% 4.9% 8.5% 1.2%

Novembro 45.5% 5.2% 0.7% 32.8% 5.1% 8.8% 1.0%

Outubro 44.7% 5.5% 0.7% 33.4% 5.0% 8.9% 1.0%

Setembro 42.2% 5.6% 0.8% 36.2% 5.1% 8.6% 0.9%

Agosto 40.4% 5.9% 0.8% 38.0% 5.2% 8.2% 0.9%

Julho 39.1% 6.3% 0.9% 39.1% 5.3% 7.8% 1.0%

Junho 37.8% 6.7% 0.9% 39.7% 5.2% 8.1% 0.9%

Maio 36.5% 7.1% 0.9% 40.7% 5.1% 8.3% 0.8%

Abril 35.9% 7.6% 0.9% 40.9% 5.1% 8.3% 0.8%

Março 34.1% 7.9% 0.9% 42.9% 5.1% 8.0% 0.7%

Fevereiro 32.2% 8.3% 1.0% 44.2% 5.1% 8.1% 0.7%

Janeiro 31.1% 8.6% 1.0% 45.3% 5.0% 7.8% 0.7%

Page 14: Núcleo do Linux (Kernel Linux)

2003 2004 2005 2006 2007 2008 2009 2010 20110

1

2

3

4

5

6

2,3

2,93,3 3,4 3,4

3,84,2

4,75,1

Média do uso do Linux no período de 2003 a 2011. Fonte w3schools.com.

14

Page 15: Núcleo do Linux (Kernel Linux)

Uso do Linux em relação a outros Sistemas Operacionais:

15

Page 16: Núcleo do Linux (Kernel Linux)

Impacto do Linux no mundo dos computadores:

Computadores pessoais – O uso de Sistemas Operacionais dentre os computadores pessoais está da seguinte forma (fonte Marketshare ):

O uso de Linux por clientes Web não chega a 3% na melhor das hipóteses, por exemplo:

● AT Internet marca 1%;

● Webmasterpro apresenta 1.4% . 16

Page 17: Núcleo do Linux (Kernel Linux)

Então quer dizer que as pessoas não usam Linux?

NÃO É BEM ASSIM...

Os números anteriores já nos deram algumas pistas mas vamos ver outros fatos! 17

Page 18: Núcleo do Linux (Kernel Linux)

Então quer dizer que as pessoas não usam Linux?

NÃO É BEM ASSIM...

Os números anteriores já nos deram algumas pistas, mas vamos ver outros fatos! 18

Page 19: Núcleo do Linux (Kernel Linux)

O impacto do Linux no mundo dos computadores:

Netbooks - O Linux é o segundo Sistema Operacional mais instalado em Netbooks. 30% segundo a ComputerWorld.com;

Tablets – 20% são Android (que possui um núcleo Linux);

Dispositivos móveis – Celulares e smartphones, tem os seguintes números:

19

Fonte:Garner e Wiki

Page 20: Núcleo do Linux (Kernel Linux)

Servidores:

- Segundo Security Space:

● O Linux está em mais de 60% dos servidores no mundo;

● Windows 36%.

- Conforme o w3techs.com:

● O Windows possui apenas 36,5% do mercado de servidores;

● Enquanto sistemas UNIX levam 63,5%.

20

Page 21: Núcleo do Linux (Kernel Linux)

MainFrames – A IBM tem entre 90 a 95% do mercado e segundo ela:

● No ano de 2000, a IBM lança o projeto chamado Linux S/390;

● Em 2001 a IBM, investiu 1 Bilhão de dólares no Linux;

● Em 2003 a empresa de software SAP porta seus softwares para o Linux em Mainframes.

● Hoje temos mais de 3.150 aplicações homologadas;

● Cerca de 16% dos Mainframes MIPS executam Linux;

● 70% dos Top Clients executam Linux.

Em dezembro de 2008 28% dos Mainframes utilizavam Linux e em uma projeção para 5 anos, cerca de 50% irá utilizar Linux. Fonte Gartner. 21

Page 22: Núcleo do Linux (Kernel Linux)

Supercomputadores – A TOP500 apresenta: ● Linux é usado em 91,4%;● O segundo colocado é o IBM AIX, com 5,6%; ● Microsoft HPCS 2008 fica com apenas 0,2%.

22

Page 23: Núcleo do Linux (Kernel Linux)

Distribuições Linux:

É muito comum confundir o Núcleo Linux com Distribuição Linux!

Mas, qual é a diferença entre Linux e Distribuição Linux?

O Linux ou Núcleo Linux é a base do Sistema Operacional!

Distribuição Linux é um conjunto de programas que são agrupados a um Núcleo Linux para dar alguma funcionalidade ao Sistema.

23

Page 24: Núcleo do Linux (Kernel Linux)

Distribuições Linux:

É muito comum confundir o Núcleo Linux com Distribuição Linux!

Mas, qual é a diferença entre Linux e Distribuição Linux?

O Linux ou Núcleo Linux é a base do Sistema Operacional!

Distribuição Linux é um conjunto de programas que são agrupados a um Núcleo Linux para dar alguma funcionalidade ao Sistema.

24

Page 25: Núcleo do Linux (Kernel Linux)

Exemplos de Distribuições Linux:

25

Page 26: Núcleo do Linux (Kernel Linux)

Alguns Linux são pagos?

O Núcleo do Linux não é pago, por isto o Linux não é pago!!!

Mas algumas Distribuições Linux cobram por serviços e/ou ferramentas.

Exemplos de distribuições pagas:

RedHat: ● Computadores Pessoais 49 U$;

● Estações de trabalho 179 U$;

● Servidores entre 349 U$ e 6.498 U$.

SUSE: ● Computadores Pessoais 50 U$;

● Servidores entre 349 a 1.499 U$. 26

Page 27: Núcleo do Linux (Kernel Linux)

Obtendo o núcleo Linux:

27

Page 28: Núcleo do Linux (Kernel Linux)

Qual é a licença de uso do Linux?

O arquivo COPYING contém a licença do Linux, que informa que o Núcleo Linux utiliza a licença GPL versão 2, o Linux está de acordo com as primitivas do projeto GNU.

NOTE! This copyright does *not* cover user programs that use kernel services by normal system calls - this is merely considered normal use of the kernel, and does *not* fall under the heading of "derived work". Also note that the GPL below is copyrighted by the Free Software Foundation, but the instance of code that it refers to (the Linux kernel) is copyrighted by me and others who actually wrote it.

Also note that the only valid version of the GPL as far as the kernel is concerned is _this_ particular version of the license (ie v2, not v2.2 or v3.x or whatever), unless explicitly otherwise stated.

Linus Torvalds

----------------------------------------

GNU GENERAL PUBLIC LICENSE Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. ... 28

Page 29: Núcleo do Linux (Kernel Linux)

29

Principais Aspectos do Núcleo do Linux

Page 30: Núcleo do Linux (Kernel Linux)

30

Funções do Núcleo do Linux

Gerencia e intermedeia o acesso aos recursos (memória, processos, hardware);

Gerencia e coordena os processos do usuário e do sistema;

Garante a segurança no acesso aos recursos;

Viabiliza a interação das aplicações com os dispositivos físicos.

Page 31: Núcleo do Linux (Kernel Linux)

31

Classificação do Núcleo do Linux

O núcleo do Linux é fundamentalmente monolítico, mas suporta gerenciamento de módulos dinamicamente;

Todos os principais componentes e serviços estão agrupados dentro do núcleo, obtendo alto desempenho;

Possui a capacidade de ativar/desativar serviços em tempo de execução na forma de módulos do núcleo.

Page 32: Núcleo do Linux (Kernel Linux)

32

Arquitetura GNU/Linux e o Núcleo Linux (Jones, 2007)

Plataforma de Hardware

Código dependente da arquitetura

Núcleo

Interface das Chamadas de Sistema

Biblioteca GNU C (glibc)

Aplicações do UsuárioNível de

Aplicação

Nível deSistema

GNU/Linux

Núcleo do Linux e o Sistema Operacional GNU/Linux

Page 33: Núcleo do Linux (Kernel Linux)

33

A arquitetura conceitual do Núcleo do Linux é constituída por 5 principais subsistemas.

Arquitetura conceitual do Núcleo do Linux (Bowman, 1998)

Gerenciador de Processos

Gerenciador de Memória

Sistema de Arquivos Virtual Rede

Comunicaçãoentre Processos (IPC)

Arquitetura do Núcleo do Linux

Page 34: Núcleo do Linux (Kernel Linux)

34

Gerenciador de Processos

Foco principal na execução do processo;

Mantém estruturas de dados do processo;

Principal componente é o escalonador de processos, responsável por gerenciar o uso da CPU por processos concorrentes;

Principais arquivos:

sched.c: código do escalonador;

fork.c: criação de processos;

sched.h: estrutura task_struct.

Page 35: Núcleo do Linux (Kernel Linux)

35

Gerenciador de Memória

Gerencia o acesso à memória primária do sistema;

Possui estruturas de dados para realizar o mapeamento de endereço físico para endereço virtual;

Principais arquivos:

memory.c: paginação;

filemap.c: mapeamento de memória e cache de página;

buffer.c: cache do buffer;

swap_state.c e swapfile.c: cache do swap.

Page 36: Núcleo do Linux (Kernel Linux)

36Sistema de Arquivos Virtual (Jones, 2007)

Sistema de Arquivos Virtual (VFS)

Cache Buffer

Dispositivos Físicos

ext3 reiser /proc

Drivers de Dispositivos

...

Sistema de Arquivos Virtual

Provê uma camada de acesso comum para as implementações de sistemas de arquivos;

Abstrai os detalhes dos dispositivos físicos e dos sistemas de arquivos lógicos;

Principais arquivos: fs.h

buffer.c

fs/*

Page 37: Núcleo do Linux (Kernel Linux)

37

Rede

Provê acesso e controle para os diferentes dispositivos de rede;

Implementa uma API para acesso aos recursos de rede;

Possui um módulo de protocolos de rede que implementa vários tipos de protocolo;

Possui uma interface independente de protocolo para acesso às implementações da pilha de rede;

Principais arquivos:

socket.c

net/core/*

net/ipv4/*

Page 38: Núcleo do Linux (Kernel Linux)

38

Comunicação entre Processos

Provê os mecanismos para comunicação entre processos no sistema;

Os mecanismos implementados são:

Memória compartilhada; Filas de mensagens; Semáforos.

Os arquivos de código fonte encontram-se no diretório ipc/.

Page 39: Núcleo do Linux (Kernel Linux)

39

Estrutura do Núcleo do Linux

Page 40: Núcleo do Linux (Kernel Linux)

40

Estrutura do Núcleo do Linux

arch: código dependente de arquitetura de processadores (ex: arch/i386, arch/arm/arm64);

init: código de inicialização do núcleo do Linux (após a inicialização de hardware). Inicialização dos endereços de página, escalonador, chamadas de sistema, interrupção (irq) e assim por diante;

crypto: implementação de algoritmos de criptografia. São implementados como módulos do núcleo do Linux;

Documentation: contém a documentação do código fonte;

Page 41: Núcleo do Linux (Kernel Linux)

41

Estrutura do Núcleo do Linux

drivers: código de implementação de drivers de dispositivos. São implementados como módulos do núcleo do Linux. Dividido em subdiretórios segundo o tipo do driver (ex: drivers/ide). A parte dependente de dispositivo reside no diretório arch/;

kernel: código dos principais subsistemas do núcleo do Linux. Por exemplo, chamada de sistemas, escalonadores, DMA, interrupção. O código específico de arquitetura é mantido sobre arch/*/kernel;

include: cabeçalhos genéricos do núcleo do Linux;

Page 42: Núcleo do Linux (Kernel Linux)

42

Estrutura do Núcleo do Linux

ipc: código para os três sistemas de IPC (semáforos, memória compartilhada e filas de mensagens);

lib: bibliotecas do núcleo do Linux. Bibliotecas específicas de arquitetura são mantidas em arch/*/lib;

mm: código comum para gerenciamento de memória e do subsistema de memória virtual. Código específico de arquitetura arch/*/mm;

Page 43: Núcleo do Linux (Kernel Linux)

43

Estrutura do Núcleo do Linux

net: código para o subsistema de rede. Por exemplo, implementação de protocolos e soquetes de rede;

scripts: scripts e código para configurar e compilar o núcleo do Linux;

security: funções de segurança. São implementadas como módulos do núcleo do Linux;

virt: código para suporte a virtualização (kvm).

Page 44: Núcleo do Linux (Kernel Linux)

44

BIOSBoot

Loader Bootstrap Kernel Init

POST (Power On Self Test) Inicialização da CPU Verificação da memória RAM Inicialização dos dispositivos básicos Criação do mapa de memória Carregamento MBR (setor 0)

Processo de Inicialização do Núcleo do Linux

Page 45: Núcleo do Linux (Kernel Linux)

45

BIOSBoot

Loader Bootstrap Kernel Init

BIOS pode ler apenas o setor 0 Carrega o Boot Loader - LILO ou GRUB Carrega a imagem do núcleo do

Linux para a memória

Processo de Inicialização do Núcleo do Linux

Page 46: Núcleo do Linux (Kernel Linux)

46

BIOSBoot

Loader Bootstrap Kernel Init

Força a CPU para o modo protegido Ativa a MMU Descompacta a imagem

("Decompressing Linux ...") Chama a função "start_kernel" Inicializa todos os dispositivos, escalonadores,

console, etc.

Processo de Inicialização do Núcleo do Linux

Page 47: Núcleo do Linux (Kernel Linux)

47

BIOSBoot

Loader Bootstrap Kernel Init

Inicializa a CPU Reinicializa portas e controladores Interrupções são ativadas Sistema de arquivo é inicializado para

permitir leitura de disco Inicializa o carregador (loader) Loader carrega a thread do núcleo "init"

* se crash -> kernel panic

Processo de Inicialização do Núcleo do Linux

Page 48: Núcleo do Linux (Kernel Linux)

48

BIOSBoot

Loader Bootstrap Kernel Init

Inicialização das configurações e serviçosdo sistema operacional.

Processo de Inicialização do Núcleo do Linux

Page 49: Núcleo do Linux (Kernel Linux)

49

Fatores de Sucesso da Arquiteturado Núcleo do Linux

Organização dos desenvolvedores;

Mecanismos para prover extensibilidade ao sistema;

Suporte a várias arquiteturas de hardware;

Portabilidade;

Software livre.

Page 50: Núcleo do Linux (Kernel Linux)

50

Limitações do Núcleo do Linux

Não foi projetado para sistemas de tempo real;

Muitos fabricantes fornecem drivers de dispositivos com restrições para o núcleo do Linux;

Muitos fabricantes ainda não fornecem os drivers de dispositivos para seus produtos;

Page 51: Núcleo do Linux (Kernel Linux)

Como o Núcleo do Linux é mantido?

51

Page 52: Núcleo do Linux (Kernel Linux)

52

● Versão 1.0 até antes da 2.6:● Formato A.B.C

● Versões - A:● 1994 (versão 1.0);● 1996 (versão 2.0);● 2011 (versão 3.0) – comemoração de 20 anos

(29/05/2011).

● Revisão maior - B:● Par: versão madura, estável;● Ímpar: versão em desenvolvimento (implementação de

recursos novos).

● Revisão menor - C: patchs, correção de erros, etc.

Page 53: Núcleo do Linux (Kernel Linux)

53

● Linus Torvalds, 1991:● Não baseado no Minix● 386● Bash e GCC

● Momento histórico:● GNU Hurd (o Núcleo do Projeto GNU apresentava

problemas)● Mach microkernel (3 anos - licença)

● BSD com problemas legais (atraso na distribuição da versão Net/2):

● AT&T USL versus BSDi● Net/2

● 386BSD (livre)● BSD/386 (proprietário)

Page 54: Núcleo do Linux (Kernel Linux)

54

● 09/1991, versão 0.01:● (ftp.funet.fi) da Finnish University and Research

Network (FUNET)● 10.239 linhas de código

● 10/1991, versão 0.02

● 12/1991, versão 0.11● o Núcleo Linux podia ser compilado nele mesmo

● 02/1992, versão 0.12● GPL

● Até 2002:● sem ferramenta de controle de código

Page 55: Núcleo do Linux (Kernel Linux)

55

● Linus Torvalds● Centraliza o código:

● Problema de escalabilidade;

● BitKeeper é adotado:

● Flames:● Não era software livre;

● Richard Stallman (fundador do projeto GNU); mostrou preocupação com o uso do software com tal licença;

● Alan Cox (desenvolvedor) se recusou a usar.

Page 56: Núcleo do Linux (Kernel Linux)

56

● BitKeeper:● Software proprietário da BitMover;

● Licença especial● Usuários → ferramentas concorrentes (como o

CVS, GNU Arch, Subversion, ClearCase)

● Metainformações → servidor central

● Interoperabilidade (limitada) com CVS e Subversion.

Page 57: Núcleo do Linux (Kernel Linux)

57

● 04/2005● Fim versão gratuita

● Andrew Tridgell (OSDL)● Metadados (além da versão mais recente)

● BitMover● Sem vendas de licenças → OSDL

● incluindo Linus Torvalds e Andrew Morton

Page 58: Núcleo do Linux (Kernel Linux)

58

● Kernel SCM saga.. (Quarta, 6 de abril de 2005 08:42:08 GMT-07, por Linus Torvalds, na lista de e-mail do Núcleo Linux:

“Ok, as a number of people are already aware (and in some cases have beenaware over the last several weeks), we've been trying to work out aconflict over BK usage over the last month or two (and it feels likelonger ;). That hasn't been working out, and as a result, the kernel teamis looking at alternatives.”…“It's not like my choice of BK has been entirely conflict-free ("No,really? Do tell! Oh, you mean the gigabytes upon gigabytes of flames wehad?"), so...”…“So I just wanted to say that I'm personally very happy with BK, and with Larry. It didn't work out, but it sure as hell made a big difference to kernel development. And we'll work out the temporary problem of having to figure out a set of tools to allow us to continue to do the things that BK allowed us to do.

Let the flames begin.Linus”

Page 59: Núcleo do Linux (Kernel Linux)

59

● Nasce o Git:● Desenvolvido inicialmente por Linus:

● "git" é uma palavra britânica (de baixo calão) que significa "pessoa estúpida, desagradável," segundo Linus. "I'm an egotistical bastard, so I name all my projects after myself. First Linux, now git.";

● CEO da BitMover, Larry McVoy● Bitkeeper → melhor software de controle de código● Impossível recriá-lo em código aberto;

● 03/04/2005: projeto é iniciado● 06/04/2005: projeto é anunciado● 18/04/2005: primeira mesclagem de código (merge)● 16/06/2005: o Núcleo Linux 2.6.12 → Git

Page 60: Núcleo do Linux (Kernel Linux)

60

● Voltando a maio de 2003:● IBM contribuiu com o Linux com código Unix;● A empresa SCO Group entrou na justiça;

● SCO fez terrorismo com usuários do Linux;● IBM prometeu defender os usuários;

● De 1 milhão de linhas de código → 326 linhas de código;

● A SCO perdeu todas as ações.

Page 61: Núcleo do Linux (Kernel Linux)

61

● [RFD] Explicitly documenting patch submission (domingo, 23 de maio de 2004 08:50:07 GMT+02, por Linus Torvalds, na lista de e-mail do Núcleo Linux:

“Hola! This is a request for discussion.. Some of you may have heard of this crazy company called SCO (aka "Smoking Crack Organization") who seem to have a hard time believing that open source works better than their five engineers do. They've apparently made a couple of outlandish claims about where our source code comes from, including claiming to own code that was clearly written by me over a decade ago.”…“The plan is to make this very light-weight, and to fit in with how we already pass patches around - just add the sign-off to the end of the explanation part of the patch. That sign-off would be just a single line at the end (possibly after _other_ peoples sign-offs), saying: Signed-off-by: Random J Developer <[email protected]>”…“Developer's Certificate of Origin 1.0”...

Page 62: Núcleo do Linux (Kernel Linux)

Como o Núcleo do Linux foi mantido até a versão 2.5

Somente duas árvores

62

Page 63: Núcleo do Linux (Kernel Linux)

63

● Stable branch (por exemplo 2.4):● Alterações menores e seguras;

● Unstable branch (por exemplo 2.5):● Grandes alterações no código;

● Mantidos pelas mesmas pessoas, lideradas por Torvalds:

● Implicações:● Versão estável muito boa● Porém desatualizada

Page 64: Núcleo do Linux (Kernel Linux)

64

● Na série 2.5.x do Núcleo● Portar (backport) as alterações para a versão

estável● inserção de erros na série 2.4.x do Núcleo Linux

Page 65: Núcleo do Linux (Kernel Linux)

Como o Núcleo do Linux é mantido a partir da versão 2.6

65

Page 66: Núcleo do Linux (Kernel Linux)

66

● Somente uma árvore principal;

● 2 a 3 meses entre uma release e outra (2.6.x para 2.6.x+1)

● adicionar funcionalidades e garantir a sua estabilidade:

● "-stable" kernel branch: correção de erros e patchs de segurança para versões anteriores, antes da próxima versão menor;

● Por exemplo, a equipe lançou a versão 2.6.17 como estável. Então os desenvolvedores implementam funcionalidades e começam a lançar versões “-rc”. Depois que se torna estável, é lançada como 2.6.18.

Page 67: Núcleo do Linux (Kernel Linux)

67

● Depois da mudança● desenvolvedores continuam buscando uma árvore

que não fosse a estável● Com mudanças mais rápidas

● 02/2008, Stephen Rothwell● árvore linux-next

● patchs candidatos ao próximo ciclo de desenvolvimento

Page 68: Núcleo do Linux (Kernel Linux)

Quilt(gerenciamento de patchs)

68

Page 69: Núcleo do Linux (Kernel Linux)

69

● Patchwork quilt (“colcha de retalhos”)

● gerenciamento de patches

● scripts de Andrew Morton

Page 70: Núcleo do Linux (Kernel Linux)

Git(sistema de controle de versão/revisão)

70

Page 71: Núcleo do Linux (Kernel Linux)

71

● Cada diretório de trabalho Git é um repositório com todos os históricos que possibilita o controle total das revisões, não dependente de acesso a uma rede ou a um servidor central;

● Controle de versão distribuído:● clone funcional;● controle “offline”;● cópia de segurança é trivial;● super rápido;● superescalável.

Page 72: Núcleo do Linux (Kernel Linux)

Ajudando no desenvolvimentodo Núcleo do Linux(enviando patchs)

72

Page 73: Núcleo do Linux (Kernel Linux)

73

● “SubmittingPatches”● Bem humorado● Passo a passo

“How to Get Your Change Into the Linux Kernelor Care And Operation Of Your Linus Torvalds”.

● Passos:● Criando e enviando seu patch;

● Usar "diff -up" ou "diff -uprN" para criar os patchs;● Descrever suas mudanças;● Separar as mudanças de maneira lógica;● Verificar o estilo do código.

Page 74: Núcleo do Linux (Kernel Linux)

74

● Selecionar o e-mail de destino:● Arquivo MAINTAINERS● Código fonte● Mantenedor → Subsistema do Núcleo do Linux

● Enviar para a lista primária de desenvolvimento do Núcleo Linux [email protected];

● Escolha seu destinatário de CO:● Para patches pequenos (erros de compilação,

erros de escrita) enviar como CO o “Trivial Patch Monkey” ([email protected]);

● Somente texto puro.

Page 75: Núcleo do Linux (Kernel Linux)

75

● Tamanho do e-mail – jamais ultrapasse 300KB;

● Diga a que versão do Núcleo do Linux seu patch se aplica;

● Não se desencoraje, se a sua alteração não aparecer, resubmeta;

● Inclua [PATCH] no começo do assunto de sua mensagem;

● Assine seu trabalho - episódio SCO Group:● A assinatura é uma linha de texto

● As regras são simples.

Page 76: Núcleo do Linux (Kernel Linux)

76

Developer's Certificate of Origin 1.1 By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or

(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or

(c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.

(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.

Sem isto - viola “UK's Data Protection Act”

Page 77: Núcleo do Linux (Kernel Linux)

77

● Assine seu trabalho:Signed-off-by: Random J Developer

<[email protected]> ● Deve ser usado o nome real.

● A linha de assunto do e-mail com o patch deve seguir o formato:

Subject: [PATCH 001/123] subsystem: summary phrase

● O corpo da mensagem deve ser no formato:Uma linha "from" especificando o autor;

Uma linha em branco; O corpo da explicação (registro de mudanças); A linha "Signed-off-by:" (registro de mudanças);

O patch (saída do diff).● Faça o “Linux Kernel patch submission checklist”.

Page 78: Núcleo do Linux (Kernel Linux)

78

WIKI. Linux Kernel. Disponível em http://en.wikipedia.org/wiki/Linux_kernel

Stephen Rothwell, LKML: Stephen Rothwell: Announce: Linux-next. Disponível em https://lkml.org/lkml/2008/2/11/512

Jonathan Corbet. linux-next and patch management process [LWN.net]. Disponível em http://lwn.net/Articles/269120/

Jeremy Andrews. Linux: 2.6.16.y Lives On. http://kerneltrap.org/node/6930

Jeremy Andrews. Linux: New Kernel Development Model. http://kerneltrap.org/node/3513

James E.J. Bottomley. Git, Quilt and Other Kernel Maintenance Tools. http://www.linuxconf.eu/2007/papers/Bottomley.pdf

Linus Torvalds. LKML: Linus Torvalds: Kernel SCM saga.. https://lkml.org/lkml/2005/4/6/121

Referências

Page 79: Núcleo do Linux (Kernel Linux)

79

Kernel. How to Get Your Change Into the Linux Kernel. http://www.kernel.org/doc/Documentation/SubmittingPatches

Linus Torvalds. [RFD] Explicitly documenting patch submission. http://groups.google.com/group/linux.kernel/msg/4d02da62a287828a?hl=en

WIKI. Quilt (software). http://en.wikipedia.org/wiki/Quilt_(software)

WIKI. Git (software). http://en.wikipedia.org/wiki/Git_(software)

Git Reference. Git Reference. http://gitref.org/index.html

Referências

Page 80: Núcleo do Linux (Kernel Linux)

80

Referências

Jones, M. Tim. Anatomia do Kernel Linux. Disponível em: http://www.ibm.com/developerworks/br/library/l-linux-kernel/

Bowman, Ivan. Conceptual Architecture of the Linux Kernel. Disponível em: http://plg1.cs.uwaterloo.ca/~itbowman/CS746G/a1/

Linux Kernel Tutorial. Disponível em: http://www.learninglinuxkernel.com/

Rusling, David A. The Linux Kernel. Disponível em: http://en.tldp.org/LDP/tlk/tlk.html

Saad, Motaz K. Browsing Linux Kernel. Disponível em: http://www.slideshare.net/mksaad/linux-kernel-presentation

Rubini, Alessandro, Corbet, Jonathan. Linux Device Drivers - Chapter 16: Physical Layout of the Kernel Source. Disponível em: http://www.xml.com/ldd/chapter/book/ch16.html

Page 81: Núcleo do Linux (Kernel Linux)

Frank Helbert – [email protected] Arthur – [email protected]

Rodrigo Campiolo – [email protected]

81

?