第 16 章

资助的伦理

一个社区活过第一个十年之后,它面临的问题就不再是“能不能活下去”——而是“谁为活下去买单”。这个问题听起来粗俗。在Clojure邮件列表最初的几千封讨论里,几乎没有人谈钱。他们谈宏展开、谈惰性序列、谈STM的语义边界。钱是Java世界的语言,是企业采购单上的数字,是那些穿西装的人操心的事。

Clojure社区早期成员大多是手艺人——他们用业余时间写代码,因为这件事本身有趣。当一件事以兴趣驱动时,谈论金钱不仅多余,甚至有些冒犯。兴趣的自发性似乎应该天然排斥经济计算。

但到了2014年,这种排斥感开始变得难以维持。那年十月,Toby Crawley在邮件列表上发了一封信。信很短,措辞谨慎。他没有发表宣言,也没有提出方案。他只是问:有没有人愿意一起资助某个开源库的维护工作?这个库被很多项目依赖,但维护者已经没有足够的时间投入。他说他知道有几家公司使用这个库,也许它们可以共同出资,让维护者能够专门为此工作一段时间。

这封信在列表上停留了几天,收到了几封回复。有人表示感兴趣,有人说不确定该怎么做,有人提出了技术上的替代方案——也许不需要资助,也许可以用另一种方式分担工作。讨论没有形成任何决议。它像很多邮件列表上的话题一样,慢慢沉了下去。

但Crawley提出的问题没有沉下去。它浮在社区意识的水面之下,每隔一段时间就会因为某个库的维护者退出、某个issue长期无人回应、某个公司在会议上私下询问“你们是怎么解决这个问题的”而重新浮现。

这个问题可以这样表述:当一门语言不再只是业余时间的爱好,而是许多人谋生的工具时,谁来为它的持续发展付费?这不是Clojure独有的问题。整个开源世界都在与它纠缠。但Clojure的情况有其特殊性。这门语言没有大厂背书——不像Go有谷歌,不像Rust有Mozilla(后来是基金会),不像Python有一整套企业赞助网络。Clojure的核心开发团队在Cognitect公司工作。

Cognitect是一家小型咨询公司,其商业模式建立在出售Clojure相关的专业服务和培训上。这种安排从2008年起一直运转着。Rich Hickey和核心团队受雇于Cognitect,Cognitect通过服务客户获得收入,Clojure的发展则作为这种商业活动的一部分被支撑着。

这是一笔隐性的交易。社区获得了一门持续演化的语言和一套稳定的核心库,而Cognitect获得了技术权威、品牌价值和客户渠道。交易的条件从未被写成文本。没有合同规定Cognitect对社区负有什么义务,也没有章程规定社区对Cognitect有什么权利。一切依赖于一种默契:Cognitect的利益与Clojure的健康是一致的,所以不需要分开讨论。

这种默契在早期运转良好。当社区规模很小、Cognitect的客户主要是早期采用者时,利益确实高度一致。但当Clojure的使用者从几十家增长到几百家公司时,利益开始分化。

一家金融科技公司使用Clojure构建交易系统,它的需求可能与Cognitect的咨询业务方向不完全重合。一个独立开发者维护着被广泛依赖的库,他的工作时间可能无法从Cognitect的收入中获得任何补偿。Cognitect的利益仍然是Clojure的利益——但不再是全部的利益。

2015年前后,这种分化开始变得可见。几个被广泛使用的库的维护者陆续减少了投入。有人换了工作,新雇主不使用Clojure;有人有了孩子,业余时间大幅缩水;有人只是失去了兴趣——写了七年同一个库之后,热情自然会消退。

每次这样的情况发生,依赖这些库的公司就会面临一个选择:要么自己接手维护,要么寻找替代方案,要么希望别人来做这件事。大多数公司选择了第三种。他们希望别人来做这件事。这种希望不是恶意的——它是理性的。接手维护一个开源库需要理解其代码结构、设计理念和历史决策,这需要大量时间投入。如果一家公司不是专门做工具开发的,它很难为这种投入提供正当性。

