1.. SPDX-License-Identifier: GPL-2.0 2 3Introdução 4========== 5 6Sumário 7------- 8 9O restante desta seção cobre o processo de desenvolvimento do kernel e os 10tipos de frustração que os desenvolvedores e empresas podem encontrar pelo 11caminho. Existem diversas razões que justificam a recomendação para que seja 12feito o merge do código do kernel ao kernel principal ("mainline"), como 13disponibilidade automática aos usuários, suporte da comunidade em diversas 14formas, e a oportunidade de influenciar a direção do desenvolvimento do 15kernel. Contribuições ao kernel Linux obrigatoriamente devem estar disponíveis 16sob uma licença compatível com a GPL. 17 18:ref:`development_process` apresenta o processo de desenvolvimento, o ciclo de 19lançamento, e a mecânica da janela de merge. As várias fases no desenvolvimento 20de patch, revisão, e ciclo de merge são explicadas. Algumas ferramentas e 21listas de e-mail são discutidas. Desenvolvedores que queiram começar a 22desenvolver o kernel são encorajados a buscar e corrigir bugs como exercício 23inicial. 24 25:ref:`development_early_stage` cobre os primeiros passos do processo de 26desenvolvimento, com ênfase no envolvimento da comunidade de desenvolvedores o 27mais cedo possível. 28 29:ref:`development_coding` é sobre o processo de codificação; muitas armadilhas 30já encontradas por outros desenvolvedores são discutidas. Alguns requisitos 31para patches são explicados, e é feita uma introdução para algumas ferramentas 32que podem ajudar a garantir que os patches de kernel estão corretos. 33 34:ref:`development_posting` fala sobre o processo de envio de patches para 35revisão. Para serem levados em consideração pela comunidade desenvolvedora, os 36patches devem estar devidamente formatados e descritos, assim como devem estar 37no lugar correto. Seguir os conselhos dessa seção pode ajudar na recepção 38positiva do seu trabalho. 39 40:ref:`development_followthrough` cobre o que acontece após o envio dos patches; 41o trabalho ainda está longe de estar concluído. Trabalhar com os revisores é 42parte crucial do processo de desenvolvimento; essa seção oferece dicas de como 43evitar problemas nesse estágio importante. Desenvolvedores são alertados a não 44presumir que o trabalho acabou após o merge do patch no "mainline". 45 46:ref:`development_advancedtopics` introduz dois tópicos mais "avançados": 47gerenciamento de patches com git e revisão de patches por outros. 48 49:ref:`development_conclusion` conclui o documento com indicações de fontes com 50mais informações sobre o desenvolvimento do kernel. 51 52Sobre este documento 53-------------------- 54 55O kernel Linux, com mais de 8 milhões de linhas de código e bem mais de 1000 56contribuintes a cada lançamento ("release"), é um dos maiores e mais ativos 57projetos de software livre em existência. Desde seu modesto início em 1991, 58este kernel evoluiu para se tornar um dos melhores componentes de sistemas 59operacionais, rodando em pequenos players de música digital, PCs de mesa, os 60maiores supercomputadores em existência, e todos os outros tipos de sistema 61entre eles. É robusto, eficiente, e uma solução escalável para quase toda 62situação. 63 64O crescimento do Linux trouxe o aumento no número de desenvolvedores (e 65empresas) desejando participar no seu desenvolvimento. Fabricantes de hardware 66querem garantir que o Linux suporte bem os seus produtos, tornando-os atrativos 67para usuários Linux. Fabricantes de sistemas embarcados, que usam o Linux como 68componente em um produto integrado, querem que o Linux seja tão capaz e 69adequado quanto possível para a tarefa em questão. Distribuidores de software 70que baseiam seus produtos em Linux têm claro interesse nas capacidades, 71performance, e confiabilidade do kernel Linux. É também comum que usuários 72finais queiram alterar o Linux para atender melhor suas necessidades. 73 74Uma das características mais atrativas do Linux é sua facilidade de acesso a 75esses desenvolvedores; qualquer um com as habilidades necessárias pode melhorar 76o Linux e influenciar a direção do seu desenvolvimento. Produtos proprietários 77não conseguem oferecer esse tipo de abertura, que é característico do processo 78de software livre. O kernel é ainda mais acessível que a maioria dos outros 79projetos de software livre. Um ciclo típico de três meses de desenvolvimento 80do kernel pode envolver mais de 1000 desenvolvedores trabalhando para mais de 81100 empresas (ou absolutamente nenhuma empresa). 82 83Trabalhar com a comunidade de desenvolvimento do kernel não é uma tarefa árdua. 84Contudo, muitos colaboradores potenciais passaram por dificuldades ao tentar 85trabalhar no kernel. A comunidade evoluiu suas próprias formas de funcionamento 86que permitem operar de forma fluida (e produzir um produto de alta qualidade) 87em um ambiente em que milhares de linhas de código são alteradas todos os dias. 88Não é surpresa que o processo de desenvolvimento do kernel Linux seja muito 89diferente dos modelos de desenvolvimento proprietários. 90 91O processo de desenvolvimento do kernel pode parecer estranho e intimidador 92para novos desenvolvedores, mas existem bons motivos e uma sólida experiência 93por trás disso. Um desenvolvedor que não entenda os caminhos próprios da 94comunidade kernel (ou pior, que tente menosprezá-los ou contorná-los) terá uma 95experiência frustrante pela frente. A comunidade de desenvolvimento ajuda 96aqueles que tentam aprender, mas gasta pouco tempo com aqueles que não escutam 97ou não ligam para o processo de desenvolvimento. 98 99Espera-se que aqueles que leiam este documento sejam capazes de evitar essa 100experiência frustrante. Há muito material aqui, mas o esforço envolvido na sua 101leitura valerá a pena. A comunidade de desenvolvimento sempre necessita de 102desenvolvedores que ajudem a melhorar o kernel; o texto a seguir deve ajudar 103você - ou aqueles trabalhando para você - a se juntar à nossa comunidade. 104 105Créditos 106-------- 107 108Esse documento foi escrito por Jonathan Corbet, corbet@lwn.net. Aprimorado 109pelos comentários de Johannes Berg, James Berry, Alex Chiang, Roland Dreier, 110Randy Dunlap, Jake Edge, Jiri Kosina, Matt Mackall, Arthur Marsh, Amanda 111McPherson, Andrew Morton, Andrew Price, Tsugikazu Shibata, e Jochen Voß. 112 113Esse trabalho contou com o apoio da Linux Foundation; agradecimentos especiais 114para Amanda McPherson, que viu o valor desse esforço e fez tudo acontecer. 115 116A importância de levar o código até o "mainline" 117------------------------------------------------- 118 119Algumas empresas e desenvolvedores ocasionalmente se perguntam por que devem 120se importar em aprender como trabalhar com a comunidade do kernel e ter seu 121código no "mainline" (o kernel mantido por Linus Torvalds e usado como base 122para os distribuidores Linux). No curto prazo, contribuir com o código pode 123parecer um gasto evitável; parece mais fácil apenas manter o seu código à 124parte e oferecer suporte direto aos usuários. A verdade é que manter código 125fora da árvore principal ("out-of-tree") é uma falsa economia. 126 127Para ilustrar os custos do código "out-of-tree", aqui estão alguns aspectos 128relevantes do processo de desenvolvimento do kernel; a maioria será discutida 129com mais detalhes adiante neste documento. Considere: 130 131- Código integrado via merge ao "mainline" fica disponível para todos os 132 usuários Linux. Estará automaticamente presente em todas as distribuições 133 que o habilitarem. Não há necessidade de discos de armazenamento, downloads, 134 ou as complicações de dar suporte a múltiplas versões de variadas 135 distribuições; tudo simplesmente funciona, para o desenvolvedor e para o 136 usuário. Incorporação ao "mainline" resolve um grande número de problemas 137 de distribuição e suporte. 138 139- Enquanto desenvolvedores do kernel se esforçam para manter uma interface 140 estável para o espaço do usuário, a API interna está em constante mudança. 141 A ausência de uma interface interna estável é uma escolha deliberada de 142 design; permite que sejam feitas melhorias fundamentais a qualquer tempo e 143 resulta em código de qualidade superior. Uma consequência dessa política é 144 que código "out-of-tree" precisa ser constantemente atualizado para que 145 continue funcionando com novos kernels. Manter código "out-of-tree" requer 146 significativo trabalho apenas para mantê-lo funcionando. 147 148 Por sua vez, código que está no "mainline" não precisa dessa manutenção, 149 resultado de uma regra simples que exige que qualquer desenvolvedor que 150 altere uma API, também conserte qualquer código que deixe de funcionar como 151 resultado da alteração. Código que teve o merge realizado no "mainline" tem 152 custo significativamente menor de manutenção. 153 154- Além disso, código que está no kernel será muitas vezes melhorado por outros 155 desenvolvedores. Resultados surpreendentes podem surgir ao permitir que sua 156 comunidade de usuários e clientes melhore seu produto. 157 158- Código do kernel está sujeito a revisão, tanto antes como depois do merge ao 159 "mainline". Independentemente das habilidades do desenvolvedor original, o 160 processo de revisão invariavelmente encontra maneiras de evoluí-lo. Bugs 161 severos e problemas de segurança são constantemente encontrados durante o 162 processo de revisão. Isso é especialmente válido para código desenvolvido em 163 ambiente isolado; tais códigos se beneficiam fortemente ao serem revistos por 164 outros desenvolvedores. Código "out-of-tree" é código de baixa qualidade. 165 166- Participação no processo de desenvolvimento é a forma pela qual você pode 167 influenciar a direção do desenvolvimento do kernel. Usuários que se queixam 168 externamente são ouvidos, porém desenvolvedores ativos têm maior poder de 169 articulação - e a habilidade de implementar mudanças que façam o kernel 170 funcionar melhor para suas necessidades. 171 172- Quando o código é mantido à parte, sempre existe a possibilidade de que 173 terceiros contribuam para uma implementação diferente de uma funcionalidade 174 parecida. Se isso acontecer, ter seu código integrado via merge se tornará 175 muito mais difícil - ao ponto de ser impossível. Você enfrentará duas 176 alternativas desagradáveis, (1) manter uma funcionalidade "out-of-tree" 177 indefinidamente ou (2) abandonar seu código e migrar seus usuários para a 178 versão na árvore principal ("in-tree"). 179 180- Contribuição de código é a ação fundamental que faz todo o processo 181 funcionar. Ao contribuir com seu código você pode adicionar nova 182 funcionalidade ao kernel e proporcionar capacidades e exemplos que podem ser 183 usados por outros desenvolvedores de kernel. Se você desenvolveu código para 184 o Linux (ou está pensando em desenvolver), você claramente tem interesse na 185 continuidade do sucesso dessa plataforma; contribuição de código é uma das 186 melhores maneiras de garantir esse sucesso. 187 188Todos os argumentos acima se aplicam a qualquer código "out-of-tree", incluindo 189código distribuído de maneira proprietária, em formato exclusivamente binário. 190Existem fatores adicionais que devem ser levados em consideração antes de 191qualquer distribuição de código de kernel apenas em binário, incluindo: 192 193- As questões legais da distribuição de kernel proprietário são, no melhor dos 194 casos, confusas; muitos detentores de direitos autorais do kernel acreditam 195 que a maioria dos módulos binários são produtos derivados do kernel e que, 196 como resultado, sua distribuição é uma violação da Licença Pública Geral GNU 197 ("GNU General Public License"), que será tratada com mais profundidade abaixo. 198 Este autor não é um advogado, e nada neste documento pode ser considerado 199 aconselhamento jurídico. O verdadeiro status de módulos privados ("closed 200 source") só pode ser determinado judicialmente. Independentemente disso, a 201 incerteza que cerca esses módulos existe. 202 203- Os módulos binários aumentam consideravelmente a dificuldade de depuração de 204 problemas do kernel ("debugging"), a ponto de a maioria dos desenvolvedores 205 de kernel sequer tentar. Portanto, a distribuição de módulos exclusivamente 206 binários tornará mais difícil que os seus usuários recebam suporte. 207 208- O suporte também é mais difícil para distribuidores de módulos exclusivamente 209 binários, que precisam fornecer uma versão do módulo para cada distribuição e 210 cada versão do kernel que desejam suportar. Dezenas de versões de um único 211 módulo podem ser necessárias para fornecer uma cobertura razoavelmente 212 abrangente, e seus usuários terão que atualizar seu módulo separadamente 213 sempre que atualizarem seu kernel. 214 215- Tudo o que foi dito acima sobre revisão de código se aplica em dobro ao 216 código fechado. Como esse código não está disponível, ele não pode ter sido 217 revisado pela comunidade e, sem dúvida, terá sérios problemas. 218 219Os fabricantes de sistemas embarcados, em particular, podem ser tentados a 220ignorar grande parte do que foi dito nesta seção, acreditando que estão 221lançando um produto autossuficiente que usa uma versão congelada do kernel e 222não requer mais desenvolvimento após o lançamento. Esse argumento ignora o 223valor de uma revisão de código abrangente e o valor de permitir que seus 224usuários adicionem recursos ao seu produto. Mas esses produtos também têm uma 225vida comercial limitada, após a qual uma nova versão deve ser lançada. Nesse 226ponto, os fornecedores cujo código está no "mainline" e bem mantido estarão em 227uma posição muito melhor para preparar o novo produto para o mercado 228rapidamente. 229 230Licenciamento 231------------- 232 233Código é submetido ao kernel do Linux sob diversas licenças, mas todo ele deve 234ser compatível com a versão 2 da Licença Pública Geral GNU (GPLv2), que é a 235licença que cobre a distribuição do kernel como um todo. Na prática, isso 236significa que todas as contribuições de código são cobertas pela GPLv2 (com, 237opcionalmente, uma linguagem que permita a distribuição sob versões posteriores 238da GPL) ou pela licença BSD de três cláusulas. Quaisquer contribuições que não 239sejam cobertas por uma licença compatível não serão aceitas no kernel. 240 241A cessão de direitos autorais não é exigida (nem solicitada) para o código 242contribuído para o kernel. Todo o código incorporado ao kernel principal mantém 243sua titularidade original; como resultado, o kernel agora tem milhares de 244proprietários. 245 246Uma implicação dessa estrutura de propriedade é que qualquer tentativa de 247alterar o licenciamento do kernel está fadada ao fracasso quase certo. Existem 248poucos cenários práticos em que o acordo de todos os detentores de direitos 249autorais poderia ser obtido (ou seu código removido do kernel). Portanto, em 250particular, não há perspectiva de migração para a versão 3 da GPL em um futuro 251próximo. 252 253É imprescindível que todo o código contribuído para o kernel seja legitimamente 254software livre. Por esse motivo, código de contribuidores sem identidade 255conhecida ou contribuidores anônimos não será aceito. Todos os contribuidores 256são obrigados a "assinar" seu código, declarando que ele pode ser distribuído 257com o kernel sob a GPL. Código que não tenha sido licenciado como software 258livre por seu proprietário, ou que apresente risco de criar problemas 259relacionados a direitos autorais para o kernel (como código derivado de 260esforços de engenharia reversa sem as devidas salvaguardas) não pode ser 261contribuído. 262 263Questões sobre direitos autorais são comuns em listas de discussão de 264desenvolvimento Linux. Normalmente, essas perguntas recebem muitas respostas, 265mas é importante lembrar que as pessoas que respondem a essas perguntas não são 266advogados e não podem fornecer aconselhamento jurídico. Se você tiver dúvidas 267jurídicas relacionadas ao código-fonte do Linux, não há substituto para 268conversar com um advogado especializado nessa área. Confiar em respostas 269obtidas em listas de discussão técnicas é arriscado. 270