跳至主要內容

Electron 十週年 🎉

·10 分鐘閱讀

electron/electron 儲存庫的第一個提交是在 2013 年 3 月 13 日1

Initial commit on electron/electron by @aroben

10 年後,來自 1192 位獨特貢獻者的 27,147 次提交,Electron 已成為當今建置桌面應用程式最受歡迎的框架之一。這個里程碑是慶祝和反思我們迄今為止的旅程,並分享我們一路走來所學到的經驗的絕佳機會。

如果沒有每個人投入時間和精力來為專案做出貢獻,我們今天就不會在這裡。雖然原始碼提交始終是最可見的貢獻,但我們也必須承認那些回報錯誤、維護使用者領域模組、提供文件和翻譯,並參與網路空間中 Electron 社群的人們的努力。作為維護者,每一項貢獻對我們都非常寶貴。

在我們繼續閱讀部落格文章的其餘部分之前:謝謝。❤️

我們是如何走到這一步的?

Atom Shell 是作為 GitHub Atom 編輯器的支柱而建置的,該編輯器於 2014 年 4 月推出公開測試版。它是從頭開始建置的,作為當時可用的基於網頁的桌面框架 (node-webkit 和 Chromium Embedded Framework) 的替代方案。它有一個殺手級功能:嵌入 Node.js 和 Chromium,為網路技術提供強大的桌面執行階段。

在一年內,Atom Shell 的功能和普及程度開始大幅成長。大型公司、新創公司和個人開發人員都開始使用它建置應用程式 (一些早期採用者包括 SlackGitKrakenWebTorrent),該專案被恰當地重新命名為 Electron

從那時起,Electron 迅速發展,從未停下腳步。以下是我們隨著時間推移每週的下載次數,由 npmtrends.com 提供

Electron weekly downloads graph over time

Electron v1 於 2016 年發布,承諾提高 API 穩定性以及更好的文件和工具。Electron v2 於 2018 年發布,並引入了語義版本控制,使 Electron 開發人員更容易追蹤發布週期。

到 Electron v6,我們轉向與 Chromium 匹配的每 12 週主要發布週期。這個決定改變了專案的心態,將「擁有最新的 Chromium 版本」從錦上添花變成了優先事項。這減少了升級之間的技術債務,使我們更容易保持 Electron 的更新和安全。

從那時起,我們一直是一台運轉良好的機器,與每個 Chromium 穩定版在同一天發布新的 Electron 版本。當 Chromium 在 2021 年將其發布時間表加快到 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)
  • 維護我們的建置基礎設施、維護者工具和雲端服務(基礎設施工作小組)

大約在我們轉向治理模式的同時,我們也將 Electron 的所有權從 GitHub 轉移到了 OpenJS 基金會。雖然最初的核心團隊現在仍在微軟工作,但他們只是組成 Electron 治理的更廣泛協作者群體的一部分。2

雖然這種模式並不完美,但它在面對全球疫情和持續的總體經濟逆風時,對我們來說很合適。展望未來,我們計劃修改治理章程,以引導我們度過 Electron 的第二個十年。

資訊

如果您想了解更多資訊,請查看 electron/governance 儲存庫!

社群

開源的社群部分很困難,特別是當您的推廣團隊是由十幾位穿著寫著「社群經理」的風衣的工程師組成時。也就是說,作為一個大型開源專案,意味著我們有很多使用者,而利用他們的能量讓 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 的最低要求!

資訊

如果您是開源貢獻者,您也可以嘗試 Not Goma 的唯讀快取,該快取預設與 Electron 建置工具 一起提供。

持續因素驗證

持續因素驗證 (CFA) 是我們結合 semantic-release,圍繞 npm 雙因素驗證 (2FA) 系統的一層自動化層,以管理我們各種 @electron/ npm 套件的安全且自動化的發佈。

雖然 semantic-release 已經自動化了 npm 套件發佈過程,但它需要關閉雙因素驗證或傳入繞過此限制的秘密權杖。

我們建置了 CFA,為 npm 2FA 提供基於時間的一次性密碼 (TOTP) 給任意 CI 工作,允許我們利用 semantic-release 的自動化,同時保持雙因素驗證的額外安全性。

我們將 CFA 與 Slack 整合前端一起使用,允許維護者從他們擁有 Slack 的任何裝置驗證套件發佈,只要他們手邊有 TOTP 產生器即可。

資訊

如果您想在自己的專案中試用 CFA,請查看 GitHub 儲存庫文件!如果您使用 CircleCI 作為您的 CI 提供者,我們還有一個 方便的 orb,可以快速建構一個具有 CFA 的專案。

警長

警長 (Sheriff) 是我們編寫的一個開源工具,用於自動管理 GitHub、Slack 和 Google Workspace 的權限。

警長的主要價值主張是權限管理應該是一個透明的過程。它使用單個 YAML 設定檔,指定跨所有上述服務的權限。使用警長,在儲存庫中獲得協作者狀態或建立新的郵件清單就像獲得 PR 核准並合併一樣容易。

警長還具有發佈到 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 版本,使框架與來自網路平台和 Node.js 的最新和最棒的功能保持更新,同時保持企業級應用程式的穩定性和安全性。

我們通常會在即將進行的計畫變得具體時宣佈新聞。如果您想隨時了解未來的發佈、功能和一般專案更新,您可以閱讀 我們的部落格,並追蹤我們的社群媒體個人資料(TwitterMastodon)!

註腳

  1. 這實際上是來自 electron-archive/brightray 專案 的第一個提交,該專案在 2017 年被 Electron 吸收並合併了其 Git 歷史記錄。但誰在乎呢?今天是我們的生日,所以規則由我們來定!

  2. 與普遍的看法相反,Electron 現在不再由 GitHub 或 Microsoft 擁有,而是屬於 OpenJS Foundation 的一部分。