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 中,我们转向每 12 周发布一次主要版本,以匹配 Chromium 的发布节奏。这一决定是该项目心态的转变,将“拥有最新版本的 Chromium”从可取变为优先事项。这减少了升级之间的技术债务,使我们更容易保持 Electron 的更新和安全性。
从那时起,我们一直像一台运行良好的机器一样,在 Chromium 稳定版发布的同一天发布新的 Electron 版本。当 Chromium 在 2021 年将发布周期加快到 4 周时,我们能够轻松地将发布周期相应地增加到 8 周。
我们现在已经发布了 Electron v23(并且还在继续发布),并且仍然致力于为构建跨平台桌面应用程序构建最佳的运行时。即使近年来 JavaScript 开发者工具蓬勃发展,Electron 也始终是桌面应用程序框架领域中一个稳定、经受考验的支柱。Electron 应用如今无处不在:您可以使用 Visual Studio Code 编程、使用 Figma 设计、使用 Slack 沟通以及使用 Notion 记录笔记(以及许多其他用例)。我们对这一成就感到无比自豪,并感谢所有为之付出努力的人。
我们一路走来学到了什么?
迈向十周年之路漫长而曲折。以下是一些帮助我们运行可持续的大型开源项目的关键因素。
通过治理模型扩展分布式决策
我们必须克服的一个挑战是在 Electron 首次爆火后处理项目的长期方向。如何处理跨公司、国家和时区分布的几十名工程师团队?
在早期,Electron 的维护者团队依靠非正式协调,这对于较小的项目来说速度快且轻量级,但无法扩展到更广泛的协作。在 2019 年,我们转向了一个治理模型,其中不同的工作组拥有正式的责任领域。这对于简化流程并将项目所有权的一部分分配给特定维护者至关重要。每个工作组 (WG) 目前负责什么?
- 发布 Electron 版本 (Releases WG)
- 升级 Chromium 和 Node.js (Upgrades WG)
- 监督公共 API 设计 (API WG)
- 确保 Electron 安全 (Security WG)
- 运行网站、文档和工具 (Ecosystem WG)
- 社区和企业外联 (Outreach WG)
- 社区审核 (Community & Safety WG)
- 维护我们的构建基础设施、维护者工具和云服务 (Infrastructure WG)
在我们转向治理模型的同时,我们还将 Electron 的所有权从 GitHub 转移到 OpenJS Foundation。尽管最初的核心团队今天仍然在微软工作,但他们只是构成 Electron 治理的更大协作群体的一部分。2
虽然这种模式并不完美,但它在全球大流行和持续的宏观经济逆风中一直很适合我们。展望未来,我们计划修订治理章程,以指导我们度过 Electron 的第二个十年。
开源的社区部分很难,特别是当您的外联团队是一群穿着写着“社区经理”外套的工程师时。也就是说,作为一个大型开源项目,意味着我们拥有大量用户,利用他们的能量来构建 Electron 的用户生态系统是维持项目健康的关键部分。
我们一直在做些什么来发展我们的社区存在?
构建虚拟社区
- 在 2020 年,我们推出了我们的社区 Discord 服务器。我们之前在 Atom 的论坛中有一个版块,但决定使用一个更非正式的聊天平台,为维护者和 Electron 开发人员之间的讨论提供一个空间,并提供一般的调试帮助。
- 在 2021 年,我们在 @BlackHole1 的帮助下,建立了 Electron 中国 用户组。该组对于来自中国蓬勃发展的科技行业的 Electron 用户的增长至关重要,为他们在我们的英语空间之外提供了一个空间,让他们可以协作想法并讨论 Electron。我们还要感谢 cnpm 为他们在 npm 的中国镜像中支持 Electron 的每日构建版本所做的工作。
参与高曝光度的开源项目
- 我们自 2019 年以来每年都在庆祝 Hacktoberfest。Hacktoberfest 是 DigitalOcean 组织的年度开源庆典,我们每年都会有数十名热情的贡献者希望在开源软件中留下自己的印记。
- 在 2020 年,我们参加了 Google Season of Docs 的初始迭代,我们与 @bandantonio 合作重新设计了 Electron 的新用户教程流程。
- 在 2022 年,我们首次指导了一名 Google Summer of Code 学生。 @aryanshridhar 做了一些很棒的工作来重构 Electron Fiddle 的核心版本加载逻辑,并将它的捆绑器迁移到 webpack。
自动化所有事情!
如今,Electron 治理大约有 30 名活跃维护者。我们中不到一半的人是全职贡献者,这意味着有很多工作要做。我们保持一切顺利运行的诀窍是什么?我们的座右铭是计算机很便宜,而人工时间很昂贵。以典型的工程师风格,我们开发了一套自动化支持工具来让我们的生活更轻松。
不是 Goma
Electron 的核心代码库是一个庞大的 C++ 代码库,构建时间一直是限制我们发布错误修复和新功能速度的一个因素。在 2020 年,我们部署了 Not Goma,这是 Google Goma 分布式编译器服务的一个自定义 Electron 特定的后端。Not Goma 处理来自授权用户机器的编译请求,并在后端分布在数百个内核上。它还缓存了编译结果,因此其他人编译相同文件时只需下载预编译的结果即可。
自推出 Not Goma 以来,维护者的编译时间从几个小时缩短到几分钟。稳定的互联网连接成为贡献者编译 Electron 的最低要求!
持续双重身份验证
持续双重身份验证 (CFA) 是 npm 双重身份验证 (2FA) 系统周围的一层自动化,我们将其与 semantic-release 相结合,以管理我们各种 @electron/
npm 包的安全和自动化发布。
虽然 semantic-release 已经自动化了 npm 包发布过程,但它需要关闭双重身份验证或传递一个绕过此限制的秘密令牌。
我们构建 CFA 的目的是为 npm 2FA 向任意 CI 作业提供基于时间的一次性密码 (TOTP),从而使我们能够利用 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)!