O que é Upstream e Downstream?

O que é Upstream e Downstream?

Como usuário do Linux, você se depara com o termo upstream e downstream em várias discussões. Este jargão explica o que esses termos significam.

Os termos: upstream e downstream são termos bastante ambíguos e não são realmente usados pelo público em geral. Se você é um usuário de Linux e não escreve ou mantém software, as chances são muito boas de que esses termos não signifiquem nada para você, mas eles podem ser instrutivos em como a comunicação entre grupos dentro do mundo Linux funciona.

Os termos são usados em redes, programação, kernel e até mesmo em áreas não computadorizadas, como cadeias de suprimentos. Quando falamos de upstream e downstream, então, o contexto é importante.

Em sua forma mais simples, "upstream" e "downstream" é a direção do fluxo de informações.

Como estamos todos lendo este artigo enquanto estamos conectados à Internet, vamos olhar para um exemplo upstream/downstream como ele se aplica aos Provedores de Serviços de Internet (ISP). Aqui, o ISP está preocupado com o tráfego. O tráfego upstream é que os dados estão vindo de um usuário de um ISP diferente. Por exemplo, se você tem um site que oferece uma assinatura de um boletim informativo, as informações que eu envio, para assinar, são dados upstream.

Tráfego downstream são dados que são enviados de um usuário para outro usuário em um ISP diferente, então é considerado como tráfego downstream. Usando o mesmo exemplo de assinatura, vamos supor que meu pedido de inscrição seja aprovado e eu recebo uma nota de "boas-vindas" em um e-mail e a última newsletter em outro e-mail. Neste caso, os dados são downstream, pois são enviados por você (bem, provavelmente software automatizado operando como um representante de você) para mim, um usuário de um ISP diferente.

Resumindo: a coisa que precisamos ou queremos (seu boletim informativo) é upstream. As coisas que fornecemos (a nota de boas-vindas e boletim informativo real) que vêm até nós, downstream.

Se os dados são upstream ou downstream provavelmente não são importantes para nós como usuários, mas é importante para os administradores do servidor que monitoram o uso da largura de banda, bem como para distribuidores e programadores de aplicativos.

No mundo Linux, upstream e downstream têm dois contextos principais. Um está preocupado com o kernel e o outro está preocupado com aplicações. Há outros, mas esperamos conseguir a ideia com esses dois.

Upstream e downstream no contexto do Kernel Linux

Linux é o kernel. Ao criar uma distribuição (muitas vezes chamada de "distro"), as distribuições Linux inicialmente usam o código fonte de um kernel não modificado. Os patches necessárias são adicionados e, em seguida, o kernel é configurado. A configuração do kernel é baseada em quais recursos e opções a distribuição deseja oferecer. Uma vez decidido, o kernel é criado em conformidade.

O kernel original está upstream da distribuição. Quando a distribuição recebe o código fonte, ela flui downstream. Uma vez que a distribuição tem o código, ele permanece com os fabricantes da distribuição enquanto o trabalho está sendo feito nele. Ele ainda está upstream de nós, como usuários, até que esteja pronto para lançamento.

A versão do kernel que a distribuição cria terá patches adicionados e certos recursos e opções ativados. Esta configuração é determinada pelo construtor da distro. É por isso que existem vários sabores do Linux: Debian vs. Red Hat, por exemplo. O construtor da distro decide sobre as opções para oferecer à sua base de usuários, e compila o kernel de acordo.

Uma vez que o trabalho é concluído, ele está pronto para lançamento em um repositório e estamos autorizados a pegar uma cópia. Essa cópia flui downstream para nós.

Da mesma forma, se o distribuidor encontrar um bug no kernel, corrige e envia o patch para os desenvolvedores do kernel para que eles possam corrigir o kernel para todos. Isso é chamado de contribuição para o upstream porque aqui o fluxo está indo para cima para a fonte original.

Upstream e downstream no contexto das aplicações

Novamente, tecnicamente, Linux é o kernel, todo o resto é software adicional. O construtor da distro também adiciona software adicional ao seu projeto. Neste caso, há vários upstreams. Uma distro pode conter qualquer número de aplicações como X, KDE, GNOME e assim por diante.

