xref: /linux/Documentation/translations/pt_BR/process/submitting-patches.rst (revision 14c897740388216acd59477a382de327d5e27ba4)
1.. SPDX-License-Identifier: GPL-2.0
2
3.. _pt_BR_submittingpatches:
4
5Enviando patches: o guia essencial para colocar o seu código no kernel
6======================================================================
7
8Para uma pessoa ou empresa que deseja enviar uma mudança para o
9kernel Linux, o processo pode, por vezes, ser intimidador se você não
10estiver familiarizado com "o sistema". Este texto é uma coleção de sugestões
11que podem aumentar muito as chances de sua mudança ser aceita.
12
13Este documento contém um grande número de sugestões em um formato relativamente
14conciso. Para informações detalhadas sobre como funciona o processo de
15desenvolvimento do kernel, consulte Documentation/process/development-process.rst.
16Além disso, leia Documentation/process/submit-checklist.rst
17para uma lista de itens a serem verificados antes de enviar o código.
18Para patches de binding de device tree, leia
19Documentation/devicetree/bindings/submitting-patches.rst.
20
21Esta documentação assume que você está usando o ``git`` para preparar seus
22patches. Se você não está familiarizado com o ``git``, é muito recomendado que
23você aprenda a usá-lo, ele tornará a sua vida como um desenvolvedor do kernel e,
24em geral, muito mais fácil.
25
26Alguns subsistemas e árvores de mantenedores possuem informações adicionais
27sobre seus fluxos de trabalho e expectativas, consulte
28Documentation/process/maintainer-handbooks.rst.
29
30Obtenha uma árvore de código-fonte atual
31----------------------------------------
32
33Se você não tiver um repositório com o código-fonte atual do kernel em mãos,
34use o ``git`` para obter um. Você vai querer começar com o repositório mainline,
35que pode ser obtido com::
36
37  git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
38
39Note, no entanto, que você pode não querer desenvolver diretamente na
40árvore mainline. A maioria dos mantenedores de subsistemas mantém suas
41próprias árvores e desejam ver os patches preparados em relação a essas árvores.
42Consulte a entrada **T:** do subsistema no arquivo MAINTAINERS para encontrar
43essa árvore, ou simplesmente pergunte ao mantenedor se a árvore não estiver
44listada lá.
45
46.. _pt_BR_describe_changes:
47
48Descreva as suas mudanças
49-------------------------
50
51Descreva o seu problema. Seja o seu patch uma correção de bug de uma linha ou
525000 linhas de um novo recurso, deve haver um problema subjacente que o motivou
53a fazer esse trabalho. Convença o revisor de que existe um problema que vale a
54pena corrigir e que faz sentido que ele leia além do primeiro parágrafo.
55
56Descreva o impacto visível ao usuário. Travamentos e bloqueios diretos são
57bastante convincentes, mas nem todos os bugs são tão evidentes. Mesmo que o
58problema tenha sido identificado durante a revisão do código, descreva o impacto
59que você acredita que ele pode ter sobre os usuários. Tenha em mente que a
60maioria das instalações Linux executa kernels de árvores estáveis secundárias
61ou árvores específicas de fornecedores/produtos que selecionam apenas patches
62específicos do upstream, então inclua qualquer coisa que possa ajudar a
63direcionar sua mudança downstream: circunstâncias provocadoras, trechos do
64dmesg, descrições do travamento, regressões de desempenho, picos de latência,
65bloqueios, etc.
66
67Quantifique as otimizações e compensações. Se você afirma haver melhorias no
68desempenho, consumo de memória, uso da pilha ou tamanho do binário, inclua
69números que as comprovem. Mas também descreva custos que não são óbvios.
70Otimizações geralmente não são gratuitas, sendo trocas entre CPU, memória e
71legibilidade; ou, quando se trata de heurísticas, entre diferentes cargas de
72trabalho. Descreva as desvantagens esperadas da sua otimização para que o
73revisor possa pesar os custos contra os benefícios.
74
75Uma vez estabelecido o problema, descreva o que você está efetivamente fazendo
76sobre ele, com detalhes técnicos. É importante descrever a mudança em inglês
77claro para o revisor verificar que o código está se comportando como
78você pretendia.
79
80O mantenedor agradecerá se você escrever a descrição do seu patch em uma forma
81que possa ser facilmente inserida no sistema de gerenciamento de código-fonte do
82Linux, o ``git``, como uma "mensagem de commit". Veja
83:ref:`pt_BR_the_canonical_patch_format`.
84
85Resolva apenas um problema por patch. Se a sua descrição começar a ficar longa,
86isso é um sinal de que você provavelmente precisa dividir o seu patch.
87Consulte :ref:`pt_BR_split_changes`.
88
89Quando você enviar ou reenviar um patch ou uma série de patches, inclua a
90descrição completa do patch e a justificativa para ele. Não diga apenas
91que esta é a versão N do patch (ou série). Não espere que o mantenedor
92do subsistema consulte versões anteriores do patch ou URLs de referência
93para encontrar a descrição do patch e colocá-la no patch.
94Ou seja, o patch (ou a série) e sua descrição devem ser autossuficientes.
95Isso beneficia tanto os mantenedores quanto os revisores. Alguns revisores
96provavelmente nem chegaram a receber as versões anteriores do patch.
97
98Descreva suas alterações no modo imperativo, por exemplo, "faça xyzzy executar
99frotz" em vez de "[Este patch] faz xyzzy executar frotz" ou "[Eu] mudei xyzzy
100para executar frotz", como se você estivesse dando ordens à base de código para
101mudar o seu comportamento.
102
103Se você quiser se referir a um commit específico, não se refira apenas ao
104ID SHA-1 do commit. Por favor, inclua também o resumo de uma linha do
105commit, para tornar mais fácil para os revisores saberem sobre o que se trata.
106Exemplo::
107
108	Commit e21d2170f36602ae2708 ("video: remove unnecessary
109	platform_set_drvdata()") removed the unnecessary
110	platform_set_drvdata(), but left the variable "dev" unused,
111	delete it.
112
113Você também deve ter a certeza de usar pelo menos os primeiros doze caracteres do
114ID SHA-1. O repositório do kernel possui um número *muito* grande de objetos, o que torna as
115colisões com IDs mais curtos uma possibilidade real. Tenha em mente que, mesmo que
116não haja colisão com o seu ID de seis caracteres agora, essa condição pode
117mudar daqui a cinco anos.
118
119Se discussões relacionadas ou qualquer outra informação de contexto por trás da mudança
120puderem ser encontradas na web, adicione tags 'Link:' apontando para isso. Se o patch é o
121resultado de algumas discussões anteriores na lista de e-mails ou algo documentado na
122web, aponte para ele.
123
124Ao criar links para arquivos de listas de e-mails, de preferência use o serviço
125de arquivo de mensagens lore.kernel.org. Para criar a URL do link, use o
126conteúdo do cabeçalho ``Message-ID`` da mensagem, sem os colchetes angulares
127circundantes. Por exemplo::
128
129    Link: https://lore.kernel.org/30th.anniversary.repost@klaava.Helsinki.FI
130
131Por favor, verifique o link para se certificar de que ele está realmente
132funcionando e aponta para a mensagem relevante.
133
134No entanto, tente tornar a sua explicação compreensível sem recursos
135externos. Além de fornecer um URL para um arquivo da lista de e-mails ou bug,
136resuma os pontos relevantes da discussão que levaram ao patch conforme enviado.
137
138Caso o seu patch corrija um bug, use a tag 'Closes:' com um URL que referencie o
139relato nos arquivos da lista de e-mails ou em um rastreador público de bugs. Por exemplo::
140
141	Closes: https://example.com/issues/1234
142
143Alguns rastreadores de bugs têm a capacidade de fechar os problemas
144automaticamente quando um commit com tal tag é aplicado. Alguns bots que monitoram as listas de
145e-mails também podem rastrear tais tags e tomar certas ações. Rastreadores de bugs
146privados e URLs inválidos são proibidos.
147
148Se o seu patch corrige um bug em um commit específico, por exemplo, você encontrou um problema usando
149``git bisect``, por favor, use a tag 'Fixes:' com pelo menos os primeiros 12
150caracteres do ID SHA-1 e o resumo de uma linha. Não divida a tag em
151várias linhas, as tags estão isentas da regra de "quebra de linha nas 75 colunas" para
152simplificar os scripts de parsing. Por exemplo::
153
154	Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed")
155
156As seguintes configurações do ``git config`` podem ser usadas para adicionar um formato aprimorado para
157exibir o estilo acima nos comandos ``git log`` ou ``git show``::
158
159	[core]
160		abbrev = 12
161	[pretty]
162		fixes = Fixes: %h (\"%s\")
163
164Um exemplo de chamada::
165
166	$ git log -1 --pretty=fixes 54a4f0239f2e
167	Fixes: 54a4f0239f2e ("KVM: MMU: make kvm_mmu_zap_page() return the number of pages it actually freed")
168
169.. _pt_BR_split_changes:
170
171Separe as suas mudanças
172-----------------------
173
174Separe cada **mudança lógica** em um patch separado.
175
176Por exemplo, se as suas alterações incluírem tanto correções de bugs quanto melhorias
177de desempenho para um único driver, separe essas alterações em dois
178ou mais patches. Se as suas alterações incluírem uma atualização de API e um novo
179driver que utiliza essa nova API, separe-os em dois patches.
180
181Por outro lado, se você fizer uma única alteração em vários arquivos,
182agrupe essas alterações em um único patch. Assim, uma única mudança
183lógica está contida em um único patch.
184
185O ponto a lembrar é que cada patch deve fazer uma mudança facilmente compreendida
186que possa ser verificada pelos revisores. Cada patch deve ser justificável
187por seus próprios méritos.
188
189Se um patch depender de outro patch para que uma mudança seja
190completa, não tem problema. Simplesmente note **"this patch depends on patch X"**
191na descrição do seu patch.
192
193Ao dividir a sua mudança em uma série de patches, tome um cuidado especial para
194garantir que o kernel compile e seja executado adequadamente após cada patch da
195série. Desenvolvedores que usam o ``git bisect`` para rastrear um problema podem acabar
196dividindo a sua série de patches em qualquer ponto; eles não ficarão gratos se você
197introduzir bugs no meio do processo.
198
199Se você não conseguir condensar o seu conjunto de patches em um conjunto menor
200de patches, então publique, digamos, apenas uns 15 de cada vez e aguarde pela
201revisão e integração.
202
203
204
205Verifique o estilo das suas mudanças
206------------------------------------
207
208Verifique o seu patch quanto a violações básicas de estilo, cujos detalhes podem ser
209encontrados em Documentation/process/coding-style.rst.
210Não fazer isso simplesmente desperdiça
211o tempo dos revisores e fará com que o seu patch seja rejeitado, provavelmente
212sem sequer ser lido.
213
214Uma exceção significativa é quando se move código de um arquivo para
215outro -- neste caso você não deve modificar o código movido no
216mesmo patch que o move. Isso delineia claramente o ato de
217mover o código e as suas alterações. Isso ajuda muito a revisão das
218diferenças reais e permite que as ferramentas rastreiem melhor o histórico do
219próprio código.
220
221Verifique os seus patches com o verificador de estilo de patch antes de os submeter
222(scripts/checkpatch.pl). Note, porém, que o verificador de estilo deve ser
223visto como um guia, e não como um substituto para o julgamento humano. Se o seu
224código parecer melhor com uma violação, provavelmente é melhor deixá-lo como está.
225
226O verificador emite relatórios em três níveis:
227 - ERROR: coisas que muito provavelmente estão erradas
228 - WARNING: coisas que requerem uma revisão cuidadosa
229 - CHECK: coisas que requerem reflexão
230
231Você deve ser capaz de justificar todas as violações que permanecerem no seu
232patch.
233
234Selecione os destinatários do seu patch
235---------------------------------------
236
237Você deve sempre copiar o(s) mantenedor(es) e a(s) lista(s) do subsistema
238apropriado(s) em qualquer patch para o código que eles mantêm; dê uma
239olhada no arquivo MAINTAINERS e no histórico de revisão do código-fonte
240para ver quem são esses mantenedores. O script scripts/get_maintainer.pl
241pode ser muito útil nesta etapa (passe os caminhos para seus patches
242como argumentos para scripts/get_maintainer.pl). Se você não conseguir
243encontrar um mantenedor para o subsistema em que está trabalhando,
244Andrew Morton (akpm@linux-foundation.org) serve como um mantenedor de
245último recurso.
246
247linux-kernel@vger.kernel.org deve ser usado por padrão para todos os
248patches, mas o volume dessa lista fez com que vários desenvolvedores a
249ignorassem. Por favor, não envie spam para listas e pessoas não
250relacionadas.
251
252Muitas listas relacionadas ao kernel estão hospedadas em kernel.org;
253você pode encontrar uma lista delas em https://subspace.kernel.org.
254Existem listas relacionadas ao kernel hospedadas em outros lugares
255também, no entanto.
256
257Linus Torvalds é o árbitro final de todas as mudanças aceitas no
258kernel do Linux. Seu endereço de e-mail é <torvalds@linux-foundation.org>.
259Ele recebe muitos e-mails e, neste momento, muito poucos patches passam
260por Linus diretamente, então, normalmente, você deve fazer o seu melhor
261para -evitar- enviar e-mails para ele.
262
263Se você tiver um patch que corrija um bug de segurança explorável,
264envie esse patch para security@kernel.org. Para bugs severos, um
265curto embargo pode ser considerado para permitir que os distribuidores
266disponibilizem o patch aos usuários; em tais casos, obviamente, o
267patch não deve ser enviado a nenhuma lista pública. Veja também
268Documentation/process/security-bugs.rst.
269
270Patches que corrigem um bug severo em um kernel já lançado devem ser
271direcionados aos mantenedores stable (estáveis), colocando uma linha como esta::
272
273  Cc: stable@vger.kernel.org
274
275na área de sign-off do seu patch (note, NÃO como um destinatário de e-mail).
276Você também deve ler Documentation/process/stable-kernel-rules.rst
277além deste documento.
278
279Se as alterações afetarem as interfaces userland-kernel,
280por favor, envie ao mantenedor das MAN-PAGES (como listado no arquivo MAINTAINERS)
281um patch para as páginas de manual, ou pelo menos uma notificação da alteração,
282para que alguma informação chegue às páginas de manual. Mudanças na API
283do espaço de usuário também devem ser copiadas para linux-api@vger.kernel.org.
284
285
286Sem MIME, sem links, sem compressão, sem anexos. Apenas texto puro
287------------------------------------------------------------------
288
289Linus e outros desenvolvedores do kernel precisam ser capazes de ler e
290comentar as mudanças que você está enviando. É importante que um
291desenvolvedor do kernel seja capaz de "citar" suas mudanças, usando
292ferramentas de e-mail padrão, para que eles possam comentar em partes
293específicas do seu código.
294
295Por esse motivo, todos os patches devem ser enviados por e-mail "inline". A
296maneira mais fácil de fazer isso é com ``git send-email``, que é
297fortemente recomendado. Um tutorial interativo para ``git send-email``
298está disponível em https://git-send-email.io.
299
300Se você optar por não usar ``git send-email``:
301
302.. warning::
303
304  Tenha cuidado com a quebra de linha do seu editor corrompendo seu patch,
305  se você optar por recortar e colar o seu patch.
306
307Não anexe o patch como um anexo MIME, comprimido ou não.
308Muitos aplicativos populares de e-mail nem sempre transmitirão um
309anexo MIME como texto puro, tornando impossível comentar o seu
310código. Um anexo MIME também leva um pouco mais de tempo para Linus
311processar, diminuindo a probabilidade da sua alteração anexada em MIME
312ser aceita.
313
314Exceção: Se o seu cliente de e-mail estiver danificando os patches,
315alguém pode pedir que você os reenvie usando MIME.
316
317Veja Documentation/process/email-clients.rst para dicas sobre como
318configurar seu cliente de e-mail para que ele envie seus patches intocados.
319
320Responda aos comentários de revisão
321-----------------------------------
322
323Seu patch quase certamente receberá comentários dos revisores sobre maneiras
324pelas quais o patch pode ser melhorado, na forma de uma resposta ao seu
325e-mail. Você deve responder a esses comentários; ignorar revisores é uma
326boa maneira de ser ignorado em troca. Você pode simplesmente responder aos
327e-mails deles para responder aos seus comentários. Comentários de revisão
328ou perguntas que não levam a uma alteração no código devem quase certamente
329resultar em um comentário ou entrada no changelog para que o próximo
330revisor entenda melhor o que está acontecendo.
331
332Certifique-se de dizer aos revisores quais alterações você está fazendo e
333de agradecê-los pelo tempo dedicado. A revisão de código é um processo
334cansativo e demorado, e os revisores às vezes ficam mal-humorados. Mesmo
335nesse caso, no entanto, responda educadamente e resolva os problemas que
336eles apontaram. Ao enviar uma próxima versão, adicione um ``changelog do patch``
337à carta de apresentação (cover letter) ou aos patches individuais,
338explicando a diferença em relação ao envio anterior (veja
339:ref:`pt_BR_the_canonical_patch_format`).
340Notifique as pessoas que comentaram no seu patch sobre as novas versões
341adicionando-as à lista de CC dos patches.
342
343Veja Documentation/process/email-clients.rst para recomendações sobre
344clientes de e-mail e etiqueta de listas de discussão.
345
346.. _pt_BR_interleaved_replies:
347
348Use respostas intercaladas e aparadas em discussões por e-mail
349--------------------------------------------------------------
350O top-posting (responder no topo) é fortemente desencorajado em
351discussões de desenvolvimento do kernel do Linux. Respostas
352intercaladas (ou "inline") tornam as conversas muito mais fáceis de
353acompanhar. Para mais detalhes, veja:
354https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
355
356Como é frequentemente citado na lista de discussão::
357
358  A: http://en.wikipedia.org/wiki/Top_post
359  Q: Onde encontro informações sobre essa coisa chamada top-posting?
360  A: Porque bagunça a ordem em que as pessoas normalmente leem o texto.
361  Q: Por que o top-posting é algo tão ruim?
362  A: Top-posting.
363  Q: Qual é a coisa mais irritante no e-mail?
364
365Da mesma forma, por favor, apare (corte) todas as citações
366desnecessárias que não são relevantes para a sua resposta. Isso torna
367as respostas mais fáceis de encontrar, e economiza tempo e espaço. Para
368mais detalhes, veja: http://daringfireball.net/2007/07/on_top ::
369
370  A: Não.
371  Q: Devo incluir citações após minha resposta?
372
373.. _pt_BR_resend_reminders:
374
375Não desanime - nem fique impaciente
376-----------------------------------
377
378Depois de ter enviado a sua alteração, seja paciente e espere. Os
379revisores são pessoas ocupadas e podem não chegar ao seu patch
380imediatamente.
381
382Era uma vez, patches costumavam desaparecer no vazio sem comentários,
383mas o processo de desenvolvimento funciona de forma mais suave do que
384isso agora. Você deve receber comentários dentro de algumas semanas
385(normalmente 2-3); se isso não acontecer, certifique-se de que você
386enviou seus patches para o lugar certo. Espere por no mínimo uma
387semana antes de reenviar ou dar um "ping" nos revisores -
388possivelmente mais tempo durante períodos ocupados, como as janelas
389de mesclagem (merge windows).
390
391Também não há problema em reenviar o patch ou a série de patches após
392algumas semanas com a palavra "RESEND" adicionada à linha de Assunto::
393
394   [PATCH Vx RESEND] sub/sys: Resumo condensado do patch
395
396Não adicione "RESEND" quando você estiver enviando uma versão
397modificada do seu patch ou série de patches - "RESEND" se aplica
398apenas ao reenvio de um patch ou série de patches que não foram
399modificados de forma alguma em relação ao envio anterior.
400
401
402Inclua PATCH no Assunto
403-----------------------
404
405Devido ao alto tráfego de e-mails para Linus e para a linux-kernel, é
406uma convenção comum prefixar a sua linha de Assunto com [PATCH]. Isso
407permite que Linus e outros desenvolvedores do kernel distingam
408mais facilmente os patches de outras discussões por e-mail.
409
410O ``git send-email`` fará isso por você automaticamente.
411
412
413Assine seu trabalho - o Certificado de Origem do Desenvolvedor
414--------------------------------------------------------------
415
416Para melhorar o rastreamento de quem fez o que, especialmente com patches
417que podem percolar até o seu local de descanso final no kernel através de
418várias camadas de mantenedores, nós introduzimos um procedimento de
419"sign-off" nos patches que estão sendo enviados por e-mail.
420
421O sign-off é uma linha simples no final da explicação do patch, que
422certifica que você o escreveu ou que de outra forma tem o direito de
423repassá-lo como um patch de código aberto. As regras são bem simples:
424se você pode certificar o seguinte::
425
426        Certificado de Origem do Desenvolvedor 1.1
427
428        Ao fazer uma contribuição para este projeto, eu certifico que:
429
430        (a) A contribuição foi criada no todo ou em parte por mim e eu
431            tenho o direito de enviá-la sob a licença de código aberto
432            indicada no arquivo; ou
433
434        (b) A contribuição baseia-se em trabalho anterior que, até onde eu
435            sei, é coberto por uma licença de código aberto apropriada
436            e eu tenho o direito, sob essa licença, de enviar esse
437            trabalho com modificações, tenham sido criadas no todo ou
438            em parte por mim, sob a mesma licença de código aberto (a menos que eu
439            tenha permissão para enviar sob uma licença diferente), conforme
440            indicado no arquivo; ou
441
442        (c) A contribuição foi fornecida diretamente a mim por alguma outra
443            pessoa que certificou (a), (b) ou (c) e eu não a modifiquei.
444
445        (d) Eu entendo e concordo que este projeto e a contribuição
446            são públicos e que um registro da contribuição (incluindo todas
447            as informações pessoais que eu envio com ela, incluindo meu
448            sign-off) é mantido indefinidamente e pode ser redistribuído de forma
449            consistente com este projeto ou com a(s) licença(s) de código
450            aberto envolvida(s).
451
452então você apenas adiciona uma linha dizendo::
453
454	Signed-off-by: Random J Developer <random@developer.example.org>
455
456usando uma identidade conhecida (desculpe, sem contribuições anônimas.)
457Isso será feito para você automaticamente se você usar o ``git commit -s``.
458As reversões também devem incluir "Signed-off-by". O ``git revert -s``
459faz isso por você.
460
461Algumas pessoas também colocam tags extras no final. Elas serão
462apenas ignoradas por enquanto, mas você pode fazer isso para marcar
463procedimentos internos da empresa ou apenas para apontar algum
464detalhe especial sobre o sign-off.
465
466Quaisquer outros SoBs (Signed-off-by:'s) seguindo o SoB do autor
467são de pessoas que manusearam e transportaram o patch, mas não
468estiveram envolvidas no seu desenvolvimento. As cadeias de SoB devem
469refletir a rota **real** que um patch percorreu à medida que foi
470propagado aos mantenedores e, finalmente, para Linus, com a primeira
471entrada de SoB sinalizando a autoria principal de um único autor.
472
473
474Quando usar Acked-by:, Cc: e Co-developed-by:
475---------------------------------------------
476
477A tag Signed-off-by: indica que o signatário esteve envolvido no
478desenvolvimento do patch, ou que ele/ela estava no caminho de
479entrega do patch.
480
481Se uma pessoa não esteve diretamente envolvida na preparação ou manuseio de um
482patch, mas deseja manifestar e registrar sua aprovação, ela pode
483pedir para ter uma linha Acked-by: adicionada ao changelog do patch.
484
485Acked-by: destina-se a ser usado por aqueles responsáveis ou envolvidos com o
486código afetado de uma forma ou de outra. Mais comumente, o mantenedor quando esse
487mantenedor não contribuiu nem encaminhou o patch.
488
489Acked-by: também pode ser usado por outras partes interessadas, como pessoas com conhecimento de
490domínio (por exemplo, o autor original do código sendo modificado), revisores
491do lado do espaço de usuário para um patch uAPI do kernel ou usuários-chave de um recurso. Opcionalmente,
492nestes casos, pode ser útil adicionar um "# Sufixo" para esclarecer seu significado::
493
494	Acked-by: The Stakeholder <stakeholder@example.org> # As primary user
495
496Acked-by: não é tão formal quanto Signed-off-by:. É um registro de que o avaliador
497pelo menos revisou o patch e indicou aceitação. Por isso, os responsáveis pela fusão de
498patches às vezes converterão manualmente um "sim, parece bom para mim" de um avaliador
499em um Acked-by: (mas note que geralmente é melhor pedir um
500ack explícito).
501
502Acked-by: também é menos formal do que Reviewed-by:. Por exemplo, mantenedores podem
503usá-lo para sinalizar que estão de acordo com a inclusão de um patch, mas podem não tê-lo
504revisado tão minuciosamente como se um Reviewed-by: fosse fornecido. Da mesma forma, um
505usuário-chave pode não ter realizado uma revisão técnica do patch, mas ainda assim estar
506satisfeito com a abordagem geral, o recurso ou a interface voltada para o usuário.
507
508Acked-by: não indica necessariamente o reconhecimento de todo o patch.
509Por exemplo, se um patch afeta vários subsistemas e tem um Acked-by: de
510um mantenedor de subsistema, isso geralmente indica o reconhecimento apenas
511da parte que afeta o código desse mantenedor. O bom senso deve ser usado aqui.
512Em caso de dúvida, as pessoas devem consultar a discussão original nos arquivos da
513lista de discussão. Um "# Sufixo" também pode ser usado neste caso para esclarecer.
514
515Se uma pessoa teve a oportunidade de comentar em um patch, mas não
516forneceu tais comentários, você pode opcionalmente adicionar uma tag ``Cc:`` ao patch.
517Esta tag documenta que partes potencialmente interessadas foram incluídas na
518discussão. Note que esta é uma de apenas três tags que você pode usar
519sem a permissão explícita da pessoa nomeada (veja 'Marcar pessoas requer
520permissão' abaixo para detalhes).
521
522Co-developed-by: afirma que o patch foi co-criado por múltiplos desenvolvedores;
523é usado para dar atribuição a coautores (além do autor
524atribuído pela tag From:) quando várias pessoas trabalham em um único patch. Como
525Co-developed-by: denota autoria, cada Co-developed-by: deve ser imediatamente
526seguido por um Signed-off-by: do coautor associado. O procedimento padrão de assinatura
527se aplica, ou seja, a ordem das tags Signed-off-by: deve refletir a
528história cronológica do patch na medida do possível, independentemente se
529o autor for atribuído via From: ou Co-developed-by:. Notavelmente, o último
530Signed-off-by: deve ser sempre o do desenvolvedor que está enviando o patch.
531
532Note que a tag From: é opcional quando o autor no From: também é a pessoa (e
533e-mail) listada na linha From: do cabeçalho do e-mail.
534
535Exemplo de um patch enviado pelo autor do From:::
536
537	<changelog>
538
539	Co-developed-by: First Co-Author <first@coauthor.example.org>
540	Signed-off-by: First Co-Author <first@coauthor.example.org>
541	Co-developed-by: Second Co-Author <second@coauthor.example.org>
542	Signed-off-by: Second Co-Author <second@coauthor.example.org>
543	Signed-off-by: From Author <from@author.example.org>
544
545Exemplo de um patch enviado por um autor do Co-developed-by:::
546
547	From: From Author <from@author.example.org>
548
549	<changelog>
550
551	Co-developed-by: Random Co-Author <random@coauthor.example.org>
552	Signed-off-by: Random Co-Author <random@coauthor.example.org>
553	Signed-off-by: From Author <from@author.example.org>
554	Co-developed-by: Submitting Co-Author <sub@coauthor.example.org>
555	Signed-off-by: Submitting Co-Author <sub@coauthor.example.org>
556
557
558Usando Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: e Fixes:
559---------------------------------------------------------------------
560
561A tag Reported-by dá crédito às pessoas que encontram bugs e os relatam e
562espera-se que isso as inspire a nos ajudar novamente no futuro. A tag destina-se a
563bugs; por favor, não a use para dar crédito a solicitações de recursos. A tag deve ser
564seguida por uma tag Closes: apontando para o relato, a menos que o relato não
565esteja disponível na web. A tag Link: pode ser usada em vez de Closes: se o patch
566corrigir uma parte do(s) problema(s) sendo relatado(s). Note que a tag Reported-by é
567uma de apenas três tags que você pode usar sem a permissão explícita da
568pessoa nomeada (veja 'Marcar pessoas requer permissão' abaixo para detalhes).
569
570Uma tag Tested-by: indica que o patch foi testado com sucesso (em
571algum ambiente) pela pessoa nomeada. Esta tag informa aos mantenedores que
572algum teste foi realizado, fornece um meio para localizar testadores para
573patches futuros e garante crédito para os testadores.
574
575Reviewed-by:, por sua vez, indica que o patch foi revisado e considerado
576aceitável de acordo com a Declaração do Revisor::
577
578	Declaração de supervisão do revisor
579
580	Ao oferecer minha tag Reviewed-by:, eu declaro que:
581
582	 (a) Eu realizei uma revisão técnica deste patch para
583	     avaliar sua adequação e prontidão para inclusão no
584	     kernel mainline.
585
586	 (b) Quaisquer problemas, preocupações ou perguntas relacionadas ao patch
587	     foram comunicadas de volta ao remetente. Eu estou satisfeito
588	     com a resposta do remetente aos meus comentários.
589
590	 (c) Embora possa haver coisas que poderiam ser melhoradas com este
591	     envio, eu acredito que é, neste momento, (1) uma
592	     modificação que vale a pena para o kernel, e (2) livre de problemas
593	     conhecidos que argumentariam contra sua inclusão.
594
595	 (d) Embora eu tenha revisado o patch e acredite que seja sólido, eu
596	     não faço (a menos que explicitamente declarado em outro lugar)
597	     garantias de que alcançará seu propósito
598	     declarado ou funcionará adequadamente em qualquer situação.
599
600Uma tag Reviewed-by é uma declaração de opinião de que o patch é uma
601modificação apropriada do kernel sem nenhum problema técnico sério
602restante. Qualquer revisor interessado (que tenha feito o trabalho e seja uma
603pessoa com identidade conhecida) pode oferecer uma tag Reviewed-by para um patch. Esta tag
604serve para dar crédito aos revisores e para informar os mantenedores do grau de
605revisão que foi feito no patch. Tags Reviewed-by:, quando fornecidas por
606revisores conhecidos por entender a área de assunto e realizar revisões completas,
607normalmente aumentarão a probabilidade de seu patch entrar no kernel.
608
609Ambas as tags Tested-by e Reviewed-by, uma vez recebidas na lista de discussão do testador
610ou revisor, devem ser adicionadas pelo autor aos patches aplicáveis ao enviar as
611próximas versões. No entanto, se o patch mudou substancialmente na versão
612seguinte, essas tags podem não ser mais aplicáveis e, portanto, devem ser removidas.
613Normalmente, a remoção das tags Acked-by, Tested-by ou Reviewed-by de alguém deve ser
614mencionada no changelog do patch com uma explicação (após o separador '---').
615
616Uma tag Suggested-by: indica que a ideia do patch foi sugerida pela pessoa
617nomeada e garante crédito à pessoa pela ideia: se creditarmos diligentemente
618nossos relatores de ideias, eles serão, com sorte, inspirados a nos ajudar novamente no
619futuro. Note que esta é uma de apenas três tags que você pode usar sem
620permissão explícita da pessoa nomeada (veja 'Marcar pessoas requer
621permissão' abaixo para detalhes).
622
623Uma tag Fixes: indica que o patch corrige um bug em um commit anterior. Ela
624é usada para facilitar a determinação de onde um problema se originou, o que pode ajudar
625na revisão da correção de um bug. Esta tag também auxilia a equipe do kernel estável a determinar
626quais versões do kernel estável devem receber sua correção. Este é o método preferido
627para indicar um bug corrigido pelo patch. Veja :ref:`pt_BR_describe_changes`
628para mais detalhes.
629
630Nota: Anexar uma tag Fixes: não subverte o processo de regras do kernel
631estável, nem o requisito de enviar em Cc: para stable@vger.kernel.org em todos os patches
632candidatos estáveis. Para mais informações, por favor, leia
633Documentation/process/stable-kernel-rules.rst.
634
635Por fim, embora fornecer tags seja bem-vindo e tipicamente muito apreciado, por favor
636note que os signatários (ou seja, remetentes e mantenedores) podem usar sua discrição ao
637aplicar as tags oferecidas.
638
639
640Marcar pessoas requer permissão
641-------------------------------
642
643Tenha cuidado ao adicionar as tags mencionadas acima aos seus patches, pois todas
644exceto Cc:, Reported-by: e Suggested-by: precisam de permissão explícita da
645pessoa nomeada. Para essas três, a permissão implícita é suficiente se a pessoa
646contribuiu para o kernel Linux usando esse nome e endereço de e-mail de acordo
647com os arquivos do lore ou o histórico de commits -- e no caso de Reported-by:
648e Suggested-by: tenha feito o relato ou sugestão em público. Note que o
649bugzilla.kernel.org é um local público nesse sentido, mas os endereços de e-mail
650usados lá são privados; portanto, não os exponha em tags, a menos que a pessoa
651os tenha usado em contribuições anteriores.
652
653.. _pt_BR_the_canonical_patch_format:
654
655O formato canônico do patch
656---------------------------
657
658Esta seção descreve como o próprio patch deve ser formatado. Note
659que, se você tiver seus patches armazenados em um repositório ``git``, a formatação
660adequada do patch pode ser obtida com ``git format-patch``. As ferramentas não podem criar
661o texto necessário, no entanto, portanto, leia as instruções abaixo de qualquer maneira.
662
663Linha de Assunto
664^^^^^^^^^^^^^^^^
665
666A linha de assunto canônica do patch é::
667
668    Assunto: [PATCH 001/123] subsistema: frase de resumo
669
670O corpo canônico da mensagem do patch contém o seguinte:
671
672  - Uma linha ``from`` especificando o autor do patch, seguida por uma linha
673    vazia (necessário apenas se a pessoa enviando o patch não for o autor).
674
675  - O corpo da explicação, com quebra de linha em 75 colunas, que será
676    copiado para o changelog permanente para descrever este patch.
677
678  - Uma linha vazia.
679
680  - As linhas ``Signed-off-by:``, descritas acima, que também
681    irão para o changelog.
682
683  - Uma linha de marcador contendo simplesmente ``---``.
684
685  - Quaisquer comentários adicionais não adequados para o changelog.
686
687  - O próprio patch (saída do ``diff``).
688
689O formato da linha de Assunto torna muito fácil classificar os e-mails
690alfabeticamente pela linha de assunto - praticamente qualquer leitor de e-mail
691suportará isso - pois, como o número de sequência é preenchido com zeros,
692a classificação numérica e alfabética é a mesma.
693
694O ``subsystem`` no Assunto do e-mail deve identificar qual
695área ou subsistema do kernel está recebendo o patch.
696
697A ``frase de resumo`` no Assunto do e-mail deve descrever de forma concisa
698o patch que esse e-mail contém. A ``frase de resumo`` não deve ser um nome de arquivo.
699Não use a mesma ``frase de resumo`` para cada patch em uma série de patches inteira (onde uma ``série
700de patches`` é uma sequência ordenada de múltiplos patches relacionados).
701
702Tenha em mente que a ``frase de resumo`` do seu e-mail se torna um
703identificador globalmente único para aquele patch. Ela se propaga por todo o caminho
704até o changelog do ``git``. A ``frase de resumo`` pode ser usada posteriormente em
705discussões de desenvolvedores que se referem ao patch. As pessoas vão querer
706pesquisar no Google pela ``frase de resumo`` para ler a discussão sobre esse
707patch. Também será a única coisa que as pessoas poderão ver rapidamente
708quando, dois ou três meses depois, estiverem passando por talvez
709milhares de patches usando ferramentas como ``gitk`` ou ``git log
710--oneline``.
711
712Por essas razões, o ``resumo`` não deve ter mais de 70-75
713caracteres, e deve descrever tanto o que o patch altera, quanto
714por que o patch pode ser necessário. É um desafio ser
715sucinto e descritivo, mas é isso que um resumo bem escrito
716deve fazer.
717
718A ``frase de resumo`` pode ser prefixada por tags delimitadas por colchetes
719retos: "Assunto: [PATCH <tag>...] <frase de resumo>". As tags não
720são consideradas parte da frase de resumo, mas descrevem como o patch
721deve ser tratado. Tags comuns podem incluir um descritor de versão se
722as múltiplas versões do patch tiverem sido enviadas em resposta a
723comentários (ou seja, "v1, v2, v3"), ou "RFC" para indicar um pedido de
724comentários.
725
726Se houver quatro patches em uma série de patches, os patches individuais podem
727ser numerados assim: 1/4, 2/4, 3/4, 4/4. Isso garante que os desenvolvedores
728entendam a ordem na qual os patches devem ser aplicados e que
729eles tenham revisado ou aplicado todos os patches na série de patches.
730
731Aqui estão alguns bons exemplos de Assuntos::
732
733    Subject: [PATCH 2/5] ext2: improve scalability of bitmap searching
734    Subject: [PATCH v2 01/27] x86: fix eflags tracking
735    Subject: [PATCH v2] sub/sys: Condensed patch summary
736    Subject: [PATCH v2 M/N] sub/sys: Condensed patch summary
737
738Linha From
739^^^^^^^^^^
740
741A linha ``from`` deve ser a primeira linha no corpo da mensagem,
742e tem a forma:
743
744        From: Patch Author <author@example.com>
745
746A linha ``from`` especifica quem será creditado como o autor do
747patch no changelog permanente. Se a linha ``from`` estiver faltando,
748então a linha ``From:`` do cabeçalho do e-mail será usada para determinar
749o autor do patch no changelog.
750
751O autor pode indicar sua afiliação ou o patrocinador do trabalho
752adicionando o nome de uma organização às linhas ``from`` e ``SoB``,
753por exemplo:
754
755	From: Patch Author (Company) <author@example.com>
756
757Corpo da Explicação
758^^^^^^^^^^^^^^^^^^^
759
760O corpo da explicação será commitado no changelog
761permanente da fonte, então deve fazer sentido para um leitor competente que já
762esqueceu há muito tempo os detalhes imediatos da discussão que podem ter levado a
763este patch. Incluir sintomas da falha que o patch aborda
764(mensagens de log do kernel, mensagens oops, etc.) é especialmente útil para
765pessoas que possam estar pesquisando nas mensagens de commit procurando pelo patch
766aplicável. O texto deve ser escrito com detalhes suficientes para que, quando lido
767semanas, meses ou até anos depois, possa dar ao leitor os detalhes
768necessários para compreender o raciocínio do **por que** o patch foi criado.
769
770Se um patch corrige uma falha de compilação, pode não ser necessário incluir
771_todas_ as falhas de compilação; apenas o suficiente para que seja provável que
772alguém pesquisando pelo patch possa encontrá-lo. Como na ``frase de resumo``,
773é importante ser tanto sucinto quanto descritivo.
774
775.. _pt_BR_backtraces:
776
777Backtraces em mensagens de commit
778"""""""""""""""""""""""""""""""""
779
780Backtraces ajudam a documentar a cadeia de chamadas que leva a um problema. No entanto,
781nem todos os backtraces são úteis. Por exemplo, as cadeias de chamadas iniciais de boot são
782únicas e óbvias. Copiar a saída dmesg completa verbatim, no entanto,
783adiciona informações que distraem, como timestamps, listas de módulos, dumps de
784registradores e pilhas.
785
786Portanto, os backtraces mais úteis devem destilar as informações
787relevantes do dump, o que facilita o foco no problema
788real. Aqui está um exemplo de um backtrace bem aparado::
789
790  unchecked MSR access error: WRMSR to 0xd51 (tried to write 0x0000000000000064)
791  at rIP: 0xffffffffae059994 (native_write_msr+0x4/0x20)
792  Call Trace:
793  mba_wrmsr
794  update_domains
795  rdtgroup_mkdir
796
797Comentários
798^^^^^^^^^^^
799
800A linha marcadora ``---`` serve ao propósito essencial de marcar para
801as ferramentas de manipulação de patches onde a mensagem do changelog termina.
802
803Um bom uso para os comentários adicionais após o marcador ``---`` é
804para um ``diffstat``, para mostrar quais arquivos mudaram, e o número de
805linhas inseridas e excluídas por arquivo. Um ``diffstat`` é especialmente útil
806em patches maiores. Se você for incluir um ``diffstat`` após o
807marcador ``---``, por favor, use as opções do ``diffstat`` ``-p 1 -w 70`` para que
808os nomes dos arquivos sejam listados a partir do topo da árvore de código-fonte do kernel e não
809usem muito espaço horizontal (cabem facilmente em 80 colunas, talvez com algum
810recuo). (o ``git`` gera diffstats apropriados por padrão.)
811
812Outros comentários relevantes apenas para o momento ou para o mantenedor, não
813adequados para o changelog permanente, também devem ir aqui. Um bom
814exemplo de tais comentários podem ser ``changelogs do patch`` que descrevem
815o que mudou entre as versões v1 e v2 do patch.
816
817Por favor, coloque esta informação **após** a linha ``---`` que separa
818o changelog do restante do patch. A informação da versão não
819faz parte do changelog que é commitado na árvore git. É
820informação adicional para os revisores. Se for colocada acima das
821tags de commit, precisará de interação manual para removê-la. Se estiver abaixo
822da linha separadora, ela é automaticamente removida ao aplicar o
823patch. Se disponíveis, adicionar links para as versões anteriores do patch (por exemplo,
824link do arquivo lore.kernel.org) é recomendado para ajudar os revisores::
825
826  <commit message>
827  ...
828  Signed-off-by: Author <author@mail>
829  ---
830  V2 -> V3: Removed redundant helper function
831  V1 -> V2: Cleaned up coding style and addressed review comments
832
833  v2: https://lore.kernel.org/bar
834  v1: https://lore.kernel.org/foo
835
836  path/to/file | 5+++--
837  ...
838
839Veja mais detalhes sobre o formato de patch adequado nas seguintes
840referências.
841
842
843Cabeçalhos In-Reply-To explícitos
844---------------------------------
845
846Pode ser útil adicionar manualmente cabeçalhos In-Reply-To: a um patch
847(por exemplo, ao usar ``git send-email``) para associar o patch com
848discussões relevantes anteriores, por exemplo, para vincular uma correção de bug ao e-mail com
849o relatório do bug. No entanto, para uma série de múltiplos patches, geralmente é
850melhor evitar usar In-Reply-To: para vincular a versões mais antigas da
851série. Desta forma, múltiplas versões do patch não se tornam uma
852floresta incontrolável de referências nos clientes de e-mail. Se um link for
853útil, você pode usar o redirecionador https://lore.kernel.org/ (por exemplo, no
854texto do e-mail de capa) para vincular a uma versão anterior da série de patches.
855
856
857Informações sobre a árvore base
858-------------------------------
859
860Quando outros desenvolvedores recebem seus patches e iniciam o processo de revisão,
861é absolutamente necessário que eles saibam qual é o commit/branch
862base no qual seu trabalho se aplica, considerando a enorme quantidade de
863árvores de mantenedores presentes hoje em dia. Note novamente a entrada **T:** no
864arquivo MAINTAINERS explicado acima.
865
866Isso é ainda mais importante para processos automatizados de CI que tentam
867executar uma série de testes a fim de estabelecer a qualidade da sua
868submissão antes que o mantenedor inicie a revisão.
869
870Se você estiver usando ``git format-patch`` para gerar seus patches, você pode
871incluir automaticamente as informações da árvore base em sua submissão ao
872usar a flag ``--base``. A maneira mais fácil e conveniente de usar
873esta opção é com branches de tópicos (topical branches)::
874
875    $ git checkout -t -b my-topical-branch master
876    Branch 'my-topical-branch' set up to track local branch 'master'.
877    Switched to a new branch 'my-topical-branch'
878
879    [perform your edits and commits]
880
881    $ git format-patch --base=auto --cover-letter -o outgoing/ master
882    outgoing/0000-cover-letter.patch
883    outgoing/0001-First-Commit.patch
884    outgoing/...
885
886Quando você abrir ``outgoing/0000-cover-letter.patch`` para edição, você
887notará que ele terá o trailer ``base-commit:`` bem no
888final, o qual fornece ao revisor e às ferramentas de CI informações suficientes
889para realizar o ``git am`` adequadamente sem se preocupar com conflitos::
890
891    $ git checkout -b patch-review [base-commit-id]
892    Switched to a new branch 'patch-review'
893    $ git am patches.mbox
894    Applying: First Commit
895    Applying: ...
896
897Por favor, veja ``man git-format-patch`` para mais informações sobre esta
898opção.
899
900.. note::
901
902    A funcionalidade ``--base`` foi introduzida no git versão 2.9.0.
903
904Se você não estiver usando git para formatar seus patches, você ainda pode incluir
905o mesmo trailer ``base-commit`` para indicar o hash do commit da árvore
906na qual seu trabalho se baseia. Você deve adicioná-lo na cover
907letter (carta de apresentação) ou no primeiro patch da série e ele deve ser colocado
908abaixo da linha ``---`` ou bem no final de todo o outro
909conteúdo, logo antes da sua assinatura de e-mail.
910
911Certifique-se de que o commit base está em uma árvore oficial de mantenedor/mainline
912e não em alguma árvore interna acessível apenas por você - caso contrário seria
913inútil.
914
915Ferramentas
916-----------
917
918Muitos dos aspectos técnicos deste processo podem ser automatizados usando
919b4, documentado em <https://b4.docs.kernel.org/en/latest/>. Isso pode
920ajudar com coisas como rastreamento de dependências, execução do checkpatch e
921com a formatação e o envio de e-mails.
922
923Referências
924-----------
925
926Andrew Morton, "The perfect patch" (tpp).
927  <https://www.ozlabs.org/~akpm/stuff/tpp.txt>
928
929Jeff Garzik, "Linux kernel patch submission format".
930  <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html>
931
932Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
933  <http://www.kroah.com/log/linux/maintainer.html>
934
935  <http://www.kroah.com/log/linux/maintainer-02.html>
936
937  <http://www.kroah.com/log/linux/maintainer-03.html>
938
939  <http://www.kroah.com/log/linux/maintainer-04.html>
940
941  <http://www.kroah.com/log/linux/maintainer-05.html>
942
943  <http://www.kroah.com/log/linux/maintainer-06.html>
944
945Kernel Documentation/process/coding-style.rst
946
947Linus Torvalds's mail on the canonical patch format:
948  <https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
949
950Andi Kleen, "On submitting kernel patches"
951  Some strategies to get difficult or controversial changes in.
952
953  http://halobates.de/on-submitting-patches.pdf
954