Reproducible Dependency Management
Software stacks have become complex, with the dependencies of some applications numbering in the hundreds. Packaging, distributing, and administering software stacks of that scale is a complex undertaking anywhere. In increasingly heterogenous architectures today’s systems deal with esoteric compilers, hardware, and a panoply of uncommon combinations. We explore the mechanisms available for packaging software to find its own dependencies in the context of a taxonomy of software distribution, and discuss their benefits and pitfalls. A goal of this project is to make builds reproducible and portable and performance-optimized, removing a key barrier to entry for the next generation of computer experimentalists in class rooms and in research labs.