Such Great Heights — An Open Source Story
A Brief History of Porter, a CNCF project
Average Colorado Mountain Photo — because mountains tall
Porter was built to solve developer’s problems using Dockerfiles — as they can be esoteric and difficult to create and maintain. Porter focuses on leveraging bundles that make containers into immutable, structured, isolated workflows, and these workflows act as any other container being stored in any OCI registry.
Porter was built by Microsoft engineers Jeremy Rickard and Carolyn Van Slyck. The project was built true to open source values of being simple, flexible, and avoiding Azure-specific features to give it a truly cloud native featureset. Porter is a “bundle installer”, which implements the Cloud Native Application Bundle (CNAB) specification.
The CNAB specification, which provides an extension of the capabilities of artifacts, currently Open Container Initiative (OCI) artifacts, was influenced by Mark Russinovich, Gabe Morey & Matt Butcher.
Note: Long term the CNAB specification, touched on below, is not solely container specific. It’s just what we got right now.
Butcher and the CNAB community originally worked on CNAB by creating a tool named Duffle. Duffle was a reference implementation of a CNAB (Bundle) installer. According to several on the project, it was an early implementation that required users to build their own bundle invocation images. It required container knowledge that not everyone would have, which limited the uptake to container specialists.
But there were other challenges, particularly resources. As Butcher remembers, “We archived Duffle mainly because nobody was actively working on it for a few months. That team had been re-allocated to Hydra at that point (what is now OAM)”. Without those who had originally created Duffle, the project stopped moving forward despite the potential.
During this time Jeremy & Carolyn wanted to attempt a different approach to a Bundle Installer, and Porter was created. Porter takes the workflow as you’ve made it, whether it be a handful of shell scripts, or your Terraform>Python>Ansible workflow, and guides this workflow into a YAML specification (Porter Bundle). This lets Porter do the Dockerfile mastery for you. Porter’s main problem, which is also its main strength, is how un-opinionated and flexible it is, allowing you to take your workflow as it is and make it into a reproducible, version controlled artifact.
Ralph Squillace, project manager as well as someone who is doing everything, everywhere, all at once, said, “Porter is made to be easy to understand and OBVIOUS. Devs have trouble following READMEs — we need to be UX friendly”.
The beginning of Porter was the time it received the most traction. It had support from engineering and engineering leadership from within Microsoft and even external companies. This traction led to Porter talks at HashiConf EU, which attracted many EU-focused Porter adopters. It was also the only time Porter had more than two paid full time developers.
This support was not long lived, as priorities internally at Microsoft shifted. Headcount was reduced, and Porter ran on a skeleton crew. The pandemic came, stopping talks about Porter, as well as contributions from partnered companies.
Carolyn kept the project alive acting as developer advocate, principal engineer, core maintainer of the project, project manager, and an active participant CNCF TAGs. Despite all odds, Porter continued to slowly gain traction and a handful of adopters. Internally at Microsoft, quiet adoption continued throughout the company, and externally large consulting firms leveraged bundles to recreate customer environments.
Today, Porter still runs with reduced headcount, nonetheless it continues to gain interest by being present in the open source community.
This is where we would tie up this story with a nice bow, and a happy ending. But, we are still writing our story.
We’re always welcoming new contributors from all backgrounds, and hope to see you at our biweekly Thursday community call, or in our CNCF slack channel (#porter).