来源:RTC @scale 2024 主讲人:Sean DuBois 演讲题目:Open Source from One to At Scale 视频地址:https://atscaleconference.com/videos/open-source-from-one-to-at-scale/ 内容整理:令潇越 Sean 分享了他在开源领域的经验,包括建立具有巨大影响力的工作时所带来的喜悦,开源项目执行不当时所带来的挫折,以及有效开展时可以获得的成功。当开源项目执行良好时,对用户、开发者和公司都具有巨大的好处。
目录
对我(Sean DuBois)来说,做开源的原因可以分为两类:
图 1 主讲人介绍
我创建了 Pion,这是一个适用于 RTC 的 Go 软件集合,其中最受欢迎的是 WebRTC 实现,它被用作许多开源项目的组件。此外,我还写了《WebRTC for the Curious》,这是一本关于 WebRTC 实际工作原理的书籍。以上这些是已完成的工作,最近我参与了将 WebRTC 添加到 OBS,这样就可以通过 WebRTC 进行广播,而不是通过 RTMP。目前,我还在 LiveKit 担任全职的 Field CTO。
我此前在 WebRTC 的许多不同领域都有经验,我曾看到人们将其用于机器人、广播、 AI。虽然我并非所有这些领域的专家,但我能在边缘帮助人们解决他们的 WebRTC 问题,这就是我对这个领域感到如此兴奋的原因。
首先,我想谈谈作为一家公司,开源为什么有益。
图 2
对我来说,真正让我相信 WebRTC 值得我在公司投入时间的原因之一是,我们在 AWS 工作时涉及到了 Kinesis 视频流 (KVS)。因为安保机器人、快递等很多产品需要进行实时视频处理,但问题是他们无法使用当时已有的任何 WebRTC 实现,所以我们对 WebRTC 进行了纯 C 实现。当时,AWS 已经非常熟悉 GitHub,所以我们默认将东西放在 GitHub 上。但让我非常兴奋的一件事是,我第一次能够直接与客户进行交流,而不再需要猜测他们究竟想要什么,我们应该做些什么。这些开发者(客户)会登录 GitHub 并直接提出问题,有时他们甚至会提交 PR,就像图 2 中的截图,这对我们每个人来说都是更好的体验。
图 3
下一次我真正开始理解并热爱开源是在我使用 juice 作为一个库时。我对 GStreamer 的参与非常有限,比如添加 AV1 支持和一些小的 bug 修复,但我遇到了一个非常严重的视频合成器的段错误问题,完全超出了我的领域。我感到非常迷茫,所以我开始时只是发布了一个 gst launch 的问题。令人惊讶的是,另一个开发者贡献了修复代码。我估计这个问题可能需要我花费四到六周的时间来解决或者很可能我自己无法轻易修复它,而所有其他遇到这个问题的人也都得到了解决。当我看到一些公司在孤立中工作,他们想要保留所有信息的专有性,其实他们并没有节省时间,让外部人员参与可能会加速进展。
图 4
之后,我看到了类似的问题,那就是人们倾向在孤立环境中工作。我曾在亚马逊工作过,他们的 Silk 浏览器是基于 Chromium 的一个分支,专门用于亚马逊的设备。我们有数百个专门针对这些设备的补丁,有些添加了亚马逊的特色功能,无法开源,但我相信其中很多内容本应该向上游贡献,但由于这个过程太复杂,最终还是选择了保持在内部。
因此,我们必须雇用一个六人团队,不断进行所谓的"升级",即将 Chromium 的主分支合并到我们的分支,以确保我们不会落后于 14 天以上。然而,浏览器领域的发展速度非常快,可能突然间某个补丁就不再适用了,于是我们不得不去弄清楚这个补丁的最初目的是什么。很多时候,原作者已经离开了,无法向他们询问,我们不确定是否可以删除这些补丁,甚至可能无法修改 Chromium 以满足我们的需求。我相信这些补丁是一种负担,从短期来看,将功能迅速推出去感觉很好,但从长远来看,这却拖慢了我们的步伐。也许你认为在内部使用开源项目并拥有所有这些补丁似乎是一种竞争优势,或者认为向上游贡献是浪费时间,但事实并非如此,它的好处不言而喻。
作为开发者,开源有着诸多好处。
图 5
对我来说,我的技术生涯始于俄亥俄州。起初,我与科技界没有任何联系,对开源一无所知。然而,我对计算机充满了热爱,喜欢摆弄各种东西,曾经创建过像《毁灭战士》(Doom)WAD文件之类的东西。但我始终找不到切入点,曾经跑去书店买书,试图弄懂一些编程语言,但最终都以失败告终。直到我开始一份工作,负责安装电脑和拉电线,公司使用了 FreePBX。因此,我能够为 FreePBX 添加一些小功能,比如修改一些用户界面或行为上的小变化。多亏了这个,我才有了今天的职业生涯。在我掌握了 FreePBX 的一些知识后,我得到了另一家公司的推荐,然后全职从事 FreePBX 的开发工作,而这一切都是因为开源才得以实现。如今,我会利用开源项目来招聘其他人。
图 6
下一个问题是独自工作速度较慢,我第一次意识到这一点是在参与 PHP 项目时。我当时已经在开源项目上工作了几年,虽然在公司项目上投入了很多时间,但在那之外的项目上却并不多。所以作为我的第一次尝试,我加入了 PHP 项目,我发现能带来新的想法,并且在学习的过程中取得了进步。我们分工合作,我也将这种方式带到了其他项目中。带入更多外部人员,能获得更多关于项目应该如何运作的多样化意见,工作进展得更快。
图 7
作为开发者,另一个非常重要的事情是开源项目将带给你意料之外的好处。当我开始参与 Pion 项目时,我以为它只是我工作的另一件事情。我会玩得开心、学到东西、构建一些东西,也许我能在工作中使用它,这是我最大的目标,除此之外我没有更高的愿望。但它给了我更多,今天我在这里分享的唯一原因就是因为我开始了那个项目。我能够旅行,遇到了那些对 WebRTC 和开源充满热情的人,这让我充满了能量,我的工作也变得更有趣。就像我之前提到的,我参与了机器人和人工智能的工作,这些事情我以前永远都见不到,但是因为我参与了 Pion 项目,我得以见识到了这些事情。对我来说,我对每一个机会都说“是”。你可能不会直接通过开源项目赚钱,但你将获得的经验和其他事物将远远超过你直接获得的金钱。
最后一部分是关于作为开源软件的用户,这给你带来了什么好处。
图 8
我曾经参与过的一个项目是之前提到的 OBS。对我来说,我真的认为 WebRTC 将为广播领域带来许多好处。例如,现在使用 RTMP 时,如果有人发送消息,你会在 3 到 5 秒后做出回应,但是使用 WebRTC可以在 200 毫秒内做出回应,这是完全不同的体验。另一个我非常兴奋的是更好的屏幕共享或相机画质,还有其他一些非常有趣的事情,比如逆向网络。作为开源软件 OBS 的用户,我可以自己进行更改、分发补丁,其他人可以应用和使用它们。这适用于所有开源项目,你可以将其打造成你想要的样子。
图 9
另一个我从中学到很多的开源项目是《WebRTC for the Curious》。这是一个关于 WebRTC 究竟是如何运作的开源书籍,我把对 WebRTC 协议的学习记录下来。在这个过程中,我遇到了许多正在做有趣事情的开发者,这是我第一次与那些从事嵌入式、机器人和无人机等领域的人交流,我惊讶地发现人们可以构建出多么有趣的东西。我开始意识到,不能仅仅依赖一种软件来解决所有问题。
目前我在 LiveKit 工作,LiveKit 是一个纯 Go 实现的 WebRTC 服务器,附带了所有必要的功能,例如 SDK 和协议桥接等,这些都是人们从零开始构建的。这个开源版本也可以进行托管,你可以使用它并支付费用,LiveKit 会为用户运行这项服务。LiveKit 鼓励人们的自主性,用户可以通过 GitHub 下载 LiveKit SFU 的代码,自行解决问题,而不必向支持部门发起支持请求。LiveKit 还提供了独立性,用户不会被供应商锁定。
我担心的一件事是开源和金钱的结合,我读到过很多公司重新许可项目的报道,我担心我会不会陷入同样的困境,商业压力是否会影响产品质量。但最终,我愿意接受这个挑战。只要自己的动机和客户的利益保持一致,就能够做正确的事情。比如,LiveKit 根据带宽计费而不是时间,它正推动用户使用 VP9 而不是 H.264,这保持了和用户利益的一致性。
开源让用户能够自行定制和修改代码,开发者也可以通过开源项目展示自己的能力和贡献。对于公司来说,开源项目能吸引更多的贡献者,从而提升产品的质量和功能。