Explaining Reproducible Builds

Reproducible Builds is the sort of idea, that once I started to grok it, I started thinking about how I would explain it to others.

Luckily, I work in a place where, every quarter, there’s a chance to give a lightning talk, or short presentation. The audience is generally tech-savvy, but only some people are part of systems management, devops, or related disciplines where they have probably already encountered the idea. Here’s what I came up with:


We have some interesting security restrictions at work. On particular requirement is that we can’t have an administrative interface exposed on our public web servers. For WordPress (which powers most of consumerfinance.gov) we use a firewall to block access to sensitive URL’s, and RAMP to push content from a separate staging server.

The non-Wordpress parts of our site are powered by Django. We wanted (and couldn’t find) something like RAMP for Django. So, we built it. It’s called Nudge (named by Josh, who wrote much of the code).

Much of the actual hard work is offloaded to the excellent django-reversion, which handles tracking changes in objects. What Nudge adds is the ability to package up a set of changes (a “batch”, terminology borrowed from RAMP) , and move those changes between servers. Thanks to the design of reversion, this works nicely for new objects, changes, and even deletions.

Nudge is released into the public domain– if you have ideas, problems, or questions, let us know, or fork away!