[PATCH] docs: pt_BR: process: Translate stable API nonsense

Fabio Pereira da Silva <[email protected]>
Newsgroups org.kernel.vger.linux-doc
Message-ID <[email protected]>
Translate Documentation/process/stable-api-nonsense.rst into Brazilian Portuguese and link it from the pt_BR documentation index.

Signed-off-by: Fabio Pereira da Silva <[email protected]>
---
 Documentation/translations/pt_BR/index.rst    |   1 +
 .../pt_BR/process/stable-api-nonsense.rst     | 205 ++++++++++++++++++
 2 files changed, 206 insertions(+)
 create mode 100644 Documentation/translations/pt_BR/process/stable-api-nonsense.rst

diff --git a/Documentation/translations/pt_BR/index.rst b/Documentation/translations/pt_BR/index.rst
index c09afbe8e22c..71eb024fbec8 100644
--- a/Documentation/translations/pt_BR/index.rst
+++ b/Documentation/translations/pt_BR/index.rst
@@ -73,6 +73,7 @@ kernel e sobre como ver seu trabalho integrado.
    Requisitos mínimos <process/changes>
    CVEs <process/cve>
    Lista de verificação para patches <process/submit-checklist>
+   Interface de drivers do kernel Linux <process/stable-api-nonsense>
    Conclave (Continuidade do projeto) <process/conclave>
    Manuais dos mantenedores <process/maintainer-handbooks>
    Processo do subsistema de rede (netdev) <process/maintainer-netdev>
