[译] 深入浅出Rust基金会

本篇是对 RustConf 2023中的Rust Foundation: Demystified这一视频的翻译与整理, 过程中为符合中文惯用表达有适当删改, 版权归原作者所有.

大家好,我是Sage Griffin,我的代词是they/them。我今天来这里是要谈谈Rust基金会。

要了解基金会实际做什么,我们需要理解美国国内税收法第501©6节。开玩笑的,我们不会真的讨论税法。不过,相关税法确实专门提到了职业足球联盟,这让我很失望Rust基金会不是Rust联合足球俱乐部。这是我们的CEO Beck,请大家在之后的欢乐时光找她,告诉她你们想看到AFC Rust成立。我们可以让它实现,加油!

那么,基金会到底做什么呢?从根本上说,我们的存在是为了通过支持Rust项目和社区来支持Rust语言。这体现在几个方面:

基金会最主要的工作是从使用Rust的各公司筹集资金,并将其注入生态系统。一种方式是通过我们的资助计划,项目内部和社区的人提交他们想做的工作提案,然后从基金会获得资金来完成这些工作。根据他们所在地区的情况,这通常不足以覆盖所有费用,所以我们也会聘请全职工程师,他们的唯一工作就是为Rust项目做贡献。我们一般会谨慎地这样做,不想只有少数人从基金会的存在中受益。

但是要维持项目运转,不仅仅需要软件工程师。Rust依赖很多基础设施,这些都很昂贵。2022年,我们的会员为Rust捐赠了近100万美元的资源,包括CI/CD文件托管、带宽、crater等工具(用于编译crates.io上的每个crate以测试编译器的变更)等。

最后,项目的法律需求比你想象的要多。crates.io需要处理它托管内容的版权法问题 - 收到DMCA下架请求时该怎么办?项目希望继续持有Rust商标,需要做什么来确保这一点?还有一些随机出现的情况,比如"Rust有很多美国贡献者,在审核拉取请求时我们需要关心美国对伊朗的制裁吗?"我知道这听起来像个荒谬的问题,但在我领导crates.io团队时,这确实是我必须咨询律师的实际问题。另外,在大多数国家,人们可以因为任何原因起诉你。如果项目成员因为他们代表项目所做的工作而被起诉,该怎么办?所有这些情况都需要法律资源,这是基金会提供的。

所以我们提供的大部分支持都给了Rust项目。但谁才是真正的Rust项目呢?这是一个非常模糊的问题。我可能得花30分钟在这里试图明确回答这个问题。为了我们的目的,我会给出一个非常简短的答案:它是由Rust领导委员会管理的那群人。

项目完全独立于基金会。它是唯一负责语言方向和技术决策的团体。我们为他们提供支持,有时代表他们担任管理人,但我们对他们没有任何直接控制。我们稍后会详细讨论这种关系是如何成文的。

但首先,我想提醒大家我们在高海拔地区,这意味着你需要比平时喝更多的水。Rust基金会关心Rust工作者的水分补充,所以让我们都喝点水吧。

好的,我们已经讨论了我们支持语言的方式,但基金会还做什么呢?有时会出现需要一个可以合理自称为Rust的法律实体的情况,成为这样的实体是基金会扮演的另一个角色。

当基金会最初成立时,最小可行基金会是一个可以持有Rust商标的法律实体,而不是Mozilla。Mozilla当时持有商标,但不想继续这样做。但商标并不是唯一需要法律实体的情况。我想讲一个在我担任crates.io团队共同负责人期间发生的案例,这是在基金会成立之前很多年的事了。

GitHub刚刚发布了一个新功能的早期预览,它会自动通知你是否将访问令牌(如AWS的)推送到公共仓库,这意味着任何人都可以使用你的账户构建东西。因为这是该功能的早期预览,它主要关注像亚马逊这样的大公司,没有简单的方法让像crates.io这样的开源项目加入。但我在那里有不少朋友,所以我找了些关系,联系到了负责这个功能的团队。

由于这是非常早期的版本,首先需要做一些事情,最重要的是签署一堆法律文件。我想说明的是,这并不是要抨击GitHub。当时他们试图解决的问题是人们不小心泄露了他们的S3密钥(Amazon的文件托管服务),然后当有人开始在他们的账户上挖加密货币时,他们会收到一大笔AWS账单。GitHub对这些大公司有期望是完全合理的,这个功能仍在开发中。

