Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

List terms which should be avoided #605

Open
vstinner opened this issue Aug 11, 2020 · 9 comments
Open

List terms which should be avoided #605

vstinner opened this issue Aug 11, 2020 · 9 comments

Comments

@vstinner
Copy link
Member

@vstinner vstinner commented Aug 11, 2020

I replaced master/slave with parent/child or server/client in Python. I'm now replacing whitelist/blacklist with allowlist/denylist in Python:

It may be nice to have a list of terms which should be avoided in the Python projects and propose better terms:

  • master/slave => parent/child, server/client, main, primary/seconday, etc.
  • whitelist/blacklist => allowlist/denylist, ignore, etc.

I don't need that we have to argue in details why specific terms should be avoided, but just give a general guideline like:

The intent is to make the Python community more welcoming and more diverse by avoiding to make some people uncomfortable.

cc @brettcannon @warsaw @willingc @Mariatta @ejodlowska

@hugovk
Copy link
Contributor

@hugovk hugovk commented Aug 11, 2020

Newest draft is v3 (July 08, 2020):

Edit: now at v4 (August 24, 2020):

@brettcannon
Copy link
Member

@brettcannon brettcannon commented Aug 11, 2020

Are the guides moving to "allowlist"/"denylist"? I've seen "allow list"/"deny list" (notice the spaces). I've also seen "block list".

@vstinner
Copy link
Member Author

@vstinner vstinner commented Aug 11, 2020

I don't think that we have to require one replacement. We can suggest multiple alternatives. For example, first I replaced blacklist with denylist in http.cookiejar documentation, but when I read again the whole documentation, it seems like blocklist is more appropriate: python/cpython#21826

@PaulMcMillan
Copy link

@PaulMcMillan PaulMcMillan commented Aug 17, 2020

I agree that it is reasonable to enumerate terms that should be avoided. As always, the peanut gallery (itself an economically loaded term) is likely to chime in and tell us we're all wrong for trying to do the right thing, but it is important that we persist.

I've been seeing allowlist/blocklist as an accepted replacement terminology pretty broadly across my professional security-oriented network. I like it because I find it unambiguous, and "block" has slightly stronger connotations than "deny" in parallel usage. For better or worse, it's also verbally similar enough to allow for seamless substitution and general comprehension among folks who haven't thought carefully about the issue.

For "master/slave" replacement I have a personal preference for "leader/follower" in cases where it semantically fits. It's clear, makes fewer assumptions about western nuclear family structure than "parent/child", and avoids the abiguity associated with "server/client" where "client" is a potential leader but just happens to be following (in contrast to "client" in the "queries the data store" sense).

[and not to go down a rabbit hole, but "client" can also be problematic given the feudal connotations]

More generally, I think it is helpful to enumerate specific turns of phrase to be avoided, since we otherwise risk falling to an onslaught of malintentioned arguers with a goal of derailing improvements via reductio ad absurdum. [yes, etymology is problematic with this phrasing too]

I suggest this wording:

The Python community welcomes all. We avoid language associated with opposition to this goal.

@aeros
Copy link
Member

@aeros aeros commented Aug 28, 2020

@vstinner

master/slave => parent/child, server/client, main, primary/seconday, etc.
whitelist/blacklist => allowlist/denylist, ignore, etc.

+1 For the proposed replacements. It might be a decent idea to put together a table in the devguide (perhaps in the "Documentating Python" section). My only feedback would be to use some caution with regards to banning the usage of terms that are not widely considered to be controversial, so that we don't end up spending an infinite amount of time on this.

I'm personally of the mindset that there are definitely outdated terms that we should move away from ("master/slave" and "blacklist/whitelist" being some of the more egregious offenders), but that it's impossible to avoid making someone out there uncomfortable; e.g. I'd have to disagree with @PaulMcMillan about avoiding usage of "parent/child" and "server/client". If you dig deep enough, there are going to be some potential connotations with any terminology. To me at least, those connotations have to be adequately clear and severe enough to justify the time spent replacing them (and of course, the replacement should be just as clear if not more clear than the original). Otherwise, the maintenance cost starts to outweigh the benefits, especially if it is determined that the replacements are offensive to someone a few years down the road.

@brettcannon
Copy link
Member

@brettcannon brettcannon commented Aug 31, 2020

At work we are avoiding "master", "slave", "blacklist", and "whitelist" and I have heard the same from other companies. I think that's good for now and if other teams come out as generally unacceptable we can handle them then.

@vstinner
Copy link
Member Author

@vstinner vstinner commented Sep 9, 2020

FYI there was a discussion about the usagef of gendered language in the PEP 3136: https://bugs.python.org/issue41743

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
5 participants
You can’t perform that action at this time.