首页 > 建站资源 > 建站教程 > 见证历史:“blacklist”等表述将逐渐从源代码中消失!

见证历史:“blacklist”等表述将逐渐从源代码中消失!

时间:2020-06-11    来源:InfoQ公众号

“Blacklist-whitelist”和“Master-slave”等词汇将逐渐从源代码中消失。

美国、欧洲“Black Lives Matter”运动愈演愈烈。本周消息,谷歌决定放弃 Chrome 浏览器中“blacklist(黑名单)“、“whitelist(白名单)”的用法,后续使用“blocklist”和“allowlist”来替代它们。

这些国家的开发者都在努力摆脱“负面”代码术语,希望“让这个世界变得更友好”。“Master-slave(主 - 从)”与“Blacklist-whitelist(黑白名单)”等表述将从源代码中逐渐消失。

从源代码中消除负面术语

在过去的几周里,因为弗洛伊德事件的发生,以美国为主的部分国家在举行抗议活动以支持“ Black Lives Matter”运动。软件领域的活跃分子们也希望借此机会行动起来,表达自己消除种族压迫的决心与意志。

本周一,来自微软公司的程序员兼教育家 Scott Hanselman 发表了一篇博文,呼吁人们消除 Git 版本控制软件所创建代码库中常见的“主(master)”分支表述,借此表达软件行业对奴役关系的抗议。

他写道,“互联网工程任务组(IEFT)认为:主 - 从(master-slave)是一种压迫性的比喻,这种表述背后是深刻的历史烙印。因此无论是从技术层面还是立足历史角度,都不应该使用这样一种冒犯性的比喻。”

“结合上下文,我们还有很多更准确的表述可以选择。改变表述不会造成任何实际成本,甚至还能让更多新人加入进来,感受技术行业的平等态度。”

这项提议最初出现在 2018 年的 IETF 草案当中,要求开源软件更改“Master-slave”和“Blacklist-whitelist”两项表述。同一年 Redis(当然也包括 Rails)与 Python 开发团队开始着手清除“主 - 从(master-slave)”表述。

迫于形势,Google 也对此表示了很大程度上的支持。据报道,谷歌在 2018 年就开始刻意避免使用“黑名单”这个单词,只不过 Chrome 浏览器的后端源码中还存在“blacklist”这个单词。

在周一的时候,Chromium 的代码有了最新的提交,components/blacklist 目录中的类名称已经重命名为 components/blocklist。谷歌从最终用户可见的所有位置删除了“blacklist”和“whitelist”, 分别用“blocklist”和“allowlist”代替。这次更改包含了所有类 / 方法 / 成员 / 变量重命名。

据了解,Chrome 源码中有大概有 2000 处涉及到了“blacklist”,这种更改不是简单的“查找 - 替换”,改变源码还需要测试是否会产生 bug。这需要谷歌程序员们付出相当多的劳动,还不确定什么时候能彻底完成。

不止谷歌一家作出了改变

谷歌当然不是唯一一家主动处理歧视性表述问题的企业。

今年 1 月,Pivotal 的 LicenseFinder 开始将“whitelist(白名单)”转换为“permitted licenses(授权许可)”。

Box 公司目前正讨论全面使用“allowlist(允许名单)”与“denylist(拒绝名单)”的表述。

Elixir 已经在约一周之前清除了这部分表述。

OpenShift 在四天前合并了一条 pull 请求,用于更新全部相关表述。

Yelp 在约两周前修改了密钥扫描代码,osquery 项目的用语变更工作也在进行当中。

开源 Git 项目的贡献者社区也在两个月之前通过邮件列表对“master”表述展开了讨论,也有人提议在 Git 源代码中更换掉这一术语。但提案遭到抵制,理由之一是这会带来巨大的工作量。

在回应关于措辞修改的帖子时,GitHub 开发人员 Brian Golson(同时也是 Git 代码库的贡献者)对修改意见表示支持。他愿意负责审查用语变更可能对 Git 源代码产生的影响,但同时强调这项工作强度很大,他不可能凭一己之力完成。

他表示,“看起来,如果我们对 buildin/init-db.c 直接进行逐行修改,那么大概会引发 304 项测试失败,约占总体测试失败数量的三分之一。”

在 GitHub 方面,GitHub CLI 两周前已经用“trunk(主干)”代替“master(主)”表述,而 GitHub Desktop 软件早在 2019 年就完成了相关替换。

虽然人们普遍表示支持,但也有批评者指出,Git 对“master”的理解更多源自读音理解、而非含义理解(设备网络中的主 - 从描述并不存在任何奴役色彩)。另外,“master”具有非常丰富的内涵,在特定领域的专业知识中完全可以作为中立性字眼自由使用。