但我不是一家公司,我只是一个开源贡献者。所以我的反应是:"呃,我能签这个吗?我可以代表自己签,但我不认为我有权代表Rust项目的其他人签合同。"但当时没有其他选择。我花了些时间与Mozilla法律团队交谈,看看是否可以让他们作为这个法律实体,因为他们拥有Rust的商标,但他们不愿意这样做。老实说,我不怪他们。

所以这最终没有实现。GitHub建议我们在Open Collective上设置一些东西,但我只是项目中的一个人,不是核心团队成员,我觉得我没有足够的影响力来推动任何这样的事情。我再次强调,我不是要批评GitHub,我不认为他们处理事情的方式有任何问题。一旦这个功能离开预览状态,很多这样的官僚程序就消失了。最终,crates.io团队确实整合了这项服务。今天,如果你将你的crates.io令牌发布到公共GitHub仓库,它会自动被撤销,你会收到通知。

我不认为GitHub的做法有什么错,但当时项目还没有准备好以那种方式与公司打交道。虽然这个案例最终得到了解决,但还有很多情况下,这种官僚程序永远不会消失。比如,说到底,任何实体代表开源项目签署类似NDA的东西实际上都是毫无意义的。我知道这里有一些团队成员,请举手示意,当你写PR时,有多少人考虑过Rust基金会是否签署了NDA?是的,零,这正是我所想的。

但是说官僚程序不应该存在并不能使它消失。这不是人们来到开源世界要处理的事情,这就是为什么我们需要一个基金会来为你处理它。这不仅仅涉及签署法律文件,作为个人贡献者与大公司打交道可能会让人感到非常不知所措。

在基金会成立前的几年里,我全职从事crates.io的工作,这意味着我需要找资金来支付账单。当时,我很容易从Mozilla那里得到一些支持,因为他们实际上有一个专门负责Rust的团队,那个团队有一个我认识的经理,我可以和他交谈,那个人有预算可以用来资助我。但我没有期望他们永远承担我的费用。我不是Mozilla的员工,所以我需要从其他公司获得支持。

当时我经常听到一些传言,比如Google想给Rust更多钱,Microsoft想给Rust更多钱。听到这些真的很棒,让我很兴奋,但作为一个为Rust做贡献的个人,我该如何与这些大公司中关心Rust、了解我工作的人联系上,而且这个人还有权签署资助我工作的合同呢?导航这些结构非常耗时,而且我不擅长。我是个程序员,我想把时间花在编程上,但我要花三分之一到一半的时间来确保我能支付账单。到那时,找一份兼职工作反而更容易,不用deal with this。

现在是时候再次补充水分了,这是由Rust基金会带给你的。基金会关心Rust station补水,所以让我们都喝点水吧。

你可能会问,如果公司给基金会钱,然后基金会用这些钱雇全职工程师为Rust工作,为什么我们不直接让这些人为这些公司工作呢?这个问题有几个不同的答案,但第一个答案是:他们确实这样做了。

基金会雇用工程师并不排斥我们的会员公司雇用全职人员从事Rust工作。我们的许多会员公司都有多人全职从事编译器或项目其他部分的工作,我们鼓励这样做。但如果这是人们获得全职开源工作的唯一方式,我们的情况会更糟。

当你在开源领域工作时,你最大的担忧之一就是工作保障。当时局艰难时,开源贡献者通常是首先被裁掉的职位。毕竟,你没有为公司的底线做出任何贡献,而且这是一个开源项目,如果公司不付钱让人做这项工作,别人会免费来做,对吧?这听起来可能有点夸张,但这些都是我过去全职从事开源工作时,工作被裁掉时实际听到过的话。

这也是为什么我感觉在基金会工作比我以前全职从事开源工作时更有保障。我相信我们大多数人都记得Mozilla不得不裁掉几乎整个Rust团队的情况,这产生了如此大的影响,以至于人们开始质疑这门语言的未来。当人们为基金会工作时,这就不是问题了。我们都以某种形式从事开源工作,所以没有人会因为开源是最不重要的事情而被裁掉。这是我们存在的根本原因,我们不面临与会员公司相同的经济压力。

