Existe uma série de coisas que é preciso ter em mente quando estamos enviando alterações ao kernel. A principal coisa a se lembrar é que não importa o quanto ocupado você esteja, Andrew Morton e Linus Torvalds recebem modificações vindas de todo mundo, todo tempo, o que significa que eles estão bem mais ocupados que você.
As estratégias aqui descritas para suas alterações entrarem no kernel tendem a tornar as coisas muito mais fáceis pra os matenedores, o que significa que o seu código poderá entrar no kernel mais facilmente.
É tentador trabalhar em um projeto ou alteração por meses até que "esteja perfeita", e então você envia um patch enorme para a lista de discussão de desenvolvimento do kernel. No entanto, essa não é uma boa idéia por várias razões:
Digamos que você esteja trabalhando no driver "bar", para adicionar suporte ao dispositivo "foo". No entando, a maneira simples de se adicionar a funcionalidade tornaria o código uma verdadeira bagunça. A solução requer uma reorganização do código, após isso a sua funcionalidade irá ser integrada facilmente. A sua sequência de patches poderia se parecer com o seguinte:
Subject: [PATCH 0/3] adiciona suporte ao dispositivo foo no driver bar
Subject: [PATCH 1/3] suporte foo: adiciona abstração do tipo do dispositivo em bar_struct
Subject: [PATCH 2/3] suporte foo: limpa o código do driver bar
Subject: [PATCH 3/3] suporte foo: adiciona suporte a foo
Tradicionalmente o primeiro email não contém modificações, mas simplesmente explica o que os seus patches fazem e porque são necessários. Os outros emails são enviados como respostas ao primeiro email, dessa maneira as pessoas que não estejam interessadas em seus patches podem apenas fechar a thread em seus leitores de email.
Neste exemplo, os dois primeiros patches não conteriam a funcionalidade que você quer adicionar ao kernel. Tudo que eles fazem é modificar a base do código de maneira que torne mais fácil a integração da alteração. Os revisores e mantenedores gostam quando as pessoas deixam o código mais fácil para manutenção. Empilhar modificações em cima de modificações poderia em algum tempo tornar a base do código impossível de se manter, então a "maneira fácil" de adicionar funcionalidade nem sempre é "tão agradável assim".
Agora que você já tem o hábito de enviar seu código em pequenos patches, revisores poderão te dar um rápido retorno sobre os seus patches. Algumas vezes em uma hora. Agora que você tem a atenção deles, seria legal se você pudesse fazer algo a respeito dos comentários antes que eles movam para o outro código.
Você pode até não conseguir implementar tudo que foi comentado ou testar as modificações no código na mesma velocidade que os retornos irão chegar, não tem problema. No entanto, você provavelmente deveria deixar os revisores cientes de que você leu os comentários e que está fazendo algumas das modificações sugeridas. Melhor ainda se você puder comunicá-los antes que eles concentrem a atenção em outros pontos.
Muitas vezes os revisores de patches apontam bugs óbvios e melhorias. O tipo de modificação que você deveria ter feito, caso tivesse descoberto a falha. Com certeza você irá agir para corrigir o que foi mencionado no comentário.
No entanto, algumas vezes não estará claro se é melhor você continuar com o seu código original ou implementar a alternativa sugerida pelo revisor. Neste caso é melhor mudar o código para o que o revisor sugeriu.
Isto pode parecer contra-intuitivo. Mudar o código é um trabalho extra e tais mudanças podem introduzir novos bugs.
No entanto, implementar a idéia mencionada pelo revisor indica que você consegue trabalhar com a comunidade. Ainda mais importante, o revisor provavelmente dará suporte a suas idéias e então você terá mais uma pessoa para dar suporte a inclusão do seu patch. Por estar recebendo e acatando as sugestões da comunidade seu código será aceito mais facilmente.
Algumas vezes o revisor pode estar errado. Nestes casos a mehor coisa a ser feita é manter o sua alteração e explicar porque o funcionamento deve ser do jeito que você esta fazendo.
Projetos de software podem levar um longo tempo e ter várias fases, incluindo o levantamento de requisitos, design, prototipação e testes. É fascinante trabalhar em um projeto "in-house" e então somente mostra-lo para a comunidade quando estiver pronto.
No entanto, a comunidade do kernel linux é muito maior que a sua organização, e é bem provável que tenha requisitos diferentes. Depois de um longo ano de projeto, você não irá querer voltar para a prancheta só porque você não conhecia os requisitos de uma pessoa.
A melhor estratégia é ir para a comunidade do kernel linux com o protótipo e design inicial.
Isso não somente te permite em receber um retorno e requisitos adicionais em um primeiro estágio, isto muitas vezes o coloca em contato com outras pessoas interessadas em resolver o mesmo problema. Você poderia inclusive terminar trabalhando junto com desenvolvedores de outras empresas, e trabalhar em uma implementação que seja muito melhor que qualquer coisa feita por você mesmo (sozinho).
É o tipo de solução que resolve um monte de problemas ao mesmo tempo.
É o tipo de solução que agrada Linus Torvalds e Andrew Mortom.
É o tipo de solução que na verdade será integrada no kernel, resolvendo seus problemas.
Alguns dos mais importantes revisores de patches na lista de discussão do kernel tem ganho a reputação de ser difícil de se trabalhar. Provavelmente porque eles usam seu tempo revisando código e não em sendo diplomáticos. Algumas vezes o retorno recebido por alguns patches é completamente rude. No entanto, isso não torna o retorno menos válido!
A razão pela qual as pessoas revisam seus patches e te dão um retorno é porque eles acreditam que você é capaz de agir e melhorar o seu código. Se você esta realmente interessado em melhorar o código, ouça ao retorno que você recebe na lista de discussão.
Mesmo que o retorno seja duro ou hostil ainda assim pode conter informações úteis. Se você se preocupa com o seu código, preste atenção e separe o trigo da soja.
Se você não entender alguma parte do retorno dado peça que seja melhor detalhado. O objetivo final é melhorar o seu código. Aprender alguma coisa nova durante o processo é um bônus para você.
Um bom comportamente seria sempre agradecer as pessoas que te derem um retorno amigável. Não se esqueça de sempre informá-los a respeito dos seus planos de atuação no que se refere aos retornos.
Verifique o check-list de envio de patches e outras documentações do kernel para ter certeza que você está enviando os seus patches da maneira correta. Se ater a esses pequenos detalhes não é somente fácil como também algo necessário.
Atenção: Esta é uma tradução livre do artigo escrito no wiki da comunidade kernelnewbies internacional MergingStrategy. Originalmente escrito por Rik van Riel.