我的 GSoC 歷程:為 Chrome 擴充功能貢獻心力

Harsh Singh
Harsh Singh

發布日期:2025 年 10 月 28 日

我是 IIT (ISM) Dhanbad 化學工程學士學位最後一年的學生 Harsh Singh,並於 2025 年參加 Google Summer of Code (GSOC)。這篇文章將分享我如何通過 GSoC 申請,以及參與期間學到的事物。

GSoC 前:探索擴充功能開發

我大一時和許多人一樣,很想加入學校的官方技術社團 CyberLabs。為了準備,我請教了一位學長,他向我展示自己建構的 Chrome 擴充功能,並靠這個擴充功能進入了俱樂部。這與我所知的標準網頁開發完全不同。這似乎是個很酷的方法,可以在自己的瀏覽器中插入指令碼及修改網站。

我試用過許多擴充功能 API,甚至見證了從 Manifest V2 到 V3 的轉移過程。我成功使用這些擴充功能建構小型專案,並加入 CyberLabs,但後來忙於大學生活,暫時擱置了擴充功能開發工作。

最近,我在考慮申請 Google Summer of Code (GSoC) 時,偶然發現一個 Chrome 擴充功能 API 專案。這股懷舊感深深打動了我:「如果這次製作的 API,日後能讓大二學生進入 CyberLabs,不是很酷嗎?這才是最棒的炫耀方式。」由於我過去的工作已讓我瞭解大部分的擴充功能術語,因此這個專案對我來說非常合適。

準備套用

我一時興起,決定聯絡 Chrome 擴充功能團隊的開發人員關係工程師 Oliver。我問他,要如何才能成功申請加入 Chromium 的 GSoC 計畫。他幾天內就回覆了!他的電子郵件內容非常鼓舞人心,他說他們只是想看看我是否能探索程式碼集,並編寫一些 C++。

我首先在電腦上設定 Chromium。這段過程非常艱辛,我花了整整四天,嘗試無數次,才終於設定好龐大的程式碼集,並成功建構。我在網路上發現一個簡單的問題 (與sidePanel.open()相關,但沒有使用者手勢),並提交了修正程式。(回想起來,這只是微小的變化 🙂)。我寄電子郵件給 Oliver,說明我的進展。他告訴我,他們不打算支援這項功能,但我也展現了足夠的誠意。他隨後建議我使用側邊面板的 getPosition 方法。我找出問題後再次寄信給他,他非常開心,並表示我的做法與他們團隊討論的內容一致。這讓我有信心繼續進行專案,因為我知道自己可以瞭解程式碼並進行變更。

我的 GSoC 提案

接下來是 GSoC 提案。最初的專案說明「SidePanel API 和 DNR API」範圍很廣,因此我不確定要在提案中列出哪些具體工作,也不確定如何建立時間表。我已寄送電子郵件給 Oliver,他回覆說已更新專案說明。令我驚喜的是,他新增了多個 API,包括我已在使用的 sidePanel.getPosition API。

我的提案主要包含對專案的瞭解、設計概念、提案前工作,以及交付項目時間表。我準確評估了工作規模,這表示我充分瞭解相關工作。我草擬了提案,並審查了兩次。

我有一件事很後悔,這也是給未來申請者的重要建議,那就是我沒有為計畫建構的功能提供適當的設計規格。舉例來說,提議用來關閉側邊面板的 API 時,我應該要列出參數、說明選擇這些參數的原因、解釋如何處理極端情況,以及說明如何為所有瀏覽器標準化 API。這表示您對該主題的瞭解程度更深。

在 Chromium 擴充功能專案中,WECG (WebExtensions Community Group,發音為「wee-C-G」) 是重要的機構,新 API 設計都會在此正式討論。在 GSoC 期間,貢獻者可能需要向這個群組提出 API 提案。因此,在 GSoC 提案中準備好設計概念是極大的優勢,因為這能向導師證明您已為這個重要步驟做好準備,並在 GSoC 期間表現良好。

5 月初,我收到電子郵件,得知自己通過審核!🙂

我在 GSoC 期間的貢獻

GSoC 期間非常棒。我的導師 Solomon 非常友善,我們每週都會進行有效率的會議,確保我能按部就班完成工作。我也認識了另一位貢獻者 Amit P,每當我感到沮喪時,他都會提供很大的幫助。參加 WECG 會議讓我大開眼界,瞭解了該層級的運作方式,以及體驗為何如此重要。我在該處討論了 API 提案,並獲得其他瀏覽器供應商的許可。

一開始我開啟了幾個 CL (變更清單),後來因為程式碼審查來回修改,進度變慢了,但我很樂意繼續努力。我主要合併的貢獻是 Side Panel API:

Commands API 的其他 CL 仍在開發中 (取決於我 GSoC 結束後是否仍積極參與 🙂)。如需詳細的細目,請參閱我的最終報告,該報告位於 GSoC 專案頁面的「查看程式碼」連結下方。

特別感謝 Oliver Dunk、Solomon Kinard、Kelvin Jiang、Devlin Cronin、Tom Lukaszewicz 和 Andrea Orru,他們審查了幾乎所有 CL。看到自己的程式碼成為 Chrome 的一部分,感覺非常棒。我的導師說我很有「責任感」,這對我來說是莫大的讚美。

總結

如果問我 GSoC 帶給我什麼,那絕不僅僅是技術知識。這讓我得以參與重要討論,這些討論將影響許多擴充功能開發人員。這是我第一次將作品用於實際應用程式。我遇到許多病友導師,他們指導我並教導我許多知識,讓整個體驗非常豐富。

希望我的故事能為想貢獻 Chromium 或參與 Google Summer of Code 的人提供參考。

GSoC 申請人須知

  1. 選擇你真正喜歡的主題。興趣應是首要考量。技能可以不斷提升,但熱情才是你在遇到困難時堅持下去的動力。我曾身處這兩種情況,請相信我:當你對某件事不感興趣時,一旦出錯,你就會怪罪他人。但如果你熱愛這份工作,就會將其視為待克服的挑戰。
  2. 不要害怕競爭。我看到許多人在社群管道中看到其他申請者後,就感到灰心。每個好專案都會有競爭對手。專注於自己的強項。如果您曾使用過任何程式庫,請找出使用該程式庫的專案。你將擁有優勢,因為你能帶來獨一無二的經驗。
  3. 感謝幸運之神眷顧,並專注於溝通。說實話,GSoC 多少需要一點運氣。有些熱門專案的 1 到 2 個名額,會收到超過 300 份提案。我懷疑導師能否詳細閱讀每一則訊息。因此提早溝通非常重要。事先參與專案,並確保提案內容充實且切中要點。
  4. 如果未獲選,也不必灰心。現在,您的履歷表上已列出寶貴的開放原始碼貢獻。並用來申請其他暑期機會。您已經完成最困難的部分了!

最後但同樣重要的一點:

「每個人都為某項特定工作而生,而對該項工作的渴望已深植於每個人的心中。」— 魯米

感謝閱讀。