这并不是说我们完全免疫。当时局艰难,裁员发生时,我们实际上听到的和你们一样的话。是的,没错,我们也听到"宏观经济条件"这个词。如果你被告知尽管本季度利润创纪录,但由于宏观经济条件你不会得到加薪,那么我们也看到我们的预算受到影响。这可能以公司降低他们的会员等级或减少他们对我们社区资助计划等倡议的贡献的形式出现。

话虽如此,当我们的资金减少时,影响可能会因我们资金来源的多样性而有所减轻。基金会没有人的工作与单个公司的捐赠挂钩。如果一家公司的资金开始减少,我们可以用其他公司的资金填补空缺,而不是不得不裁员。

但我们预算的减少确实对我们的一些短期投资产生了可见的影响。例如,今年由于资金减少,我们只能发放去年一半左右的资助。当最近一轮资助发放时,许多人指出,维持我们前几年的预算所需的成本是多么少,特别是当你看到我们会员的资金规模时。他们是对的。

我只代表自己,不代表其他任何员工,我对人们的沮丧感同身受,因为这会产生多么小的影响。但一家公司成为基金会会员并不意味着我们可以无限制地使用他们的钱包。当我们有倡议需要资助时,我们仍然需要这些公司做出贡献。如果你现在为一家会员公司工作,你可以通过尝试在内部向你的领导施压来提高他们的会员等级,或者为我们的社区资助计划等事物提供额外的贡献来帮助。如果你为一家不是基金会会员的公司工作,请考虑要求他们加入。特别是银牌会员对小企业来说惊人地实惠。如果你认识我,你就会知道我经常大声说这一点,因为它真的非常实惠。

公司雇用人员可能不足的另一种方式是,通常只有已经是主要开源贡献者的人才能得到这些职位。这里有一些例外,但如果你看看大公司雇用的全职从事开源工作的人,往往几乎全是在获得这份工作时已经有大量贡献的多产开源贡献者。这很好,尤其是因为这些人应该得到比基金会能提供的更高的薪水,但它也留下了很多空白。

如果你想全职为开源做贡献,你不应该需要花费大量的夜晚和周末做无偿劳动作为先决条件。而且,更多时候,人们在这些职位上被雇用的方式是,他们已经有了开源工作,只是在寻找someone来支付他们继续做这项工作的费用。这很好,但这并不是开源可维护性的全部问题。这些公司并不处于一个很好的位置来确定Rust项目中的某个团队是否可以使用更多支持,并主动雇人来增加他们的人员。

相比之下,基金会经常与所有Rust团队保持联系,当我们发现有预算可以引入另一名工程师时,我们处于一个很好的位置,可以联系所有团队,看看哪些团队可能有兴趣引入新人。这也是我们为可能无法以其他方式为开源做贡献的人打开大门的好机会。

这也是我们在社区资助计划中关注的内容。我们与Rust团队合作,找出哪里有帮助指导和引导新贡献者的能力,然后我们确保每年有一些资助给予经验较少的人,并帮助他们开始贡献。希望这能作为新贡献者进入项目的一个入口。这些人中的许多人后来成为团队成员,甚至追求全职的开源职业。

当你全职从事开源工作时,一个真正开始浮现在脑海中的问题是:谁决定你的优先事项?

多年前,当我全职从事Ruby on Rails工作时,我遇到了这个问题。当我被雇用时,我和公司之间有一个理解,我将做对Rails项目最有利的事情,这可能并不总是与公司利益一致。我主要关注数据库驱动程序代码。当时,大多数新的Rails应用程序使用PostgreSQL,但我工作的公司使用MySQL。这两者的区别对你们来说并不重要,但它们有不兼容的功能集,对一个有利的工作并不总是对另一个的用户有利。

随着时间的推移,我开始被告知在我的工作时间内不能再做PostgreSQL特定的功能了,因为公司不能直接从中受益。但对于大多数Rails用户来说,这是我时间的最佳利用。当你是一个开源维护者时,这就是你不想要的那种干扰。你总是想能够为你的用户做最好的事。通过让基金会处于中间位置,我们可以使我们的工程师免受这些问题的影响。

这并不是说我们的员工完全免疫于企业影响。我们得到的资金经常附带一些条件,比如这笔钱需要用于改善Rust的开源供应链安全。有没有人真的厌倦了每两秒钟就听到"开源供应链安全"这个词?我看到很多基金会员工都在举手。但根据法律,我们的工作必须是为了所有Rust用户的利益。这写在我们的章程中,也写在美国税法中。我们的存在是为了公共利益,而不是为了任何特定成员的需求。

