Packaging has always been a critical topic in IT. Its purpose is to address fundamental software management objectives: Continuous Testing, Continuous Delivery/Deployment, and Continuous Integration. Historically, we rely on package management systems of varying complexity to handle dependencies, build software, and package the resulting artifacts (compressed if necessary), along with integration scripts, dependency manifests, and digital signatures.
Over time, as modern programming languages evolved, we’ve seen the rise of language-specific build tools that offer rudimentary dependency management, delivery, and integration capabilities. Examples include (in no particular order):
- CPAN (Perl)
- CRAN (R)
- Maven and related tools (Java)
- PyPI (Python)