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