On Wednesday evening, ZFS founding developer Matthew Ahrens submitted what should have been a simple, non-controversial pull request to the OpenZFS project: wherever possible without causing technical issues, the patch removed references to “slaves” and replaced them with “dependents.”
This patch in question doesn’t change the way the code functions—it simply changes variable names in a way that brings them in conformance with Linux upstream device-mapper terminology, in 48 total lines of code (42 removed and 48 added; with one comment block expanded slightly to be more descriptive).
But this being the Internet, unfortunately, outraged naysayers descended on the pull request, and the comments were quickly closed to non-contributors. I first became aware of this as the moderator of the r/zfs subreddit where the overflow spilled once comments on the PR itself were no longer possible.
Updating terminology is technically sound
There are several valid answers to the “Why patch?” question. For those who refuse to think of anything but clarity, there is no good descriptive relationship between any technology and human slavery—and the human term far predates any engineering or technical use. Replacing “master/slave” terminology generally results in a more precise, easily discoverable technical description.
OpenZFS is not on the leading edge of this disambiguation effort. Some notable projects which have discarded and replaced master/slave terminology include the BIND DNS server, Drupal Web application framework, and Redis datastore. It is particularly telling that, although all three projects used the same original “master/slave” terms, the replacements were different. That’s because the actual relationship described is different in each project, and so the most sensible replacement for the same original term is different for each project.
For the BIND DNS server, the Internet Systems Consortium replaced master/slave with primary/secondary. For Drupal, the replacement is primary/replica, and for Redis, it’s leader/follower. The different replacement terms exist because the real functions are different—and the replacement for the original terminology is therefore more descriptive of what’s actually happening underneath the hood.
Similar historical updates
As mentioned previously, OpenZFS is by no means the first project to update its codebase and documentation to remove references to slavery. Although complaints about master/slave terminology circulated at least as far back as the 1990s, the first large mainstream American exposure came from Los Angeles in 2003, where a black employee of the county filed a complaint concerning master/slave labels on videotape devices.
In addition to specific terminology updates in specific projects, the IETF (Internet Engineering Task Force) published a memo in 2018 acknowledging and outlining the problem and offering specific alternatives to both master/slave and blacklist/whitelist terminology.
Motivation and context
While technical accuracy and precedent are valid reasons to remove master/slave terminology from a codebase, they are of course not the only reason. Ahrens’ own pull request describes this eloquently enough:
The horrible effects of human slavery continue to impact society. The casual use of the term “slave” in computer software is an unnecessary reference to a painful human experience.
There should be nothing controversial about this, even if this were a drive-by pull request from a first-time contributor. Ahrens, of course, is anything but—he was one of the three founding Sun Microsystems ZFS developers beginning in 2001, and he remains a lead developer of the OpenZFS project today.
More importantly, it should be obvious that one person’s impervious reaction to casual slavery-based analogies does not negate another person’s experiences with slavery’s historical reality and its ongoing generational effects.
Ahrens’ pull request has been reviewed by fellow lead developers Brian Behlendorf and Ryan Moeller and merged into the OpenZFS project repository.