有人的地方就有江湖。人一多,事就多,何况开源社区聚集起来是一堆以极客自居的程序员。于是,开源社区隔三差五总是会传出各种各样、鸡飞狗跳的纠纷事件。(详情可见:《社区纠纷不断:程序员何苦为难程序员》)
开源社区结构很松散,上下等级观念也很淡薄,基本上不管你是谁,就算是创始人也一样“问候家人”。比如今年 2 月,就曾曝出 Swift 之父 Chris Lattner 被多人侮辱大吼之后,退出了 Swift 核心团队。
这种环境下,能够留下来的都是“狠人”,比如 Linux 之父 Linus Torvalds 就凭借“以暴制暴、以喷治喷”的手段,成功保住自身在 Linux 内核社区的地位的同时,也成为了其社区内最大的“喷子”。
2018 年的时候,一个大学教授用机器学习统计了一下,Linux 开发人员之间的谩骂,其中很多来自 Linus 本人。Linus 在过去三年中,侮辱数量达到数千次。当然,经过分析,Linus 的这些谩骂并没有针对性,更多的是对事不对人,“他是一个机会均等的施虐者”,那个教授总结道。
但这种方式,并不可取。不少心脏不那么强大的开发者因为受不了这种“残酷的交流方式”而选择离开,社区的气氛变得糟糕且尖锐。
2018 年,Linus 公开道歉反思自己的行为,并宣布 Linux 内核社区正式引入 CoC(Code of Conduct),以取代之前的 Code of Conflict 冲突解决方案(尽管这一举措也受到了部分争议)。
CoC 是什么?为什么会有人抵制它?它能够彻底解决这一问题吗?我们又能从这些实践中借鉴哪些部分?接下来,我们就来仔细深究一下。
01 最开始,开源社区没有 CoC,它风行于一位 程序员 变性之后
CoC,全称是 Code of Conduct,翻译过来就是“行为准则”。上到汉谟拉比法典,下到某公司规定,都归属于此。
任何社会群体都需要一个这样的纲领,来凸显这个群体的道德和价值观。直白说,就是一个文件,上面写满了“说鸡不说8,文明你我他”这样简单朴素的道理。
但自开源社区出现以来,有很长一段时间,是没有 CoC 的。关于开源社区 CoC 最早出现的时间点,有说法认为是大约十多年前诞生于 Ubuntu 社区,而本文也无意去考究这些。但有一点是可以肯定的是 —— CoC 真正在 OSS 社区里掀起波浪,开始于 2014 年 Contributors Covenant (贡献者公约)的诞生。
https://www.contributor-covenant.org/
Contributors Covenant 的撰写者是 Coraline Ada Ehmke,这位变性人程序员不仅是 LGBT 群体里的一员,还是一位演讲者、活动家,被外界看作是一名“社会正义战士”(SJW,Social Justice Warrior,含贬义)。
Coraline 在 1994 年就开始在开源社区的圈子里混了,编写过 25 个 Ruby gems,并为 Rspec 和 Ruby on Rails 等项目作出了贡献,还经常在开源软件会议上发表演讲。但事情在后来发生了改变,其中包括 TA 的性别(之前 Coraline 是男性)。2013 年的 Madison+ Ruby 会议上,她以变性人的身份公开出柜。
▲ 变性后的 Coraline Ada Ehmke 在一场 Youtube 直播中
在 Coraline 后来的叙述中,身份转变后她无法摆脱“变性是可耻”的想法,当她受到了社区和公众的攻击时,留下了心里阴影:
不仅是隐私受到公众监督,还有源源不断的骚扰、死亡威胁、人肉攻击等等,总是伴随着我的跨性别者身份。我面临着很大的心理健康挑战,这些拿来对付我的东西,总是隐藏在谈话的日常框架中。
所以,当 Coraline 看到 Ash Striden (后来成为她的一个伙伴)开始为技术会议制定行为准则,并且还建立了网站,去要求那些经常在会议上发言的人承诺不会在没有行为准则的会议上发言后,她受到了启发。
我不认为当时人们将开源项目视为社区。
2014 年,在签署了只参加具有行为准则的会议的承诺后,Coraline Ada Ehmke 开始考虑对在线社区采取类似的方法,并开始书写 Contributors Covenant 的第一版。
对我来说,社区是具有共同价值观的人聚集在一起,不同的开源社区不同的价值观。对于开源社区的领导者来说,行为准则是一种明确说明社区价值观的合适方式。
很快,Contributors Covenant 在开源世界里掀起里一阵“政治正确”的旋风,它被成百上千个社区采用,迅速成为开源社区中最流行的 CoC。据不完全统计,Contributors Covenant 除了被 Linux、curl、 Ruby 、git、Jenkins、Vue.js 等知名开源项目采用外,还成为了 Microsoft、Apple、Google 等科技公司的默认 CoC。
当然,Contributors Covenant 之外还存在许多不同版本的开源社区 CoC,比如 Ubuntu、Django、 Python 等。下面的表格是某个研究中,发现从 GitHub 维度上看,几种主流 CoC 被采用超过 500 多个 OSS 项目使用。其中,Contributors Covenant 是使用频率最高的。
02 撇开多样性等美国社会语境,CoC 内容不乏可取之处
虽然 CoC 版本诸多,但这些 CoC 内容都包括了:目的、什么是可接受的行为、什么是不可接受的行为、执行机制和范围(即 CoC 适用的时间和地点)等几个部分。
Contributors Covenant 的创立有很强的政治意味,Coraline 要求各个社区对边缘化或其他弱势群体进行保护,避免对他们的打击。就像 Linux 社区(沿用的就是 Contributors Covenant)在其 CoC 上承诺的那样:
为了营造一个开放和热情的环境,我们作为贡献者和维护者承诺,无论年龄、体型、残疾、种族、性别特征、性别认同如何,参与我们的项目和社区的每个人都不会受到骚扰。无论你是任何经验水平、教育、社会经济地位、国籍、个人外表、种族、宗教或性认同和性取向。
这其实是深植在美国社会矛盾之上的,具有强烈的漂亮国特色。但 CoC 的具体内容还是具有较强的普适性的,并且 CoC 也不是千篇一律,不同社区会在自身基础上选择更合适的版本。
比如,Django 结合了 Contributor Covenant 和 Speak Up!社区行为准则,规定:保持友好和耐心、热情好客、体贴、尊重、谨慎选择词汇、当不同意时试着理解为什么等。这一准则被 LLVM 和 FreeBSD 等多个社区沿用。
Mozilla 社区的 CoC 里有几项也比较符合自身特色,比如:直接但专业,要求有不同意见时必须直接发言,不能隐瞒真相;以身作则,将行为与语言匹配起来,成为其他人想要追随的人。
Apache 则充分发挥了开放且偏向“草根”的特质,在其 CoC 中作出了一些有意思的规定,比如:保持开放,邀请任何人加入社区,并且更喜欢使用公共的沟通方式来传达与项目相关的消息;保持好奇心,鼓励提问且收到问题的人应该响应迅速且乐于助人;简明扼要,电子邮件要简短,在在消息顶部添加摘要,为每封电子邮件线程添加新想法,且线程的其余部分仍然包含经提出的论点的消息。
此外,一些社区在规定 CoC 之外,另外还会出台多样性政策(diversity),来区别两者。比如 Ubuntu。
03 CoC 在实施层面,却困难重重
尽管 Coraline Ada Ehmke 为了这一事业四处奔走,但开源社区对 CoC 的不重视是由来已久的。成立于 1993 年的 FreeBSD 直到 2020 年才开始采用来自 LLVM 的 CoC(也就是 Django 那一版),而 2020 年正是 Coraline Ada Ehmke 发声最为密集的时候。
Contributors Covenant 取得了巨大的成功。但是,这是一场艰难的战斗。我甚至因为我在行为准则方面的工作而收到了死亡威胁。—— Coraline Ada Ehmke
今天,CoC 文档(conduct.md)在项目的根目录在文件中就像许可证一样正常,但 CoC 在引用和实施层面却问题很多:
1、一开始,不少开发者就对以 Contributors Covenant 为代表的 CoC,怀有敌意
2018 年 9 月,Linux 内核社区在确认采用 Contributor Covenant 版本的 CoC 时,遭到了一小群程序员的强烈反对,他们威胁要从项目中撤销他们的代码。在他们看来,这是一种“过度政治正确”。
这使得 Linus 不得不站出来说话:
是否过度政治正确,我或许是持保留意见的。老实说,我绝对不希望被视为互联网上那一种赞成白种人主义的纳粹、性别歧视或反对同性变与变性的败类。虽然那些败类也有抱怨社区过度政治正确,这让我的公开立场变得有点尴尬,变得里外不是人,但是我确实表明过我从来没有任何那种肮脏的想法,我不是纳粹,没有各种歧视,我一直以来的粗鲁言行只是因为对糟糕的代码以及为此找借口的人感到不满。而现在我需要再一次解释这个问题,同时我也不想与那些抱怨过度政治正确的人联系在一起。我为我以往不好的言行道歉,也知道社区存在问题,所以现在我确认了社区采用 CoC 行为准则。
除了 Linux 社区的激烈反应,还有人在 GitHub 上建立无行为准则 (NCoC) 项目。他们表示:
没有行为准则是一个开创性的新想法。旨在帮助您找到不会陷入无休止地争论成员应该如何在他们的社区中表现的社区和项目,只是发现永远不会完全满足任何人的喜好。如果……我们都同意怎么办?我们都是成年人。能够进行成人讨论。我们接受每个人的贡献,我们不在乎您是自由派还是保守派、黑人还是白人、异性恋还是同性恋,或者介于两者之间!事实上,我们不会提出或询问。我们根本不在乎。别的都无所谓!问:如果这让我感到受到歧视怎么办?如果您仅仅因为我们没有行为准则而有这种感觉,那么任何人都很难与您建立联系。这并不是要歧视任何人。我们不会照看我们网站上的人以确保他们尊重您,这并不意味着我们希望您感到不受欢迎,或者您受到不尊重的对待。这不是我们有时间做的事情。
这些反对声音也并不是完全都是耍无赖,他们的一些出发点是站得住脚的。比如,Contributors Covenant 与无行为准则 (NCoC) 最根本的矛盾在于“精英管理”。
开源社区一直都是“精英管理”,这里的“精英”并不代表他们说话多文明,而是这样一种文化思维:你的代码长什么样,你就什么样,而且代码永远不会说谎。谁写了最好的代码,并且写得最多,谁就获得了最多的资本。典型的代表就是 Linus 的名言:“Talk is cheap, Show me the code.”
但 Coraline Ada Ehmke 所推行的恰恰于“精英管理”相反:不能以能力这一单一维度说话,各个少数群体都应该被照顾。事实上, Coraline Ada Ehmke 还成立了一个名为“Greater Than Code”的播客,来宣传自己的观点。
https://www.greaterthancode.com/
而且,Coraline Ada Ehmke 曾经的一些行为,也让许多人不齿。比如,Coraline 曾要求 Opal 项目将一位对跨性别者不友好的核心贡献者移除。这引发了激烈的讨论,要知道 Coraline 并没有为 Opal 做出过贡献。
2、不执行的 CoC,就是一纸空谈,且会沦为权利的奴隶
Mozilla 的开放项目和社区专家 Emma Irwin 表示,除非实际执行,否则行为准则是毫无意义的。
就拿 Swift 之父 Chris Lattner 被迫退出 Swift 核心团队这事来说,Chris Lattner 所受到的“侮辱和大吼”都是违反了其 CoC 的。Swift 采用的是基于 Contributors Covenant 的行为准则,里面明确说明:当成员遭遇辱骂、骚扰或其他不可接受的行为时,可以联系核心团队成员审核,一旦审核认定事实,对方就会受到相应惩罚。
但当辱骂你的就是核心团队成员呢?很明显,Chris Lattner 遭遇的就是社区内的权利斗争,而这事 CoC 根本管不了。
我自己以及一些社区成员的想法已经越来越不受重视,甚至被核心团队所忽视;且团队透明性也出现了一定的问题。 我只是在浪费时间,我在这里不再是独一无二的了。—— Chris Lattner
3、管控的度也是一个难题,不管就乱,一管就死
CoC 尺度过头也不是没有例子。2016 年,Go 工作组更新了 Go 社区行为准则,引入了惩罚语言暴力的条款。这条条款规定,对违反行为准则的人的惩罚包括通报批评、永久性或临时性的封杀。
很快,这一条款就引发了争议。随后,Go 工作组也认识到他们的角色更多应该是辅助者而不是厉行纪律者,工作组可以向管理员(moderator)提供建议但没有权利去执行纪律。工作组主要是帮助解决分歧。
于是,在 2017 年 2 月,Go 工作组又移除惩罚语言条款。同时,他们还移除了匿名举报机制,因为他们发现匿名举报质量较低,而且因为匿名无法联系举报者获取更多信息,因此他们通常不采取任何行动,所以现在干脆删除。
结语:
对与错,好与不好不是本文要讨论的重点。在今天这样的文明社会,当前的情况是 CoC 越来越受到开源社区的推崇,但正如前文所说,CoC 的过度定义与执行缺失等问题还需要解决。对于所有参与开源的人来说,像 Linus 一样懂得反省,懂得控制自己,完善自己,或许 CoC 才能真正有所意义。