provides a set of features ▸ Libraries, System Calls, Packages, etc. ▸ Your (internally developed) application requires a set of features ▸ Libraries, System Calls, Packages, etc. ▸ Decouple your application from the OS for more flexibility
is for George, and I loathe that name. I go by Cliff ▸ married: 0 kids, 2 dogs, 4 nieces, 3 nephews ▸ Highly opinionated // practically agnostic ▸ My day job: ▸ putting things in the cloud ▸ deploying software all day ▸ building CI/CD pipelines ▸ automating all the things
▸ Package your app “natively” as an RPM, .DEB, .Pac, etc ▸ Package your app as a runtime package: Ruby Gem, Lua Rock, Python Egg, etc. ▸ Use a Makefile, Maven, Ant, etc. ▸ Use Puppet, Chef, Ansible, SaltStak, Tivoli, Bladelogic
top of the facilities provided by your Operating System you could be locking yourself into an echo system that doesn’t meet the needs of your application and/or customers.
can upgrade your OS and Packages without worrying about breaking dependencies for your application ▸ You can create multiple application silos that contain conflicting libraries, tools, etc. ▸ Deployments can be standardized across multiple Operating Systems making it easy to migrate from platform to platform ▸ You can isolate exposure to security flaws in underlying libraries ▸ The features of your application can develop at your pace not the pace of your OS’s package maintainers ▸ You still have access to all of your system packages
choice of binary or source builds or a mix of the two ▸ It’s easy to get setup ▸ multiple PREFIX’s allow for easy peer installations ▸ Simple straightforward process to package your application ▸ Easy to fork the repository and add the dependencies you need ▸ Unprivileged operation