It remains a common practice in database systems today to refer to configurations where one database is a source of truth, and another database is a replica that follows the state of the source of truth database as a “master/slave” configuration.
Use of this term is problematic. It references slavery to convey meaning about the relationship between two entities. The term “slave” is used because one system is controlling the state of the other system.
Using these terms like this is cavalier. It downplays slavery and the massive human suffering it causes. By having an everyday use for the term “slave” we normalize the concept of having things called “slaves” and it desensitizes us to the seriousness of slavery. More importantly, the casual use of the term may be an unwelcome daily presence in the life of a person of color, for whom slavery has great personal significance.
There are better, more precise terms we can use instead. We can use the terms primary and replica or leader and follower, or primary and standby. These terms are clearer about meaning; you can infer that a replica is a copy of a database but without context you can’t know that slave means the same.
‘Master/slave’ isn’t even a good metaphor, unless I’m missing the historical example where slaves lived a life identical to their master’s with sub-second delays just in case one of them suddenly needed to step in and replace the master if he died…
— Sam Livingston-Gray (@geeksam) September 7, 2018
Unfortunately, many recent pitches to improve terminology in open-source projects reveal a vocal contingent of community members who remain strangely attached to continuing to using the terms master and slave. In fact, some even get downright annoyed.
Let’s explore some common rationalizations and see if they hold up to scrutiny. The quotes I’m about to share have been pulled from actual pull requests and mailing lists, with light paraphrasing:
The term ‘slave’ is a proper term to refer to database replicas!
or its variant
The term ‘slave’ has been used to mean this for decades.
or another variant
The correct terms are master and slave. They’ve been used in databases, hardware setup, server setups, and god knows what else for god knows how long
These are examples of the logical fallacy of begging the question; they essentially amount to saying that it’s okay to use the term because the term is okay to use.
And while it is true that there has been legacy use of the term slave as a technical term, “we’ve always done it this way” is not a compelling argument to continue doing it this way.
In fact, there are many things we’ve used for decades in tech that have fallen out of favor once we found better alternatives:
Having a history of using bad terms for things is not an obligation to keep doing it.
Let’s visit another:
master/slave is used by every database server, in every documentation
Ah, the appeal to the majority fallacy!
Not only is this a weak argument for something, it’s also not true. IBM, Microsoft, Engine Yard, Amazon Web Services, Heroku, ACM, Python, Django, Drupal and MediaWiki are all using primary and replica in their documentation. source
I’m a very progressive person, and I reject racism in all its forms!
This attempts to hijack the discussion. We’re not discussing how progressive you are or what your stance is on racism; we’re discussing the appropriateness of a term with racial undertones in software. Also, “I reject racism” is a tough sell when the context of that statement is “I want to keep using master/slave nomenclature.”
There is actual slavery going on in the world right now; why don’t you focus on that?
This is a classic case of whataboutism. If I was at a restaurant and told the waiter that I never got my salad, it wouldn’t be appropriate for the waiter to respond “But there are starving children!” The waiter is making a perfectly true statement, but it doesn’t matter; they still made a mistake in forgetting your salad, and while that is a much less severe mistake than letting children starve, they should still correct it.
Another example of ‘political correctness’ run amok!
I especially appreciate the irony of the people who complain about what they refer to as “PC culture,” because the complaint itself is code for “I am upset that I can’t say things that people find insensitive.” And of course saying that outright comes off a bit harsh, so you find a more… politically correct way of saying it. Hmm!
When you cry “language policing” and “PC culture” when you’re asked to remove problematic language, you may not personally hold values of white supremacy, but actual white supremacists are certainly looking for signals that they’re welcome in a community, and complaints about “political correctness” are such a signal.
This remains problematic even today. The maintainer of popular in-memory database Redis published a blog post explaining why he planned to keep Redis’s problematic master/slave terminology to refer to primary and replica databases. He changed his mind on the topic after some gentle persuasion from DHH (creator of Rails) and after polling users on how they felt about it. Python recently made moves to reduce the use of the term “slave” as well.
These are both positive developments, and I applaud the maintainers for making these decisions. It’s still alarming to see people comment in mailing lists and pull requests speaking out against these changes. It’s important to call out their fallacies, and to tell maintainers that this is important to our community.
Racism today starts off a lot more subtle than it used to be because of the hard work people have put in to make racism feel unwelcome. As programmers, our day to day work doesn’t typically present us with opportunities to take a stand against racism. Situations like this are opportunities to be the change we want to see. When you get that opportunity and you don’t act, or even worse, you defend the status quo, what difference does it make if you personally don’t consider yourself to be racist? Your inaction has the same effect regardless.
Treat problematic terminology as technical debt. When you learn that you have it in your projects, make it a priority to remove it.