这一点通过以下事实得到进一步巩固:当涉及设定基金会的高级目标和目的时,Rust项目与我们的会员公司拥有同等的权力。

那么,基金会的优先事项实际上是如何设定的呢?员工在某种程度上是自我指导的,但我们的高级目标最终是由我们的董事会设定的。但谁控制我们的董事会呢?我想我们都知道答案...好吧,让我们认真点。

实际答案是我们的会员公司和Rust项目拥有平等的控制权,这一点非常重要。项目在我们的董事会中有五个席位,我们会员公司持有的席位数随着我们会员的变化而变化。但即使两组之间的席位数量不同,它们实际上拥有平等的权力。

要通过董事会投票,需要我们的会员董事和项目董事都以超级多数票通过。这意味着,如果我们的会员公司设法全部聚在一起想要进行大规模的企业收购(首先就很难组织起来),即使发生了这种情况,他们想以某种方式利用基金会从我们的开源贡献者那里重新获得控制权并接管项目,他们还需要想办法让我们五名项目董事中的四名与他们一起投票,否则永远不会通过。

这在实践中也从未发生过。董事会投票的事情远没有人们想象的那么多,当事情确实付诸表决时,几乎总是一致通过的。最终,我们的会员公司和Rust项目在优先事项上非常一致,每个参与者都付出了很多努力来保持这种状态。如果对某事有分歧,我们的董事会会在投票之前继续讨论。事实上,我们董事会内部的共识建立过程实际上看起来很像Rust项目。

你们不必相信我的话。几乎所有董事会投票都记录在我们的公开会议记录中,你可以在基金会网站的资源部分找到这些记录。

现在是另一个补水时间,由Rust基金会带给你们。基金会关心Rust的补水。演讲结束后,请务必停在Rust Station补水站,由Rust基金会提供,方便地位于注册处旁边。

既然我已经花了近30分钟跟你们谈论基金会,你们可能会想知道为什么要听我说。嗯,我在基金会的角色是社区倡导者。你会注意到这是复数的社区,这是因为Rust社区不是一个单一体,我的工作是确保基金会以Rust项目和所有Rust社区的最佳利益行事。

我来这里是因为在全职从事开源工作超过十年后,我对开源资金的破碎状况有一些非常强烈的看法,我希望看到基金会确保今天的开源贡献者不必处理我曾经处理过的所有烂事,因为那真的很累人。

我也非常关心项目和基金会的诚信和透明度。几乎所有与我共事过的人都可以证明,如果我看到我担心的事情,或者我认为社区应该关注的事情,我会非常大声、非常公开地敲响所有警钟。

虽然我们最近在基金会或项目内部并不缺少争议,但我非常有信心,两个组织在发现缺陷时都在采取正确的步骤来改进自己。对我来说,重要的是人们知道,当你看到我谈论基金会的内部运作时,你得到的不是经过净化的观点,你得到的是我对此事的诚实看法,即使这个观点对基金会不利。

我的同事确实在我向你们所有人展示之前有机会看到这个演讲,但我对其内容有完全的编辑控制权。每当你看到我就项目或基金会内部发生的事情发表意见时,情况总是如此。

我工作的一部分是与项目和社区保持开放的沟通渠道。如果你对基金会有任何问题或担忧,或者你只是想对我们做的某件事大吼大叫,或者如果有什么基金会可以做的来支持你,请不要犹豫,通过这些渠道联系我。我也会在之后的欢乐时光出现,所以不要犹豫,来找我。

非常感谢你们的时间,请别忘了保持水分补充!

相关推荐
Alive~o.08 分钟前
Go语言进阶&依赖管理
开发语言·后端·golang
花海少爷11 分钟前
第十章 JavaScript的应用课后习题
开发语言·javascript·ecmascript
手握风云-11 分钟前
数据结构(Java版)第二期:包装类和泛型
java·开发语言·数据结构
许苑向上14 分钟前
Dubbo集成SpringBoot实现远程服务调用
spring boot·后端·dubbo
喵叔哟31 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生37 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
hopetomorrow1 小时前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
郑祎亦1 小时前
Spring Boot 项目 myblog 整理
spring boot·后端·java-ee·maven·mybatis
小牛itbull1 小时前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
请叫我欧皇i1 小时前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript