Este é um editorial de opinião de niftynei, um educador de desenvolvedores que dirige a academia de protocolo Base58 Bitcoin e um organizador da próxima conferência Bitcoin++ focada em Nix.
Quando você deseja instalar um novo aplicativo em seu computador, de onde você o obtém?
Decidir qual fonte usar é um problema surpreendentemente difícil de resolver, mas é um problema com o qual toda plataforma de computação luta.
Antes da Internet ser difundida, novos “pacotes” de software eram distribuídos em mídia física, como CDs ou pendrives. Se você deseja obter a versão mais recente do sistema operacional (SO) do seu computador ou a versão mais recente do Bitcoin Core, por exemplo, você precisa comprá-lo fisicamente na loja ou enviá-lo por correio. Em seguida, você carregaria o disco ou dispositivo USB em seu computador e faria uma cópia do novo software em seu disco local.
Como um desenvolvedor que escreve código, você teria que distribuir fisicamente cópias de seus programas para amigos e familiares. Ou você trabalharia para uma grande corporação que tinha relações com empresas e lojas de informática, que descobririam como distribuir o software que você escreveu a seus clientes e clientes.
Com o advento dos computadores sempre conectados, o panorama da distribuição de software mudou para sempre. Agora, em vez de ter que pegar fisicamente uma cópia dos bits de um programa, você pode facilmente baixar uma cópia da Internet.
Isso tornou muito mais fácil para novos desenvolvedores escrever aplicativos que qualquer pessoa pode baixar. O problema agora, no entanto, é responder à pergunta: de onde os usuários devem baixar o novo software na Internet?
A loja de aplicativos do hacker
A maneira como os ecossistemas de telefonia móvel resolvem o problema da distribuição de novos aplicativos é por meio de um programa em seu telefone chamado “App Store” (ou “Google Play store” no Android).
Os desenvolvedores carregam a cópia mais recente de seus aplicativos para os servidores da Apple ou do Google. Essas empresas enviam uma notificação silenciosa para todos os telefones que possuem o aplicativo instalado, e o aplicativo é atualizado em segundo plano nos telefones dos usuários, sem o envolvimento dos usuários.
Se você é um usuário e deseja adicionar um novo aplicativo ao seu telefone, na maioria dos casos você poderá encontrá-lo na App Store e baixá-lo de lá.
Mas nem todo software está disponível como aplicativo para celular. Alguns projetos de software são aplicativos de desktop ou ferramentas que os desenvolvedores usam para escrever novos softwares. Esses aplicativos também precisam de um canal de distribuição. Em sistemas operacionais de desktop, tendemos a chamar o software “App Store” pelo termo “gerenciadores de pacotes”. Eles gerenciam os pacotes de software que você baixa em seu computador.
Os gerenciadores de pacotes modernos consistem em um servidor central, às vezes chamado de repositório, que pode acompanhar a versão mais recente do aplicativo e um aplicativo do lado do cliente que é executado no computador do usuário do pacote.
Se você é um desenvolvedor, provavelmente já se deparou com “homebrew” ou “apt-get install” em algum momento de sua vida. “Homebrew” e “apt” são gerenciadores de pacotes.
No modo como os gerenciadores de pacotes funcionam, o aplicativo do lado do cliente verificará o repositório central ocasionalmente para ver se há novas atualizações para qualquer um dos pacotes atualmente instalados. Ou, se você tiver o sistema operacional correto e as permissões corretas definidas, talvez seu computador execute automaticamente essas verificações, baixe e instale a versão mais recente de um aplicativo.
(Além disso, você pode adicionar outras fontes de pacotes de software ao seu cliente gerenciador de pacotes local. Se um desenvolvedor hospedar seus próprios aplicativos em vez de carregá-los no repositório central, você precisará adicionar o site auto-hospedado deles ao lista de locais para procurar atualizações em seu próprio aplicativo cliente gerenciador de pacotes.)
E se pudéssemos reproduzir tudo?
nix é um gerenciador de pacotes que visa trazer compilações reproduzíveis para todos os pacotes que ajuda a distribuir.
O Nix resolve os problemas com a distribuição de software mantendo um registro detalhado de todas as entradas de uma compilação, identificando exclusivamente cada entrada e usando as mesmas que o construtor original fazia. Isso garante que seja capaz de construir a mesma coisa todas as vezes e em qualquer máquina.
O Nix faz o hash de cada entrada e saída de uma compilação; isso facilita a identificação quando uma entrada foi alterada. Quando as entradas de uma construção mudam, é garantido que as saídas também mudarão.
Um grande problema com construções reproduzíveis é que usuários diferentes terão versões diferentes das entradas com as quais um programa precisa ser construído. Cada novo programa que você constrói em sua máquina pode precisar de uma versão diferente de sua entrada para ser reproduzível.
O Nix corrige isso acompanhando as compilações por listas de hash e usando apenas entradas que correspondem à lista de hashes que espera. A desvantagem é que o Nix usa muito mais espaço em disco e geralmente pode demorar um pouco mais para baixar, pois será necessário baixar as entradas corretas para um processo de compilação binário se você ainda não as tiver em seu computador.
Gosto de brincar que o Nix só foi possível graças à lei de Moore, o que significa que agora temos espaço em disco extra suficiente para não precisarmos nos preocupar em ter várias cópias do mesmo programa, apenas em versões ligeiramente diferentes.
Portanto, o Nix torna possível distribuir uma compilação reproduzível de seu software com muito mais facilidade, o que significa que um usuário pode reconstruir seu software de maneira confiável em sua máquina e fazê-lo funcionar, sem perguntas.
Como um pequeno aparte, observe que o que “reproduzível” significa para uma compilação Nix é que “se um pacote funcionar em uma máquina, também funcionará em outra”. Isso não é o mesmo que a reprodutibilidade que os desenvolvedores do Bitcoin Core tentam garantir para os binários oficiais do Bitcoin, que têm um processo separado para verificar se são idênticos bit a bit.
Nix E Bitcoin
A distribuição de software de código aberto de maneira fácil para os usuários finais executarem e reproduzível em qualquer sistema é um recurso muito útil e importante. Isso torna mais fácil para qualquer um começar a usar o projeto e também mais fácil para novos desenvolvedores começarem a contribuir com o projeto.
Alguns anos atrás, um conjunto de desenvolvedores intrépidos lançou um repositório dos projetos de software Bitcoin mais comuns que são empacotados como pacotes e módulos Nix.
Os pacotes tornam muito mais fácil para qualquer um que usa o gerenciador de pacotes Nix instalar e começar a executar um nó Bitcoin, em quase qualquer arquitetura. Você não precisa se preocupar em instalar as dependências corretas antes de executar os comandos de compilação, e o projeto será compilado a partir do código-fonte em sua própria máquina. É bastante ideal em termos de poder baixar, construir e executar rapidamente um nó Bitcoin a partir do zero.
O repositório Nix-Bitcoin fornece “módulos” Nix, que são configurações para aplicativos de software que devem funcionar no NixOS. Os módulos Nix-Bitcoin permitem que qualquer pessoa que esteja executando o NixOS reproduza uma compilação do Bitcoin Core e outros projetos de código aberto do Bitcoin e os coloque rapidamente em execução em suas máquinas com o mínimo de confusão.
Em entrevista para este artigo, Jonas Nick, um dos principais mantenedores do projeto Nix-Bitcoin, disse o seguinte sobre o uso do projeto:
“O principal benefício que o Nix-Bitcoin obtém do Nix/NixOS é o gerenciamento de configuração declarativa. Configurar seu sistema usando a linguagem de programação Nix permite abstração, para que você possa modularizar sua lógica para reutilizar e testar componentes individuais. Isso permite gerenciar a complexidade, que inevitavelmente ocorre durante a construção de sistemas e ajuda a construir um sistema correto e seguro. Por exemplo, muitos dos recursos de segurança que o Nix-Bitcoin fornece seriam muito irritantes de manter se não tivéssemos o sistema de módulos. A reprodutibilidade no NixOS também ajuda muito com atualizações, porque sabemos exatamente o que está sendo executado nos sistemas de nossos usuários. Finalmente, com o NixOS também podemos obter erros em tempo de avaliação em vez de tempo de execução.”
O Bitcoin Core não é o único projeto empacotado para distribuição no Nix.
Há também Core Lightning, BTCPay Server e vários outros projetos. Na maioria das vezes, esses projetos são adicionados e agrupados para distribuição no Nix por fãs do sistema de gerenciamento de pacotes Nix, não pelos desenvolvedores que estão escrevendo o software. Para uma lista mais completa de pacotes disponíveis, confira a lista de “módulos” no repositório Nix-Bitcoin GitHub.
Por que não Nix em todos os lugares?
Se o Nix é uma mudança tão grande na maneira como os projetos de Bitcoin são construídos e enviados, por que nem todos o usam? A verdade é que Nix é um projeto grande e um pouco difícil de entrar. A curva de aprendizado para usar o Nix é bastante íngreme, e o paradigma de executar o Nix como um gerenciador de pacotes pode ser bem diferente do que a maioria está acostumada.
O NixOS começou como um projeto de pesquisa da Eelco Dolstra em 2003 e vem lentamente construindo uma base de seguidores e usuários desde então.
Bitcoin++ Berlin: expandindo o uso do Nix no Bitcoin
Ao organizar a próxima conferência Bitcoin++ em Berlim, pretendemos mudar isso. Bitcoin++ é uma série de conferências focada em desenvolvedores que se concentra em diferentes tópicos no espaço do desenvolvedor Bitcoin. Originalmente iniciada em Austin, Texas, em 2022, a conferência mais recente no final de abril de 2023 focou nas tecnologias da Camada 2 em Bitcoin, como Ark, a Lightning Network
e acúmulos de validade.
A próxima conferência de Berlim, planejada para 6 e 7 de outubro de 2023, pretende ser um evento “Nix-pilling” para o ecossistema de desenvolvedores Bitcoin. Os principais mantenedores do projeto Nix-Bitcoin em Fort Nix estarão presentes (incluindo Nick, Pavol Rusnak e Eric Sirion, para
citar alguns). O evento de dois dias será repleto de workshops práticos e palestras
projetado para ensinar desenvolvedores de todo o ecossistema sobre como usar o Nix para empacotar
seus projetos e agrupar melhor suas dependências de desenvolvimento para que novos
os contribuidores podem começar a codificar e contribuir mais rapidamente, além de demonstrar como é rápido e fácil implantar software usando módulos no NixOS.
Referências de artigos adicionais
- Reprodutibilidade com Nix
- Entrevista com “nixbitcoindev”
- Onde começar
- Por que Nix-Bitcoin, para Bitcoiners
Este é um post de convidado por niftynei. As opiniões expressas são inteiramente próprias e não refletem necessariamente as da BTC Inc ou da Bitcoin Magazine.
Fonte: bitcoinmagazine.com