于是库就停在那里:issue堆积,pull request无人审查,用户在邮件列表上询问状态,得到的回复越来越稀疏。Crawley的2014年信件是在这个背景下出现的。它不是一次成功的倡议——它没有立刻催生任何组织——但它是一个信号。它表明社区中至少有一些人开始意识到,那些被默认存在的维护工作背后,并没有默认存在的经济支撑。

三年后,这个信号找到了它的制度形式。2017年,Clojurists Together正式启动。这个名字本身就是一个陈述:它不叫“Clojure基金会”,不叫“Clojure联盟”,而是“Clojurists Together”——Clojure使用者们在一起。它不是一个由企业董事会控制的基金会,而是一个会员制组织。使用Clojure的公司和个人可以通过小额定期捐款成为会员。资金被汇集起来,每个季度由会员投票决定资助哪些开源项目。被选中的项目的维护者会获得一笔资助——通常是一千到三千美元每月,为期三个月。

这个数字不大。它不足以让任何人变得富有。但它足以改变一些事情:一个维护者可以用它来减少其他工作的时间投入;一个公司可以用它来证明自己对社区有所贡献;一个项目可以用它来吸引新的贡献者——因为现在有人专门为此工作了。

但Clojurists Together的意义超出了经济数字。它是一次权力结构的变形。在此之前,Clojure核心开发的资金来源几乎完全是Cognitect。

这意味着语言的方向、优先级和节奏在很大程度上由一家公司决定——尽管这家公司的决定通常与社区需求一致,但这种一致性不是制度保障的,而是偶然的。如果Cognitect的经营状况恶化,如果它的战略方向改变,如果Rich Hickey离开或减少参与,社区几乎没有制度化的方式来表达或维护自己的利益。Clojurists Together改变了这种格局——尽管改变是渐进的、局部的和有条件的。当一个维护者从社区获得资助时,他获得了一种独立于Cognitect的合法性来源。

他的工作不再仅仅依赖于一家公司的商业策略是否与他所维护的库相关。他可以对用户负责——那些分散的、无法形成单一指令的、通过投票表达偏好的用户。这种独立性不是绝对的。大多数维护者仍然有其他收入来源。Clojurists Together的资助通常只占他们收入的一小部分。但它是一种象征性的独立:它表明社区作为一个集体可以支撑自己的基础设施,而不必完全依赖单一赞助者。

然而,经济支持从来不是中性的。钱进入一个系统之后,它会改变系统中的关系——即使金额很小。

2018年第一季度,Clojurists Together的资助轮中出现了一场争议。争议的起因在今天看来相当技术性:某个项目申请了资助,但一些会员认为这个项目不应该被优先考虑——他们认为另一个更需要维护的库应该获得这笔钱。讨论在邮件列表上展开。有人指出第一个项目的维护者同时在接受商业委托,因此不应该再获得社区资助;有人反驳说商业委托与社区资助覆盖的是不同的工作内容;

有人提出应该建立更明确的标准来界定哪些项目符合资助条件;有人则担心过多的规则会使这个刚刚起步的计划变得官僚化。

讨论持续了几天。它没有演变成公开的对抗或分裂。没有人威胁退出社区,没有人指责对方恶意,没有人将争议升级为原则性的战争。最终,一个决定被做出:争议项目被推迟到下一轮,让会员有更多时间讨论优先级问题。这个决定没有被所有人接受——邮件列表上的最后几封回复中仍然有人表达不满——但它被容忍了。这场争议的结果并不重要。重要的是它的形式。

它暴露了一个问题:当共识机制需要处理的不再只是代码,而是金钱时,那些在技术讨论中行之有效的惯例仍然适用吗?要理解这个问题的分量,需要先看清楚Clojure社区在技术讨论中形成了什么样的惯例。本书前面的章节已经描述了这些惯例的多个侧面。在补丁审查中,核心团队拥有最终裁定权,但他们很少直接否定一个补丁——他们更常见的做法是将讨论框架转向设计原则,让提交者自己意识到问题所在。

