Re: Rename offensive terminology (master)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[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@xxxxxxxxxxxxxxxxxx> wrote:
>
> > 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@xxxxxxxxx> 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.
> >




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux