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