在命名规范中,社区形成了一套不成文的规则——名字应该短小、具象、使用英语常用词——但这些规则始终拒绝成为官方规范,从而保留了例外和创新空间。在测试文化中,测试逐渐成为发布库时的软性期望,但没有人被强制写测试——期望通过示范和模仿传递,而不是通过规则执行。

这些惯例的共同特征是一种特定的沉默机制。根本分歧不被充分公开讨论。冲突被去道德化——不说“你错了”,而说“这个方向与设计原则不一致”。离开者被以礼貌的疏远对待——不挽留,不批评,不记录他们离开的原因。社区记忆依赖口述传统而非书面记录保存——那些曾经激烈争论过的问题,在几年后往往只剩下老成员模糊的印象和一两封语焉不详的邮件。

这套沉默机制在技术领域是有效的——或者至少是可以维持的。技术分歧通常可以通过时间来解决:一个设计决定是否正确,最终会在使用中被验证或否定;一个替代方案是否可行,最终会有人实现它或放弃它。沉默不会消除分歧,但它允许分歧在不撕裂社区的情况下存在。金钱不同。

金钱涉及利益分配——谁的劳动被承认,谁的需求被优先满足,谁的贡献获得回报。利益分配不会通过时间自动解决。它需要通过讨论、协商和决定来达成——或者至少被管理。

如果这些讨论被沉默所笼罩,那么沉默的代价就不再只是某个技术决定未被充分审视,而是某些人的劳动被系统性地低估,某些人的需求被系统性地忽视。2018年的那场争议之所以没有升级,部分原因是Clojurists Together的规模还很小。涉及的金额不大,参与的人数不多,争议的影响范围有限。当几千美元的分配出现分歧时,人们更容易容忍一个不完全满意的结果——因为代价不大。

但如果金额增长到足以成为维护者的主要收入来源呢?如果投票结果直接决定一个人能不能继续从事他擅长的工作呢?这个问题在2018年没有被回答。它甚至没有被明确提出。但它在争议的边缘若隐若现——在那些表达不满但最终选择容忍的邮件中,在那些选择退出讨论而不是继续争辩的人身上,在那些接受了推迟决定但没有被说服的沉默里。

Clojurists Together的回应方式是程序性的。在接下来的几个季度里,它逐步完善了资助流程:候选项目的提名方式更加透明,投票标准更加明确,争议项目的处理有了更清晰的路径——可以被推迟、可以被要求修改范围、可以被撤回而不影响未来的申请。这些程序不是写在章程里的正式规则——至少最初不是。它们是实践中形成的惯例,通过一次次资助轮的反复试验而逐渐固化。

这套程序的效果在2019年变得清晰。那年,一个被广泛使用但长期缺乏维护的库获得了资助。维护者在接受资助的三个月里,修复了数十个积压的bug,重新设计了部分API,并发布了新的主要版本。资助者对这个结果感到满意——他们的钱产生了可见的效益。

但在资助期间也发生了一些摩擦。一些资助者提出了建议:希望维护者支持某些边缘用例,或者升级某些依赖项。维护者拒绝了这些建议。他的理由很简单:这些建议不符合库的设计方向。资助者中有一些人不太高兴——他们觉得既然出了钱,就应该有发言权。

但大多数人接受了维护者的判断。投票程序赋予了资助者选择项目的权力,但没有赋予他们指挥维护者的权力。维护者的权威来自他的技术判断——而这种判断的合法性仍然被社区承认。

这个案例展示了一种平衡的可能性。经济权力和技术权威之间没有发生直接冲突——它们通过投票程序、讨论规范和相互容忍被隔开了。资助者选择了他们信任的维护者,然后信任维护者做出技术决定。维护者接受了资助者的支持,但没有因此放弃技术判断的独立性。两者之间的张力没有被消除——它仍然存在,仍然可能在未来的某个时刻重新浮现——但它被管理在一个可容忍的范围内。

这种平衡与Clojure社区在其他领域形成的共识机制是同构的。在补丁审查中,核心团队拥有最终裁定权——这是技术权威的集中形式。但他们行使这种权力的方式不是命令式的:他们将讨论框架转向设计原则,让提交者自己看到问题所在。这种做法的效果是保留了提交者的尊严和参与感——即使补丁被拒绝,提交者也不会觉得自己被否定了。

在命名规范中,不成文的规则约束着新库的命名——这是集体偏好的分散形式。但这些规则始终拒绝成为官方规范,从而为创新和例外留出了空间。一个名字不够短小的库不会被禁止发布;它只是可能被更少人注意到。在测试文化中,写测试是一种软性期望——这是质量标准的传递形式。没有人被强制写测试;但如果一个库没有测试,有经验的用户会更谨慎地采用它。期望通过示范和声誉机制传递,而不是通过规则执行。

在所有这些领域,共识不是通过消除分歧达成的,而是通过管理分歧达成的——通过将分歧限制在可容忍的范围内,通过避免将分歧升级为原则性的对抗,通过允许那些无法被容纳的分歧以沉默的方式离开。

Clojurists Together将这种模式延伸到了经济领域。它创造了一个空间:在这个空间里,金钱可以被讨论而不至于毒化技术关系;利益可以被表达而不至于摧毁社区纽带;资助者可以行使选择权而不至于变成老板;维护者可以保持独立性而不至于变成雇工。这个空间是脆弱的。

它依赖于参与者的自我约束——资助者不把经济权力转化为技术控制;维护者不把技术权威转化为经济勒索。它依赖于不成文的规范——关于什么是合理的资助范围、什么是可接受的行为、什么是应该被容忍的分歧的共识。它依赖于那些选择留在社区中的人对某种共同价值的认可——这种价值可以粗略地描述为:让这门语言和它的生态活下去,比在任何一个具体问题上获胜更重要。

但这种脆弱性有一个前提:社区的经济规模保持在一个可管理的范围内。当Clojurists Together在2017年启动时,它每季度资助两到三个项目,每个项目获得几千美元。到2020年,规模有所增长——每季度可能资助四到五个项目——但总额仍然不大。大多数维护者仍然有其他收入来源。资助金额不足以成为任何人的主要收入,因此围绕资助的争议也不足以威胁任何人的生计。这种有限性使得争议的后果可控。如果一个维护者没有获得资助,他可以继续在其他地方工作;如果一个资助者对结果不满意,他损失的只是一笔小额捐款;

如果一个项目被推迟到下一轮,它的维护者不会因此陷入经济困境。有限性像一层缓冲垫,吸收了争议可能产生的冲击力。但如果这层缓冲垫变薄了呢?

2020年之后,这个问题开始变得更加紧迫。Clojure的使用在继续增长。依赖它的公司在增加——从金融科技扩展到医疗、物流和政府部门。但Clojurists Together的资金规模并没有以同样的速度增长。一些维护者开始表达担忧:他们的工作被越来越多的公司依赖,但他们的收入与这种依赖程度不匹配。这种担忧很少在公开场合被直接表达。它更多出现在私下对话中、会议走廊里、博客文章的字里行间。一个维护者在2021年的一篇博客中写道:“这个库大概有五十家公司在用——至少从下载量来看是这样。如果每家公司每年出一千美元,我就可以全职维护它了。但现实是,我每个月收到大概两百美元捐款。”他没有呼吁改变。他只是陈述了一个事实。另一个维护者在邮件列表上发过一封更直接的信——后来被他删除了。

他说他不理解为什么使用Clojure的公司不愿意为它的基础设施付费。“他们付给云服务商几万美元一个月,”他写道,“但让一个维护着他们每天依赖的库的人靠兼职收入生活。”这封信在列表上引起了几天的讨论,然后沉了下去。没有人反驳他的观点——但也没有人提出解决方案。这种沉默有一个结构性的原因:在开源生态中,免费使用是默认状态,为维护付费是例外。这不是Clojure特有的问题——几乎所有开源项目都面临同样的困境。但Clojure的情况因为社区的文化自我形象而变得更加复杂。