Vamos imaginar que você está usando o editor nano e descobrir que ele não está funcionando direito e que você envie um relatório de bugs para o distribuidor. Os programadores que trabalham na distro olharão para ele e, se descobrirem que inseriram um bug no nano, irão corrigi-lo e disponibilizar uma nova versão em seu repositório. Se eles descobrirem que não fizeram o bug, o distribuidor enviará um relatório de bugs upstream para os programadores do nano.

Quando se trata de coisas como relatórios de bugs, solicitações de recursos, etc. é sempre melhor enviá-los upstream para o seu distribuidor, uma vez que eles mantêm o kernel e aplicativos adicionais para a distro que você está usando. Por exemplo, digamos que você use uma distro como o Q4OS em algumas máquinas. Se encontrar um bug em um programa, você pode relatar para o pessoal do Q4OS. Se você estiver usando, digamos, [https://linuxmint.com/], você relataria ao projeto do Linux Mint.

Se você postar um problema em um fórum Linux genérico, por exemplo, e você mencionar que estava usando a Mint, certamente receberá uma resposta que diz algo como: "Isso é melhor tratado em um fórum do Linux Mint." Usando o exemplo anterior do "bug no nano", é possível que os programadores do Linux Mint fizeram uma mudança para o nano que o faz funcionar melhor em sua distro. Se eles cometeram um erro, eles gostariam de saber sobre isso e, tendo cometido o erro, eles seriam os únicos a corrigi-lo.

Uma vez corrigido, o programa atualizado é colocado em um repositório disponível para você. Quando você recebe a atualização, ela vem dowstream para você, assim:

  • Se um distribuidor fizer a correção, a nova versão será disponibilizada no repositório da distro
  • Se o programador do aplicativo fizer a correção, ele será enviado downstream para os distribuidores que testam o novo código. Uma vez que ele está funcionando direito, ele é colocado no repositório, para fluir downstream para você

Fluxo automático downstream

Houve um tempo em que os usuários tinham que receber suas próprias atualizações. Um usuário obteria o código-fonte atualizado e compilaria um novo executável. Com o passar do tempo, utilitários como o apt foram criados para permitir que os usuários retirassem binários atualizados (executáveis) dos repositórios. O programa apt é Debian, mas outras distros têm seu próprio programa semelhante para isso.

Programas como o apt cuidam do trabalho upstream/downstream. Se você rodou apt com a opção de upgrade assim:

sudo apt upgrade

ele olharia (upstream) para o repositório da distro, encontraria quaisquer pacotes atualizados necessários e os puxaria (downstream) para sua máquina e os instalaria.

Algumas distros levam isso adiante. Programadores e mantenedores de distros estão sempre verificando seus produtos. Muitas vezes, um programador de aplicativos fará melhorias em seu programa. Bibliotecas de sistemas são atualizadas com frequência, falhas de segurança são plugadas, e assim por diante. Essas atualizações são disponibilizadas para os distribuidores que, em seguida, disponibilizam a nova versão no repositório do distro.

Em vez de você rodar apt todos os dias, algumas distros irão alertá-lo para atualizações que estão disponíveis e perguntar se você quer. Se você quiser, então, basta aceitar e as atualizações serão enviadas downstream para sua máquina e instaladas.

Conclusão

Upstream e downstream é realmente apenas a direção do fluxo de dados. O quão upstream ou downstream esses fluxos de dados dependem de quem precisa trabalhar nele. Basicamente, os programadores estão upstream e os usuários estão downstream.

Novamente, como usuários, realmente não precisamos nos preocupar com esses termos, mas os conceitos ajudam no desenvolvimento e manutenção de software. Ao ser capaz de direcionar o trabalho para o grupo apropriado, trabalho duplicado é evitado. Também garante que um padrão seja mantido. O navegador Chrome, por exemplo, pode precisar de pequenas alterações feitas nele para funcionar em um certa distro, mas será o Chrome em seu núcleo – ele vai parecer e agir como o Chrome.

Se você encontrar um bug com qualquer programa em sua distro, basta reportá-lo aos mantenedores do seu distro, o que geralmente é feito através de seu site. Você vai enviá-lo upstream para eles, mas não importa se você se lembra que você está enviando o relatório upstream.

Última atualização deste artigo: 19 de september de 2022