7 Controle de Ambiente
7.1 Objetivos de Aprendizagem
7.2 Contextualização
Imagine a seguinte situação: você publicou uma pesquisa quantitativa, disponibilizando o código e os dados para que outros pesquisadores possam reproduzir os resultados. Um pesquisador entra em contato e diz que não conseguiu replicar seus resultados. Você como bom mineiro, responde: “Uai, comigo funcionou!”. Prestativo como é sugere para o pesquisador, da Polônia, que venha até sua casa para que você possa ajudá-lo, e aproveitar para tomar um café e comer um pão de queijo. O pesquisador, educadamente, responde que não pode ir até sua casa, pois está do outro lado do mundo.
Então, prestativo como é, você sugere que vai enviar uma imagem do seu HD para ele. O pesquisador, educadamente, responde que não pode aceitar, pois o arquivo da imagem é muito grande e ele não tem espaço suficiente para armazenar a imagem. Além do mais, ele não entende muito bem (e não tem!) a infraestrutura para pode acessar seu HD. Inclusive, ele utiliza um sistema operacional (e estrutura de hardware) diferente do seu.
Pois bem, essa situação poderia ser a única saída alguns anos atrás. No entanto, hoje em dia, com os serviços de armazenamento em nuvem, as soluções de virtualização (máquinas virtuais), containers e controle de ambiente, é possível compartilhar o ambiente de desenvolvimento de forma mais simples e eficiente.
7.3 Soluções para Controle do Ambiente
A reprodutibilidade computacional, a capacidade de obter resultados consistentes e verificáveis a partir de um experimento computacional quando os mesmos dados de entrada, código e ambiente de software são utilizados, tornou-se central para muitos projetos de pesquisa (Moreau et al., 2023). Pesquisadores que tentam reproduzir ou construir sobre trabalhos existentes frequentemente enfrentam desafios que, na melhor das hipóteses, atrasam projetos científicos ou, em casos extremos, podem impedir completamente a reutilização ou colaboração (Wiebels & Moreau, 2021). Containers e ferramentas de controle de ambiente fornecem respostas a esses desafios.
7.3.1 Máquinas Virtuais (VMs)
Máquinas virtuais (VM) são ambientes que emulam um sistema operacional (SO) completo sobre um hardware físico, permitindo a execução de múltiplos sistemas operacionais em uma única máquina. Elas oferecem um alto nível de isolamento e controle, pois cada VM inclui seu próprio SO, bibliotecas e aplicativos. As VMs podem ser classificadas em dois tipos: Type 1 Hypervisor e Type 2 Hypervisor. Tipo 1 Hypervisor roda diretamente sobre o hardware, gerenciando várias VMs sem a necessidade de um SO subjacente, o que proporciona melhor desempenho e eficiência. Já o Type 2 Hypervisor roda sobre um SO existente, sendo menos eficiente, mas mais fácil de configurar e utilizar em ambientes de desktop (Figura 7.1).
Exemplos de soluções de virtualização Tipo 1 podemos elencar:
VMware ESXi: Uma solução comercial amplamente utilizada em ambientes corporativos para criar e gerenciar VMs. Oferece alta performance e várias funcionalidades avançadas de gerenciamento.
Microsoft Hyper-V: Integrado ao Windows, é uma solução comercial que também pode ser usada gratuitamente com recursos limitados. Hyper-V é amplamente utilizado em ambientes Windows.
Xen: Uma solução open-source popular em ambientes de nuvem, como o Amazon Web Services (AWS). Xen é altamente eficiente e suportado por várias distribuições Linux.
Exemplos de Tipo 2 incluem:
VMware Workstation: Uma solução comercial usada principalmente em desktops e laptops para executar múltiplos SOs. VMware Workstation é conhecido pela sua estabilidade e facilidade de uso. Recentemente ele passou a ser gratuito.
Oracle VirtualBox: Uma solução open-source amplamente utilizada para virtualização em desktops. VirtualBox é gratuito e suporta uma vasta gama de SOs convidados.
Parallels Desktop: Uma solução comercial popular entre usuários de Mac, permitindo que eles rodem Windows, Linux e outros no macOS de maneira integrada.
As vantagens das VMs incluem um alto isolamento e segurança, além da flexibilidade para rodar diferentes SOs. No entanto, elas consomem muitos recursos, como CPU, memória e armazenamento, e as imagens são grandes e difíceis de compartilhar. Nesse sentido, para a reprodutibilidade das pesquisas empíricas no âmbito da CA o emprego de VMs pode ser impraticável. Para nosso dia a dia enquanto pesquisadores e professores pode ser uma ferramenta extremamente útil. Esse curso está organizado dentro de uma VM.
7.3.2 Containers
Por outro lado, os containers são uma tecnologia de virtualização a nível de SO, mais leve que as VMs, que compartilham o mesmo kernel do SO hospedeiro, mas ainda assim oferecem isolamento para aplicações (Moreau et al., 2023). Docker, Kubernetes, OpenShift e Podman são algumas das ferramentas mais populares para criar e gerenciar containers. Ao contrário das VMs, os containers contêm apenas a aplicação e suas dependências, compartilhando o kernel do SO hospedeiro. Isso torna os containers mais leves e eficientes em termos de recursos, e ainda são rápidos na inicialização e execução. Além disso, são fáceis de distribuir e compartilhar.
Os contêineres estão ganhando força na pesquisa científica (Moreau et al., 2023; Zandonella Callegher & Massidda, 2022) e o Docker despontado como uma das soluções mais populares para controle de ambiente em pesquisas empíricas quantitativas (Wiebels & Moreau, 2021).
Containers resolvem o problema conhecido como “dependency hell” ao empacotar todo o código e dependências necessários para garantir que as análises sejam executadas de maneira confiável em uma variedade de sistemas operacionais e versões de software (Wiebels & Moreau, 2021). Eles permitem “empacotar” (isolar) todo o ambiente de computação de forma que qualquer pessoa em qualquer computador possa examinar e replicar o trabalho, independentemente do software instalado, drivers e sistemas operacionais.
Uma analogia útil é pensar em uma imagem Docker como uma receita de bolo e o container Docker correspondente como um bolo acabado (Wiebels & Moreau, 2021). A receita contém as instruções para fazer o bolo, pode ser usada para fazer quantos bolos você quiser e pode ser compartilhada para permitir que outros façam o mesmo bolo.
7.3.3 Controle de Dependências
Por fim, temos as ferramentas de controle de ambiente como Conda e renv, que ajudam a gerenciar pacotes e dependências em ambientes de desenvolvimento, sem a necessidade de virtualização completa. Conda, por exemplo, gerencia pacotes, dependências e ambientes virtuais para linguagens como Python e R, permitindo criar ambientes isolados com versões específicas de pacotes e dependências. Já o renv é específico para projetos R, criando um ambiente de desenvolvimento reproduzível ao nível de pacotes.
Essas ferramentas oferecem a vantagem de menor sobrecarga de recursos e são fáceis de configurar e utilizar, promovendo a reprodutibilidade de ambientes de desenvolvimento para linguagens específicas. No entanto, oferecem menor isolamento comparado às VMs e containers e dependem da compatibilidade do sistema operacional e das versões dos pacotes. Por exemplo, o pacote renv (Wiebels & Moreau, 2021) gerencia dependências em R armazenando o código-fonte de todos os pacotes R usados em um projeto. No entanto, essa abordagem não lida com dependências do sistema ou dependências de outras linguagens de programação e pacotes de software.
7.4 Combinando Soluções: renv + Docker
A recomendação para os pesquisadores que desejem terem seus trabalhos transparentes e reprodutíveis é que eles entendam das duas últimas soluções: containers + renv no ambiente R. Na verdade, essas duas soluções devem caminhar juntas, pois no contexto da maioria dos workflows (pipelines) de pesquisa a construção de containers é facilitada pela aplicação correta dos pacotes de controle de ambiente (Conda, renv, etc.) (Moreau et al., 2023; Rodrigues, 2023).
O gerenciamento de dependências mitiga o problema da incompatibilidade, mas a contêinerização o resolve completamente (Wiebels & Moreau, 2021; Zandonella Callegher & Massidda, 2022). O controle de ambiente vai além ao criar ambientes computacionais completamente isolados que encapsulam não apenas os pacotes, mas também o sistema operacional e todas as suas configurações. O Rocker Project fornece imagens Docker prontas e otimizadas para usuários de R. Ao empacotar todo o ambiente de análise, o Docker garante que ele possa ser fielmente recriado por qualquer pessoa, em qualquer lugar, a qualquer momento, superando as limitações de soluções como o pacote renv do R.
7.4.1 O Pacote renv
O renv trabalha criando uma biblioteca de pacotes privada e específica do projeto (Rodrigues, 2023; Zandonella Callegher & Massidda, 2022). Quando você inicializa o renv em um projeto, ele cria um arquivo renv.lock que registra as versões exatas de todos os pacotes utilizados. Isso permite que outros pesquisadores, ou você mesmo no futuro, restaurem exatamente o mesmo ambiente de pacotes, garantindo que o código execute da mesma forma.
Principais funcionalidades do renv:
- Isolamento: Cada projeto tem sua própria biblioteca de pacotes, evitando conflitos entre projetos diferentes
- Reprodutibilidade: O arquivo
renv.lockdocumenta todas as versões de pacotes utilizadas - Portabilidade: Outros pesquisadores podem restaurar o ambiente exato usando
renv::restore() - Eficiência: Utiliza um cache global de pacotes, evitando downloads duplicados
Embora o renv registre a versão do R utilizada no projeto, ele não gerencia automaticamente a instalação dessa versão específica (Rodrigues, 2023). Além disso, fatores como sistema operacional, bibliotecas do sistema e compiladores podem afetar a reprodutibilidade dos resultados. É aqui que a combinação com Docker se torna essencial para garantir reprodutibilidade completa.
7.4.2 Docker Desktop para Pesquisadores
O Docker Desktop oferece uma interface gráfica (GUI) amigável para gerenciar containers, tornando-o ideal para pesquisadores com baixa literacia computacional. Através da GUI, é possível:
- Visualizar e gerenciar containers em execução
- Iniciar e parar containers com um clique
- Acessar logs e informações de containers
- Gerenciar imagens Docker
- Configurar recursos (CPU, memória) alocados para containers
Para pesquisadores em ciências sociais aplicadas, o Docker Desktop remove a necessidade de memorizar comandos complexos de linha de comando, permitindo focar no trabalho científico. A possibilidade de executar o RStudio dentro de um container através do navegador web oferece uma experiência familiar, mas com todas as garantias de reprodutibilidade que a contêinerização proporciona (Zandonella Callegher & Massidda, 2022).
7.5 Soluções em Nuvem
No entanto, a computação em nuvem também nos agraciou com outras soluções que facilitam a reprodutibilidade, transparência e colaboração em pesquisas empíricas. Plataformas de notebooks na nuvem como Google Colab e Posit Cloud (anteriormente conhecido como RStudio Cloud) permitem compartilhar notebooks rodando num mesmo hardware, mas os usuários precisam garantir que as dependências e versões de pacotes sejam corretamente especificadas e gerenciadas (Moreau et al., 2023).
No JupyterHub temos proposta parecida, mas ele nos dá um controle melhor sobre o ambiente, já que um administrador pode configurar e manter as dependências necessárias de um projeto colaborativo. O Binder é uma plataforma open-source que transforma repositórios Git em ambientes executáveis, focando principalmente em notebooks Jupyter. Ele facilita a execução de notebooks a partir de repositórios Git e garante que as dependências especificadas no repositório sejam instaladas, mas depende da configuração correta dos arquivos de dependências.
O Code Ocean e Nextjournal são soluções específicas para a reprodutibilidade de pesquisas científicas, focando na facilidade de uso e na acessibilidade para a comunidade acadêmica (Moreau et al., 2023). O Code Ocean permite que os cientistas agrupem código, dados, resultados, metadados e um ambiente computacional em um único lugar, chamado de “cápsula”, cujos resultados podem ser reproduzidos por qualquer pessoa num simples botão. O Nextjournal é uma plataforma de colaboração e publicação de notebooks interativos, que permite a execução de código em diferentes linguagens, como o Code Ocean, e a criação de artigos científicos interativos. Essas duas soluções oferecem um ambiente integrado, com interface gráfica intuitiva para configurar ambientes de desenvolvimento e execução, o que facilita para pesquisadores sem conhecimento técnico avançado. No entanto, são soluções comerciais e podem ter limitações em termos de recursos e personalização.
As soluções apresentadas sobrepostas à nuvem do lado direito na Figura 7.1 podem ser consideradas soluções intermediárias aos containers tradicionais, no sentido de que elas utilizam conteinerização para criar ambientes reprodutíveis, mas abstraem a complexidade técnica e fornecem interfaces mais amigáveis e específicas para a comunidade científica (Wiebels & Moreau, 2021). Elas são ideais para pesquisadores que buscam simplicidade e reprodutibilidade sem a necessidade de se aprofundar nos detalhes técnicos dos containers. Essas plataformas tornam a poderosa tecnologia de conteinerização acessível e aplicável ao contexto da pesquisa científica.
Podemos dizer que em termos de níveis de reprodutibilidade, Google Colab e Posit Cloud atendem a um nível básico, porque a reprodutibilidade pode ser limitada pela variabilidade das dependências das sessões e cabe ao usuário uma configuração cuidadosa dos pacotes e versões. Binder e JupyterHub fornecem um nível intermediário de reprodutibilidade, pois apesar de um melhor controle sobre o ambiente, requer configuração e manutenção adequadas das dependências. Por fim, Code Ocean e Nextjournal oferecem um alto nível de reprodutibilidade, pois são ambientes integrados para criar, executar e compartilhar projetos de pesquisa reprodutíveis (Moreau et al., 2023).
7.6 ARTE: Implementando Reprodutibilidade Completa
O template ARTE (Article Reproducibility Template Environment), disponível em https://github.com/phdpablo/article-template, operacionaliza os princípios de CA utilizando as tecnologias apresentadas neste módulo (Limongi & Rogers, 2025a, 2025b; Rogers & Limongi, 2025). O ARTE é uma concepção metodológica desenvolvida para ser um ecossistema que integra ferramentas dedicadas, padrões da comunidade e atende aos cinco pilares da reprodutibilidade computacional.
Na base do template está a adoção do protocolo TIER, um padrão da comunidade para organização de projetos de pesquisa. O ARTE foi projetado para acomodar um espectro de práticas de reprodutibilidade (Rogers & Limongi, 2025). A reprodutibilidade mínima (TIER Protocol 4.0 + OSF) foi apresentada no módulo 4. A reprodutibilidade adequada (+ Git/Gitub + RStudio + Quarto + renv) foi abordada nos módulos 5 e 6. Nesse módulo discutiremos a proposta de reprodutibilidade completa (+ Docker) do ARTE.
O padrão ouro da reprodutibilidade utiliza tecnologia de conteinerização, como Docker, para encapsular todo o ambiente computacional (sistema operacional, versões de software e todas as dependências). Isso garante que a análise execute da mesma forma em qualquer máquina, a qualquer momento (Rogers & Limongi, 2025). A adoção dessa opção garante reprodutibilidade computacional completa.
O ARTE facilita a implementação desse nível mais alto de reprodutibilidade através de scripts start.bat e stop.bat (no Windows) ou start.sh e stop.sh (no Linux/Mac) que automatizam o processo de criação e execução do container. Esses scripts utilizam o Dockerfile e docker-compose.yml incluídos no template, que definem o ambiente computacional completo necessário para o projeto.
7.7 Preparação para a Aula
Antes da aula síncrona, certifique-se de completar todos os passos abaixo. Vídeos com instruções detalhadas estão disponíveis na página de pré-trabalho do curso.
Checklist de Preparação:
- ✅ Instalar e configurar o Git no seu computador
- ✅ Criar conta no GitHub e configurar credenciais no RStudio
- ✅ Verificar instalação do RStudio
- ✅ Instalar o Docker Desktop e verificar que está executando corretamente
- ✅ Familiarizar-se com a interface do Docker Desktop (Opcional)
- ✅ Explorar o repositório do ARTE e sua documentação (Opcional)
Nota importante: A instalação do Docker Desktop pode levar algum tempo e, em alguns sistemas Windows, pode requerer habilitação de recursos de virtualização no BIOS. Certifique-se de realizar essas configurações com antecedência.