Clojure社区长期以来将自己视为手艺人社区——一群因为热爱而聚集在一起的人,通过手艺的标准而非商业的标准来评判彼此的工作。这种自我形象有其历史根源:早期成员大多是个人开发者,他们在业余时间写代码和库;早期的会议更像是手艺人的聚会而非行业会议;早期的邮件列表讨论充满了对技术细节的热情和对商业话题的漠视。

当一门语言的自我形象是手艺人的共同体时,谈论金钱就会显得格格不入——不是因为金钱不重要,而是因为它似乎属于另一个世界。手艺人的理想是自足的:他的工作本身就是回报;他的标准来自同行评价而非市场价值;他与用户的关系是直接的、非商业化的——他写代码,用户用代码,如果有人觉得有用就表示感谢。

这种理想在社区早期确实在一定程度上实现了。当用户和开发者是同一群人时——当使用一个库的人很可能也在维护另一个库时——相互性可以替代金钱。你修我的bug,我回答你的问题,大家都不计较时间投入。但当用户和开发者不再是同一群人时——当一家公司使用几十个开源库而不维护其中任何一个时——相互性就断裂了。库的维护者付出的时间越来越多,而回报仍然是感谢和认可——这些东西不会自动转化为房租和食物。2023年秋天,一位在Clojure社区活跃了十年的维护者在他的博客上写了一篇文章。文章的标题很平淡:“减少开源投入”。内容也很克制。

他说他决定减少在开源项目上的时间投入,因为经济压力让他不得不把更多精力放在有报酬的工作上。他没有批评任何人。没有指责任何公司。没有呼吁任何改变。他只是陈述了一个事实:他需要赚钱生活;开源工作无法提供足够的收入;所以他必须减少投入。文章的评论区里满是感谢和祝福。“谢谢你的工作。”“完全理解。”“祝你好运。”没有人问那个明显的问题:为什么一个被数十家公司依赖的库的维护者无法从他的工作中获得足够的收入?没有人问社区是否应该做些什么来改变这种状况?没有人问还有多少维护者正面临同样的选择只是还没有说出来?这篇文章很快沉入了互联网的深处。

但它提出的问题留在了那里——没有被回答,没有被讨论,没有被记录为社区历史的一部分。

这不是第一次有人安静地离开。在Clojure社区的十五年中,离开一直是一种沉默的行为。人们停止提交补丁、停止回复邮件、停止参加会议。他们的名字从活跃贡献者名单中消失。没有人询问原因;没有人记录理由;

没有人将他们的离开视为需要集体反思的事件。但当离开的原因不再是技术分歧或兴趣转移而是经济压力时,沉默的成本就变得不同了。技术分歧可以通过时间来消化——一个离开了的人的观点可能会被后来的人重新发现和讨论。兴趣转移是自然的——每个社区都会有人来来去去。但经济压力是一种结构性的信号:它表明社区的经济安排无法支撑那些为它工作的人持续工作下去。这不是个人的失败。它是制度的缺口。

到2024年,Clojurists Together已经运行了七年。它资助了数十个项目,支持了数十位维护者,成为Clojure生态中一个稳定的制度存在。它的成功是真实的:如果没有它,许多被广泛依赖的库可能已经停止维护;许多维护者可能已经因为经济压力而退出;许多公司可能已经因为基础设施的不稳定而放弃使用Clojure。但它也暴露了社区共识机制在物质基础层面的局限性。它证明了在没有大厂背书的情况下一个语言社区可以通过分散的小额资助维持其基础设施。

这个证明本身是有价值的:它意味着Clojure的存活不完全依赖于Cognitect的经营状况或Rich Hickey的个人参与;它意味着社区作为一个集体可以承担起一部分支撑自己的责任。但它也证明了这种维持是脆弱的。资金规模有限意味着许多维护者仍然需要其他收入来源;参与度不稳定意味着每个季度的资助能力可能波动;争议管理依赖于不成文规范意味着一次严重的冲突就可能破坏平衡;而沉默的代价在持续累积——那些因为经济压力离开的人没有被倾听、没有被记录、没有被学习。

