After the murder of George Floyd at the hands of a Minneapolis police officer, a global wave of protests has emerged in response. In the US, activists are calling for the abolition of the police and prison system that has been used to control and subjugate black and brown bodies to punishment and death. In both the US and Europe protestors are defacing and toppling statues of slave traders, Confederate generals, and other colonial oppressors. So one unique thing about the current situation is that the protests are rooted in a historical consciousness. That is, it is not merely about a single unjust killing at the hands of an institution that has a monopology on state violence. Rather, protestors are connecting this single instance to a larger web of the history of the stateand capitalist enterprise instead of the simulacra presented in televised and general media.

Because of this engagement with the history of subjugation it is naturally sparking a lot of second order conversations about a multitude of topics. Within the tech space a natural inquiry is about the appropriateness of the language of “master” and “slave” to describe abstract relationships among machines and data structures. I have mostly seen this discussion play out around the term “master branch” in git.

I have always found the term “master” used in relation to git quite odd. Git relies on a tree data structure (hence the term branches), and each commit is a node that points to other nodes in the tree. As such the term master never felt like a good metaphor. After all, the whole point of git was allowing a bunch of collaboration that could happen freely without careful supervision by some leader. There is no head of household here. Some point out that the term is derived from master tapes in a film or audio context. However even if this is true (and it is not clear that it is) that nonetheless begs the question of what the metaphor means in that context. So we haven’t escaped the question of the historical relationships we are using as metaphors for our data structures.

There is also a question about how easy it is to make this type of change, and whether it is even worth doing. I don’t think these arguments are always made in good faith, however there is something to them. If making a change can’t happen with the snap of a finger, it is fair to ask if it is a good use of one’s time. After all, providing material support to oppressed communities is a vastly better use of resources than changing a name that evokes an ugly part of hisgtory, but perhaps does not perpetuate it. And in the case of git, manually changing the default branch is not a trivial task. André Arko wrote up a blog piece about the implementation of the master branch, and how to change it.

Thankfully a kind soul has created a tool in Node to make this easy. GitHub Default Branch makes it as simple as entering a single command line with your GitHub Access Token provided as a environmental variable to change the default branch from master to main. I have started making this change to several of my open source repos, and so far haven’t run into any issues with the history or anything like that. So I will probably be using this for the rest of my repos going forward.

One exception, unfortunately, is this blog. At this time user pages for GitHub pages must use master as the publishing branch. I know it is possible to change it for other types of GitHub pages, so I hope the ability to make this change is available in the future.

There are other larger questions surrounding the change of names used in abstractions. Computer science operates as a subdomain of economics because it is principally concerned with the efficient allocation of resources (Big O notation and all of that). If we are concerned about human liberation, we have to think about questions about how we define relationships, and then how those relationships are used in our abstractions. The master-slave relationship is a type of relationship that evolves from the lord-serf relationship, but in a different mode of production (from a feudal economy to an industrial capitalist one). A competing relationship to master-slave was boss-worker. And we can see the boss-worker relationship used for example when we talk about JavaScript threads where there is the main thread, and then worker threads. So is main a sort of euphimism for boss? We have to think about what we are trying to say here because behind the everyday language that we use there are also hidden some more difficult to understand things. After the abolition of the chattel slavery system in the United States for example, we should not say that black people in the US were then liberated. In the Reconstruction era former enslaved people became resubjugated to servitude, only this time via excessively harsh contract laws rather than statutory laws (to read more about this I recommend Richard White’s excellent book The Republic for Which It Stands: The United States During Reconstruction and the Gilded Age, 1865-1896). And so the boss-worker relationship also represents a type of servitude that can be expressed as between people that have money and people that need money. And then there is the warden-prisoner relationship, and the increasing reliance on prisons as sources of cheap labor. In all these relationships we see echoes of the past, and so now we turn to the question of how to overturn them.

July 27, 2020 UPDATE: The latest version of git (v2.28) now has a config setting that allows you to create a default branch name .e.g. git config --global init.defaultBranch main. You can read more about it over on the github blog.