AUTONOMOUS APPLICATION DELIVERY
FASTER MORE RELIABLE
RELEASE MANAGEMENT
LETS CLARIFY
WHAT IS AUTONOMOUS APPLICATION DELIVERY?
Your OS 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
MAKE SENSE
NOW?
ABOUT ME
[email protected]
A BIT ABOUT ME [email protected]
G. CLIFFORD WILLIAMS
G. 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
ENOUGH ABOUT
ME
UNDERSTANDING
THE PROBLEM
YOUR APPLICATION
OPERATING SYSTEM
YOUR APPLICATION
OPERATING SYSTEM
IF ONLY IT WERE
THAT SIMPLE
KERNEL
LIB C
KERNEL
USERLAND UTILITIES
LIB C
KERNEL
PACKAGES
USERLAND UTILITIES
LIB C
KERNEL
YOUR APPLICATION
PACKAGES
USERLAND UTILITIES
LIB C
KERNEL
YOUR APPLICATION
OPERATING SYSTEM
YOUR APPLICATION
OPERATING SYSTEM YOUR APPLICATION
OPERATING SYSTEM
WHAT HAPPENS
WHEN YOU UPGRADE?
WHAT HAPPENS WHEN YOU UPGRADE?
AFTER AN UPGRADE OF THE OS OR PACKAGES
Maybe your application breaks
rework your code
backtrack/downgrade
Maybe its fine
WHY WOULD MY APPLICATION BREAK AFTER AN UPGRADE?
Different versions of libraries
Security fix forcing an incompatible application or library
change
General Deprecations
WHAT HAPPENS WHEN YOU
NEED SOMETHING DIFFERENT,
NEWER, OR THAT CONFLICTS?
DIFFERENT OR NEWER
Maybe theres a private repository you can add/use
Maybe you can download and compile it yourself
Maybe you can reach out to the package maintainer and
get them to bump the version
SOMETHING THAT CONFLICTS
Chroot / Containers
Environment Manager: VirtualEnv (python), RVM (Ruby),
${JAVA_HOME}, ${LUA_PATH}, etc.
Wait
AND WHAT ABOUT HOW
YOURE DEPLOYING YOUR
CODE?
WAYS TO DEPLOY
Ship a tarball and extract it
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
THE PROBLEM STATEMENT
When you build your application on top of the facilities
provided by your Operating System you could be locking
yourself into an echo system that doesnt meet the needs
of your application and/or customers.
THE SOLUTION
Build your applications to be independent of the
underlying OS and its packages
KERNEL
LIB C
KERNEL
USERLAND UTILITIES
LIB C
KERNEL
SYSTEM PACKAGES APPLICATION DEPENDENCIES
USERLAND UTILITIES
LIB C
KERNEL
YOUR APPLICATION
SYSTEM PACKAGES APPLICATION DEPENDENCIES
USERLAND UTILITIES
LIB C
KERNEL
YOUR YOUR OTHER
APPLICATION APPLICATION
APPLICATION OTHER APPLICATION
SYSTEM PACKAGES DEPENDENCIES DEPENDENCIES
USERLAND UTILITIES
LIB C
KERNEL
HOW DOES THIS
HELP?
BENEFITS OF THIS APPROACH
Application Autonomy meaning you 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 OSs package maintainers
You still have access to all of your system packages
SOUNDS GREAT! HOW
DO I GET STARTED?
HOW TO GET STARTED
FRAMEWORKS THAT ALLOW AUTONOMOUS APPLICATION DELIVERY
PkgSrc - https://www.pkgsrc.org
OpenPkg - https://www.openpkg.org
Nix - https://nixos.org/nix/
PKGSRC
WHY I PREFER PKGSRC
1700+ Packages
Your choice of binary or source builds or a mix of the two
Its easy to get setup
multiple PREFIXs 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
PKGSRC
PORTABILITY
FreeBSD MirOS
Darwin/MacOS Haiku
NetBSD
AIX
OpenBSD
QNX
DragonFlyBSD
HP-UX
Illumos / Nexenta /
SmartOS Linux
Minix Cygwin
OK SO WHATS IT
LOOK LIKE?
WHATS IT LOOK LIKE
#installing/bootstrapping pkgsrc
git clone https://github.com/jsonn/pkgsrc.git
cd pkgsrc/bootstrap
./bootstrap
#building a package
cd pkgsrc/devel/memcached
make install clean
QUESTIONS???