Electron 10 周年庆 🎉
electron/electron
存储库的第一个提交是在 2013 年 3 月 13 日1。
10 年过去了,来自 1192 位独特贡献者的 27,147 次更多提交后,Electron 已成为当今最流行的桌面应用程序构建框架之一。这一里程碑是庆祝和回顾我们迄今为止的历程,以及分享我们一路走来所学到的知识的绝佳机会。
如果没有所有为项目贡献时间和精力的人,我们今天将无法取得这样的成就。虽然源代码提交始终是最明显的贡献,但我们也必须承认那些报告错误、维护用户空间模块、提供文档和翻译以及在网络空间中参与 Electron 社区的人们的努力。作为维护者,我们认为每一份贡献都弥足珍贵。
在我们继续阅读这篇博文的其余部分之前:感谢您。❤️
我们是如何走到今天的?
Atom Shell 是作为 GitHub 的 Atom 编辑器 的基础构建的,该编辑器于 2014 年 4 月公开发布测试版。它是从头开始构建的,作为当时可用的基于 Web 的桌面框架(node-webkit 和 Chromium Embedded Framework)的替代方案。它有一个杀手级功能:嵌入 Node.js 和 Chromium,为 Web 技术提供强大的桌面运行时。
一年之内,Atom Shell 的功能和受欢迎程度开始迅速增长。大型公司、初创企业和独立开发者都开始使用它构建应用程序(一些早期采用者包括 Slack、GitKraken 和 WebTorrent),并且该项目被恰当地重命名为 Electron。
从那时起,Electron 迅速发展,从未停止。以下是根据 npmtrends.com 提供的数据,我们每周下载次数随时间推移的变化情况。
Electron v1 于 2016 年发布,承诺提高 API 稳定性并改善文档和工具。Electron v2 于 2018 年发布,并引入了语义版本控制,使 Electron 开发人员更容易跟踪发布周期。
到了 Electron v6,我们转向了与 Chromium 相匹配的定期 12 周主要版本发布节奏。这一决定代表了项目理念的转变,将“拥有最新的 Chromium 版本”从锦上添花变成了优先事项。这减少了升级之间的技术债务,使我们更容易保持 Electron 的更新和安全。
从那时起,我们一直像一台运转良好的机器,在 Chromium 稳定版发布的同一天发布新的 Electron 版本。到 2021 年 Chromium 加快发布周期至 4 周时,我们能够耸耸肩,相应地将我们的发布周期增加到 8 周。
我们现在已经到了 Electron v23(并且还在继续),并且仍然致力于构建用于构建跨平台桌面应用程序的最佳运行时。即使近年来 JavaScript 开发者工具蓬勃发展,Electron 仍然是桌面应用程序框架领域中稳定且经受考验的中坚力量。Electron 应用程序如今随处可见:您可以使用 Visual Studio Code 进行编程,使用 Figma 进行设计,使用 Slack 进行沟通,使用 Notion 记录笔记(以及许多其他用例)。我们对这一成就感到无比自豪,并感谢所有使之成为可能的人。
我们一路走来学到了什么?
通往十年里程碑的道路漫长而曲折。以下是一些帮助我们运行可持续的大型开源项目的关键事项。
使用治理模型扩展分布式决策
我们必须克服的一个挑战是在 Electron 首次流行后处理项目的长期方向。当我们是一个由几十名工程师组成的团队,分布在不同的公司、国家和时区时,我们如何处理这个问题?
在早期,Electron 的维护者小组依靠非正式的协调,这对于较小的项目来说速度快且轻量级,但无法扩展到更广泛的协作。2019 年,我们转向了一个治理模型,其中不同的工作组拥有正式的责任领域。这有助于简化流程并将项目所有权的一部分分配给特定的维护者。如今,每个工作组 (WG) 负责什么?
- 发布 Electron 版本(发布 WG)
- 升级 Chromium 和 Node.js(升级 WG)
- 监督公共 API 设计(API WG)
- 确保 Electron 安全(安全 WG)
- 运行网站、文档和工具(生态系统 WG)
- 社区和企业外联(外联 WG)
- 社区审核(社区与安全 WG)
- 维护我们的构建基础设施、维护者工具和云服务(基础设施 WG)
在我们转向治理模型的同时,我们还将 Electron 的所有权从 GitHub 转移到 OpenJS 基金会。尽管最初的核心团队至今仍在微软工作,但他们只是构成 Electron 治理的更大协作者群体的一部分。2
虽然此模型并不完美,但它已帮助我们在全球大流行和持续的宏观经济逆风中取得了良好的成绩。展望未来,我们计划修改治理章程,以指导我们度过 Electron 的第二个十年。
如果您想了解更多信息,请查看electron/governance 仓库!
社区
开源项目的社区部分很困难,尤其是在你的外联团队只是一个穿着印有“社区经理”字样的外套的十几位工程师的时候。也就是说,作为一个大型的开源项目,意味着我们拥有大量的用户,并且利用他们的能量来构建 Electron 的用户生态系统,对于维持项目的健康至关重要。
我们一直在做些什么来发展我们的社区影响力呢?
构建虚拟社区
- 2020 年,我们启动了我们的社区 Discord 服务器。之前我们曾在 Atom 的论坛中开辟了一个版块,但我们决定建立一个更非正式的消息平台,为维护人员和 Electron 开发人员之间的讨论以及一般的调试帮助提供一个空间。
- 2021 年,在@BlackHole1的帮助下,我们建立了Electron 中国用户组。该小组对于 Electron 在中国蓬勃发展的科技领域的用户增长起到了重要作用,为他们提供了一个在我们的英语空间之外协作想法和讨论 Electron 的空间。我们还要感谢cnpm为支持 Electron 在其 npm 中国镜像中的夜间发布所做的工作。
参与高可见度的开源项目
- 自 2019 年以来,我们每年都在庆祝Hacktoberfest。Hacktoberfest 是由 DigitalOcean 组织的年度开源庆典,我们每年都会有数十名充满热情的贡献者希望在开源软件上留下自己的印记。
- 2020 年,我们参与了 Google Season of Docs 的首次迭代,与@bandantonio合作重新设计了 Electron 的新用户教程流程。
- 2022 年,我们首次担任了 Google Summer of Code 学生的导师。@aryanshridhar 做了一些很棒的工作,重构了Electron Fiddle的核心版本加载逻辑,并将它的打包器迁移到webpack。
自动化一切!
如今,Electron 治理拥有大约 30 位活跃的维护人员。其中不到一半是全职贡献者,这意味着有大量的工作需要分担。我们保持一切顺利运行的秘诀是什么?我们的座右铭是:电脑便宜,人工时间宝贵。按照典型的工程师风格,我们开发了一套自动化的支持工具来让我们的生活更轻松。
Not Goma
Electron 的核心代码库是一个庞大的 C++ 代码库,构建时间一直是我们快速发布错误修复和新功能的限制因素。2020 年,我们部署了Not Goma,这是 Google 的Goma分布式编译器服务的一个自定义 Electron 特定后端。Not Goma 处理来自授权用户机器的编译请求,并在后端数百个内核上分配该过程。它还会缓存编译结果,以便其他人编译相同文件时只需下载预编译的结果。
自 Not Goma 发布以来,维护人员的编译时间已从数小时缩短到数分钟。稳定的互联网连接成为贡献者编译 Electron 的最低要求!
如果您是开源贡献者,您还可以尝试使用 Not Goma 的只读缓存,该缓存默认情况下随Electron Build Tools一起提供。
持续身份验证
持续身份验证 (CFA) 是围绕 npm 的双因素身份验证 (2FA) 系统的一层自动化层,我们将其与semantic-release结合使用,以管理我们各种@electron/
npm 包的安全和自动化发布。
虽然 semantic-release 已经自动化了 npm 包发布过程,但它需要关闭双因素身份验证或传入一个绕过此限制的密钥令牌。
我们构建 CFA 的目的是为 npm 2FA 提供基于时间的一次性密码 (TOTP) 到任意 CI 作业,从而使我们能够利用 semantic-release 的自动化功能,同时保持双因素身份验证的额外安全性。
我们将 CFA 与 Slack 集成前端一起使用,允许维护人员从他们拥有 Slack 的任何设备验证包发布,只要他们手头有 TOTP 生成器即可。
Sheriff
Sheriff 是我们编写的一个开源工具,用于自动化管理 GitHub、Slack 和 Google Workspace 中的权限。
Sheriff 的核心价值主张是权限管理应该是一个透明的过程。它使用单个 YAML 配置文件,在所有上述列出的服务中指定权限。使用 Sheriff,在仓库中获得协作者状态或创建新的邮件列表就像获得 PR 批准和合并一样简单。
Sheriff 还具有一个审计日志,该日志发布到 Slack,并在 Electron 组织中的任何地方发生可疑活动时警告管理员。
……以及我们所有的 GitHub 机器人
GitHub 是一个具有丰富 API 可扩展性和名为Probot 的第一方机器人应用程序框架的平台。为了帮助我们专注于工作中更具创意的部分,我们构建了一套较小的机器人来帮助我们完成繁琐的工作。以下是一些示例
- Sudowoodo 自动化了 Electron 的发布过程,从启动构建到将发布资产上传到 GitHub 和 npm。
- Trop 通过尝试根据 GitHub PR 标签将补丁 cherry-pick 到以前的发布分支来自动化 Electron 的回退过程。
- Roller 自动化了 Electron 的 Chromium 和 Node.js 依赖项的滚动升级。
- Cation 是我们针对 electron/electron PR 的状态检查机器人。
总而言之,我们的小型机器人家族极大地提高了开发人员的生产力!
接下来是什么?
随着我们进入项目的第二个十年,您可能会问:Electron 的未来发展方向是什么?
我们将与 Chromium 的发布节奏保持同步,每 8 周发布 Electron 的新主要版本,使框架保持最新,并提供 Web 平台和 Node.js 的最新功能,同时保持企业级应用程序的稳定性和安全性。
我们通常在即将推出的计划变得具体时宣布相关新闻。如果您想了解未来的发布、功能和一般的项目更新,您可以阅读我们的博客并关注我们的社交媒体资料(Twitter 和Mastodon)!
脚注
-
这实际上是来自electron-archive/brightray 项目的第一个提交,该项目于 2017 年被吸收到 Electron 中,并合并了其 Git 历史记录。但谁会在意呢?这是我们的生日,所以我们可以制定规则! ↩
-
与普遍看法相反,Electron 不再由 GitHub 或 Microsoft 拥有,现在是OpenJS 基金会的一部分。 ↩