xref: /linux/Documentation/translations/pt_BR/process/howto.rst (revision 0fc8f6200d2313278fbf4539bbab74677c685531)
18dd9b437SDaniel Pereira.. SPDX-License-Identifier: GPL-2.0
28dd9b437SDaniel Pereira
3c99fcb58SJonathan Corbet.. _pt_process_howto:
48dd9b437SDaniel Pereira
58dd9b437SDaniel PereiraCOMO FAZER o desenvolvimento do kernel Linux
68dd9b437SDaniel Pereira============================================
78dd9b437SDaniel Pereira
88dd9b437SDaniel PereiraEste é o documento definitivo sobre este tópico. Ele contém instruções
98dd9b437SDaniel Pereirasobre como se tornar um desenvolvedor do kernel Linux e como aprender a
108dd9b437SDaniel Pereiratrabalhar com a comunidade de desenvolvimento do kernel Linux. Ele tenta
118dd9b437SDaniel Pereiranão conter nada relacionado aos aspectos técnicos da programação do kernel,
128dd9b437SDaniel Pereiramas ajudará a apontar a direção certa para isso.
138dd9b437SDaniel Pereira
148dd9b437SDaniel PereiraSe algo neste documento ficar desatualizado, por favor, envie patches para
158dd9b437SDaniel Pereirao mantenedor deste arquivo, que está listado no final do documento.
168dd9b437SDaniel Pereira
178dd9b437SDaniel Pereira
188dd9b437SDaniel PereiraIntrodução
198dd9b437SDaniel Pereira------------
208dd9b437SDaniel Pereira
218dd9b437SDaniel PereiraEntão, você quer aprender como se tornar um desenvolvedor do kernel Linux?
228dd9b437SDaniel PereiraOu o seu gerente lhe disse: "Vá escrever um driver Linux para este
238dd9b437SDaniel Pereiradispositivo". O objetivo deste documento é ensinar tudo o que você precisa
248dd9b437SDaniel Pereirasaber para conseguir isso, descrevendo o processo pelo qual você deve passar
258dd9b437SDaniel Pereirae oferecendo dicas sobre como trabalhar com a comunidade. Ele também tentará
268dd9b437SDaniel Pereiraexplicar algumas das razões pelas quais a comunidade trabalha da forma que
278dd9b437SDaniel Pereiratrabalha.
288dd9b437SDaniel Pereira
298dd9b437SDaniel PereiraO kernel é escrito principalmente em C, com algumas partes dependentes de
308dd9b437SDaniel Pereiraarquitetura escritas em assembly. Um bom entendimento de C é necessário para
318dd9b437SDaniel Pereirao desenvolvimento do kernel. O conhecimento de Assembly (de qualquer
328dd9b437SDaniel Pereiraarquitetura) não é obrigatório, a menos que você planeje fazer
338dd9b437SDaniel Pereiradesenvolvimento de baixo nível para essa arquitetura específica. Embora não
348dd9b437SDaniel Pereirasejam um substituto para uma formação sólida em C e/ou anos de experiência,
358dd9b437SDaniel Pereiraos seguintes livros são bons para, no mínimo, referência:
368dd9b437SDaniel Pereira
378dd9b437SDaniel Pereira  - "The C Programming Language" por Kernighan e Ritchie [Prentice Hall]
388dd9b437SDaniel Pereira
398dd9b437SDaniel Pereira  - "Practical C Programming" por Steve Oualline [O'Reilly]
408dd9b437SDaniel Pereira
418dd9b437SDaniel Pereira  - "C: A Reference Manual" por Harbison e Steele [Prentice Hall]
428dd9b437SDaniel Pereira
438dd9b437SDaniel PereiraO kernel é escrito usando o GNU C e a GNU toolchain. Embora ele siga o
448dd9b437SDaniel Pereirapadrão ISO C11, ele utiliza uma série de extensões que não estão presentes
458dd9b437SDaniel Pereirano padrão. O kernel é um ambiente C independente (freestanding), sem
468dd9b437SDaniel Pereiradependência da biblioteca C padrão (libc), portanto, algumas partes do
478dd9b437SDaniel Pereirapadrão C não são suportadas. Divisões arbitrárias de "long long" e ponto
488dd9b437SDaniel Pereiraflutuante não são permitidas. Às vezes, pode ser difícil entender as
498dd9b437SDaniel Pereirasuposições que o kernel faz sobre a toolchain e as extensões que ele utiliza
508dd9b437SDaniel Pereirae, infelizmente, não existe uma referência definitiva para elas. Por favor,
518dd9b437SDaniel Pereiraverifique as páginas de informações do gcc (`info gcc`) para obter algumas
528dd9b437SDaniel Pereirainformações sobre elas.
538dd9b437SDaniel Pereira
548dd9b437SDaniel PereiraPor favor, lembre-se de que você está tentando aprender como trabalhar com a
558dd9b437SDaniel Pereiracomunidade de desenvolvimento existente. É um grupo diversificado de pessoas,
568dd9b437SDaniel Pereiracom altos padrões de codificação, estilo e procedimento. Esses padrões foram
578dd9b437SDaniel Pereiracriados ao longo do tempo com base no que se descobriu funcionar melhor para
588dd9b437SDaniel Pereirauma equipe tão grande e geograficamente dispersa. Tente aprender o máximo
598dd9b437SDaniel Pereirapossível sobre esses padrões com antecedência, pois eles estão bem
608dd9b437SDaniel Pereiradocumentados; não espere que as pessoas se adaptem a você ou à forma de fazer
618dd9b437SDaniel Pereiraas coisas da sua empresa.
628dd9b437SDaniel Pereira
638dd9b437SDaniel Pereira
648dd9b437SDaniel PereiraQuestões Legais
658dd9b437SDaniel Pereira---------------
668dd9b437SDaniel Pereira
678dd9b437SDaniel PereiraO código-fonte do kernel Linux é lançado sob a GPL. Por favor, veja o arquivo
688dd9b437SDaniel PereiraCOPYING no diretório principal da árvore de fontes. As regras de licenciamento
698dd9b437SDaniel Pereirado kernel Linux e como usar os identificadores `SPDX <https://spdx.org/>`_ no
708dd9b437SDaniel Pereiracódigo-fonte estão descritas em :ref:`Documentation/process/license-rules.rst <kernel_licensing>`.
718dd9b437SDaniel PereiraSe você tiver mais perguntas sobre a licença, por favor, entre em contato com
728dd9b437SDaniel Pereiraum advogado e não pergunte na lista de discussão do kernel Linux. As pessoas
738dd9b437SDaniel Pereiranas listas de discussão não são advogados e você não deve confiar em suas
748dd9b437SDaniel Pereiradeclarações sobre assuntos jurídicos.
758dd9b437SDaniel Pereira
768dd9b437SDaniel PereiraPara perguntas e respostas comuns sobre a GPL, por favor, veja:
778dd9b437SDaniel Pereira
788dd9b437SDaniel Pereira        https://www.gnu.org/licenses/gpl-faq.html
798dd9b437SDaniel Pereira
808dd9b437SDaniel Pereira
818dd9b437SDaniel PereiraDocumentação
828dd9b437SDaniel Pereira------------
838dd9b437SDaniel Pereira
848dd9b437SDaniel PereiraA árvore de fontes do kernel Linux possui uma vasta gama de documentos que
858dd9b437SDaniel Pereirasão inestimáveis para aprender como interagir com a comunidade do kernel.
868dd9b437SDaniel PereiraQuando novos recursos são adicionados ao kernel, recomenda-se que novos
878dd9b437SDaniel Pereiraarquivos de documentação também sejam adicionados explicando como usar o
888dd9b437SDaniel Pereirarecurso. Quando uma mudança no kernel faz com que a interface que o kernel
898dd9b437SDaniel Pereiraexpõe para o espaço do usuário (userspace) mude, recomenda-se que você envie
908dd9b437SDaniel Pereiraa informação ou um patch para as páginas de manual explicando a mudança para
918dd9b437SDaniel Pereirao mantenedor das páginas de manual em alx@kernel.org, e coloque em cópia (CC)
928dd9b437SDaniel Pereiraa lista linux-api@vger.kernel.org.
938dd9b437SDaniel Pereira
948dd9b437SDaniel PereiraAqui está uma lista de arquivos que estão na árvore de fontes do kernel e
958dd9b437SDaniel Pereiraque são de leitura obrigatória:
968dd9b437SDaniel Pereira
978dd9b437SDaniel Pereira  :ref:`Documentation/admin-guide/README.rst <readme>`
988dd9b437SDaniel Pereira    Este arquivo fornece um breve histórico sobre o kernel Linux e descreve
998dd9b437SDaniel Pereira    o que é necessário fazer para configurar e compilar o kernel. Pessoas
1008dd9b437SDaniel Pereira    que são novas no kernel devem começar por aqui.
1018dd9b437SDaniel Pereira
102*9a7bf1dcSDaniel Pereira  :doc:`changes`
1038dd9b437SDaniel Pereira    Este arquivo fornece uma lista das versões mínimas de vários pacotes de
1048dd9b437SDaniel Pereira    software que são necessários para compilar e executar o kernel com
1058dd9b437SDaniel Pereira    sucesso.
1068dd9b437SDaniel Pereira
1078dd9b437SDaniel Pereira  :ref:`Documentation/process/coding-style.rst <codingstyle>`
1088dd9b437SDaniel Pereira    Este documento descreve o estilo de codificação do kernel Linux e parte
1098dd9b437SDaniel Pereira    da fundamentação por trás dele. Espera-se que todo código novo siga as
1108dd9b437SDaniel Pereira    diretrizes deste documento. A maioria dos mantenedores apenas aceitará
1118dd9b437SDaniel Pereira    patches se essas regras forem seguidas, e muitas pessoas apenas
1128dd9b437SDaniel Pereira    revisarão o código se ele estiver no estilo adequado.
1138dd9b437SDaniel Pereira
1148dd9b437SDaniel Pereira  :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`
1158dd9b437SDaniel Pereira    Este arquivo descreve em detalhes explícitos como criar e enviar
1168dd9b437SDaniel Pereira    um patch com sucesso, incluindo (mas não limitado a):
1178dd9b437SDaniel Pereira
1188dd9b437SDaniel Pereira        - Conteúdo do e-mail
1198dd9b437SDaniel Pereira        - Formato do e-mail
1208dd9b437SDaniel Pereira        - Para quem enviá-lo
1218dd9b437SDaniel Pereira
1228dd9b437SDaniel Pereira    Seguir estas regras não garantirá o sucesso (já que todos os patches
1238dd9b437SDaniel Pereira    estão sujeitos a um escrutínio de conteúdo e estilo), mas não segui-las
1248dd9b437SDaniel Pereira    quase sempre o impedirá.
1258dd9b437SDaniel Pereira
1268dd9b437SDaniel PereiraOutras excelentes descrições de como criar patches adequadamente são:
1278dd9b437SDaniel Pereira
1288dd9b437SDaniel Pereira	"O Patch Perfeito"
1298dd9b437SDaniel Pereira		https://www.ozlabs.org/~akpm/stuff/tpp.txt
1308dd9b437SDaniel Pereira
1318dd9b437SDaniel Pereira	"Formato de Submissão de Patch do Kernel Linux"
1328dd9b437SDaniel Pereira		https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html
1338dd9b437SDaniel Pereira
1348dd9b437SDaniel Pereira  :ref:`Documentation/process/stable-api-nonsense.rst <stable_api_nonsense>`
1358dd9b437SDaniel Pereira    Este arquivo descreve a justificativa por trás da decisão consciente de
1368dd9b437SDaniel Pereira    não ter uma API estável dentro do kernel, incluindo pontos como:
1378dd9b437SDaniel Pereira
1388dd9b437SDaniel Pereira      - Camadas de adaptação (shim-layers) de subsistemas (para compatibilidade?)
1398dd9b437SDaniel Pereira      - Portabilidade de drivers entre sistemas operacionais.
1408dd9b437SDaniel Pereira      - Mitigação de mudanças rápidas dentro da árvore de fontes do kernel
1418dd9b437SDaniel Pereira        (ou impedimento de mudanças rápidas).
1428dd9b437SDaniel Pereira
1438dd9b437SDaniel Pereira    Este documento é crucial para compreender a filosofia de desenvolvimento
1448dd9b437SDaniel Pereira    do Linux e é muito importante para pessoas que estão migrando para o
1458dd9b437SDaniel Pereira    Linux vindas do desenvolvimento em outros Sistemas Operacionais.
1468dd9b437SDaniel Pereira
1478dd9b437SDaniel Pereira  :ref:`Documentation/process/security-bugs.rst <securitybugs>`
1488dd9b437SDaniel Pereira    Se você acredita ter encontrado um problema de segurança no kernel Linux,
1498dd9b437SDaniel Pereira    por favor, siga os passos descritos neste documento para ajudar a
1508dd9b437SDaniel Pereira    notificar os desenvolvedores do kernel e auxiliar na resolução do problema.
1518dd9b437SDaniel Pereira
1528dd9b437SDaniel Pereira  :ref:`Documentation/process/management-style.rst <managementstyle>`
1538dd9b437SDaniel Pereira    Este documento descreve como os mantenedores do kernel Linux operam e o
1548dd9b437SDaniel Pereira    ethos compartilhado por trás de suas metodologias. Esta é uma leitura
1558dd9b437SDaniel Pereira    importante para qualquer pessoa nova no desenvolvimento do kernel (ou
1568dd9b437SDaniel Pereira    para qualquer pessoa simplesmente curiosa sobre isso), pois resolve muitos
1578dd9b437SDaniel Pereira    equívocos comuns e confusões sobre o comportamento único dos mantenedores
1588dd9b437SDaniel Pereira    do kernel.
1598dd9b437SDaniel Pereira
1608dd9b437SDaniel Pereira  :ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>`
1618dd9b437SDaniel Pereira    Este arquivo descreve as regras sobre como ocorrem os lançamentos das
1628dd9b437SDaniel Pereira    versões estáveis (stable) do kernel e o que fazer se você desejar que
1638dd9b437SDaniel Pereira    uma alteração seja incluída em um desses lançamentos.
1648dd9b437SDaniel Pereira
1658dd9b437SDaniel Pereira  :ref:`Documentation/process/kernel-docs.rst <kernel_docs>`
1668dd9b437SDaniel Pereira    Uma lista de documentação externa que pertence ao desenvolvimento do
1678dd9b437SDaniel Pereira    kernel. Por favor, consulte esta lista caso não encontre o que está
1688dd9b437SDaniel Pereira    procurando dentro da documentação interna do kernel.
1698dd9b437SDaniel Pereira
1708dd9b437SDaniel Pereira  :ref:`Documentation/process/applying-patches.rst <applying_patches>`
1718dd9b437SDaniel Pereira    Uma boa introdução descrevendo exatamente o que é um patch e como
1728dd9b437SDaniel Pereira    aplicá-lo aos diferentes ramos (branches) de desenvolvimento do kernel.
1738dd9b437SDaniel Pereira
1748dd9b437SDaniel PereiraO kernel também possui um grande número de documentos que podem ser
1758dd9b437SDaniel Pereiragerados automaticamente a partir do próprio código-fonte ou de
1768dd9b437SDaniel Pereiramarcações ReStructuredText (ReST), como esta. Isso inclui uma
1778dd9b437SDaniel Pereiradescrição completa da API interna do kernel e regras sobre como
1788dd9b437SDaniel Pereiramanipular o bloqueio (locking) corretamente.
1798dd9b437SDaniel Pereira
1808dd9b437SDaniel PereiraTodos esses documentos podem ser gerados em formato PDF ou HTML ao
1818dd9b437SDaniel Pereiraexecutar::
1828dd9b437SDaniel Pereira
1838dd9b437SDaniel Pereira	make pdfdocs
1848dd9b437SDaniel Pereira	make htmldocs
1858dd9b437SDaniel Pereira
1868dd9b437SDaniel Pereirarespectivamente, a partir do diretório principal do código-fonte do kernel.
1878dd9b437SDaniel Pereira
1888dd9b437SDaniel PereiraOs documentos que utilizam a marcação ReST serão gerados em
1898dd9b437SDaniel PereiraDocumentation/output. Eles também podem ser gerados nos formatos
1908dd9b437SDaniel PereiraLaTeX e ePub com::
1918dd9b437SDaniel Pereira
1928dd9b437SDaniel Pereira	make latexdocs
1938dd9b437SDaniel Pereira	make epubdocs
1948dd9b437SDaniel Pereira
1958dd9b437SDaniel PereiraComo se tornar um desenvolvedor do kernel
1968dd9b437SDaniel Pereira------------------------------------------
1978dd9b437SDaniel Pereira
1988dd9b437SDaniel PereiraSe você não sabe nada sobre o desenvolvimento do kernel Linux, você deve
1998dd9b437SDaniel Pereiraconsultar o projeto Linux KernelNewbies:
2008dd9b437SDaniel Pereira
2018dd9b437SDaniel Pereira	https://kernelnewbies.org
2028dd9b437SDaniel Pereira
2038dd9b437SDaniel PereiraEle consiste em uma lista de discussão útil onde você pode fazer quase
2048dd9b437SDaniel Pereiraqualquer tipo de pergunta básica sobre o desenvolvimento do kernel
2058dd9b437SDaniel Pereira(certifique-se de pesquisar nos arquivos primeiro, antes de perguntar
2068dd9b437SDaniel Pereiraalgo que já foi respondido no passado). Ele também possui um canal de
2078dd9b437SDaniel PereiraIRC que você pode usar para fazer perguntas em tempo real, e muita
2088dd9b437SDaniel Pereiradocumentação útil para aprender sobre o desenvolvimento do kernel Linux.
2098dd9b437SDaniel Pereira
2108dd9b437SDaniel PereiraO site possui informações básicas sobre a organização do código,
2118dd9b437SDaniel Pereirasubsistemas e projetos atuais (tanto in-tree quanto out-of-tree).
2128dd9b437SDaniel PereiraTambém descreve algumas informações logísticas básicas, como por exemplo,
2138dd9b437SDaniel Pereiracomo compilar um kernel e aplicar um patch.
2148dd9b437SDaniel Pereira
2158dd9b437SDaniel PereiraSe você não sabe por onde começar, mas deseja procurar alguma tarefa
2168dd9b437SDaniel Pereirapara iniciar sua integração na comunidade de desenvolvimento do kernel,
2178dd9b437SDaniel Pereiraacesse o projeto Linux Kernel Janitor:
2188dd9b437SDaniel Pereira
2198dd9b437SDaniel Pereira	https://kernelnewbies.org/KernelJanitors
2208dd9b437SDaniel Pereira
2218dd9b437SDaniel PereiraÉ um ótimo lugar para começar. Ele descreve uma lista de problemas
2228dd9b437SDaniel Pereirarelativamente simples que precisam ser limpos e corrigidos dentro da
2238dd9b437SDaniel Pereiraárvore de códigos-fonte do kernel Linux. Ao trabalhar com os
2248dd9b437SDaniel Pereiradesenvolvedores responsáveis por este projeto, você aprenderá o básico
2258dd9b437SDaniel Pereirasobre como incluir seu patch na árvore do kernel Linux e,
2268dd9b437SDaniel Pereirapossivelmente, será orientado sobre o que trabalhar em seguida, caso
2278dd9b437SDaniel Pereiraainda não tenha uma ideia.
2288dd9b437SDaniel Pereira
2298dd9b437SDaniel PereiraAntes de fazer qualquer modificação real no código do kernel Linux, é
2308dd9b437SDaniel Pereiraimperativo entender como o código em questão funciona. Para esse
2318dd9b437SDaniel Pereirapropósito, nada é melhor do que lê-lo diretamente (a maioria das partes
2328dd9b437SDaniel Pereiracomplexas está bem comentada), talvez até com a ajuda de ferramentas
2338dd9b437SDaniel Pereiraespecializadas. Uma ferramenta particularmente recomendada é o projeto
2348dd9b437SDaniel PereiraLinux Cross-Reference, que é capaz de apresentar o código-fonte em um
2358dd9b437SDaniel Pereiraformato de página web indexada e auto-referenciada. Um excelente
2368dd9b437SDaniel Pereirarepositório atualizado do código do kernel pode ser encontrado em:
2378dd9b437SDaniel Pereira
2388dd9b437SDaniel Pereira    https://elixir.bootlin.com/
2398dd9b437SDaniel Pereira
2408dd9b437SDaniel Pereira
2418dd9b437SDaniel PereiraO processo de desenvolvimento
2428dd9b437SDaniel Pereira-----------------------------
2438dd9b437SDaniel Pereira
2448dd9b437SDaniel PereiraO processo de desenvolvimento do kernel Linux consiste atualmente em algumas
2458dd9b437SDaniel Pereira"branches" (ramos) principais diferentes e muitos ramos de subsistemas
2468dd9b437SDaniel Pereiraespecíficos. Esses diferentes ramos são:
2478dd9b437SDaniel Pereira
2488dd9b437SDaniel Pereira  - Árvore principal (mainline) do Linus
2498dd9b437SDaniel Pereira  - Várias árvores estáveis com múltiplos números de versão principal
2508dd9b437SDaniel Pereira  - Árvores específicas de subsistemas
2518dd9b437SDaniel Pereira  - Árvore de testes de integração linux-next
2528dd9b437SDaniel Pereira
2538dd9b437SDaniel PereiraÁrvore principal (Mainline tree)
2548dd9b437SDaniel Pereira~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2558dd9b437SDaniel Pereira
2568dd9b437SDaniel PereiraA árvore principal é mantida por Linus Torvalds e pode ser encontrada em
2578dd9b437SDaniel Pereirahttps://kernel.org ou no repositório. Seu processo de desenvolvimento é
2588dd9b437SDaniel Pereirao seguinte:
2598dd9b437SDaniel Pereira
2608dd9b437SDaniel Pereira  - Assim que um novo kernel é lançado, uma janela de duas semanas é aberta;
2618dd9b437SDaniel Pereira    durante esse período, os mantenedores podem enviar grandes diffs para
2628dd9b437SDaniel Pereira    Linus, geralmente patches que já foram incluídos na linux-next por algumas
2638dd9b437SDaniel Pereira    semanas. A forma preferida de enviar grandes mudanças é usando o git
2648dd9b437SDaniel Pereira    (a ferramenta de gerenciamento de código-fonte do kernel, mais informações
2658dd9b437SDaniel Pereira    podem ser encontradas em https://git-scm.com/), mas patches simples
2668dd9b437SDaniel Pereira    também são aceitos.
2678dd9b437SDaniel Pereira  - Após duas semanas, um kernel -rc1 é lançado e o foco passa a ser tornar
2688dd9b437SDaniel Pereira    o novo kernel o mais sólido possível. A maioria dos patches neste estágio
2698dd9b437SDaniel Pereira    deve corrigir uma regressão. Bugs que sempre existiram não são regressões,
2708dd9b437SDaniel Pereira    portanto, envie esses tipos de correções apenas se forem importantes.
2718dd9b437SDaniel Pereira    Observe que um driver (ou sistema de arquivos) totalmente novo pode ser
2728dd9b437SDaniel Pereira    aceito após o -rc1 porque não há risco de causar regressões com tal
2738dd9b437SDaniel Pereira    mudança, desde que a alteração seja autocontida e não afete áreas fora do
2748dd9b437SDaniel Pereira    código que está sendo adicionado. O git pode ser usado para enviar
2758dd9b437SDaniel Pereira    patches para Linus após o lançamento do -rc1, mas os patches também
2768dd9b437SDaniel Pereira    precisam ser enviados para uma lista de discussão pública para revisão.
2778dd9b437SDaniel Pereira  - Um novo -rc é lançado sempre que Linus considerar que a árvore git atual
2788dd9b437SDaniel Pereira    está em um estado razoavelmente estável e adequado para testes. O objetivo
2798dd9b437SDaniel Pereira    é lançar um novo kernel -rc a cada semana.
2808dd9b437SDaniel Pereira  - O processo continua até que o kernel seja considerado "pronto"; o
2818dd9b437SDaniel Pereira    processo deve durar cerca de 6 semanas.
2828dd9b437SDaniel Pereira
2838dd9b437SDaniel PereiraVale a pena mencionar o que Andrew Morton escreveu na lista de discussão
2848dd9b437SDaniel Pereirado kernel Linux sobre os lançamentos do kernel:
2858dd9b437SDaniel Pereira
2868dd9b437SDaniel Pereira    *"Ninguém sabe quando um kernel será lançado, porque ele é
2878dd9b437SDaniel Pereira    lançado de acordo com o status percebido dos bugs, não de acordo
2888dd9b437SDaniel Pereira    com um cronograma pré-concebido."*
2898dd9b437SDaniel Pereira
2908dd9b437SDaniel PereiraVárias árvores estáveis com múltiplos números de versão principal
2918dd9b437SDaniel Pereira~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2928dd9b437SDaniel Pereira
2938dd9b437SDaniel PereiraKernels com versões de 3 partes são kernels -stable (estáveis). Eles
2948dd9b437SDaniel Pereiracontêm correções relativamente pequenas e críticas para problemas de
2958dd9b437SDaniel Pereirasegurança ou regressões significativas descobertas em um determinado
2968dd9b437SDaniel Pereiralançamento principal da árvore mainline. Cada lançamento em uma série
2978dd9b437SDaniel Pereiraestável principal incrementa a terceira parte do número da versão,
2988dd9b437SDaniel Pereiramantendo as duas primeiras partes iguais.
2998dd9b437SDaniel Pereira
3008dd9b437SDaniel PereiraEste é o ramo recomendado para usuários que desejam o kernel estável
3018dd9b437SDaniel Pereiramais recente e não estão interessados em ajudar a testar versões de
3028dd9b437SDaniel Pereiradesenvolvimento ou experimentais.
3038dd9b437SDaniel Pereira
3048dd9b437SDaniel PereiraAs árvores estáveis são mantidas pela equipe "stable"
3058dd9b437SDaniel Pereira<stable@vger.kernel.org> e são lançadas conforme a necessidade exigir.
3068dd9b437SDaniel PereiraO período normal de lançamento é de aproximadamente duas semanas, mas
3078dd9b437SDaniel Pereirapode ser mais longo se não houver problemas urgentes. Por outro lado,
3088dd9b437SDaniel Pereiraum problema relacionado à segurança pode fazer com que um lançamento
3098dd9b437SDaniel Pereiraocorra quase instantaneamente.
3108dd9b437SDaniel Pereira
3118dd9b437SDaniel PereiraO arquivo :ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>`
3128dd9b437SDaniel Pereirana árvore do kernel documenta quais tipos de mudanças são aceitáveis para
3138dd9b437SDaniel Pereiraa árvore -stable e como o processo de lançamento funciona.
3148dd9b437SDaniel Pereira
3158dd9b437SDaniel PereiraÁrvores específicas de subsistemas
3168dd9b437SDaniel Pereira~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3178dd9b437SDaniel Pereira
3188dd9b437SDaniel PereiraOs mantenedores dos vários subsistemas do kernel — e também muitos
3198dd9b437SDaniel Pereiradesenvolvedores de subsistemas do kernel — expõem seu estado atual de
3208dd9b437SDaniel Pereiradesenvolvimento em repositórios de código-fonte. Dessa forma, outros
3218dd9b437SDaniel Pereirapodem ver o que está acontecendo nas diferentes áreas do kernel. Em
3228dd9b437SDaniel Pereiraáreas onde o desenvolvimento é rápido, um desenvolvedor pode ser
3238dd9b437SDaniel Pereirasolicitado a basear suas submissões em tal árvore de subsistema do
3248dd9b437SDaniel Pereirakernel para que conflitos entre a submissão e outros trabalhos já em
3258dd9b437SDaniel Pereiraandamento sejam evitados.
3268dd9b437SDaniel Pereira
3278dd9b437SDaniel PereiraA maioria desses repositórios são árvores git, mas também existem outros
3288dd9b437SDaniel PereiraSCMs em uso, ou filas de patches sendo publicadas como séries quilt. Os
3298dd9b437SDaniel Pereiraendereços desses repositórios de subsistemas estão listados no arquivo
3308dd9b437SDaniel PereiraMAINTAINERS. Muitos deles podem ser navegados em https://git.kernel.org/.
3318dd9b437SDaniel Pereira
3328dd9b437SDaniel PereiraAntes que um patch proposto seja incluído em tal árvore de subsistema,
3338dd9b437SDaniel Pereiraele está sujeito a uma revisão que ocorre principalmente em listas de
3348dd9b437SDaniel Pereiradiscussão (veja a seção respectiva abaixo). Para vários subsistemas do
3358dd9b437SDaniel Pereirakernel, este processo de revisão é rastreado com a ferramenta patchwork.
3368dd9b437SDaniel PereiraO Patchwork oferece uma interface web que mostra as postagens de patches,
3378dd9b437SDaniel Pereiraquaisquer comentários sobre um patch ou revisões feitas a ele, e os
3388dd9b437SDaniel Pereiramantenedores podem marcar os patches como "sob revisão", "aceitos" ou
3398dd9b437SDaniel Pereira"rejeitados". A maioria desses sites patchwork está listada em
3408dd9b437SDaniel Pereirahttps://patchwork.kernel.org/.
3418dd9b437SDaniel Pereira
3428dd9b437SDaniel PereiraÁrvore de testes de integração linux-next
3438dd9b437SDaniel Pereira~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3448dd9b437SDaniel Pereira
3458dd9b437SDaniel PereiraAntes que as atualizações das árvores de subsistemas sejam mescladas na
3468dd9b437SDaniel Pereiraárvore mainline, elas precisam ser testadas quanto à integração. Para
3478dd9b437SDaniel Pereiraeste propósito, existe um repositório de testes especial no qual
3488dd9b437SDaniel Pereirapraticamente todas as árvores de subsistemas são integradas (pulled)
3498dd9b437SDaniel Pereiraquase diariamente:
3508dd9b437SDaniel Pereira
3518dd9b437SDaniel Pereira    https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
3528dd9b437SDaniel Pereira
3538dd9b437SDaniel PereiraDessa forma, a linux-next oferece uma visão resumida do que se espera
3548dd9b437SDaniel Pereiraque entre no kernel mainline no próximo período de mesclagem (merge
3558dd9b437SDaniel Pereirawindow). Testadores aventureiros são muito bem-vindos para testar a
3568dd9b437SDaniel Pereiralinux-next em tempo de execução.
3578dd9b437SDaniel Pereira
3588dd9b437SDaniel Pereira
3598dd9b437SDaniel PereiraRelato de Bugs
3608dd9b437SDaniel Pereira--------------
3618dd9b437SDaniel Pereira
3628dd9b437SDaniel PereiraO arquivo 'Documentation/admin-guide/reporting-issues.rst' no diretório
3638dd9b437SDaniel Pereiraprincipal de códigos-fonte do kernel descreve como relatar um possível
3648dd9b437SDaniel Pereirabug no kernel e detalha que tipo de informação é necessária para os
3658dd9b437SDaniel Pereiradesenvolvedores do kernel ajudarem a rastrear o problema.
3668dd9b437SDaniel Pereira
3678dd9b437SDaniel PereiraGerenciando relatos de bugs
3688dd9b437SDaniel Pereira---------------------------
3698dd9b437SDaniel Pereira
3708dd9b437SDaniel PereiraUma das melhores maneiras de colocar em prática suas habilidades de hacking
3718dd9b437SDaniel Pereiraé corrigindo bugs relatados por outras pessoas. Você não apenas ajudará a
3728dd9b437SDaniel Pereiratornar o kernel mais estável, mas também aprenderá a resolver problemas do
3738dd9b437SDaniel Pereiramundo real, melhorará suas habilidades e outros desenvolvedores passarão a
3748dd9b437SDaniel Pereiranotar sua presença. Corrigir bugs é uma das melhores formas de obter mérito
3758dd9b437SDaniel Pereiraentre outros desenvolvedores, pois poucas pessoas gostam de gastar tempo
3768dd9b437SDaniel Pereiracorrigindo bugs de terceiros.
3778dd9b437SDaniel Pereira
3788dd9b437SDaniel PereiraPara trabalhar em relatos de bugs já existentes, encontre um subsistema no
3798dd9b437SDaniel Pereiraqual você esteja interessado. Verifique no arquivo MAINTAINERS para onde
3808dd9b437SDaniel Pereiraos bugs daquele subsistema são relatados; geralmente será uma lista de
3818dd9b437SDaniel Pereiradiscussão, raramente um rastreador de bugs (bugtracker). Pesquise nos
3828dd9b437SDaniel Pereiraarquivos de mensagens do local indicado por relatos recentes e ajude onde
3838dd9b437SDaniel Pereiraachar apropriado. Você também pode verificar o site
3848dd9b437SDaniel Pereirahttps://bugzilla.kernel.org para relatos de bugs; apenas alguns
3858dd9b437SDaniel Pereirasubsistemas do kernel o utilizam ativamente para relato ou rastreamento,
3868dd9b437SDaniel Pereiraentretanto, bugs de todo o kernel acabam sendo registrados lá.
3878dd9b437SDaniel Pereira
3888dd9b437SDaniel Pereira
3898dd9b437SDaniel PereiraListas de discussão
3908dd9b437SDaniel Pereira-------------------
3918dd9b437SDaniel Pereira
3928dd9b437SDaniel PereiraComo alguns dos documentos acima descrevem, a maioria dos desenvolvedores
3938dd9b437SDaniel Pereirado núcleo (core) do kernel participa da Linux Kernel Mailing List (LKML).
3948dd9b437SDaniel PereiraDetalhes sobre como se inscrever e cancelar a inscrição na lista podem
3958dd9b437SDaniel Pereiraser encontrados em:
3968dd9b437SDaniel Pereira
3978dd9b437SDaniel Pereira    https://subspace.kernel.org/subscribing.html
3988dd9b437SDaniel Pereira
3998dd9b437SDaniel PereiraExistem arquivos de mensagens da lista na web em muitos lugares diferentes.
4008dd9b437SDaniel PereiraUse um mecanismo de busca para encontrar esses arquivos. Por exemplo:
4018dd9b437SDaniel Pereira
4028dd9b437SDaniel Pereira    https://lore.kernel.org/linux-kernel/
4038dd9b437SDaniel Pereira
4048dd9b437SDaniel PereiraÉ altamente recomendável que você pesquise nos arquivos sobre o tópico que
4058dd9b437SDaniel Pereiradeseja abordar antes de postar na lista. Muitas coisas já discutidas em
4068dd9b437SDaniel Pereiradetalhes estão registradas apenas nos arquivos das listas de discussão.
4078dd9b437SDaniel Pereira
4088dd9b437SDaniel PereiraA maioria dos subsistemas individuais do kernel também possui sua própria
4098dd9b437SDaniel Pereiralista de discussão separada, onde realizam seus esforços de desenvolvimento.
4108dd9b437SDaniel PereiraConsulte o arquivo MAINTAINERS para obter uma lista de quais são essas
4118dd9b437SDaniel Pereiralistas para os diferentes grupos.
4128dd9b437SDaniel Pereira
4138dd9b437SDaniel PereiraMuitas das listas estão hospedadas no kernel.org. Informações sobre elas
4148dd9b437SDaniel Pereirapodem ser encontradas em:
4158dd9b437SDaniel Pereira
4168dd9b437SDaniel Pereira    https://subspace.kernel.org
4178dd9b437SDaniel Pereira
4188dd9b437SDaniel PereiraPor favor, lembre-se de seguir bons hábitos de comportamento ao usar as
4198dd9b437SDaniel Pereiralistas. Embora um pouco clichê, a URL a seguir possui algumas diretrizes
4208dd9b437SDaniel Pereirasimples para interagir com a lista (ou qualquer outra lista):
4218dd9b437SDaniel Pereira
4228dd9b437SDaniel Pereira    https://subspace.kernel.org/etiquette.html
4238dd9b437SDaniel Pereira
4248dd9b437SDaniel PereiraSe várias pessoas responderem ao seu e-mail, a lista de destinatários em
4258dd9b437SDaniel PereiraCC: pode se tornar bem grande. Não remova ninguém da lista CC: sem um
4268dd9b437SDaniel Pereirabom motivo, e não responda apenas para o endereço da lista. Acostume-se
4278dd9b437SDaniel Pereiraa receber o e-mail duas vezes (um do remetente e outro da lista) e não
4288dd9b437SDaniel Pereiratente ajustar isso adicionando cabeçalhos de e-mail complexos; as pessoas
4298dd9b437SDaniel Pereiranão gostarão disso.
4308dd9b437SDaniel Pereira
4318dd9b437SDaniel PereiraLembre-se de manter o contexto e a atribuição de suas respostas intactos;
4328dd9b437SDaniel Pereiramantenha as linhas do tipo "John Kernelhacker escreveu...:" no topo da
4338dd9b437SDaniel Pereirasua resposta e adicione seus comentários entre as seções citadas
4348dd9b437SDaniel Pereiraindividualmente, em vez de escrever tudo no topo do e-mail.
4358dd9b437SDaniel Pereira
4368dd9b437SDaniel PereiraSe você adicionar patches ao seu e-mail, certifique-se de que sejam texto
4378dd9b437SDaniel Pereirapuro legível, conforme declarado em
4388dd9b437SDaniel Pereira:ref:`Documentation/process/submitting-patches.rst <submittingpatches>`.
4398dd9b437SDaniel PereiraOs desenvolvedores do kernel não querem lidar com anexos ou patches
4408dd9b437SDaniel Pereiracompactados; eles podem querer comentar linhas individuais do seu patch,
4418dd9b437SDaniel Pereirao que só funciona dessa forma. Certifique-se de usar um programa de
4428dd9b437SDaniel Pereirae-mail que não altere espaços e caracteres de tabulação (tabs). Um bom
4438dd9b437SDaniel Pereiraprimeiro teste é enviar o e-mail para si mesmo e tentar aplicar o seu
4448dd9b437SDaniel Pereirapróprio patch. Se isso não funcionar, conserte seu programa de e-mail ou
4458dd9b437SDaniel Pereiratroque-o até que funcione.
4468dd9b437SDaniel Pereira
4478dd9b437SDaniel PereiraAcima de tudo, por favor, lembre-se de mostrar respeito aos outros
4488dd9b437SDaniel Pereirainscritos.
4498dd9b437SDaniel Pereira
4508dd9b437SDaniel Pereira
4518dd9b437SDaniel PereiraTrabalhando com a comunidade
4528dd9b437SDaniel Pereira----------------------------
4538dd9b437SDaniel Pereira
4548dd9b437SDaniel PereiraO objetivo da comunidade do kernel é fornecer o melhor kernel possível.
4558dd9b437SDaniel PereiraQuando você envia um patch para aceitação, ele será revisado por seus
4568dd9b437SDaniel Pereiraméritos técnicos e apenas por eles. Então, o que você deve esperar?
4578dd9b437SDaniel Pereira
4588dd9b437SDaniel Pereira  - críticas
4598dd9b437SDaniel Pereira  - comentários
4608dd9b437SDaniel Pereira  - solicitações de mudança
4618dd9b437SDaniel Pereira  - solicitações de justificativa
4628dd9b437SDaniel Pereira  - silêncio
4638dd9b437SDaniel Pereira
4648dd9b437SDaniel PereiraLembre-se, isso faz parte do processo de incluir seu patch no kernel.
4658dd9b437SDaniel PereiraVocê deve ser capaz de aceitar críticas e comentários sobre seus patches,
4668dd9b437SDaniel Pereiraavaliá-los em nível técnico e retrabalhar seus patches ou fornecer
4678dd9b437SDaniel Pereiraraciocínios claros e concisos sobre o porquê de certas mudanças não
4688dd9b437SDaniel Pereiradeverem ser feitas. Se não houver respostas à sua postagem, aguarde
4698dd9b437SDaniel Pereiraalguns dias e tente novamente; às vezes, as coisas se perdem no enorme
4708dd9b437SDaniel Pereiravolume de mensagens.
4718dd9b437SDaniel Pereira
4728dd9b437SDaniel PereiraO que você não deve fazer?
4738dd9b437SDaniel Pereira
4748dd9b437SDaniel Pereira  - esperar que seu patch seja aceito sem questionamentos
4758dd9b437SDaniel Pereira  - tornar-se defensivo
4768dd9b437SDaniel Pereira  - ignorar comentários
4778dd9b437SDaniel Pereira  - reenviar o patch sem fazer nenhuma das alterações solicitadas
4788dd9b437SDaniel Pereira
4798dd9b437SDaniel PereiraEm uma comunidade que busca a melhor solução técnica possível, sempre
4808dd9b437SDaniel Pereirahaverá opiniões divergentes sobre o quão benéfico é um patch. Você deve
4818dd9b437SDaniel Pereiraser cooperativo e estar disposto a adaptar sua ideia para que ela se
4828dd9b437SDaniel Pereiraencaixe no kernel. Ou, pelo menos, estar disposto a provar que sua ideia
4838dd9b437SDaniel Pereiravale a pena. Lembre-se: estar errado é aceitável, desde que você esteja
4848dd9b437SDaniel Pereiradisposto a trabalhar em direção a uma solução correta.
4858dd9b437SDaniel Pereira
4868dd9b437SDaniel PereiraÉ normal que as respostas ao seu primeiro patch sejam apenas uma lista
4878dd9b437SDaniel Pereirade uma dúzia de coisas que você deve corrigir. Isso **não** implica que
4888dd9b437SDaniel Pereiraseu patch não será aceito e **não** é algo pessoal contra você. Simplesmente
4898dd9b437SDaniel Pereiracorrija todos os problemas apontados em seu patch e envie-o novamente.
4908dd9b437SDaniel Pereira
4918dd9b437SDaniel Pereira
4928dd9b437SDaniel PereiraDiferenças entre a comunidade do kernel e estruturas corporativas
4938dd9b437SDaniel Pereira-----------------------------------------------------------------
4948dd9b437SDaniel Pereira
4958dd9b437SDaniel PereiraA comunidade do kernel trabalha de forma diferente da maioria dos ambientes
4968dd9b437SDaniel Pereiratradicionais de desenvolvimento corporativo. Aqui está uma lista de coisas
4978dd9b437SDaniel Pereiraque você pode tentar fazer para evitar problemas:
4988dd9b437SDaniel Pereira
4998dd9b437SDaniel Pereira  Boas coisas a dizer em relação às suas mudanças propostas:
5008dd9b437SDaniel Pereira
5018dd9b437SDaniel Pereira    - "Isto resolve múltiplos problemas."
5028dd9b437SDaniel Pereira    - "Isto remove 2000 linhas de código."
5038dd9b437SDaniel Pereira    - "Aqui está um patch que explica o que estou tentando descrever."
5048dd9b437SDaniel Pereira    - "Eu testei isso em 5 arquiteturas diferentes..."
5058dd9b437SDaniel Pereira    - "Aqui está uma série de pequenos patches que..."
5068dd9b437SDaniel Pereira    - "Isto aumenta a performance em máquinas comuns..."
5078dd9b437SDaniel Pereira
5088dd9b437SDaniel Pereira  Coisas ruins que você deve evitar dizer:
5098dd9b437SDaniel Pereira
5108dd9b437SDaniel Pereira    - "Nós fizemos desta forma no AIX/ptx/Solaris, portanto deve ser bom..."
5118dd9b437SDaniel Pereira    - "Eu faço isso há 20 anos, então..."
5128dd9b437SDaniel Pereira    - "Isto é necessário para minha empresa ganhar dinheiro."
5138dd9b437SDaniel Pereira    - "Isto é para nossa linha de produtos Enterprise."
5148dd9b437SDaniel Pereira    - "Aqui está meu documento de design de 1000 páginas que descreve minha ideia."
5158dd9b437SDaniel Pereira    - "Estou trabalhando nisso há 6 meses..."
5168dd9b437SDaniel Pereira    - "Aqui está um patch de 5000 linhas que..."
5178dd9b437SDaniel Pereira    - "Eu reescrevi toda a bagunça atual, e aqui está..."
5188dd9b437SDaniel Pereira    - "Eu tenho um prazo (deadline), e este patch precisa ser aplicado agora."
5198dd9b437SDaniel Pereira
5208dd9b437SDaniel PereiraOutra forma em que a comunidade do kernel difere da maioria dos ambientes
5218dd9b437SDaniel Pereiratradicionais de engenharia de software é a natureza anônima da interação.
5228dd9b437SDaniel PereiraUm benefício de usar e-mail e IRC como as principais formas de comunicação
5238dd9b437SDaniel Pereiraé a ausência de discriminação baseada em gênero ou raça. O ambiente de
5248dd9b437SDaniel Pereiratrabalho do kernel Linux aceita mulheres e minorias porque tudo o que você
5258dd9b437SDaniel Pereiraé, é um endereço de e-mail. O aspecto internacional também ajuda a nivelar
5268dd9b437SDaniel Pereirao campo de jogo porque você não pode adivinhar o gênero com base no nome
5278dd9b437SDaniel Pereirade uma pessoa. Um homem pode se chamar Andrea e uma mulher pode se chamar
5288dd9b437SDaniel PereiraPat. A maioria das mulheres que trabalharam no kernel Linux e expressaram
5298dd9b437SDaniel Pereirauma opinião tiveram experiências positivas.
5308dd9b437SDaniel Pereira
5318dd9b437SDaniel PereiraA barreira do idioma pode causar problemas para algumas pessoas que não
5328dd9b437SDaniel Pereirase sentem confortáveis com o inglês. Um bom domínio do idioma pode ser
5338dd9b437SDaniel Pereiranecessário para transmitir ideias adequadamente nas listas de discussão,
5348dd9b437SDaniel Pereirapor isso recomenda-se que você verifique seus e-mails para garantir que
5358dd9b437SDaniel Pereirafaçam sentido em inglês antes de enviá-los.
5368dd9b437SDaniel Pereira
5378dd9b437SDaniel Pereira
5388dd9b437SDaniel PereiraDivida suas alterações
5398dd9b437SDaniel Pereira----------------------
5408dd9b437SDaniel Pereira
5418dd9b437SDaniel PereiraA comunidade do kernel Linux não aceita de bom grado grandes blocos de
5428dd9b437SDaniel Pereiracódigo jogados de uma só vez. As mudanças precisam ser devidamente
5438dd9b437SDaniel Pereiraintroduzidas, discutidas e divididas em porções minúsculas e individuais.
5448dd9b437SDaniel PereiraIsso é quase o exato oposto do que as empresas costumam fazer. Sua proposta
5458dd9b437SDaniel Pereiratambém deve ser introduzida muito cedo no processo de desenvolvimento, para
5468dd9b437SDaniel Pereiraque você possa receber feedback sobre o que está fazendo. Isso também permite
5478dd9b437SDaniel Pereiraque a comunidade sinta que você está trabalhando com eles, e não simplesmente
5488dd9b437SDaniel Pereirausando-os como um depósito para sua funcionalidade. No entanto, não envie
5498dd9b437SDaniel Pereira50 e-mails de uma só vez para uma lista de discussão; sua série de patches
5508dd9b437SDaniel Pereiradeve ser menor que isso quase sempre.
5518dd9b437SDaniel Pereira
5528dd9b437SDaniel PereiraAs razões para dividir as coisas são as seguintes:
5538dd9b437SDaniel Pereira
5548dd9b437SDaniel Pereira1) Patches pequenos aumentam a probabilidade de serem aplicados, pois não
5558dd9b437SDaniel Pereira   exigem muito tempo ou esforço para verificar sua correção. Um patch de
5568dd9b437SDaniel Pereira   5 linhas pode ser aplicado por um mantenedor com apenas um olhar rápido.
5578dd9b437SDaniel Pereira   No entanto, um patch de 500 linhas pode levar horas para ser revisado
5588dd9b437SDaniel Pereira   (o tempo que leva é exponencialmente proporcional ao tamanho do patch,
5598dd9b437SDaniel Pereira   ou algo assim).
5608dd9b437SDaniel Pereira
5618dd9b437SDaniel Pereira   Patches pequenos também tornam muito fácil a depuração (debug) quando
5628dd9b437SDaniel Pereira   algo dá errado. É muito mais fácil reverter patches um por um do que
5638dd9b437SDaniel Pereira   dissecar um patch muito grande após ele ter sido aplicado (e quebrado algo).
5648dd9b437SDaniel Pereira
5658dd9b437SDaniel Pereira2) É importante não apenas enviar patches pequenos, mas também reescrever
5668dd9b437SDaniel Pereira   e simplificar (ou simplesmente reordenar) os patches antes de submetê-los.
5678dd9b437SDaniel Pereira
5688dd9b437SDaniel PereiraAqui está uma analogia do desenvolvedor do kernel Al Viro:
5698dd9b437SDaniel Pereira
5708dd9b437SDaniel Pereira    *"Pense em um professor corrigindo o dever de casa de um aluno de
5718dd9b437SDaniel Pereira    matemática. O professor não quer ver as tentativas e erros do aluno
5728dd9b437SDaniel Pereira    antes de chegar à solução. Ele quer ver a resposta mais limpa e
5738dd9b437SDaniel Pereira    elegante. Um bom aluno sabe disso e nunca enviaria seu trabalho
5748dd9b437SDaniel Pereira    intermediário antes da solução final.*
5758dd9b437SDaniel Pereira
5768dd9b437SDaniel Pereira    *O mesmo vale para o desenvolvimento do kernel. Os mantenedores e
5778dd9b437SDaniel Pereira    revisores não querem ver o processo de pensamento por trás da solução
5788dd9b437SDaniel Pereira    do problema que se está resolvendo. Eles querem ver uma solução
5798dd9b437SDaniel Pereira    simples e elegante."*
5808dd9b437SDaniel Pereira
5818dd9b437SDaniel PereiraPode ser desafiador manter o equilíbrio entre apresentar uma solução
5828dd9b437SDaniel Pereiraelegante e trabalhar em conjunto com a comunidade discutindo seu trabalho
5838dd9b437SDaniel Pereirainacabado. Portanto, é bom entrar no processo cedo para obter feedback e
5848dd9b437SDaniel Pereiramelhorar seu trabalho, mas também manter suas alterações em pequenos blocos
5858dd9b437SDaniel Pereiraque possam ser aceitos, mesmo quando sua tarefa completa ainda não esteja
5868dd9b437SDaniel Pereirapronta para inclusão.
5878dd9b437SDaniel Pereira
5888dd9b437SDaniel PereiraTambém entenda que não é aceitável enviar patches para inclusão que estejam
5898dd9b437SDaniel Pereirainacabados e que serão "consertados mais tarde".
5908dd9b437SDaniel Pereira
5918dd9b437SDaniel Pereira
5928dd9b437SDaniel PereiraJustifique sua alteração
5938dd9b437SDaniel Pereira------------------------
5948dd9b437SDaniel Pereira
5958dd9b437SDaniel PereiraAlém de dividir seus patches, é muito importante que você deixe a comunidade
5968dd9b437SDaniel PereiraLinux saber por que eles deveriam adicionar essa mudança. Novas
5978dd9b437SDaniel Pereirafuncionalidades devem ser justificadas como necessárias e úteis.
5988dd9b437SDaniel Pereira
5998dd9b437SDaniel Pereira
6008dd9b437SDaniel PereiraDocumente sua alteração
6018dd9b437SDaniel Pereira-----------------------
6028dd9b437SDaniel Pereira
6038dd9b437SDaniel PereiraAo enviar seus patches, preste atenção especial ao que você diz no texto
6048dd9b437SDaniel Pereirado seu e-mail. Essas informações se tornarão as informações do ChangeLog
6058dd9b437SDaniel Pereirapara o patch e serão preservadas para que todos vejam para sempre. Elas
6068dd9b437SDaniel Pereiradevem descrever o patch completamente, contendo:
6078dd9b437SDaniel Pereira
6088dd9b437SDaniel Pereira  - por que a mudança é necessária
6098dd9b437SDaniel Pereira  - a abordagem geral de design no patch
6108dd9b437SDaniel Pereira  - detalhes de implementação
6118dd9b437SDaniel Pereira  - resultados de testes
6128dd9b437SDaniel Pereira
6138dd9b437SDaniel PereiraPara mais detalhes sobre como tudo isso deve ser, por favor, veja a seção
6148dd9b437SDaniel PereiraChangeLog do documento:
6158dd9b437SDaniel Pereira
6168dd9b437SDaniel Pereira  "O Patch Perfeito"
6178dd9b437SDaniel Pereira      https://www.ozlabs.org/~akpm/stuff/tpp.txt
6188dd9b437SDaniel Pereira
6198dd9b437SDaniel PereiraTodas essas coisas às vezes são muito difíceis de fazer. Pode levar anos
6208dd9b437SDaniel Pereirapara aperfeiçoar essas práticas (se é que é possível). É um processo
6218dd9b437SDaniel Pereiracontínuo de melhoria que exige muita paciência e determinação. Mas não
6228dd9b437SDaniel Pereiradesista, é possível. Muitos fizeram isso antes, e cada um teve que começar
6238dd9b437SDaniel Pereiraexatamente onde você está agora.
6248dd9b437SDaniel Pereira
6258dd9b437SDaniel Pereira----------
6268dd9b437SDaniel Pereira
6278dd9b437SDaniel PereiraAgradecimentos a Paolo Ciarrocchi, que permitiu que a seção "Processo de
6288dd9b437SDaniel PereiraDesenvolvimento" (https://lwn.net/Articles/94386/) fosse baseada em um
6298dd9b437SDaniel Pereiratexto que ele escreveu, e a Randy Dunlap e Gerrit Huizenga por parte da
6308dd9b437SDaniel Pereiralista de coisas que você deve ou não dizer. Também agradecemos a Pat Mochel,
6318dd9b437SDaniel PereiraHanna Linder, Randy Dunlap, Kay Sievers, Vojtech Pavlik, Jan Kara,
6328dd9b437SDaniel PereiraJosh Boyer, Kees Cook, Andrew Morton, Andi Kleen, Vadim Lobanov, Jesper Juhl,
6338dd9b437SDaniel PereiraAdrian Bunk, Keri Harris, Frans Pop, David A. Wheeler, Junio Hamano,
6348dd9b437SDaniel PereiraMichael Kerrisk e Alex Shepard por suas revisões, comentários e contribuições.
6358dd9b437SDaniel PereiraSem a ajuda deles, este documento não teria sido possível.
6368dd9b437SDaniel Pereira
6378dd9b437SDaniel PereiraMantenedor: Greg Kroah-Hartman <greg@kroah.com>
638