除了种族表述之外,谷歌的包容性编码指南还高度关注性别表述,强调应尽量避免使用与性别相关的区别性表达。例如,指南建议开发人员避免使用有性别倾向的“他(he)”作为代词;但在“he”代表氦气、希伯来语中的 ISO 639-1 语言代码或者西班牙语动词“Haber”的第一人称形式时则没有问题。

Hanselman 坦言,单纯变更表述并不能改变历史、也无法减少人们心中的种族主义观念。他在推特上指出,“我们做的一切,只是想让这个世界变得更友好。”

Python 和 Redis 也曾摊上事儿

其实,早在 2018 年的时候,互联网工程任务组(IEFT)就提出草案,要求更改“Master-slave”和“Blacklist-whitelist”两项表述。编程语言 Python 和开源 Redis 数据库在同一年纷纷做出了响应,逐步从说明文档及 API 中剔除关于“主”、“从”表述的技术术语。

在 Python 方面,由于来自社区的投诉意见(具体细节并未公开),项目管理团队决定在 2018 年 9 月开始全面替换“主”与“从”两项术语。同时,负责 GitHub 平台 CPython 代码库监督工作的管理员也锁定了 pull 请求,旨在清除相关表述并删除部分注释。

Python 核心开发者 Victor Stinner 曾在之前的评论中指出,不少人都在反对这种存在明显从属关系的表述,因此最好能把“主”与“从”用语从广泛使用的编程语言中剥离出去。

与此同时,开源内存内数据库 Redis 也遇到了类似的“主 - 从(master-slave)”难题。2018 年,Redis 缔造者 Salvatore Sanfilippo 发表了一篇博文,其中提到他因 Redis 5.0 RC5 没有清除“主”、“从”表述而遭到开发者批评的问题。在此之前,与此相关的争议就一直存在。

Sanfilippo 表示,他压根不打算替换 Redis 中的措辞,但却因此被批评人士们称为“法西斯主义者”。由于他的家人曾在第二次世界大战期间受到意大利法西斯分子的迫害,扣这顶帽子显然是想故意激怒他。

他写道,“最重要的问题是,每个术语在原则上都有令人反感的一面。但表达是多元的,我不希望禁止使用某些存在争议的单词,这些字眼随着时间的流逝已经变得越来越中性了。”他也反对开发者们一窝蜂式的批评,并强调“在这样混乱的环境下,根本不可能进行任何有意义的讨论。”

但在之后实际交流与 Twitter 调查中,他发现共有 6242 名关注者参与了他发布的调查推文,其中有 53% 建议使用较为温和的表述来替代“主”与“从”。多数人已经站出来说话,他认为反对之声已经不能忽视。

在此后的一篇 GitHub 帖子中,他解释称,自己打算采取行动以防止他个人的观点影响到其他人使用 Redis 的意愿。

之后不到一周,他又发表一条推文,称删除 Redis 说明文档内“主 - 从”表述的工作基本完成,目前只剩下一部分 API 中难以清除的单词。

Drupal 及 Django 等其他开源社区也掀起了类似的运动。2017 年,Kubernetes 项目确认将全面调整语言表达。而在开源 Helm 项目中,管理团队承认“主(master)”本身就带有一定的冒犯性。因此,“主图表(master chart)”现已更名为“伞图表(umbrella chart)”。

大家怎么看?

对于更改“blacklist”这样的事件,中国程序员纷纷表示不能理解:

以后前端开发都不能用 black/white 代替颜色了,得用 #000 和 #fff。

开源软件将 blacklist 改为 blocklist,那么对应的 red-black tree 该怎么表达合适呢?

blacklist 终究是要表达禁止的意思,不够尊重人权,应该改成 yamadeList。

等等,“ Black Lives Matter”里面的 black 是不是也该换成别的?

另外,“master-slave” 的中文翻译,一开始便避免了英文的奴隶一词,而巧妙地改成了主从复制。从这个角度看,其实国内对于 slave 一词的负面词性也是做了一些处理和规避的。

但是仅仅因为一个词性的问题,就大费周章去做一些牵一发而动全身的修改是否有必要?目前来看需要更加仔细斟酌,如果因为部分批评者的言论就去修改细节乃至源码,是否会影响到更多未发声的实际使用人群?

对于这些更改,你们是怎么看的呢?欢迎在评论里留言哦!

参考阅读:

https://www.theregister.com/2020/06/08/developers_renew_push_to_get/

相关推荐
解决WP主题 Avada 4.0.3 谷歌字体webfont.js的问题分享
华为方舟编译器 PK 微软苹果谷歌编译器,到底谁胜出?

精彩推荐

热门教程