git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Rename offensive terminology (master)

From
Andrew Ardill <andrew.ardill@gmail.com>
Date
Jun 15, 2020, 03:52 UTC
Message-ID
<CAH5451n7e39ZCM4iJ4Ry=g7QkVYwFL-a=9CTVOifp+rcvb5i_g@mail.gmail.com>
In-Reply-To
<CAGA3LAfqzBsn91YTYaCT5y9XLeNLY_0B_7b1f3fdc6X4JOU81A@mail.gmail.com>

[apologies to those cc'd, thought I had plaintext on but obviously not so resending]

Hey, I got linked to this thread! Been following along since the beginning but only engaged on twitter so far.

To put the important stuff first: I believe the historical usage of the word is mostly irrelevant for understanding how a word is used today, and more importantly when deciding if we should continue using it. For this specific issue, I think if it's possible to have no default branch name (have the user name it when creating the repository) that is the best option; if there has to be a default branch name then let it be configurable and default to whatever the community wants to default to (which to date seems to be 'main').

On the history of how 'master' came to be used as the git default branch, and the history of how it has been used historically, there are a few things (and please note I do think this is irrelevant in the context of what the git default branch should be - this was originally a deep dive simply because I was interested).

First up, there are definitely usages from around the time git was created of the "Master and Slave" paradigm within the context of source control management, for example [0]. It seems like CVS also used the "Master and Slave" terminology when referencing repository management, but I haven't looked into that in particular [1] (the main branch is called trunk though).

The thing is, there are also a lot of usages that use the "Master Copy" paradigm, and when it comes to BitKeeper there are a lot more of this kind of usage than the "Master and Slave" usage. Perhaps the most authoritative I have found is the BitKeeper book, which says "shared master repository, private per user working repositories" [13].

The GNOME mailing list thread that is used as a starting point for this argument makes a lot of tenuous links, links I don't think hold up when looking at the full context. I'll try and address a few parts of this argument but again, this is just a bit of history I find interesting rather than an important consideration for changing git today.

Even if git borrowed 'master' from BitKeeper AND BitKeeper used it in a "Master and Slave" fashion, that doesn't mean that the person introducing it to git was using it in a "Master and Slave" fashion, nor that everyone else in git used it in a "Master and Slave" fashion. The best way to find that out would be to ask people who were there (for when it was introduced) and people who use it today (for how it has been used since then). Anecdotally, I have never seen anyone associate the master branch in git with anything except a "Master Copy" (or "Gold Master") EXCEPT when following that GNOME link [5]. I wasn't there at the time, so if anyone was would love to hear your input.

How likely is it that git borrowed the concept directly from BitKeeper, as opposed to some CVS usage or simply general usage? The first point made in the GNOME post is that 'master' was introduced with a CVS helper script [2]. Here is the snippet:

>    src_branch = *ancestor ? ancestor : branch;
>    if (!strcmp(src_branch, "HEAD"))
>        src_branch = "master";
They then claim that this usage of master is
> Probably because BitKeeper uses "master" for its main branch"

It's just as likely that the 'master' usage was common in the industry (for example, as stated in [0], which actually lends support for the "Master and Slave" usage in the industry), but let's go with it being copied from BitKeeper - what then was the usage in BitKeeper like?

The term 'master' is very common in the source and documentation of BitKeeper, but repositories are not explicitly named in BitKeeper so these usages are either referring to the machine the repository is on, a conceptual name in a workflow, or some non-repository related meaning.

For example @jpaulreed on twitter found a usage which is the "default config value for... what to call the repository displayed by the Bitkeeper HTTP server" [3]. You can see where it is used at [3.1]. (as an aside, a lot of that thread is showing usages of 'master repository' in BitKeeper, as opposed to "Master and Slave" usages, which I think is due to me not being clear about the point I was trying to make re "Master and Slave" vs "Master Copy").

The term 'slave' is somewhat common in BitKeepers source, though most usages are in the Tcl/Tk gui code so not relevant to this discussion. The ones that are relevant are talking about a slave machine (and the repository on that machine) as per [6], and a 'slave' comment in a test [6.1] (again found by @jpaulreed [4]).

In this HOWTO.ask file the terms 'master repository' and 'slave repository' are used quite a bit, but always in reference to the repositories sitting on the master and slave machines in the example. In other sections of this document, when talking about developers modifying the code, the terms 'Master' and 'WorkArea' are used instead. Indeed, as far as I can tell, all other usages of 'master' to refer to a repository in the docs are used in this way or are ambiguous about the usage.

Below I summarise all usages of 'master' in BitKeeper, apologies for the verbosity but I found it hard to do this on twitter, so I am listing them here (after my conclusion).

My conclusion?

Of all the usages of master in BitKeeper, the overwhelming majority of them are of the "Master Copy" variant, consistent with how I and many other people I have seen comment understand gits usage of the term master.

To reiterate my point at the top - I believe this information is irrelevant when deciding what git should do now, and my preference would be to have no default at all.

Examples that use the word slave:
- a repository on a slave machine (note the master-copy usage is also
used here) [5]
- a slave comment in t.automerge [6]
Examples that are consistent with a "Master Copy" usage of the word
master, and not a "Master and Slave" usage are:
- in the airgap docs [7] there are two masters, and 'Work Spaces' to
modify the code in them
- notes on binpool reference local and remote masters [8]
- bk-Howto-bkd has example code for cloning master to '~/my-tree' [9]
- quickstart docs has similar example to bk-Howto-bkd and additionally
talks about a master and a clone [10]
- the bam-pull test talks about a master and clone [11]
- bk-csetprune uses main as a synonym for master, and additionally
talks about cloning into 'src' and 'docs' repositories (splitting a
master repo into two) [12]
- the BitKeeper book, which says "shared master repository, private
per user working repositories" [13]
- trigger-master and trigger-copy repositories in t.resolve [14]
- in t.bam-clean, a master repository and its copy and a 'clean' clone [15]
- in t.bam2, a master and its clones [16]
- in-bk-config-etc "the location from which source can be cloned" [17]
- in t.checksum, cloning from a master to a 'client' repository [18]
- in bk-bkd, pushing from 'myrepo' to the master [19]
- in t.nested-attach, names used are 'project', 'copy', and 'master' [20]
- tag-master and tag-copy in t.csetprune [21]
- release notes for 4.x talking about multiple parents - local master
and remote master [22]
- in t.bam, tests referring to 'servmaster', 'someclient', and
'servmaster.copy' [23]
- in bkmsg.doc create a master repository for a package, then clone
into 'my_workarea' [24]
Other repository usages that talk about a master but are not
explicitly "master copy" or repository usage:
- bk-bkscc uses top-level as a synonym for master when talking about
Makefiles, and also talks about Master repositories but doesn't really
talk about relationships between repositories at all [25]
- event-stack propagation talks about master repositories, and appears
to imply a master-copy usage, but it's not clear [26]
- the 'Master repository' as listed in the webserver, no reference to
clones/copies/slaves or anything else [27]
- test for the webserver configvar master [28]
- when discussing rcloning, discusses multiple 'masters' but doesn't
really reference non-master repos [29]
Git related usages of master:
- in bk-fast-export [30]
- git usages in bk-fast-import [31]
- git usages in doGitExport.sh [32]
- in git2bk [33]
- in t.git-exporter [34]
- seems to be git related in fast-export.c [35]
- in release notes for 7.3.1ce introducing bk fast-export --standalone mode [36]
Other, non-repository usages:
- as discussed above, lots of Tcl/Tk gui code
- notes on DAEMON is a bit ambiguous, but no slave references or
implications [37]
- gnu patch talking about where the 'master source' for its code lives [38]
- crank.sh talking about a 'master template' [39]
- in bk-patch [40], gnu/patch/patch.man [41], and gnu/patch/pch.c
[42], references to an 'SC master' which are references to an SCSS
master
- release notes for 4.x referring to a 'master lease server'
(synonymous with authoritative) [43]
- in tomcrypt/DoxyFile references to "the master .chm file" [44]
- 'mastering' perl regular expressions [45]
Regards,
Andrew Ardill

[0] https://www.google.com/books/edition/Open_Sources_2_0/q9GnNrq3e5EC?hl=en&gbpv=1&pg=PA29 [1] https://twitter.com/hadessuk/status/1271487243950206978 [2] https://github.com/git/git/commit/3e91311ae750af9bf2e3517b1e701288ac3066b9 [3] https://twitter.com/jpaulreed/status/1272043692837072897 [3.1] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/bkd_http.c#L1264 [4] https://twitter.com/jpaulreed/status/1272042287732674560 [5] https://mail.gnome.org/archives/desktop-devel-list/2019-May/msg00066.html

"master/slave" usages of master or slave [6] https://github.com/bitkeeper-scm/bitkeeper/blob/master/doc/HOWTO.ask#L223 [6.1] https://github.com/bitkeeper-scm/bitkeeper/blob/master/src/t/t.automerge#L90

"master-copy" usages of master [7] https://github.com/bitkeeper-scm/bitkeeper/blob/master/doc/airgap/airgap.gif [8] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/Notes/BINPOOL.adoc [9] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/man/man1/bk-Howto-bkd.1#L25 [10] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/doc/quickstart#L70 [11] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/t/t.bam-pull [12] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/man/man1/bk-csetprune.1#L94 [13] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/doc/book.ol#L14 [14] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/t/t.resolve#L909 [15] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/t/t.bam-clean#L31 [16] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/t/t.bam2 [17] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/man/man1/bk-config-etc.1#L105 [18] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/t/t.checksum#L241 [19] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/man/man1/bk-bkd.1#L240 [20] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/t/t.nested-attach#L611 [21] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/t/t.csetprune [22] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/RELEASE-NOTES-4.x#L917 [23] https://github.com/bitkeeper-scm/bitkeeper/blob/5695c0d0ecd062f13542c3cb04dd872466774fbf/src/t/t.bam#L360 [24] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/bkmsg.doc#L357

ambiguous usages of master [25] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/man/man1/bk-bkscc.hide [26] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/Notes/EVENT-STACK.adoc [27] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/bkd_http.c#L1264 [28] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/t/t.config-defaults [29] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/rclone.c#L158

git related usages of master [30] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/man/man1/bk-fast-export.1 [31] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/man/man1/bk-fast-import.1 [32] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/doGitExport.sh#L17 [33] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/contrib/git2bk.l#L35 [34] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/t/t.git-exporter#L50 [35] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/fast-export.c [36] https://github.com/bitkeeper-scm/bitkeeper/blob/5695c0d0ecd062f13542c3cb04dd872466774fbf/RELEASE-NOTES.md#bitkeeper-version-731ce-released-sep-29-2016

non-repository usages of master [37] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/Notes/DAEMON.adoc [38] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/gnu/patch/error.c [39] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/crank.sh#L16 [40] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/man/man1/bk-patch.1#L207 [41] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/gnu/patch/patch.man [42] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/gnu/patch/pch.c [43] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/RELEASE-NOTES-4.x#L980 [44] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/src/tomcrypt/Doxyfile#L639 [45] https://github.com/bitkeeper-scm/bitkeeper/blob/616740d0daad99530951e46ab48e577807cbbaf4/man/man1/bk-pcre.1#L146

Regards,
Andrew Ardill
On Mon, 15 Jun 2020 at 00:00, Don Goodman-Wilson <don@goodman-wilson.com> wrote:
Show 35 quoted lines
>
> > MASTER IS NOT INHERENTLY RELATED TO MASTER-SLAVE RELATIONS.
>
> 1) There is a great deal of evidence that that claim is simply not true.
> https://twitter.com/tobie/status/1270290278029631489
> https://twitter.com/jpaulreed/status/1272064807345115137
>
> 2) It's beside the point. Many problematic words and phrases have
> perfectly benign origins, but take on new meanings in new contexts.
>
> I personally reject the kind of moral relativism that is being
> espoused here. In fact, I believe that there is such a thing as
> justice, and that we each have a responsibility to seek it out and
> create it in every corner of our activities, big and small. You can
> abdicate that responsibility, I can't force anyone to do otherwise nor
> would I want to. But history judges harshly those who would throw
> others aside. Of course there are more people in the world than just
> Americans. But there are also Americans, and in particular Black
> Americans. Precisely because git is the tool of choice for open source
> and so much other development work, I believe we have a responsibility
> to build a tool that reflects the values of _all_ that we want to
> welcome into these communities. If you would rather exclude Black
> Americans or others descended from generations of colonial slavery,
> that's your choice, but you need to own the fact that it is an
> inherently racist choice.
>
> Don Goodman-Wilson
>
> On Sun, Jun 14, 2020 at 2:20 PM Sérgio Augusto Vianna
> <sergio.a.vianna@gmail.com> wrote:
> >
> > There's nothing to be resolved because there is no problem. If someone
> > reads "master" and gets triggered because all they can think of is
> > racism, that person needs therapy.
> >
Previous: Sérgio Augusto ViannaNext: J. Paul Reed
Message 65 of 140 in “Rename offensive terminology (master)”
  1. Simon PietersMay 4, 2020
  2. Robert P. J. DayMay 4, 2020
  3. N6GhostMay 4, 2020
  4. Konstantin RyabitsevMay 4, 2020
  5. Simon PietersMay 4, 2020
  6. Robert P. J. DayMay 4, 2020
  7. Randall S. BeckerMay 4, 2020
  8. brian m. carlsonMay 5, 2020
  9. Simon PietersJun 9, 2020
  10. Junio C HamanoJun 9, 2020
  11. demerphqJun 9, 2020
  12. Johannes SixtJun 9, 2020
  13. Junio C HamanoJun 9, 2020
  14. Simon PietersJun 9, 2020
  15. Junio C HamanoJun 9, 2020
  16. Simon PietersJun 9, 2020
  17. Robert P. J. DayJun 10, 2020
  18. Kevin SwintonJun 10, 2020
  19. Don Goodman-WilsonJun 10, 2020
  20. Konstantin RyabitsevJun 10, 2020
  21. Sérgio Augusto ViannaJun 14, 2020
  22. Sérgio Augusto ViannaJun 14, 2020
  23. Junio C HamanoJun 14, 2020
  24. Sérgio Augusto ViannaJun 14, 2020
  25. Don Goodman-WilsonJun 14, 2020
  26. Don Goodman-WilsonJun 14, 2020
  27. Sergey LapinJun 14, 2020
  28. Sergey LapinJun 14, 2020
  29. Sérgio Augusto ViannaJun 14, 2020
  30. demerphqJun 16, 2020
  31. OlegJun 16, 2020
  32. Elijah NewrenJun 16, 2020
  33. Sergey LapinJun 17, 2020
  34. OlegJun 17, 2020
  35. Alex SmithJun 16, 2020
  36. Konstantin TokarevJun 16, 2020
  37. OlegJun 16, 2020
  38. Robert P. J. DayJun 16, 2020
  39. Sergey OrganovJun 17, 2020
  40. Konstantin RyabitsevJun 9, 2020
  41. Don Goodman-WilsonJun 9, 2020
  42. Sérgio Augusto ViannaJun 14, 2020
  43. brian m. carlsonJun 14, 2020
  44. Sérgio Augusto ViannaJun 14, 2020
  45. Johannes SchindelinJun 14, 2020
  46. Taylor BlauJun 15, 2020
  47. Sérgio Augusto ViannaJun 15, 2020
  48. brian m. carlsonJun 9, 2020
  49. Michal SuchánekJun 16, 2020
  50. Johannes SchindelinJun 10, 2020
  51. Edward ThomsonJun 10, 2020
  52. brian m. carlsonJun 10, 2020
  53. Michal SuchánekJun 11, 2020
  54. Don Goodman-WilsonJun 11, 2020
  55. Derrick StoleeJun 11, 2020
  56. Junio C HamanoJun 11, 2020
  57. Johannes SchindelinJun 14, 2020
  58. Michal SuchánekJun 15, 2020
  59. Philip OakleyJun 12, 2020
  60. Elijah NewrenJun 14, 2020
  61. Philip OakleyJun 14, 2020
  62. Sérgio Augusto ViannaJun 14, 2020
  63. Don Goodman-WilsonJun 14, 2020
  64. Sérgio Augusto ViannaJun 14, 2020
  65. Andrew ArdillJun 15, 2020
  66. J. Paul ReedJun 15, 2020
  67. Andrew ArdillJun 15, 2020
  68. Michal SuchánekJun 17, 2020
  69. Konstantin RyabitsevJun 14, 2020
  70. Sérgio Augusto ViannaJun 14, 2020
  71. Konstantin RyabitsevJun 14, 2020
  72. Sérgio Augusto ViannaJun 14, 2020
  73. Konstantin RyabitsevJun 14, 2020
  74. Philip OakleyJun 14, 2020
  75. demerphqJun 16, 2020
  76. Michal SuchánekJun 16, 2020
  77. demerphqJun 16, 2020
  78. Michal SuchánekJun 16, 2020
  79. Junio C HamanoJun 17, 2020
  80. Jonathan NiederJun 17, 2020
  81. Jonathan NiederJun 17, 2020
  82. demerphqJun 18, 2020
  83. OlegJun 18, 2020
  84. demerphqJun 18, 2020
  85. Konstantin RyabitsevJun 18, 2020
  86. demerphqJun 18, 2020
  87. Junio C HamanoJun 18, 2020
  88. Junio C HamanoJun 14, 2020
  89. Eric WongJun 14, 2020
  90. Junio C HamanoJun 14, 2020
  91. Jonathan NiederJun 15, 2020
  92. Sérgio Augusto ViannaJun 15, 2020
  93. James RamsayJun 15, 2020
  94. Elijah NewrenJun 15, 2020
  95. Elijah NewrenJun 15, 2020
  96. ZeeVriendJun 16, 2020
  97. OlegJun 17, 2020
  98. ZeeVriendJun 17, 2020
  99. OlegJun 18, 2020
  100. ZeeVriendJun 17, 2020
  101. Sérgio Augusto ViannaJun 13, 2020
  102. Sérgio Augusto ViannaJun 13, 2020
  103. Thomas AdamJun 14, 2020
  104. Michael Felt (aixtools)Jun 14, 2020
  105. George Of The JungleJun 14, 2020
  106. Johannes SchindelinJun 14, 2020
  107. Johannes SchindelinJun 14, 2020
  108. Sérgio Augusto ViannaJun 14, 2020
  109. Sérgio Augusto ViannaJun 15, 2020
  110. Sérgio Augusto ViannaJun 15, 2020
  111. Sérgio Augusto ViannaJun 15, 2020
  112. Sérgio Augusto ViannaJun 15, 2020
  113. Fang-Pen LinJun 16, 2020
  114. Sérgio Augusto ViannaJun 16, 2020
  115. Social Justice Movements [was: Rename offensive terminology (master)]Luke Kenneth Casson Leighton, Jun 21, 2020
  116. Gunnar LiljasJun 23, 2020
  117. WhinisJun 24, 2020
  118. lego_12239@rambler.ruJun 24, 2020
  119. Gunnar LiljasJun 26, 2020
  120. OlegJun 26, 2020
  121. Sérgio Augusto ViannaJun 15, 2020
  122. Alexandru PătrănescuJun 15, 2020
  123. Elijah NewrenJun 15, 2020
  124. Randall S. BeckerJun 15, 2020
  125. WhinisJun 16, 2020
  126. OlegJun 16, 2020
  127. Konstantin RyabitsevJun 16, 2020
  128. John TurnerJun 16, 2020
  129. Michal SuchánekJun 16, 2020
  130. WhinisJun 16, 2020
  131. Alex SmithJun 16, 2020
  132. Konstantin RyabitsevJun 16, 2020
  133. WhinisJun 16, 2020
  134. Sérgio Augusto ViannaJun 16, 2020
  135. OlegJun 16, 2020
  136. Konstantin RyabitsevJun 16, 2020
  137. OlegJun 16, 2020
  138. Konstantin RyabitsevJun 16, 2020
  139. Sergey LapinJun 16, 2020
  140. OlegJun 16, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.