diff --git a/Documentation/translations/pt_BR/process/stable-api-nonsense.rst b/Documentation/translations/pt_BR/process/stable-api-nonsense.rst
new file mode 100644
index 000000000000..778a897e226a
--- /dev/null
+++ b/Documentation/translations/pt_BR/process/stable-api-nonsense.rst
@@ -0,0 +1,205 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+.. _pt_stable_api_nonsense:
+
+A interface de drivers do kernel Linux
+======================================
+
+(todas as suas perguntas respondidas, e mais algumas)
+
+Greg Kroah-Hartman <[email protected]>
+
+Este texto foi escrito para tentar explicar por que o Linux **não possui uma
+interface binária de kernel, nem possui uma interface estável de kernel**.
+
+.. note::
+
+  Entenda que este artigo descreve as interfaces **dentro do kernel**, não as
+  interfaces entre o kernel e o espaço de usuário.
+
+  A interface entre o kernel e o espaço de usuário é aquela usada pelos
+  programas de aplicação, a interface de chamadas de sistema. Essa interface é
+  **muito** estável ao longo do tempo e não será quebrada. Tenho programas
+  antigos que foram construídos em um kernel anterior à série 0.9-alguma-coisa
+  e que ainda funcionam perfeitamente no lançamento mais recente do kernel 2.6.
+  Essa é a interface com cuja estabilidade usuários e programadores de
+  aplicações podem contar.
+
+
+Resumo executivo
+----------------
+
+Você acha que quer uma interface estável de kernel, mas na verdade não quer, e
+nem sabe disso. O que você quer é um driver em execução estável, e você só
+consegue isso se o seu driver estiver na árvore principal do kernel. Você também
+obtém vários outros bons benefícios se o seu driver estiver na árvore principal
+do kernel; todos eles ajudaram a transformar o Linux em um sistema operacional
+forte, estável e maduro, que é justamente o motivo pelo qual você o utiliza.
+
+
+Introdução
+----------
+
+Somente a pessoa incomum que deseja escrever um driver de kernel precisa se
+preocupar com a mudança das interfaces internas do kernel. Para a maior parte
+do mundo, essa interface não é vista nem importa.
+
+Primeiro, não vou abordar **nenhuma** questão jurídica sobre código-fonte
+fechado, código-fonte oculto, blobs binários, wrappers de código-fonte ou
+qualquer outro termo que descreva drivers de kernel cujo código-fonte não é
+lançado sob a GPL. Consulte um advogado se tiver dúvidas jurídicas; sou
+programador e, portanto, vou descrever apenas as questões técnicas aqui (sem
+minimizar as questões jurídicas: elas são reais, e você precisa estar sempre
+ciente delas).
+
+Portanto, há dois tópicos principais aqui: interfaces binárias de kernel e
+interfaces estáveis de código-fonte do kernel. Elas dependem uma da outra, mas
+discutiremos primeiro a parte binária para resolver esse ponto primeiro.
+
+
+Interface binária de kernel
+---------------------------
+
+Supondo que tivéssemos uma interface estável de código-fonte do kernel, uma
+interface binária também surgiria naturalmente, certo? Errado. Considere os
+seguintes fatos sobre o kernel Linux:
+
+  - Dependendo da versão do compilador C usada, diferentes estruturas de dados
+    do kernel terão diferentes alinhamentos de estruturas e possivelmente
+    incluirão diferentes funções de formas diferentes (colocando funções inline
+    ou não). A organização individual das funções não é tão importante, mas o
+    preenchimento diferente das estruturas de dados é muito importante.
+
+  - Dependendo das opções de compilação do kernel selecionadas, uma ampla variedade
+    de coisas diferentes pode ser assumida pelo kernel:
+
+      - estruturas diferentes podem conter campos diferentes;
+      - algumas funções podem não ser implementadas, (isto é, algumas travas
+        desaparecem por completo em compilações não SMP);
+      - a memória dentro do kernel pode ser alinhada de formas diferentes,
+        dependendo das opções de compilação.
+
+  - O Linux executa em uma ampla variedade de arquiteturas de processador. Não
+    há como drivers binários de uma arquitetura executarem corretamente em outra
+    arquitetura.
+
+Vários desses problemas podem ser resolvidos simplesmente compilando seu módulo
+para a configuração exata e específica do kernel, usando exatamente o mesmo
+compilador C com que o kernel foi construído. Isso é suficiente se você quiser
+fornecer um módulo para uma versão específica de lançamento de uma distribuição
+Linux específica. Mas multiplique esse única compilação pelo número de diferentes
+distribuições Linux e pelo número de lançamentos suportados dessas distribuições
+e você rapidamente terá um pesadelo de diferentes opções de compilação em diferentes
+lançamentos. Perceba também que cada lançamento de uma distribuição Linux contém
+vários kernels diferentes, todos ajustados para tipos diferentes de hardware
+(tipos diferentes de processador e opções diferentes), portanto, mesmo para um
+único lançamento, você precisará criar várias versões do seu módulo.
+
+Acredite, com o tempo você ficará sobrecarregado se tentar dar suporte a esse tipo de
+lançamento; aprendi isso da pior forma há muito tempo...
+
+
+Interfaces estáveis de código-fonte do kernel
+---------------------------------------------
+
+Este é um tópico muito mais "volátil" quando você conversa com pessoas que
+tentam manter atualizado, ao longo do tempo, um driver de kernel Linux que não
+está na árvore principal do kernel.
+
+O desenvolvimento do kernel Linux é contínuo e ocorre em ritmo rápido, sem
+parar para desacelerar. Assim, os desenvolvedores do kernel encontram bugs nas
+interfaces atuais ou descobrem uma forma melhor de fazer as coisas. Quando isso
+acontece, eles corrigem as interfaces atuais para que funcionem melhor. Nesse
+processo, nomes de funções podem mudar, estruturas podem crescer ou diminuir, e
+parâmetros de funções podem ser retrabalhados. Quando isso acontece, todas as
+instâncias em que essa interface é usada dentro do kernel são corrigidas ao
+mesmo tempo, garantindo que tudo continue funcionando corretamente.
+
+Como exemplo específico, as interfaces USB internas do kernel passaram por pelo
+menos três retrabalhos diferentes durante a vida desse subsistema. Esses
+retrabalhos foram feitos para tratar vários problemas diferentes:
+
+  - Uma mudança de um modelo síncrono de fluxos de dados para um assíncrono.
+    Isso reduziu a complexidade de vários drivers e aumentou a vazão de todos
+    os drivers USB, de modo que agora executamos quase todos os dispositivos USB
+    na velocidade máxima possível.
+  - Foi feita uma mudança na forma como pacotes de dados eram alocados a partir
+    do núcleo USB pelos drivers USB, de modo que todos os drivers passaram a
+    precisar fornecer mais informações ao núcleo USB para corrigir vários
+    deadlocks documentados.
+
+Isso contrasta fortemente com vários sistemas operacionais de código fechado,
+que precisaram manter suas interfaces USB antigas ao longo do tempo. Isso
+permite que novos desenvolvedores usem acidentalmente interfaces antigas e
+façam as coisas de formas inadequadas, prejudicando a estabilidade do sistema
+operacional.
+
+Em ambos os casos, todos os desenvolvedores concordaram que essas eram mudanças
+importantes que precisavam ser feitas, e elas foram feitas com relativamente
+pouco sofrimento. Se o Linux precisasse garantir a preservação de uma interface estável
+de código-fonte, uma nova interface teria sido criada, e a antiga, quebrada,
+teria de ser mantida ao longo do tempo, levando a trabalho extra para os
+desenvolvedores USB. Como todos os desenvolvedores USB do Linux trabalham em seu
+próprio tempo, pedir a programadores que façam trabalho extra, sem ganho e de
+graça, não é uma possibilidade.
+
+Questões de segurança também são muito importantes para o Linux. Quando um
+problema de segurança é encontrado, ele é corrigido em um período muito curto.
+Várias vezes isso fez com que interfaces internas do kernel fossem retrabalhadas
+para impedir que o problema de segurança ocorresse. Quando isso acontece, todos
+os drivers que usam essas interfaces também são corrigidos ao mesmo tempo,
+garantindo que o problema de segurança seja corrigido e não possa voltar
+acidentalmente no futuro. Se as interfaces internas não pudessem mudar,
+corrigir esse tipo de problema de segurança e garantir que ele não ocorresse
+novamente não seria possível.
+
+As interfaces do kernel são limpas ao longo do tempo. Se ninguém estiver usando
+uma interface atual, ela é removida. Isso garante que o kernel permaneça tão
+pequeno quanto possível e que todas as interfaces potenciais sejam testadas da
+melhor forma possível (interfaces não usadas são praticamente impossíveis de
+testar quanto à validade).
+
+
+O que fazer
+-----------
+
+Então, se você tem um driver de kernel Linux que não está na árvore principal
+do kernel, o que você, como desenvolvedor, deve fazer? Lançar um driver binário
+para cada versão diferente de kernel em cada distribuição é um pesadelo, e
+tentar acompanhar uma interface de kernel em constante mudança também é uma
+tarefa difícil.
+
+Simples: coloque seu driver de kernel na árvore principal do kernel (lembre-se
+de que estamos falando de drivers lançados sob uma licença compatível com a GPL;
+se o seu código não se enquadra nessa categoria, boa sorte, você está por conta
+própria). Se o seu driver estiver na árvore e uma interface de kernel mudar, ele
+será corrigido pela pessoa que fez a mudança no kernel em primeiro lugar. Isso
+garante que o seu driver sempre possa ser compilado e funcione ao longo do tempo
+com muito pouco esforço da sua parte.
+
+Os efeitos colaterais muito positivos de ter seu driver na árvore principal do
+kernel são:
+
+  - A qualidade do driver aumentará, pois os custos de manutenção (para o
+    desenvolvedor original) diminuirão.
+  - Outros desenvolvedores adicionarão recursos ao seu driver.
+  - Outras pessoas encontrarão e corrigirão bugs no seu driver.
+  - Outras pessoas encontrarão oportunidades de ajuste no seu driver.
+  - Outras pessoas atualizarão o driver para você quando mudanças em interfaces
+    externas exigirem isso.
+  - O driver passa a ser distribuído automaticamente em todas as distribuições
+    Linux, sem que seja necessário pedir às distribuições que o adicionem.
+
+Como o Linux suporta um número maior de dispositivos diferentes "prontos para
+uso" do que qualquer outro sistema operacional, e suporta esses dispositivos em
+mais arquiteturas de processador diferentes do que qualquer outro sistema
+operacional, esse tipo comprovado de modelo de desenvolvimento deve estar
+fazendo alguma coisa certa :)
+
+
+
+------
+
+Agradecimentos a Randy Dunlap, Andrew Morton, David Brownell, Hanna Linder,
+Robert Love e Nishanth Aravamudan por suas revisões e comentários sobre os
+rascunhos iniciais deste artigo.
\ No newline at end of file
-- 
2.55.0.windows.2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.