Electron 10 週年 🎉
首次提交至 electron/electron
儲存庫是在 2013 年 3 月 13 日1。
經過 10 年和來自 1192 位獨特貢獻者的 27,147 次提交之後,Electron 已成為現今最受歡迎的桌面應用程式建置框架之一。這個里程碑是慶祝和反思我們迄今為止的旅程,並分享我們一路走來所學到的經驗的絕佳機會。
如果沒有每位投入時間和精力為專案做出貢獻的人,我們今天就不會在這裡。儘管原始碼提交始終是最顯而易見的貢獻,但我們也必須感謝那些回報錯誤、維護 userland 模組、提供文件和翻譯,以及參與網路空間中 Electron 社群的人們的努力。每一份貢獻對我們維護者來說都非常寶貴。
在我們繼續閱讀部落格文章的其餘部分之前:謝謝您。❤️
我們是如何走到這一步的?
Atom Shell 是作為 GitHub Atom 編輯器的骨幹而建置的,該編輯器於 2014 年 4 月推出了公開測試版。它從頭開始建置,作為當時可用的網頁式桌面框架(node-webkit 和 Chromium Embedded Framework)的替代方案。它有一個殺手級功能:嵌入 Node.js 和 Chromium,為網頁技術提供強大的桌面執行階段。
在一年之內,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 版本。當 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)
- 維護我們的建置基礎架構、維護者工具和雲端服務(基礎架構 WG)
在我們轉變為治理模型的大約同一時間,我們也將 Electron 的所有權從 GitHub 轉移到 OpenJS 基金會。儘管最初的核心團隊今天仍在 Microsoft 工作,但他們只是構成 Electron 治理的更大協作者群體的一部分。2
雖然這個模型並不完美,但它在全球疫情和持續的總體經濟逆風中非常適合我們。展望未來,我們計劃修改治理章程,以指導我們度過 Electron 的第二個十年。
如果您想了解更多資訊,請查看 electron/governance 儲存庫!
社群
開放原始碼的社群部分很困難,尤其是當您的外展團隊是一打穿著寫著「社群經理」風衣的工程師時。也就是說,作為一個大型開放原始碼專案,意味著我們有很多使用者,而利用他們的能量讓 Electron 建置 userland 生態系統是維持專案健康的關鍵部分。
我們一直在做什麼來發展我們的社群形象?
建置虛擬社群
- 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 位活躍的維護者。我們中只有不到一半是全職貢獻者,這意味著還有很多工作要做。我們讓一切順利運行的訣竅是什麼?我們的座右銘是電腦很便宜,而人類時間很昂貴。以典型的工程師方式,我們開發了一套自動化支援工具,讓我們的生活更輕鬆。
非 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 工作提供基於時間的一次性密碼 (TOTP) 以用於 npm 2FA,從而使我們能夠利用 semantic-release 的自動化,同時保持雙因素驗證的額外安全性。
我們將 CFA 與 Slack 整合前端一起使用,允許維護者從他們安裝 Slack 的任何裝置驗證套件發布,只要他們手邊有 TOTP 產生器即可。
如果您想在自己的專案中試用 CFA,請查看 GitHub 儲存庫 或 文件!如果您使用 CircleCI 作為您的 CI 提供者,我們還提供 方便的 orb,可快速搭建具有 CFA 的專案。
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 主要版本,使框架與網頁平台和 Node.js 的最新和最棒的功能保持同步,同時保持企業級應用程式的穩定性和安全性。
我們通常會在即將推出的計畫變得具體時宣布相關新聞。如果您想隨時了解未來的發行版本、功能和一般專案更新,您可以閱讀我們的部落格並關注我們的社群媒體個人資料(Twitter 和 Mastodon)!
腳註
-
這實際上是來自 electron-archive/brightray 專案的首次提交,該專案於 2017 年被 Electron 吸收,並將其 git 歷史記錄合併。但是誰在乎呢?今天是我們的生日,所以我們可以制定規則! ↩
-
與普遍看法相反,Electron 不再由 GitHub 或 Microsoft 擁有,而是 OpenJS 基金會 的一部分。 ↩