
Kubernetes 术语治理指南用 allowlist/denylist 替换 blacklist/whitelist 的命名推荐全解析【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community导读本文以 Kubernetes 社区命名工作组Naming Working Group在 SIG Architecture 名下发布的第 002 号命名推荐002-blacklist-whitelist-allowlist-denylist.md为主体系统讲解 Kubernetes 社区为何将blacklist/whitelist替换为allowlist/denylist、如何基于官方语言评估框架对术语逐项打分以及如何在横跨数十个仓库的生态中分步推进这项可能带来破坏性变更breaking change的重命名工作。读完本文你将掌握 Kubernetes 社区评估有害语言的三级关切框架、该推荐背后的词源与行业先例以及一套可直接复用的影响扫描 → 分类处理 → 逐步切换实施流程可用于指导自身项目中的命名治理。一、这份文档是什么Kubernetes 命名架构决策记录ADR在 Kubernetes 社区中命名术语的治理并非随意为之而是有一套完整的工作机制。本仓库的 sig-architecture/naming 目录集中存放了命名工作组的方法论与决策记录文件作用recommendations/002-blacklist-whitelist-allowlist-denylist.md本文主角关于替换blacklist/whitelist的已接受推荐recommendations/001-master-control-plane.md同系列推荐master→control planerecommendations/000-template.md命名推荐 ADR 的标准模板language-evaluation-framework.md评估术语是否构成伤害的三级关切框架workflow.md从提案到落地执行的完整工作流002 号推荐的状态为Accepted已接受最后更新时间为2020-12-01建议的替代术语为allowlist/denylist。文档遵循 000-template.md 定义的 ADR 结构——包含Suggested Alternatives建议替代、Context背景与评估、Precedents先例、Impact影响分析四个核心部分后续章节将逐一展开。二、问题背景whitelist/blacklist 隐喻为何需要被替换2.1 颜色本身没有意义含义是文化赋予的推荐文档开宗明义地指出whitelist/blacklist隐喻的底层假设是白 好黑 坏white good and black bad。然而颜色本身并不携带任何预定含义人们赋予颜色的意义完全是文化性的。例如在许多东南亚国家红色代表幸运常与婚礼等喜庆事件关联而在许多欧洲国家白色才承载同样的含义。这意味着whitelist/blacklist所隐含的价值判断在不同文化语境下会产生完全不同的解读属于一种不必要的隐喻。2.2 词源背景源于出版业的术语从词源看whitelist/blacklist起源于出版行业而这一行业在历史上由参与过奴隶制并至今仍在反思其种族主义遗留问题的美国与英国主导。这一历史背景使术语在技术语境之外带有额外的、非预期的含义。2.3 技术传播视角描述性优于隐喻性从技术传播technical communication的角度看在命名约定中引入隐喻以及随之而来的非预期含义是没有必要的。相反描述性词汇增强理解allowlist/denylist直接描述允许/拒绝的行为语义更易本地化allowlist/denylist或者直接用allowed/denied作为实体前缀在不同语言环境中都更容易翻译和传达消除歧义避免读者因文化背景不同而对术语产生不同联想。这也是文档将其列为唯一建议替代项的原因allowlist/denylist是纯粹描述性的不依赖任何文化隐喻。三、评估方法论Kubernetes 语言评估框架要理解 002 号推荐中一阶关切 / 二阶关切 / 三阶关切的评估结论必须先读懂其背后的方法论——language-evaluation-framework.md。3.1 三级关切的定义框架将术语可能造成的伤害分为三个层级按对社区潜在伤害的大小排序层级特征判断标准一阶关切First-order伤害是明显overt、公开且明确有问题的术语是否明显种族主义、性别歧视、跨性别歧视、残障歧视、恐同二阶关切Second-order有问题但影响不那么明确术语是否暴力、是否军国主义不直接针对特定身份群体三阶关切Third-order可以改进但无明显伤害术语是否唤起性而非描述性、是否歧义3.2 使用规则框架的使用方法非常明确对每个被评估的术语回答全部问题回答是或可能的问题越多该术语越可能需要被替换任一阶关切为是→ 必须替换该术语大量二、三阶关切为是→ 强烈建议替换框架刻意非强制non-prescriptive减少伤害才是决策的指导原则。框架中还给出了正反示例以帮助判断master/slave属于一阶关切中明显种族主义的例子sanity checks属于残障歧视的例子而transclusion、binary、homogenizing等词则不在此列——这体现了评估时对代码技术语境与普通语境的严格区分。四、逐项评估blacklist/whitelist 的三级结论002 号推荐严格依照上述框架对whitelist/blacklist进行了逐项打分。4.1 一阶关切是否直接针对特定身份群体——不完全问题结论术语是否明显种族主义可能Maybe是否明显性别歧视、跨性别歧视或贬损性别身份否是否明显残障歧视或贬损神经多样性/残障人士否是否明显恐同否一阶关切的判断要点是明显性与身份特定性identity-specificity。blacklist/whitelist并不像master/slave那样在技术语境之外毫无歧义地指向某个群体因此文档的结论是不完全是一阶关切Not quite。4.2 二阶关切是否含糊地有害或有害但非针对特定身份——是问题结论是否暴力的部分是Partially是否军国主义的否二阶关切的判断要点是歧义性与缺乏特定身份指向术语在代码/技术语境之外可能带有与战争、军事化或治安等有害场景相关的联想但其词源并不直接针对特定身份的伤害。blacklist/whitelist正属于此类——它不直接攻击特定身份但在其他语境中确实带有负面含义negative connotations。4.3 三阶关切是否应改进问题结论术语是唤起性而非描述性是术语是否歧义是如背景章节所述黑与白在不同文化中含义不同4.4 综合结论综合三级评估术语在二阶与三阶关切上有多项是/部分是按照框架规则应当强烈考虑替换。这与框架减少伤害的指导原则一致——用一个纯描述性的allowlist/denylist取代隐喻性、文化歧义性的whitelist/blacklist是以最低成本降低社区沟通伤害的典型实践。五、词源与史料考证blacklist 一词的历史推荐文档特别引用了 Douglas Harper 词源词典Etymology Dictionary中关于blacklist的考证作为二阶关切判断的重要依据。原文摘录如下n. 亦作 black-list, black list被怀疑人员名单1610 年代源自 black形容词此处表示耻辱、谴责、惩罚1590 年代起见于 black book 用法 list名词。1888 年起特指雇主眼中麻烦工人通常因工会活动的名单。作动词用法始于 1718 年。相关词Blacklisted; blacklisting.文档特别强调了一个值得注意的事实该术语的首次有记录使用恰逢大规模奴役和强制驱逐非洲人前往美洲欧洲殖民地劳作的时期。这一史料虽不能证明术语直接攻击特定身份但为其在其他语境中带有负面含义的结论提供了历史注脚也正是二阶关切判定为是的核心支撑。六、行业先例其他社区与标准机构的同类行动002 号推荐并非孤例文档列出多项先例以支撑决策的合理性学术界发表于 NCBI PMC 的论文《Blacklists and whitelists: a salutary warning concerning the prevalence of racist language in discussions of predatory publishing》关于掠夺性出版讨论中种族主义语言盛行的一记警钟系统梳理了该术语在学术讨论中的使用问题IETF互联网工程任务组网络工作组文档《Terminology, Power and Oppressive Language》术语、权力与压迫性语言从标准组织层面审视技术术语中的权力结构Android / AOSPAndroid 开源项目在 2020 年推进了相关术语的变更并提供了变更说明截图Twitter推特Twitter 工程师替换了master/slave等带有种族主义色彩的科技术语被科技媒体广泛报道。这些先例共同表明替换blacklist/whitelist是 2020 年前后开源与技术行业的一次共识性行动Kubernetes 社区通过 ADR 将其正式固化属于行业整体趋势的一部分。七、影响范围分析Kubernetes 生态中的使用分布替换术语的核心难点在于影响面。推荐文档通过代码搜索Hound search对整个 Kubernetes 生态进行了扫描结论如下7.1 总体分布/vendor 目录占大头大多数blacklist和whitelist的使用位于各仓库的/vendor目录即第三方导入的依赖代码。这些目录不应由 Kubernetes 社区直接修改因此改造范围应限定在自有代码。7.2 各主要仓库的明细与变更性质排除/vendor后文档列出了需要重点关注的仓库并区分了破坏性变更breaking change即影响外部用户的 flag、config、package 名称与非破坏性变更文档、注释、测试仓库使用情况变更性质kubernetes/kops-whitelisted-healthcheck-cidr等 flag破坏性文档与代码中均有使用kubernetes/test-infra主要与 Prow 相关需评估kubernetes/kubernetes大量非问题的blacklist使用以及若干潜在破坏性变更的whitelist使用混合kubernetes/api主要出现在注释/文档中非破坏性kubernetes/cloud-provider-openstack配置项见其 keystone-auth 数据同步文档破坏性kubernetes/ingress-nginxipwhitelist包破坏性ingress-gce 亦有类似需求kubernetes-sigs/node-feature-discovery--label-whitelistpattern命令行 flag破坏性kubernetes/website文档中的大量使用非破坏性kubernetes-sigs/kubespraycallback_whitelist配置需评估kubernetes-sigs/reference-docs大量description字段中的使用非破坏性此外还有多个仓库仅使用过一次该术语kubernetes/community仓库本身也含有使用主要出现在会议纪要meeting notes中。7.3 关键判断破坏性变更必须走弃用周期文档明确区分了两类工作的重要性破坏性变更对外部用户可见的 flag、配置项、包名必须通过正式 issue 开启弃用周期deprecation cycle让旧名称在过渡期内继续工作而文档、测试、注释等非破坏性变更可以更快推进。这正是社区治理中兼容性与演进平衡的典型体现也与 001 号推荐master→control plane中如果 API 字段、flag、代码等字面使用了旧词且无法立即更改仅在与代码项直接关联时使用该词的原则一脉相承见 001-master-control-plane.md。八、分步实施建议从影响扫描到落地切换基于上述影响分析推荐文档给出了四条明确的行动建议优先处理/vendor目录之外的变更将改造范围限定在自有代码在所有涉及破坏性变更的仓库中开启 issue启动旧名称的弃用周期同步/随后进行文档、测试与非破坏性外部变更条件成熟后实施新名称并等待第 2 步中识别的旧名称完成弃用。8.1 与 ADR 工作流衔接如何让一项命名推荐落地上述实施建议在 Kubernetes 社区中依托 workflow.md 定义的标准流程运转完整链路为提案向 SIG Architecture 邮件列表发送提案内容包括推荐事项、变更理由、现有术语的使用语境、替代方案、工作量预估正式化 ADRSIG Architecture 负责人依据 language-evaluation-framework.md 判断提案合理性后按 000-template.md 模板起草 ADR持有/hold与评审ADR 必须带/hold打开给治理组审批机会直到作用范围内的代码/内容所有者同意方向后方可合并——即使尚未制定存量使用的修复计划也不应阻塞决策记录本身因为记录推荐对指导未来工作有价值审批SIG Architecture lead 建立 Steering 评审窗口lazy consensus 期限为 3–5 个工作日放行并合并 ADR实施作用范围内的 SIG 与仓库负责落实即执行上述四条行动建议。8.2 实践要点为什么先记录方向、再逐步治理存量是关键002 号推荐与工作流文档共同传达了一个重要工程原则方向性决策不应被存量改造的规模所阻塞。先通过 ADR 固化未来新代码应使用 allowlist/denylist这一约定再按破坏性/非破坏性分类逐步清理存量既保证了演进方向的一致性又尊重了外部用户的兼容性预期。这一模式对任何大型项目的命名治理都有直接借鉴价值。九、延伸阅读仓库中的相关依据若需进一步研究命名治理的完整方法论可在当前仓库中继续阅读语言评估框架三级关切的定义、正反示例与使用规则命名推荐工作流提案 → ADR → 审批 → 实施的全流程ADR 模板新命名推荐的写作结构001 号推荐master → control plane同系列的另一份已接受 ADR展示了 master 因一阶关切明显种族主义必须替换、以及破坏性变更处理策略的完整案例SIG Architecture 主页了解该 SIG 的组织与会议机制。结语blacklist/whitelist替换为allowlist/denylist表面上是两个词的更替实质上是 Kubernetes 社区将减少伤害的价值观落地为可执行工程流程的一次完整示范先用语言评估框架完成证据化的术语评估再通过行业先例佐证方向接着以代码搜索量化影响面并区分变更性质最后依托 ADR 工作流分步实施。这套评估 → 取证 → 量化 → 分步落地的方法论同样适用于任何关注命名清晰度、本地化友好度与社区包容性的技术项目。【免费下载链接】communityKubernetes Community Documentation项目地址: https://gitcode.com/GitHub_Trending/com/community创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考