写点什么

谷歌也怕了,“blacklist”等表述逐渐从各大公司的源代码中消失!

2020 年 6 月 10 日

谷歌也怕了,“blacklist”等表述逐渐从各大公司的源代码中消失!

“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/


2020 年 6 月 10 日 15:587347

评论 8 条评论

发布
用户头像
自由民失控
2020 年 06 月 17 日 16:50
回复
用户头像
平等是在互信的基础上实现的,如果缺失了信任,平等就无从谈起,修改词汇描述只是我们对更加友好的期望,互信兼爱才是平等的康庄大道
2020 年 06 月 15 日 10:20
回复
用户头像
以后是不是不能说“黑色”这个词了,要叫“墨色”还是什么?
2020 年 06 月 15 日 09:21
回复
叫 “unwhite":)
2020 年 07 月 13 日 11:59
回复
用户头像
git以后主分支不让叫master了?
2020 年 06 月 12 日 15:59
回复
用户头像
过分的自卑, 感觉什么都在映射自己
2020 年 06 月 11 日 10:20
回复
用户头像
矫枉过正
2020 年 06 月 11 日 08:21
回复
黑白都不能提了
2020 年 06 月 11 日 10:09
回复
没有更多了
发现更多内容

DB-Engines 10月数据库排名:“三大王”无人能敌,PostgreSQL紧随其后

华章IT

数据库 postgresql Clickhouse MySQ

《谛听说智能》迎来圆满落幕,企业降本增效新指南

Geek_e670ab

JAVA中的内部类详解

倔强的攻城狮

Java

图解超难理解的 Paxos 算法(含伪代码)

多颗糖

分布式 算法 分布式系统 架构师 一致性算法

反向保理系统设计

森林

Kubeless 架构设计 | 玩转 Kubeless

donghui

Serverless kubeless

MySQL-技术专题-解决死锁问题

李浩宇/Alex

Java之父都需要的《Effective Java中文版(第3版)》到底有多牛

Java成神之路

Java 程序员 面试 编程语言

解密360容器云平台的Harbor高可用方案

博文视点Broadview

容器 高可用 云原生 k8s Harbor

Java 未捕获异常处理

朱华

Java Exception

违规内容屡屡曝光下,企业如何自救

Geek_e670ab

第四周 作业二:系统架构学习总结【未陌】

a d e

系统架构 互联网架构

都别拦着我,我要删库了

MySQL从删库到跑路

Linux oracle重装 MySQL 运维 root

有状态的服务其实可以做更多的事情

架构师修行之路

分布式 微服务

程序员的美丽假期(并不)

Learun

程序员 敏捷开发 软件设计

不走寻常路

滴滴技术

招聘 滴滴技术 地图与公交事业群分享月

头条终面:写个消息中间件

yes的练级攻略

消息队列 面试技巧

MySQL-技术专题-事务和并发一致性问题

李浩宇/Alex

学习笔记:架构师训练营-第四周

四夕晖

高并发 系统架构演化

英特尔为北京2022年冬奥会打造智慧新体验

intel001

对象的实例化内存布局与访问定位

朱华

Java 对象初始化

MySQL-技术专题-mysql的联合索引

李浩宇/Alex

中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解

京东科技开发者

技术 网络 GAN 芯片

第四周 作业一:系统架构【未陌】

a d e

系统架构

惊艳!阿里出产的MyCat性能笔记,带你领略什么叫细节爆炸

周老师

Java 编程 程序员 架构 面试

Spring Cloud 微服务实践(8) - 部署

xiaoboey

Docker zookeeper 微服务 Spring Cloud actuator

关于GO语言,这篇文章讲的很明白

华为云开发者社区

go 编程语言 语言

看这里!带你快速体验MindSpore V1.0(For ubuntu 18.04)

华为云开发者社区

华为 AI 技术

链表反转的两种实现方法,后一种击败了100%的用户

小Q

Java 程序员 数据结构 算法 开发

滴滴导航若干关键功能的技术突破与实践

滴滴技术

人工智能 滴滴技术 滴滴导航

kubernetes是微服务发展的必然产物

架构师修行之路

Kubernetes 分布式 微服务

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

谷歌也怕了,“blacklist”等表述逐渐从各大公司的源代码中消失!-InfoQ