Pivotal's post for reference: https://content.pivotal.io/blog/peace-of-mind-for-developers...
They can be written in any language. I have personally worked on buildpacks written in bash, golang, ruby, python and I forget what else.
> Heroku makes a big deal about them, but most Unix people have similar things floating around in ~/bin.
I don't know that I agree. Could you elaborate a bit?
They're useful, but they're not an 'invention' or a 'technology' any more than any other bootstrap shell script is.
Where do they fit into packaging picture?
How do they compare to (1) VMWare images (2) Docker images (3) Debian packages? And when would you use them instead of one of these.
I think the Onsi Haiku is still the best description:
Here is my source code.
Run it on the cloud for me.
I do not care how.
Heroku invented this, it's been picked up by lots of other groups (including for Cloud Foundry -- I've worked on buildpacks for Pivotal in that regard).> (1) VMWare images (2) Docker images
You have to build these yourselves. The boundary is your CI system, Dockerfile etc -- which you have to maintain. Buildpacks provide a curated, managed, easily upgraded system that does this for you.
> (3) Debian packages?
These are, in some sense, on the far side of where Buildpacks sit. But also slightly different. A debian package is intended to land in a pluripotent environment, possibly under direct human supervision. A Buildpack is meant to build completely self-contained runnable images, starting from sourcecode.
So buildpacks are like Debian source packages?
It's a package of my .c files, and the consumer runs $(CC) to compile and run those and It Just Works?
It's a script. It might use packages, it might not. It builds a box with whatever runtime is necessary to run your app. It's not a new technology. The resultant image could be a container or any other kind of imaging format.
Here's the node one. It's a shell script. It sets up node. You probably already had it before you knew what a build pack was:
https://github.com/buildpack/samples/blob/master/nodejs-buil...
A current v2b NodeJS buildpack can be found here: https://github.com/cloudfoundry/nodejs-buildpack
A current work-in-progress Java buildpack: https://github.com/projectriff/riff-buildpack
I've worked on Buildpacks fulltime twice now for Pivotal.
I've seen things you people wouldn't believe. Package systems on fire off the shoulder of Orion. I watched C-compilers glitter in the dark near the obscure Nokogiri-interacting-with-stray-environment-variables-if-you're-using-a-slightly-too-old-SQLite-and-the-symlink-is-broken-due-to-an-upstream-bug-that-wasn't-fixed-because-nobody-realised-this-would-happen gate.
But unlike the shell script, these moments will not be lost in time like rain. They will be shipped reliably, repeatably into production by two professional organisations prepared to assign more than a dozen engineers, watch hundreds of upstream dependencies, invest in millions of dollars of automation, test against thousands of distinct applications with tens of thousands of running containers serving billions of requests per day across multiple customers in multiple countries.
I invite you to maintain a nodejs buildpack yourself. Prove us all wrong.