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 版本(发布工作组)
- 升级 Chromium 和 Node.js(升级工作组)
- 监督公共 API 设计(API 工作组)
- 保持 Electron 安全(安全工作组)
- 运行网站、文档和工具(生态系统工作组)
- 社区和企业外联(外联工作组)
- 社区审核(社区和安全工作组)
- 维护我们的构建基础设施、维护者工具和云服务(基础设施工作组)
大约在我们转向治理模式的同时,我们还将 Electron 的所有权从 GitHub 转移到了 OpenJS Foundation。 尽管最初的核心团队今天仍在微软工作,但他们只是构成 Electron 治理的更大协作团队的一部分。2
虽然这种模式并不完美,但在全球疫情和持续的宏观经济逆风中,它对我们来说非常适用。 未来,我们计划修订治理章程,以指导我们度过 Electron 的第二个十年。
如果您想了解更多信息,请查看 electron/governance 仓库!
社区
开源的社区部分很难,特别是当你的外联团队是由穿着写有“社区经理”字样的风衣的十几名工程师组成时。 尽管如此,作为一个大型开源项目意味着我们拥有大量用户,而利用他们的能量为 Electron 构建用户空间生态系统是维持项目健康的关键部分。
我们一直在做些什么来发展我们的社区影响力?
构建虚拟社区
- 2020 年,我们启动了社区 Discord 服务器。 我们之前在 Atom 的论坛中有一个版块,但决定采用一个更非正式的消息平台,以便维护者和 Electron 开发者之间进行讨论以及提供通用调试帮助。
- 2021 年,在 @BlackHole1 的帮助下,我们成立了 Electron China 用户组。 这个小组在吸引中国蓬勃发展的科技界的 Electron 用户方面发挥了重要作用,为他们在我们的英语社区之外协作交流想法和讨论 Electron 提供了一个空间。 我们还要感谢 cnpm 在其 npm 中国镜像中支持 Electron 每夜构建版本的工作。
参与高知名度的开源项目
- 自 2019 年以来,我们每年都庆祝 Hacktoberfest。 Hacktoberfest 是由 DigitalOcean 组织的年度开源庆祝活动,我们每年都会吸引数十位热情的贡献者,他们希望在开源软件领域留下自己的印记。
- 2020 年,我们参与了 Google 文档之夏的首次迭代,与 @bandantonio 合作重构了 Electron 新用户的入门教程流程。
- 2022 年,我们首次指导了一名 Google 编程之夏的学生。 @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 的目的是为任意 CI 作业提供 npm 2FA 的基于时间的单次密码 (TOTP),使我们能够利用 semantic-release 的自动化功能,同时保持双因素认证的附加安全性。
我们使用带有 Slack 集成前端的 CFA,允许维护者在任何装有 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 标签将补丁挑选到之前的发布分支,自动化了 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 Foundation 的一部分。 ↩