1*e6ad39d8SDaniel Pereira.. SPDX-License-Identifier: GPL-2.0 2*e6ad39d8SDaniel Pereira 3*e6ad39d8SDaniel PereiraAcompanhamento 4*e6ad39d8SDaniel Pereira============== 5*e6ad39d8SDaniel Pereira 6*e6ad39d8SDaniel PereiraNeste ponto, você seguiu as diretrizes apresentadas até aqui e, com a 7*e6ad39d8SDaniel Pereiraadição de suas próprias habilidades de engenharia, enviou uma série perfeita 8*e6ad39d8SDaniel Pereirade patches. Um dos maiores erros que até mesmo desenvolvedores experientes 9*e6ad39d8SDaniel Pereirado kernel podem cometer é concluir que o seu trabalho agora está concluído. 10*e6ad39d8SDaniel PereiraNa verdade, o envio de patches indica uma transição para a próxima etapa 11*e6ad39d8SDaniel Pereirado processo, possivelmente com uma quantidade considerável de trabalho 12*e6ad39d8SDaniel Pereiraainda por fazer. 13*e6ad39d8SDaniel Pereira 14*e6ad39d8SDaniel PereiraÉ raro um patch ser tão bom em seu primeiro envio que não haja margem para 15*e6ad39d8SDaniel Pereiramelhorias. O processo de desenvolvimento do kernel reconhece esse fato e, 16*e6ad39d8SDaniel Pereiracomo resultado, é fortemente orientado para o aprimoramento do código 17*e6ad39d8SDaniel Pereiraenviado. Espera-se que você, como autor desse código, trabalhe junto à 18*e6ad39d8SDaniel Pereiracomunidade do kernel para garantir que seu código esteja de acordo com os 19*e6ad39d8SDaniel Pereirapadrões de qualidade do kernel. A falha em participar desse processo muito 20*e6ad39d8SDaniel Pereiraprovavelmente impedirá a inclusão de seus patches na árvore principal 21*e6ad39d8SDaniel Pereira(*mainline*). 22*e6ad39d8SDaniel Pereira 23*e6ad39d8SDaniel Pereira 24*e6ad39d8SDaniel PereiraTrabalhando com revisores 25*e6ad39d8SDaniel Pereira------------------------- 26*e6ad39d8SDaniel Pereira 27*e6ad39d8SDaniel PereiraUm patch de qualquer relevância resultará em uma série de comentários de outros 28*e6ad39d8SDaniel Pereiradesenvolvedores à medida que eles revisam o código. Trabalhar com revisores 29*e6ad39d8SDaniel Pereirapode ser, para muitos desenvolvedores, a parte mais intimidadora do processo 30*e6ad39d8SDaniel Pereirade desenvolvimento do kernel. No entanto, a vida pode se tornar muito mais 31*e6ad39d8SDaniel Pereirafácil se você mantiver algumas coisas em mente: 32*e6ad39d8SDaniel Pereira 33*e6ad39d8SDaniel Pereira* Se você explicou bem o seu patch, os revisores entenderão o seu valor 34*e6ad39d8SDaniel Pereira e o porquê de você ter tido o trabalho de escrevê-lo. Contudo, esse valor 35*e6ad39d8SDaniel Pereira não os impedirá de fazer uma pergunta fundamental: como será manter um 36*e6ad39d8SDaniel Pereira kernel com este código inserido nele daqui a cinco ou dez anos? Muitas das 37*e6ad39d8SDaniel Pereira mudanças que podem lhe pedir para fazer — desde ajustes de estilo de código 38*e6ad39d8SDaniel Pereira até reescritas substanciais — vêm do entendimento de que o Linux ainda estará 39*e6ad39d8SDaniel Pereira por aqui e sob desenvolvimento daqui a uma década. 40*e6ad39d8SDaniel Pereira 41*e6ad39d8SDaniel Pereira* A revisão de código é um trabalho árduo e uma ocupação relativamente 42*e6ad39d8SDaniel Pereira ingrata; as pessoas lembram quem escreveu o código do kernel, mas há pouca 43*e6ad39d8SDaniel Pereira fama duradoura para aqueles que o revisaram. Portanto, os revisores podem 44*e6ad39d8SDaniel Pereira ficar ranzinzas, especialmente quando veem os mesmos erros sendo cometidos 45*e6ad39d8SDaniel Pereira repetidamente. Se você receber uma revisão que pareça irritada, insultuosa 46*e6ad39d8SDaniel Pereira ou abertamente ofensiva, resista ao impulso de responder à altura. A revisão 47*e6ad39d8SDaniel Pereira de código diz respeito ao código, não às pessoas, e os revisores de código 48*e6ad39d8SDaniel Pereira não estão atacando você pessoalmente. 49*e6ad39d8SDaniel Pereira 50*e6ad39d8SDaniel Pereira* Da mesma forma, os revisores de código não estão tentando promover os 51*e6ad39d8SDaniel Pereira interesses de seus empregadores em detrimento dos seus. Os desenvolvedores 52*e6ad39d8SDaniel Pereira do kernel geralmente esperam continuar trabalhando no kernel daqui a muitos 53*e6ad39d8SDaniel Pereira anos, mas entendem que seu empregador pode mudar. Quase sem exceção, eles 54*e6ad39d8SDaniel Pereira estão verdadeiramente trabalhando em prol da criação do melhor kernel possível; 55*e6ad39d8SDaniel Pereira eles não estão tentando causar desconforto aos concorrentes de seus empregadores. 56*e6ad39d8SDaniel Pereira 57*e6ad39d8SDaniel Pereira* Esteja preparado para solicitações aparentemente tolas de mudanças no estilo 58*e6ad39d8SDaniel Pereira de codificação e pedidos para refatorar parte do seu código em seções 59*e6ad39d8SDaniel Pereira compartilhadas do kernel. Uma das funções dos mantenedores é manter as coisas 60*e6ad39d8SDaniel Pereira com a mesma aparência. Às vezes, isso significa que aquele truque inteligente 61*e6ad39d8SDaniel Pereira (*clever hack*) em seu driver para contornar um problema 62*e6ad39d8SDaniel Pereira 63*e6ad39d8SDaniel PereiraNote que você não precisa concordar com todas as mudanças sugeridas pelos 64*e6ad39d8SDaniel Pereirarevisores. Se você acredita que o revisor entendeu mal o seu código, explique 65*e6ad39d8SDaniel Pereirao que realmente está acontecendo. Se tiver uma objeção técnica a uma mudança 66*e6ad39d8SDaniel Pereirasugerida, descreva-a e justifique a sua solução para o problema. Se as suas 67*e6ad39d8SDaniel Pereiraexplicações fizerem sentido, o revisor as aceitará. Contudo, caso a sua 68*e6ad39d8SDaniel Pereiraexplicação não seja persuasiva — especialmente se outros começarem a concordar 69*e6ad39d8SDaniel Pereiracom o revisor —, reserve um tempo para repensar as coisas. Pode ser fácil ficar 70*e6ad39d8SDaniel Pereiraceguificado por sua própria solução para um problema, a ponto de não perceber 71*e6ad39d8SDaniel Pereiraque algo está fundamentalmente errado ou que, talvez, você não esteja sequer 72*e6ad39d8SDaniel Pereiraresolvendo o problema certo. 73*e6ad39d8SDaniel Pereira 74*e6ad39d8SDaniel PereiraAndrew Morton sugeriu que todo comentário de revisão que não resulte em uma 75*e6ad39d8SDaniel Pereiraalteração de código deveria, em vez disso, resultar em um comentário adicional 76*e6ad39d8SDaniel Pereirano próprio código; isso pode ajudar os futuros revisores a evitar as dúvidas 77*e6ad39d8SDaniel Pereiraque surgiram da primeira vez. 78*e6ad39d8SDaniel Pereira 79*e6ad39d8SDaniel PereiraUm erro fatal é ignorar os comentários de revisão na esperança de que eles 80*e6ad39d8SDaniel Pereiradesapareçam. Eles não vão desaparecer. Se você reenviar o código sem ter 81*e6ad39d8SDaniel Pereirarespondido aos comentários que recebeu da vez anterior, é provável que descubra 82*e6ad39d8SDaniel Pereiraque os seus patches não vão a lugar nenhum. 83*e6ad39d8SDaniel Pereira 84*e6ad39d8SDaniel PereiraPor falar em reenviar código: tenha em mente que os revisores não vão se 85*e6ad39d8SDaniel Pereiralembrar de todos os detalhes do código que você enviou da última vez. Portanto, 86*e6ad39d8SDaniel Pereiraé sempre uma boa ideia lembrar os revisores dos problemas levantados 87*e6ad39d8SDaniel Pereiraanteriormente e de como você lidou com eles; o registro de alterações 88*e6ad39d8SDaniel Pereira(*changelog*) do patch é um bom lugar para esse tipo de informação. Os revisores 89*e6ad39d8SDaniel Pereiranão deveriam ter que vasculhar os arquivos das listas de discussão para se 90*e6ad39d8SDaniel Pereirafamiliarizarem com o que foi dito na última vez; se você ajudá-los a começar 91*e6ad39d8SDaniel Pereiracom o pé direito, eles estarão de melhor humor quando revisitarem o seu código. 92*e6ad39d8SDaniel Pereira 93*e6ad39d8SDaniel PereiraE se você tentou fazer tudo certo e as coisas ainda não estão avançando? A 94*e6ad39d8SDaniel Pereiramaioria das divergências técnicas pode ser resolvida por meio de discussão, 95*e6ad39d8SDaniel Pereiramas há momentos em que alguém simplesmente precisa tomar uma decisão. Se você 96*e6ad39d8SDaniel Pereiraacredita genuinamente que essa decisão está indo contra você de forma errada, 97*e6ad39d8SDaniel Pereiravocê sempre pode tentar recorrer a uma instância superior. Até o momento em 98*e6ad39d8SDaniel Pereiraque este texto foi escrito, essa instância superior costuma ser Andrew Morton. 99*e6ad39d8SDaniel PereiraAndrew goza de um enorme respeito na comunidade de desenvolvimento do kernel; 100*e6ad39d8SDaniel Pereiraele frequentemente consegue destravar uma situação que parece desesperadoramente 101*e6ad39d8SDaniel Pereirabloqueada. Recorrer a Andrew, no entanto, não deve ser feito de ânimo leve e nem 102*e6ad39d8SDaniel Pereiraantes que todas as outras alternativas tenham sido esgotadas. E tenha em mente, 103*e6ad39d8SDaniel Pereiraé claro, que ele também pode não concordar com você. 104*e6ad39d8SDaniel Pereira 105*e6ad39d8SDaniel PereiraO que acontece a seguir 106*e6ad39d8SDaniel Pereira----------------------- 107*e6ad39d8SDaniel Pereira 108*e6ad39d8SDaniel PereiraSe um patch for considerado algo bom para ser adicionado ao kernel, e assim 109*e6ad39d8SDaniel Pereiraque a maioria dos problemas de revisão tiver sido resolvida, o próximo passo 110*e6ad39d8SDaniel Pereirageralmente é a entrada na árvore de um mantenedor de subsistema. Como isso 111*e6ad39d8SDaniel Pereirafunciona varia de um subsistema para o outro; cada mantenedor tem sua própria 112*e6ad39d8SDaniel Pereiramaneira de fazer as coisas. Em particular, pode haver mais de uma árvore — uma, 113*e6ad39d8SDaniel Pereiratalvez, dedicada a patches planejados para a próxima janela de mesclagem 114*e6ad39d8SDaniel Pereira(*merge window*), e outra para trabalhos de longo prazo. 115*e6ad39d8SDaniel Pereira 116*e6ad39d8SDaniel PereiraPara patches que se aplicam a áreas para quais não há uma árvore de subsistema 117*e6ad39d8SDaniel Pereiraóbvia (patches de gerenciamento de memória, por exemplo), a árvore padrão 118*e6ad39d8SDaniel Pereirageralmente acaba sendo a *-mm*. Patches que afetam múltiplos subsistemas 119*e6ad39d8SDaniel Pereiratambém podem acabar passando pela árvore *-mm*. 120*e6ad39d8SDaniel Pereira 121*e6ad39d8SDaniel PereiraA inclusão em uma árvore de subsistema pode trazer um nível mais alto de 122*e6ad39d8SDaniel Pereiravisibilidade para um patch. Agora, outros desenvolvedores que trabalham com 123*e6ad39d8SDaniel Pereiraaquela árvore receberão o patch por padrão. As árvores de subsistemas tipicamente 124*e6ad39d8SDaniel Pereiraalimentam a *linux-next* também, tornando seus conteúdos visíveis para a 125*e6ad39d8SDaniel Pereiracomunidade de desenvolvimento como um todo. Neste ponto, há uma boa chance de 126*e6ad39d8SDaniel Pereiravocê receber mais comentários de um novo conjunto de revisores; esses 127*e6ad39d8SDaniel Pereiracomentários precisam ser respondidos da mesma forma que na rodada anterior. 128*e6ad39d8SDaniel Pereira 129*e6ad39d8SDaniel PereiraO que também pode acontecer neste ponto, dependendo da natureza do seu patch, 130*e6ad39d8SDaniel Pereiraé surgirem conflitos com o trabalho que está sendo feito por outros. No pior 131*e6ad39d8SDaniel Pereirados casos, conflitos pesados de patches podem fazer com que alguns trabalhos 132*e6ad39d8SDaniel Pereirasejam deixados em segundo plano, para que os patches restantes possam ser 133*e6ad39d8SDaniel Pereiraajustados e mesclados. Outras vezes, a resolução de conflitos envolverá trabalhar 134*e6ad39d8SDaniel Pereirajunto a outros desenvolvedores e, possivelmente, mover alguns patches entre 135*e6ad39d8SDaniel Pereiraárvores para garantir que tudo se aplique de forma limpa. Este trabalho pode ser 136*e6ad39d8SDaniel Pereiraárduo, mas console-se com uma vantagem: antes do surgimento da árvore *linux-next*, 137*e6ad39d8SDaniel Pereiraesses conflitos frequentemente só apareciam durante a janela de mesclagem e 138*e6ad39d8SDaniel Pereiratinham que ser resolvidos às pressas. Agora eles podem ser resolvidos com calma, 139*e6ad39d8SDaniel Pereiraantes que a janela de mesclagem se abra. 140*e6ad39d8SDaniel Pereira 141*e6ad39d8SDaniel PereiraUm belo dia, se tudo correr bem, você fará login e verá que o seu patch foi 142*e6ad39d8SDaniel Pereiramesclado ao kernel principal (*mainline*). Parabéns! No entanto, assim que a 143*e6ad39d8SDaniel Pereiracomemoração terminar (e você tiver se adicionado ao arquivo MAINTAINERS), vale 144*e6ad39d8SDaniel Pereiraa pena lembrar de um pequeno fato importante: o trabalho ainda não acabou. A 145*e6ad39d8SDaniel Pereiramesclagem na árvore principal traz os seus próprios desafios. 146*e6ad39d8SDaniel Pereira 147*e6ad39d8SDaniel PereiraPara começar, a visibilidade do seu patch aumentou ainda mais. Pode haver 148*e6ad39d8SDaniel Pereirauma nova rodada de comentários de desenvolvedores que não estavam cientes do 149*e6ad39d8SDaniel Pereirapatch antes. Pode ser tentador ignorá-los, já que não há mais nenhuma dúvida 150*e6ad39d8SDaniel Pereirasobre a mesclagem do seu código. No entanto, resista a essa tentação; você 151*e6ad39d8SDaniel Pereiraainda precisa ser receptivo aos desenvolvedores que tiverem dúvidas ou 152*e6ad39d8SDaniel Pereirasugestões. 153*e6ad39d8SDaniel Pereira 154*e6ad39d8SDaniel PereiraMais importante ainda: a inclusão na árvore principal coloca o seu código 155*e6ad39d8SDaniel Pereiranas mãos de um grupo muito maior de testadores. Mesmo que você tenha contribuído 156*e6ad39d8SDaniel Pereiracom um driver para um hardware que ainda não está disponível, você se 157*e6ad39d8SDaniel Pereirasurpreenderá com a quantidade de pessoas que compilarão seu código em seus 158*e6ad39d8SDaniel Pereirapróprios kernels. E, logicamente, onde há testadores, haverá relatórios de 159*e6ad39d8SDaniel Pereiraerros (*bug reports*). 160*e6ad39d8SDaniel Pereira 161*e6ad39d8SDaniel PereiraO pior tipo de relatório de erro são as regressões (*regressions*). Se o seu 162*e6ad39d8SDaniel Pereirapatch causar uma regressão, você descobrirá uma quantidade desconfortável de 163*e6ad39d8SDaniel Pereiraolhos voltados para você; as regressões precisam ser corrigidas o mais rápido 164*e6ad39d8SDaniel Pereirapossível. Se você não estiver disposto ou for incapaz de corrigir a regressão 165*e6ad39d8SDaniel Pereira(e ninguém mais fizer isso por você), seu patch quase certamente será removido 166*e6ad39d8SDaniel Pereiradurante o período de estabilização. Além de anular todo o trabalho que você teve 167*e6ad39d8SDaniel Pereirapara colocar seu patch na árvore principal, ter um patch removido como resultado 168*e6ad39d8SDaniel Pereirada falha em corrigir uma regressão pode muito bem tornar mais difícil para você 169*e6ad39d8SDaniel Pereiramesclar trabalhos no futuro. 170*e6ad39d8SDaniel Pereira 171*e6ad39d8SDaniel PereiraDepois que todas as regressões tiverem sido tratadas, pode haver outros erros 172*e6ad39d8SDaniel Pereiracomuns com os quais lidar. O período de estabilização é a sua melhor oportunidade 173*e6ad39d8SDaniel Pereirapara corrigir esses problemas e garantir que a estreia do seu código em um 174*e6ad39d8SDaniel Pereiralançamento do kernel principal seja o mais sólida possível. Portanto, por favor, 175*e6ad39d8SDaniel Pereiraresponda aos relatórios de erros e corrija os problemas, se for viável. É para 176*e6ad39d8SDaniel Pereiraisso que serve o período de estabilização; você pode começar a criar novos 177*e6ad39d8SDaniel Pereirapatches fantásticos assim que quaisquer problemas com os antigos tiverem sido 178*e6ad39d8SDaniel Pereiraresolvidos. 179*e6ad39d8SDaniel Pereira 180*e6ad39d8SDaniel PereiraE não se esqueça de que existem outros marcos que também podem gerar relatórios 181*e6ad39d8SDaniel Pereirade erros: o próximo lançamento estável da árvore principal, o momento em que 182*e6ad39d8SDaniel Pereiradistribuidores proeminentes adotarem uma versão do kernel que contenha o seu 183*e6ad39d8SDaniel Pereirapatch, etc. Continuar respondendo a esses relatórios é uma questão de orgulho 184*e6ad39d8SDaniel Pereirabásico pelo seu trabalho. Se isso não for motivação suficiente, contudo, também 185*e6ad39d8SDaniel Pereiravale a pena considerar que a comunidade de desenvolvimento se lembra dos 186*e6ad39d8SDaniel Pereiradesenvolvedores que perdem o interesse em seu próprio código após a mesclagem. 187*e6ad39d8SDaniel PereiraA próxima vez que você enviar um patch, eles o avaliarão sob a suposição de 188*e6ad39d8SDaniel Pereiraque você não estará por perto para mantê-lo depois. 189*e6ad39d8SDaniel Pereira 190*e6ad39d8SDaniel Pereira 191*e6ad39d8SDaniel PereiraOutras coisas que podem acontecer 192*e6ad39d8SDaniel Pereira--------------------------------- 193*e6ad39d8SDaniel Pereira 194*e6ad39d8SDaniel PereiraUm dia, você poderá abrir o seu cliente de e-mail e ver que alguém lhe enviou 195*e6ad39d8SDaniel Pereiraum patch para o seu código. Afinal, essa é uma das vantagens de ter o seu 196*e6ad39d8SDaniel Pereiracódigo disponível publicamente. Se você concordar com o patch, poderá encaminhá-lo 197*e6ad39d8SDaniel Pereirapara o mantenedor do subsistema (certifique-se de incluir uma linha ``From:`` 198*e6ad39d8SDaniel Pereiraadequada para que a atribuição de autoria esteja correta e adicione a sua 199*e6ad39d8SDaniel Pereiraprópria assinatura — *signoff*) ou enviar uma resposta com um ``Acked-by:`` 200*e6ad39d8SDaniel Pereirae deixar que o remetente original o envie para cima. 201*e6ad39d8SDaniel Pereira 202*e6ad39d8SDaniel PereiraSe você não concordar com o patch, envie uma resposta educada explicando o 203*e6ad39d8SDaniel Pereiramotivo. Se possível, diga ao autor quais alterações precisam ser feitas para 204*e6ad39d8SDaniel Pereiraque o patch seja aceitável para você. Existe uma certa resistência em mesclar 205*e6ad39d8SDaniel Pereirapatches que sofrem oposição do autor e mantenedor do código, mas isso tem limite. 206*e6ad39d8SDaniel PereiraSe você for visto como alguém que está bloqueando um bom trabalho sem necessidade, 207*e6ad39d8SDaniel Pereiraesses patches eventualmente seguirão outro fluxo ao seu redor e entrarão na 208*e6ad39d8SDaniel Pereiraárvore principal de qualquer maneira. No kernel do Linux, ninguém tem poder de 209*e6ad39d8SDaniel Pereiraveto absoluto sobre nenhum código. Exceto, talvez, o Linus. 210*e6ad39d8SDaniel Pereira 211*e6ad39d8SDaniel PereiraEm ocasiões muito raras, você poderá ver algo completamente diferente: outro 212*e6ad39d8SDaniel Pereiradesenvolvedor envia uma solução diferente para o seu problema. Nesse ponto, 213*e6ad39d8SDaniel Pereiraas chances são de que um dos dois patches não seja mesclado, e o argumento 214*e6ad39d8SDaniel Pereira"o meu chegou primeiro" não é considerado um argumento técnico convincente. 215*e6ad39d8SDaniel PereiraSe o patch de outra pessoa deslocar o seu e entrar na árvore principal, existe 216*e6ad39d8SDaniel Pereirarealmente apenas uma maneira de responder: fique satisfeito pelo fato de o seu 217*e6ad39d8SDaniel Pereiraproblema ter sido resolvido e siga adiante com o seu trabalho. Ter o próprio 218*e6ad39d8SDaniel Pereiratrabalho deixado de lado dessa maneira pode ser doloroso e desanimador, mas a 219*e6ad39d8SDaniel Pereiracomunidade se lembrará da sua reação muito depois de terem esquecido de quem 220*e6ad39d8SDaniel Pereirafoi o patch que realmente foi mesclado. 221