Relation to container and module infrastructure

Reproducible software management and distribution is enhanced by other current technologies. Conda integrates well with environment modules (http://modules.sourceforge.net/), a technology used nearly universally across HPC systems. An administrator can use Conda to easily define environment modules or use Conda itself as an environment manager in order to maintain software stacks for multiple labs and project-specific configurations. Another approach to reproducibility is to use containers, popularized by Docker, which provide a way to publish an entire software stack down to the operating system. They provide greater isolation and control over the environment that software is executed in, but at the expense of some customizability. Conda complements container-based approaches. Where flexibility is needed, Conda packages can be installed directly on the system. Where the uniformity of containers is required, Conda can be used to build images, avoiding the nuanced installation steps that would ordinarily be required to build and install software within an image. In fact, for each Bioconda package, our build system automatically builds a minimal Docker image containing that package and its dependencies, which is subsequently uploaded and made available via the Biocontainers project \cite{28379341}. As a consequence, every built Bioconda package is available not only for installation via Conda, but also as a container via Docker, Rkt (https://coreos.com/rkt), and Singularity \cite{Kurtzer_2017}, such that the desired level of reproducibility can be chosen freely \cite{Gr_ning_2017}.

Software management with Conda

Via the Conda package manager, installing software from Bioconda becomes very simple. In the following, we describe the basic functionality (see Fig. \ref{491724}f) assuming that the user has access to a Linux or macOS terminal. After installing Conda (https://conda.io/miniconda.html), the first step is to set up the Bioconda channel via: