1*29d38431SDaniel Pereira.. SPDX-License-Identifier: GPL-2.0 2*29d38431SDaniel Pereira 3*29d38431SDaniel PereiraEnviando patches 4*29d38431SDaniel Pereira================ 5*29d38431SDaniel Pereira 6*29d38431SDaniel PereiraCedo ou tarde, chega o momento em que seu trabalho está pronto para ser 7*29d38431SDaniel Pereiraapresentado à comunidade para revisão e, eventualmente, inclusão no kernel 8*29d38431SDaniel Pereiramainline. Sem surpresa, a comunidade de desenvolvimento do kernel evoluiu um 9*29d38431SDaniel Pereiraconjunto de convenções e procedimentos que são usados no envio de patches; 10*29d38431SDaniel Pereirasegui-los tornará a vida muito mais fácil para todos os envolvidos. Este 11*29d38431SDaniel Pereiradocumento tentará cobrir essas expectativas em detalhes razoáveis; mais 12*29d38431SDaniel Pereirainformações também podem ser encontradas nos arquivos 13*29d38431SDaniel Pereira:ref:`Documentation/process/submitting-patches.rst <submittingpatches>` 14*29d38431SDaniel Pereirae :ref:`Documentation/process/submit-checklist.rst <submitchecklist>`. 15*29d38431SDaniel Pereira 16*29d38431SDaniel Pereira 17*29d38431SDaniel PereiraQuando enviar 18*29d38431SDaniel Pereira------------- 19*29d38431SDaniel Pereira 20*29d38431SDaniel PereiraExiste uma tentação constante de evitar o envio de patches antes que eles 21*29d38431SDaniel Pereiraestejam completamente "prontos". Para patches simples, isso não é um problema. 22*29d38431SDaniel PereiraNo entanto, se o trabalho que está sendo feito for complexo, há muito a se 23*29d38431SDaniel Pereiraganhar obtendo feedback da comunidade antes que o trabalho esteja concluído. 24*29d38431SDaniel PereiraPortanto, você deve considerar o envio de trabalhos em andamento, ou até mesmo 25*29d38431SDaniel Pereiradisponibilizar uma árvore git para que os desenvolvedores interessados possam 26*29d38431SDaniel Pereiraacompanhar o seu trabalho a qualquer momento. 27*29d38431SDaniel Pereira 28*29d38431SDaniel PereiraAo enviar um código que ainda não é considerado pronto para inclusão, é uma boa 29*29d38431SDaniel Pereiraideia dizer isso no próprio envio. Mencione também qualquer trabalho importante 30*29d38431SDaniel Pereiraque ainda precise ser feito e quaisquer problemas conhecidos. Menos pessoas vão 31*29d38431SDaniel Pereiraolhar para patches que sabidamente estão "meio cozidos" (half-baked), mas aqueles 32*29d38431SDaniel Pereiraque o fizerem virão com a ideia de que podem ajudá-lo a conduzir o trabalho na 33*29d38431SDaniel Pereiradireção certa. 34*29d38431SDaniel Pereira 35*29d38431SDaniel Pereira 36*29d38431SDaniel PereiraAntes de criar patches 37*29d38431SDaniel Pereira---------------------- 38*29d38431SDaniel Pereira 39*29d38431SDaniel PereiraHá uma série de coisas que devem ser feitas antes de você considerar o envio 40*29d38431SDaniel Pereirade patches para la comunidade de desenvolvimento. Elas incluem: 41*29d38431SDaniel Pereira 42*29d38431SDaniel Pereira - Teste o código tanto quanto puder. Faça uso das ferramentas de depuração 43*29d38431SDaniel Pereira do kernel, garanta que o kernel seja compilado com todas as combinações 44*29d38431SDaniel Pereira razoáveis de opções de configuração, use compiladores cruzados (cross- 45*29d38431SDaniel Pereira compilers) para compilar para diferentes arquiteturas, etc. Adicione testes, 46*29d38431SDaniel Pereira provavelmente usando um framework de testes existente como o KUnit, e 47*29d38431SDaniel Pereira inclua-os como um membro separado da sua série (veja a próxima seção para 48*29d38431SDaniel Pereira mais informações sobre séries de patches). Note que isso pode ser 49*29d38431SDaniel Pereira obrigatório ao afetar alguns subsistemas. Por exemplo, funções de biblioteca 50*29d38431SDaniel Pereira (localizadas sob lib/) são amplamente utilizadas em quase todos os lugares e 51*29d38431SDaniel Pereira espera-se que sejam testadas adequadamente. 52*29d38431SDaniel Pereira 53*29d38431SDaniel Pereira - Certifique-se de que seu código esteja em conformidade com as diretrizes de 54*29d38431SDaniel Pereira estilo de codificação do kernel. 55*29d38431SDaniel Pereira 56*29d38431SDaniel Pereira - Sua alteração tem implicações no desempenho? Se sim, você deve executar 57*29d38431SDaniel Pereira benchmarks mostrando qual é o impacto (ou benefício) da sua mudança; um 58*29d38431SDaniel Pereira resumo dos resultados deve ser incluído junto ao patch. 59*29d38431SDaniel Pereira 60*29d38431SDaniel Pereira - Tenha certeza de que você tem o direito de enviar o código. Se este 61*29d38431SDaniel Pereira trabalho foi feito para um empregador, o empregador provavelmente tem direito 62*29d38431SDaniel Pereira sobre o trabalho e deve estar de acordo com a sua liberação sob a GPL. 63*29d38431SDaniel Pereira 64*29d38431SDaniel PereiraComo regra geral, dedicar um pouco de reflexão extra antes de enviar o código 65*29d38431SDaniel Pereiraquase sempre compensa o esforço em pouco tempo. 66*29d38431SDaniel Pereira 67*29d38431SDaniel Pereira 68*29d38431SDaniel PereiraPreparação de patches 69*29d38431SDaniel Pereira--------------------- 70*29d38431SDaniel Pereira 71*29d38431SDaniel PereiraA preparação de patches para envio pode dar uma quantidade surpreendente de 72*29d38431SDaniel Pereiratrabalho, mas, mais uma vez, tentar economizar tempo aqui geralmente não é 73*29d38431SDaniel Pereiraaconselhável, mesmo a curto prazo. 74*29d38431SDaniel Pereira 75*29d38431SDaniel PereiraOs patches devem ser preparados contra uma versão específica do kernel. Como 76*29d38431SDaniel Pereiraregra geral, um patch deve ser baseado no mainline atual encontrado na árvore 77*29d38431SDaniel Pereiragit do Linus. Ao basear-se no mainline, comece a partir de um ponto de 78*29d38431SDaniel Pereiralançamento bem conhecido — um release estável ou -rc —, em vez de criar uma 79*29d38431SDaniel Pereirabifurcação (branch) a partir do mainline em um ponto arbitrário. 80*29d38431SDaniel Pereira 81*29d38431SDaniel PereiraNo entanto, pode tornar-se necessário criar versões contra a árvore -mm, 82*29d38431SDaniel Pereiralinux-next ou a árvore de um subsistema, para facilitar testes e revisões mais 83*29d38431SDaniel Pereiraamplos. Dependendo da área do seu patch e do que está acontecendo em outros 84*29d38431SDaniel Pereiralugares, basear um patch contra essas outras árvores pode exigir uma quantidade 85*29d38431SDaniel Pereirasignificativa de trabalho para resolver conflitos e lidar com mudanças de API. 86*29d38431SDaniel Pereira 87*29d38431SDaniel PereiraApenas as alterações mais simples devem ser formatadas como um único patch; tudo 88*29d38431SDaniel Pereirao mais deve ser feito como uma série lógica de mudanças. Dividir patches é uma 89*29d38431SDaniel Pereiraarte; alguns desenvolvedores passam muito tempo descobrindo como fazer isso da 90*29d38431SDaniel Pereiramaneira que a comunidade espera. Existem algumas regras práticas, no entanto, 91*29d38431SDaniel Pereiraque podem ajudar consideravelmente: 92*29d38431SDaniel Pereira 93*29d38431SDaniel Pereira - A série de patches que você envia quase certamente não será a série de 94*29d38431SDaniel Pereira alterações encontrada no seu sistema de controle de versão de trabalho. Em 95*29d38431SDaniel Pereira vez disso, as mudanças que você fez precisam ser consideradas em sua forma 96*29d38431SDaniel Pereira final e, então, divididas de maneiras que façam sentido. Os desenvolvedores 97*29d38431SDaniel Pereira estão interessados em alterações discretas e autocontidas, não no caminho 98*29d38431SDaniel Pereira que você percorreu para chegar a essas alterações. 99*29d38431SDaniel Pereira 100*29d38431SDaniel Pereira - Cada alteração logicamente independente deve ser formatada como um patch separado. 101*29d38431SDaniel Pereira Essas alterações podem ser pequenas ("adicionar um campo a esta estrutura") ou 102*29d38431SDaniel Pereira grandes (adicionar um driver totalmente novo, por exemplo), mas devem ser 103*29d38431SDaniel Pereira conceitualmente pequenas e passíveis de uma descrição de uma única linha. Cada 104*29d38431SDaniel Pereira patch deve fazer uma alteração específica que possa ser revisada por si só e 105*29d38431SDaniel Pereira verificada para garantir que faz o que diz fazer. 106*29d38431SDaniel Pereira 107*29d38431SDaniel Pereira - Como uma forma de reafirmar a diretriz acima: não misture diferentes tipos de 108*29d38431SDaniel Pereira alterações no mesmo patch. Se um único patch corrige uma falha crítica de 109*29d38431SDaniel Pereira segurança, reorganiza algumas estruturas e reformatará o código, há uma grande 110*29d38431SDaniel Pereira chance de que ele seja ignorado e a correção importante seja perdida. 111*29d38431SDaniel Pereira 112*29d38431SDaniel Pereira - Cada patch deve resultar em um kernel que compile e funcione corretamente; se 113*29d38431SDaniel Pereira sua série de patches for interrompida no meio, o resultado ainda deve ser um 114*29d38431SDaniel Pereira kernel funcional. A aplicação parcial de uma série de patches é um cenário 115*29d38431SDaniel Pereira comum quando a ferramenta "git bisect" é usada para encontrar regressões; se o 116*29d38431SDaniel Pereira resultado for um kernel quebrado, você tornará a vida mais difícil para os 117*29d38431SDaniel Pereira desenvolvedores e usuários que estão engajados no nobre trabalho de rastrear 118*29d38431SDaniel Pereira problemas. 119*29d38431SDaniel Pereira 120*29d38431SDaniel Pereira - No entanto, não exagere. Certa vez, um desenvolvedor enviou um conjunto de 121*29d38431SDaniel Pereira edições em um único arquivo como 500 patches separados — um ato que não o 122*29d38431SDaniel Pereira tornou a pessoa mais popular na lista de discussão do kernel. Um único patch 123*29d38431SDaniel Pereira pode ser razoavelmente grande, desde que ainda contenha uma única alteração 124*29d38431SDaniel Pereira *lógica*. 125*29d38431SDaniel Pereira 126*29d38431SDaniel Pereira - Pode ser tentador adicionar toda uma nova infraestrutura com uma série de 127*29d38431SDaniel Pereira patches, mas deixar essa infraestrutura sem uso até que o patch final da série 128*29d38431SDaniel Pereira ative tudo. Essa tentação deve ser evitada, se possível; se essa série 129*29d38431SDaniel Pereira adicionar regressões, a bisseção (bisection) apontará o último patch como aquele 130*29d38431SDaniel Pereira que causou o problema, mesmo que o bug real esteja em outro lugar. Sempre que 131*29d38431SDaniel Pereira possível, um patch que adiciona código novo deve tornar esse código ativo 132*29d38431SDaniel Pereira imediatamente. 133*29d38431SDaniel Pereira 134*29d38431SDaniel PereiraTrabalhar para criar a série de patches perfeita pode ser um processo 135*29d38431SDaniel Pereirafrustrante, que exige bastante tempo e reflexão após o "trabalho real" ter sido 136*29d38431SDaniel Pereiraconcluído. Quando feito corretamente, no entanto, é um tempo bem gasto. 137*29d38431SDaniel Pereira 138*29d38431SDaniel Pereira 139*29d38431SDaniel PereiraFormatação de patches e logs de alterações 140*29d38431SDaniel Pereira------------------------------------------ 141*29d38431SDaniel Pereira 142*29d38431SDaniel PereiraEntão agora você tem uma série perfeita de patches para enviar, mas o trabalho 143*29d38431SDaniel Pereiraainda não terminou. Cada patch precisa ser formatado em uma mensagem que comunique 144*29d38431SDaniel Pereirade forma rápida e clara o seu propósito para o resto do mundo. Para esse fim, 145*29d38431SDaniel Pereiracada patch será composto pelo seguinte: 146*29d38431SDaniel Pereira 147*29d38431SDaniel Pereira - Uma linha "From" opcional que nomeia o autor do patch. Esta linha só é 148*29d38431SDaniel Pereira necessária se você estiver repassando o patch de outra pessoa via e-mail, 149*29d38431SDaniel Pereira mas nunca é demais adicioná-la em caso de dúvida. 150*29d38431SDaniel Pereira 151*29d38431SDaniel Pereira - Uma descrição de uma única linha sobre o que o patch faz. Esta mensagem deve 152*29d38431SDaniel Pereira ser suficiente para que um leitor que a veja sem outro contexto consiga 153*29d38431SDaniel Pereira compreender o escopo do patch; esta é a linha que aparecerá nos logs de 154*29d38431SDaniel Pereira alterações (changelogs) de "forma curta". Esta mensagem geralmente é formatada 155*29d38431SDaniel Pereira com o nome do subsistema relevante primeiro, seguido pelo propósito do patch. 156*29d38431SDaniel Pereira Por exemplo: 157*29d38431SDaniel Pereira 158*29d38431SDaniel Pereira :: 159*29d38431SDaniel Pereira 160*29d38431SDaniel Pereira gpio: fix build on CONFIG_GPIO_SYSFS=n 161*29d38431SDaniel Pereira 162*29d38431SDaniel Pereira - Uma linha em branco seguida por uma descrição detalhada do conteúdo do 163*29d38431SDaniel Pereira patch. Esta descrição pode ser tão longa quanto necessário; ela deve dizer 164*29d38431SDaniel Pereira o que o patch faz e por que ele deve ser aplicado ao kernel. 165*29d38431SDaniel Pereira 166*29d38431SDaniel Pereira - Uma ou mais linhas de marcadores (tags) com, no mínimo, uma linha 167*29d38431SDaniel Pereira "Signed-off-by:" do autor do patch. Os marcadores serão descritos em mais 168*29d38431SDaniel Pereira detalhes abaixo. 169*29d38431SDaniel Pereira 170*29d38431SDaniel PereiraOs itens acima, juntos, formam o log de alterações (changelog) do patch. Escrever 171*29d38431SDaniel Pereirabons changelogs é uma arte crucial, mas frequentemente negligenciada; vale a 172*29d38431SDaniel Pereirapena dedicar mais um momento para discutir esse assunto. Ao escrever um 173*29d38431SDaniel Pereirachangelog, você deve ter em mente que várias pessoas diferentes lerão suas 174*29d38431SDaniel Pereirapalavras. Elas incluem mantenedores de subsistemas e revisores que precisam 175*29d38431SDaniel Pereiradecidir se o patch deve ser incluído, distribuidores e outros mantenedores 176*29d38431SDaniel Pereiratentando decidir se um patch deve ser retroportado (backported) para outros 177*29d38431SDaniel Pereirakernels, caçadores de bugs se perguntando se o patch é responsável por um 178*29d38431SDaniel Pereiraproblema que estão perseguindo, usuários que querem saber como o kernel mudou e 179*29d38431SDaniel Pereiramuito mais. Um bom changelog transmite a informação necessária para todas essas 180*29d38431SDaniel Pereirapessoas da maneira mais direta e concisa possível. 181*29d38431SDaniel Pereira 182*29d38431SDaniel PereiraPara esse fim, a linha de resumo deve descrever os efeitos e a motivação da 183*29d38431SDaniel Pereiraalteração o melhor possível, dada a restrição de uma única linha. A descrição 184*29d38431SDaniel Pereiradetalhada pode então ampliar esses tópicos e fornecer qualquer informação 185*29d38431SDaniel Pereiraadicional necessária. Se o patch corrige um bug, cite o commit que introduziu o 186*29d38431SDaniel Pereirabug, se possível (e, por favor, forneça tanto o ID do commit quanto o título ao 187*29d38431SDaniel Pereiracitar commits). Se um problema estiver associado a uma saída específica de log 188*29d38431SDaniel Pereiraou do compilador, inclua essa saída para ajudar outras pessoas que buscam uma 189*29d38431SDaniel Pereirasolução para o mesmo problema. Se a mudança tem o objetivo de dar suporte a 190*29d38431SDaniel Pereiraoutras alterações que virão em um patch posterior, informe isso. Se as APIs 191*29d38431SDaniel Pereirainternas forem alteradas, detalhe essas mudanças e como outros desenvolvedores 192*29d38431SDaniel Pereiradevem reagir. Em geral, quanto mais você puder se colocar no lugar de todos que 193*29d38431SDaniel Pereiralerão seu changelog, melhor será esse changelog (e o kernel como um todo). 194*29d38431SDaniel Pereira 195*29d38431SDaniel PereiraDesnecessário dizer que o changelog deve ser o texto usado ao submeter (commit) 196*29d38431SDaniel Pereiraa alteração em um sistema de controle de versão. Ele será seguido por: 197*29d38431SDaniel Pereira 198*29d38431SDaniel Pereira - O patch em si, no formato de patch unificado ("-u"). O uso da opção "-p" no 199*29d38431SDaniel Pereira diff associará os nomes das funções às alterações, tornando o patch resultante 200*29d38431SDaniel Pereira mais fácil de ser lido por outras pessoas. 201*29d38431SDaniel Pereira 202*29d38431SDaniel PereiraAs tags já mencionadas brevemente acima são usados para fornecer 203*29d38431SDaniel Pereirainformações sobre como o patch surgiu. Eles são descritos em detalhes no 204*29d38431SDaniel Pereiradocumento :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`; 205*29d38431SDaniel Pereirao que se segue aqui é um breve resumo. 206*29d38431SDaniel Pereira 207*29d38431SDaniel PereiraUm marcador é usado para se referir a commits anteriores que introduziram os 208*29d38431SDaniel Pereiraproblemas corrigidos pelo patch:: 209*29d38431SDaniel Pereira 210*29d38431SDaniel Pereira Fixes: 1f2e3d4c5b6a ("The first line of the commit specified by the first 12 characters of its SHA-1 ID") 211*29d38431SDaniel Pereira 212*29d38431SDaniel PereiraOutro marcador é usado para vincular páginas da web com contextos ou detalhes 213*29d38431SDaniel Pereiraadicionais, por exemplo, uma discussão anterior que levou ao patch ou um 214*29d38431SDaniel Pereiradocumento com uma especificação implementada pelo patch:: 215*29d38431SDaniel Pereira 216*29d38431SDaniel Pereira Link: https://example.com/somewhere.html optional-other-stuff 217*29d38431SDaniel Pereira 218*29d38431SDaniel PereiraDe acordo com as orientações do Pinguim-Chefe, um marcador Link 219*29d38431SDaniel Pereirasó deve ser adicionado a um commit se ele levar a informações úteis que não 220*29d38431SDaniel Pereirasão encontradas no próprio commit. 221*29d38431SDaniel Pereira 222*29d38431SDaniel PereiraSe a URL apontar para um relatório de bug público que está sendo corrigido pelo 223*29d38431SDaniel Pereirapatch, use o marcador "Closes:" em seu lugar:: 224*29d38431SDaniel Pereira 225*29d38431SDaniel Pereira Closes: https://example.com/issues/1234 optional-other-stuff 226*29d38431SDaniel Pereira 227*29d38431SDaniel PereiraAlguns rastreadores de bugs têm a capacidade de fechar problemas de forma 228*29d38431SDaniel Pereiraautomática quando um commit com tal marcador é aplicado. Alguns bots que 229*29d38431SDaniel Pereiramonitoram listas de discussão também podem rastrear esses marcadores e tomar certas 230*29d38431SDaniel Pereiraações. Rastreadores de bugs privados e URLs inválidas são proibidos. 231*29d38431SDaniel Pereira 232*29d38431SDaniel PereiraOutro tipo de marcador é usado para documentar quem esteve envolvido no 233*29d38431SDaniel Pereiradesenvolvimento do patch. Cada um deles usa este formato:: 234*29d38431SDaniel Pereira 235*29d38431SDaniel Pereira tag: Full Name <email address> optional-other-stuff 236*29d38431SDaniel Pereira 237*29d38431SDaniel PereiraOs marcadores de uso comum são: 238*29d38431SDaniel Pereira 239*29d38431SDaniel Pereira - Signed-off-by: esta é uma certificação do desenvolvedor de que ele ou ela 240*29d38431SDaniel Pereira tem o direito de enviar o patch para inclusão no kernel. É um acordo com o 241*29d38431SDaniel Pereira Developer's Certificate of Origin (Certificado de Origem do Desenvolvedor), 242*29d38431SDaniel Pereira cujo texto completo pode ser encontrado em 243*29d38431SDaniel Pereira :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`. 244*29d38431SDaniel Pereira Códigos sem um signoff adequado não podem ser mesclados (merged) no mainline. 245*29d38431SDaniel Pereira 246*29d38431SDaniel Pereira - Co-developed-by: afirma que o patch foi criado em coautoria por vários 247*29d38431SDaniel Pereira desenvolvedores; é usado para dar atribuição aos coautores (além do autor 248*29d38431SDaniel Pereira atribuído pelo marcador From:) quando várias pessoas trabalham em um único 249*29d38431SDaniel Pereira patch. Cada Co-developed-by: deve ser imediatamente seguido por um 250*29d38431SDaniel Pereira Signed-off-by: do coautor associado. Detalhes e exemplos podem ser encontrados 251*29d38431SDaniel Pereira em :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`. 252*29d38431SDaniel Pereira 253*29d38431SDaniel Pereira - Acked-by: indica o acordo de outro desenvolvedor (frequentemente um 254*29d38431SDaniel Pereira mantenedor do código relevante) de que o patch é apropriado para inclusão 255*29d38431SDaniel Pereira no kernel. 256*29d38431SDaniel Pereira 257*29d38431SDaniel Pereira - Tested-by: afirma que a pessoa nomeada testou o patch e verificou que ele 258*29d38431SDaniel Pereira funciona. 259*29d38431SDaniel Pereira 260*29d38431SDaniel Pereira - Reviewed-by: o desenvolvedor nomeado revisou o patch para verificar sua 261*29d38431SDaniel Pereira correção; veja a declaração do revisor em 262*29d38431SDaniel Pereira :ref:`Documentation/process/submitting-patches.rst <submittingpatches>` 263*29d38431SDaniel Pereira para mais detalhes. 264*29d38431SDaniel Pereira 265*29d38431SDaniel Pereira - Reported-by: nomeia um usuário que relatou o problema que é corrigido por este 266*29d38431SDaniel Pereira patch; este marcador é usado para dar crédito às pessoas (frequentemente sub- 267*29d38431SDaniel Pereira valorizadas) que testam nosso código e nos informam quando as coisas não 268*29d38431SDaniel Pereira funcionam corretamente. Nota: este marcador deve ser seguido por um marcador 269*29d38431SDaniel Pereira Closes: apontando para o relato, a menos que o relato não esteja disponível na 270*29d38431SDaniel Pereira web. O marcador Link: pode ser usado em vez de Closes: se o patch corrigir 271*29d38431SDaniel Pereira apenas uma parte do(s) problema(s) relatado(s). 272*29d38431SDaniel Pereira 273*29d38431SDaniel Pereira - A Suggested-by: este marcador indica que a ideia do patch foi sugerida pela 274*29d38431SDaniel Pereira pessoa nomeada e garante o crédito a ela pela ideia. Isso, espera-se, irá 275*29d38431SDaniel Pereira inspirá-la a nos ajudar novamente no futuro. 276*29d38431SDaniel Pereira 277*29d38431SDaniel Pereira - Cc: a pessoa nomeada recebeu uma cópia do patch e teve a oportunidade de 278*29d38431SDaniel Pereira comentar sobre ele. 279*29d38431SDaniel Pereira 280*29d38431SDaniel PereiraTenha cuidado ao adicionar os marcadores mencionados acima aos seus patches, pois 281*29d38431SDaniel Pereiratodos, exceto Cc:, Reported-by: e Suggested-by:, precisam de permissão explícita 282*29d38431SDaniel Pereirafontes da pessoa nomeada. Para esses três, a permissão implícita é suficiente se 283*29d38431SDaniel Pereiraa pessoa contribuiu para o kernel Linux usando esse nome e endereço de e-mail de 284*29d38431SDaniel Pereiraacordo com os arquivos do lore ou o histórico de commits — e, no caso de 285*29d38431SDaniel PereiraReported-by: e Suggested-by:, se fizeram o relato ou a sugestão publicamente. 286*29d38431SDaniel PereiraNota: o bugzilla.kernel.org é um local público nesse sentido, mas os endereços 287*29d38431SDaniel Pereirade e-mail usados lá são privados; portanto, não os exponha em marcadores, a menos 288*29d38431SDaniel Pereiraque a pessoa os tenha usado em contribuições anteriores. 289*29d38431SDaniel Pereira 290*29d38431SDaniel Pereira 291*29d38431SDaniel PereiraEnviando o patch 292*29d38431SDaniel Pereira----------------- 293*29d38431SDaniel Pereira 294*29d38431SDaniel PereiraAntes de enviar seus patches por e-mail, há algumas outras coisas com as quais 295*29d38431SDaniel Pereiravocê deve se preocupar: 296*29d38431SDaniel Pereira 297*29d38431SDaniel Pereira - Você tem certeza de que seu cliente de e-mail não vai corromper os patches? 298*29d38431SDaniel Pereira Patches que sofreram alterações desnecessárias de espaço em branco ou quebra 299*29d38431SDaniel Pereira de linha causadas pelo cliente de e-mail não serão aplicados na outra ponta 300*29d38431SDaniel Pereira e, frequentemente, não serão examinados em detalhes. Se houver qualquer 301*29d38431SDaniel Pereira dúvida, envie o patch para você mesmo e certifique-se de que ele chegue intacto. 302*29d38431SDaniel Pereira 303*29d38431SDaniel Pereira O documento :ref:`Documentation/process/email-clients.rst <email_clients>` 304*29d38431SDaniel Pereira possui algumas dicas úteis sobre como fazer clientes de e-mail específicos 305*29d38431SDaniel Pereira funcionarem para o envio de patches. 306*29d38431SDaniel Pereira 307*29d38431SDaniel Pereira - Você tem certeza de que seu patch está livre de erros bobos? Você deve sempre 308*29d38431SDaniel Pereira passar os patches pelo scripts/checkpatch.pl e corrigir as reclamações que 309*29d38431SDaniel Pereira ele apresentar. Por favor, tenha em mente que o checkpatch.pl, embora seja a 310*29d38431SDaniel Pereira personificação de uma quantidade razoável de reflexão sobre como os patches do 311*29d38431SDaniel Pereira kernel devem parecer, não é mais inteligente que você. Se corrigir uma 312*29d38431SDaniel Pereira reclamação do checkpatch.pl piorar o código, não o faça. 313*29d38431SDaniel Pereira 314*29d38431SDaniel PereiraOs patches devem sempre ser enviados como texto simples (plain text). Por favor, 315*29d38431SDaniel Pereiranão os envie como anexos; isso torna muito mais difícil para os revisores citarem 316*29d38431SDaniel Pereiratrechos do patch em suas respostas. Em vez disso, coloque o patch diretamente no 317*29d38431SDaniel Pereiracorpo da sua mensagem. 318*29d38431SDaniel Pereira 319*29d38431SDaniel PereiraAo enviar patches por e-mail, é importante enviar cópias para qualquer pessoa 320*29d38431SDaniel Pereiraque possa estar interessada neles. Ao contrário de alguns outros projetos, o 321*29d38431SDaniel Pereirakernel incentiva as pessoas a pecarem pelo excesso, enviando cópias demais; não 322*29d38431SDaniel Pereiraassuma que as pessoas relevantes verão sua publicação nas listas de discussão. Em 323*29d38431SDaniel Pereiraparticular, as cópias devem ir para: 324*29d38431SDaniel Pereira 325*29d38431SDaniel Pereira- O(s) mantenedor(es) do(s) subsistema(s) afetado(s). Como descrito antes, o 326*29d38431SDaniel Pereira arquivo MAINTAINERS é o primeiro lugar para procurar por essas pessoas. 327*29d38431SDaniel Pereira 328*29d38431SDaniel Pereira - Outros desenvolvedores que estiveram trabalhando na mesma área — especialmente 329*29d38431SDaniel Pereira aqueles que possam estar trabalhando lá agora. Usar o git para ver quem mais 330*29d38431SDaniel Pereira modificou os arquivos nos quais você está trabalhando pode ser útil. 331*29d38431SDaniel Pereira 332*29d38431SDaniel Pereira - Se você estiver respondendo a um relato de bug ou a uma solicitação de recurso 333*29d38431SDaniel Pereira (feature request), envie uma cópia também para o autor original. 334*29d38431SDaniel Pereira 335*29d38431SDaniel Pereira - Envie uma cópia para a lista de discussão relevante ou, se nada mais se 336*29d38431SDaniel Pereira aplicar, para a lista linux-kernel. 337*29d38431SDaniel Pereira 338*29d38431SDaniel Pereira - Se você estiver corrigindo um bug, pense se a correção deve ir para a próxima 339*29d38431SDaniel Pereira atualização estável (stable update). Se sim, stable@vger.kernel.org deve 340*29d38431SDaniel Pereira receber uma cópia do patch. Adicione também um "Cc: stable@vger.kernel.org" 341*29d38431SDaniel Pereira aos marcadores (tags) dentro do próprio patch; isso fará com que a equipe do 342*29d38431SDaniel Pereira stable receba uma notificação quando sua correção for integrada ao mainline. 343*29d38431SDaniel Pereira 344*29d38431SDaniel PereiraAo selecionar os destinatários para um patch, é bom ter uma ideia de quem você 345*29d38431SDaniel Pereiraacha que eventualmente aceitará o patch e fará a mesclagem (merge). Embora seja 346*29d38431SDaniel Pereirapossível enviar patches diretamente para Linus Torvalds e fazer com que ele os 347*29d38431SDaniel Pereiramescle, as coisas normalmente não são feitas dessa forma. Linus está ocupado, e 348*29d38431SDaniel Pereiraexistem mantenedores de subsistemas que vigiam partes específicas do kernel. Em 349*29d38431SDaniel Pereirageral, você desejará que esse mantenedor mescle seus patches. Se não houver um 350*29d38431SDaniel Pereiramantenedor óbvio, Andrew Morton costuma ser o destino de patch de último recurso. 351*29d38431SDaniel Pereira 352*29d38431SDaniel PereiraOs patches precisam de boas linhas de assunto (subject lines). O formato canônico 353*29d38431SDaniel Pereirapara a linha de um patch é algo como: 354*29d38431SDaniel Pereira 355*29d38431SDaniel Pereira:: 356*29d38431SDaniel Pereira 357*29d38431SDaniel Pereira 358*29d38431SDaniel Pereira [PATCH nn/mm] subsys: descrição de uma linha do patch 359*29d38431SDaniel Pereira 360*29d38431SDaniel Pereiraonde "nn" é o número ordinal do patch, "mm" é o número total de patches na 361*29d38431SDaniel Pereirasérie, e "subsys" é o nome do subsistema afetado. Claramente, nn/mm pode ser 362*29d38431SDaniel Pereiraomitido no caso de um patch único e isolado (standalone). 363*29d38431SDaniel Pereira 364*29d38431SDaniel PereiraSe você tiver uma série significativa de patches, é costumeiro enviar uma 365*29d38431SDaniel Pereiradescrição introdutória como a parte zero. Essa convenção não é seguida 366*29d38431SDaniel Pereirauniversalmente, no entanto; se você a utilizar, lembre-se de que as informações 367*29d38431SDaniel Pereirada introdução não entram nos changelogs do kernel. Portanto, certifique-se de 368*29d38431SDaniel Pereiraque os patches, em si, possuam informações completas em seus changelogs. 369*29d38431SDaniel Pereira 370*29d38431SDaniel PereiraEm geral, a segunda parte e as subsequentes de um patch de múltiplas partes devem 371*29d38431SDaniel Pereiraser enviadas como uma resposta à primeira parte, de modo que todas formem uma 372*29d38431SDaniel Pereiraúnica linha de discussão (thread) na ponta receptora. Ferramentas como o git e o 373*29d38431SDaniel Pereiraquilt possuem comandos para enviar por e-mail um conjunto de patches com o 374*29d38431SDaniel Pereiraencadeamento correto. Se você tiver uma série longa, contudo, e estiver usando o 375*29d38431SDaniel Pereiragit, por favor, evite a opção --chain-reply-to para não criar um aninhamento 376*29d38431SDaniel Pereiraexcepcionalmente profundo. 377