当Rich Hickey在2020年代逐渐减少对Clojure日常开发的直接参与时这个问题变得更加尖锐。Hickey的个人权威曾经是社区共识机制的一个重要支柱:当他在某个问题上发表意见时讨论通常会迅速收敛;他的技术判断被视为接近最终裁定;他的存在本身提供了一种连续性——无论发生什么这个人还在那里。但他的退出并不意味着这种权威的消失。

它分散了:一部分留在核心团队中一部分流向Clojurists Together的资助决策一部分沉淀在邮件列表的讨论规范里一部分消失在那些已经离开的人的记忆中。

Clojurists Together在这个过程中扮演了一个微妙的角色。它提供了一种替代性的权威来源——不是个人的而是集体的不是技术性的而是经济性的不是不可变的而是可投票改变的。当一个维护者从社区获得资助时他获得的不仅是金钱还有合法性:他的工作被社区承认为有价值;他的技术判断被信任为值得支持;他的独立性被尊重为不可收买。这种合法性不同于Hickey的个人权威。它是分散的、程序性的、可被质疑和修改的。它不依赖于任何一个人的在场或持续参与。从说它是Clojure社区“不可变的共识”在经济维度上的延伸:不是某个人决定方向而是集体通过讨论和投票形成方向;不是一次性决定永久有效而是每个季度重新确认;不是消除分歧而是管理分歧。但这种延伸尚未完成。

到2024年Clojure社区仍然在探索如何在经济维度上维持其共识机制。Clojurists Together是一个开始但它不是最终的答案。它留下的问题与它解决的问题一样多:如何让更多使用Clojure的公司参与资助?如何在资助金额增长的同时保持争议管理的有效性?如何处理那些因为经济原因离开的人留下的知识空白?如何在沉默文化和利益表达的张力之间找到可持续的平衡?

这些问题不会自行消失。它们会在下一个维护者退出时、下一场资助争议中、下一篇安静的告别文章里重新浮现。而当它们浮现时那些已经离开的人不会在场帮助回答它们——他们的记忆已经随他们一起离开了这个建立在沉默之上的社区只能依靠那些留下来的人去重新学习那些曾经被知道但从未被充分记录的东西。这或许是Clojurists Together这个故事最深的讽刺:它创造了资助开源工作的制度形式却没有创造记录那些未被资助的工作为何消失的制度形式;

它让金钱可以被公开讨论却没有让金钱背后的沉默可以被公开打破;它为社区提供了经济支撑却没有为那些因为缺乏支撑而离开的人提供被记住的方式。

2024年夏天一封邮件出现在Clojure邮件列表上。发信人是一个相对新的社区成员他说他正在做一个关于Clojure生态健康状况的调查希望了解有多少库的维护者面临经济压力有多少公司愿意为基础设施付费有多少人因为经济原因考虑或已经减少了投入。邮件的措辞谨慎而礼貌——符合这个社区一贯的风格。几天之内他收到了几十封回复。其中一些来自正在挣扎的维护者另一些来自愿意付费的公司还有一些来自已经离开但仍在订阅列表的人他们写下了自己离开的原因第一次把这些原因写下来让它们成为可以被搜索、被引用、被记住的文本。这是一个微小的变化。它没有解决任何结构性问题没有创造任何新的制度没有改变任何人的经济状况。

但它做了一件事:它把一些沉默变成了声音把一些正在消失的记忆固定在了文本中把一些从未被充分讨论的问题带到了可以被讨论的表面。这是不是足够没有人知道答案。但当根本性的变化来临时——当经济压力变得不可忽视当沉默的成本超过维持它的收益当那些未被讨论的问题终于要求被回答时——那些仍然留在社区中的人将不得不面对一个问题:他们继承的共识机制是否足够强韧来承载这些回答的重量还是说那些安静的离开和正在消失的记忆已经使得这种共识变成了一座地基已经被掏空的建筑表面完好而内部中空只等着一次不可避免的坍塌来揭示它早已存在的裂缝。