Kotlin 的 Google Summer of Code 2025
這篇文章包含了 Kotlin 的 Google Summer of Code 2025 專案構想列表,以及貢獻者指南
Kotlin 資源:
- Kotlin GitHub 存儲庫
- Kotlin Slack 以及 #gsoc Slack 頻道
如果您有任何問題,請透過 [email protected] 聯絡我們
Kotlin 的 Google Summer of Code (GSoC) 貢獻者指南
開始使用
熟悉 Kotlin 語言:
- 官方 Kotlin 網站 是一個很好的起點。
- 閱讀官方 文件 以更深入了解該語言。
- 查看 JetBrains Academy 上的 Kotlin 課程或 Android 團隊的 訓練選項。
- 關注 Kotlin X 或 Kotlin Bluesky 帳號,以掌握最新消息與發展。
- 查看 Kotlin YouTube 頻道 以獲取教學、技巧和最新更新。
了解 Kotlin 開源社群:
- 探索通用的 Kotlin 貢獻指南。
- 加入 Kotlin Slack 頻道 與其他開發人員聯繫,並針對您可能有的任何問題尋求幫助。
- 加入 #gsoc 頻道 提問並獲得 GSoC 團隊的支援。
如何申請
- 查看 專案構想 並選擇您想要投入的一個。
- 如果您不熟悉 Kotlin,請閱讀 Kotlin 網站上的介紹資訊。
- 參考 GSoC 貢獻者指南。
- 透過 GSoC 網站 申請。
- 我們建議您撰寫一個與提議專案相關的可執行程式碼範例。您也可以向我們展示任何您特別感到自豪的程式碼範例。
- 描述您對 Kotlin 感興趣的原因以及您使用它的經驗。
- 如果您參與過開源專案,請提供您的貢獻歷程紀錄。
- 如果您有 GitHub、Twitter 帳號、部落格,或技術、科學出版物的作品集,也請一併提供。
- 揭露任何因其他安排(如考試和假期)而與 GSoC 時間表產生的衝突。
謝謝!我們期待閱讀您的申請!
專案構想
Build Server Protocol:新增 Kotlin 支援 [困難,350 小時]
Kotlin 團隊希望不僅能為 Gradle 和 Maven 建置系統擴展官方 Kotlin 支援,也能支援任何其他建置系統,並以最小的努力在 JetBrains IDE 中原生支援它們。另一方面,我們也希望在非 JetBrains IDE 中提供基礎的 Kotlin 支援——這類支援的一部分是能夠從任何支援 Kotlin 的建置系統中獲取 Kotlin 特定的資訊。
滿足這些需求的解決方案可能是 Build Server Protocol (BSP),它在建置系統與 IDE 之間提供了一個抽象層。
此專案的目標是實作一個原型,該原型使用 BSP 協定從使用者專案中獲取 IntelliJ IDEA 所需的所有資訊,從而能夠在專案中使用 Kotlin 程式碼。為了限制此原型的範圍,使用者專案將使用 Gradle 進行自動建置。
偏好的技能
- 具備 Kotlin 知識
- 了解如何撰寫 Gradle 外掛程式
- 加分項目:了解如何撰寫 IntelliJ IDEA 的外掛程式
可能的導師
Yahor Berdnikau、Bálint Hegyi 與 Reinhold Degenfellner
申請者任務
任務 #1。 您為什麼對這個專案感興趣?
任務 #2。 實作練習: 建立一個公開特定任務的 Gradle 外掛程式。在存在 Kotlin Gradle 外掛程式的情況下,此任務應檢索所有 Kotlin 原始碼的結構並將其輸出。包含測試將是一個加分項。
在使用 Firebase Vertex AI 的 Gemini 中,支援 Kotlin 多平台的 Android 與 iOS 目標 [中等,175 小時]
此專案旨在建立一個開源的 Kotlin 多平台 (KMP) 程式庫,在至少 Android 和 iOS 上支援使用 Firebase Vertex AI 的 Gemini。它將展示為現有服務建立 KMP 程式庫的最佳實務,並專注於適當的生產環境實作(例如,正確的 API 金鑰管理、支援使用者管理的 API 金鑰以及用戶端節流)。
預期成果
- 一個支援現有 Google 服務的新 Kotlin 多平台程式庫
- 範例程式碼與文件
偏好的技能
- Kotlin
- Kotlin 多平台
- 行動開發 (Android 與 iOS)
可能的導師
Matt Dyor 與 Google 團隊
在 Bazel 中新增 Kotlin 多平台支援 [困難,350 小時]
Bazel 對 Kotlin 的支援正在演進中,但完善的 Kotlin 多平台 (KMP) 整合仍然是一個挑戰。此專案旨在透過解決相依性解析問題、增強 rules_kotlin 與 rules_jvm_external 的相容性,以及實現跨平台建置,來改進 Bazel 的 KMP 支援。
重點改進將集中在處理平台特定的相依性(expect/actual 機制)、改進 Gradle 元資料支援,並確保 Bazel 中 KMP 的開發者體驗更加流暢。
預期成果
- 增強 Bazel 中 Kotlin 多平台的相依性解析
- 改進與
rules_kotlin及rules_jvm_external的整合 - 在 Bazel 中建立一個可運作的 KMP 組建設定,以實現無縫的多平台開發
偏好的技能
- Kotlin 多平台與 Gradle
- Bazel 建構系統
- 相依性解析策略
可能的導師
Shauvik Roy Choudhary 與 Uber 團隊
Kotlin 語言伺服器 (LSP) [困難,350 小時]
語言伺服器協定 (LSP) 是一個被廣泛採用的標準,它可以在不同的編輯器與 IDE 中實現程式碼智慧功能,如自動補全、跳轉到定義和重構。雖然目前還沒有官方的 Kotlin LSP 伺服器,但社群中對此有很大的需求。一個由公開維護、社群驅動的實作可以支援廣泛的使用案例,包括程式碼遷移、AI 輔助編碼以及無縫整合到各種開發環境中。
此專案旨在開發一個 Kotlin LSP 實作,確保與關鍵 LSP 功能的相容性,並擴大 Kotlin 在各類開發環境中的可存取性。
預期成果
開發一個 Kotlin LSP 實作
偏好的技能
- Kotlin
- LSP (語言伺服器協定)
- IDE 的外掛程式或擴充套件開發
可能的導師
Shauvik Roy Choudhary 與 Uber 團隊
使用新 API 的 Gradle Maven Central 發佈外掛程式 [中等,175 小時]
Maven Central 是最受歡迎的 Maven 存儲庫之一,用於發佈以 JVM 為中心的程式庫與專案。它被 Apache Maven 或基於 Gradle 的開源專案積極使用,目前基於 Sonatype Nexus v2,正等待遷移到更新的版本。目前開源專案正持續遷移到新的 Maven Central 執行個體,該執行個體具有非常不同的 API 實作,且需要在建置工具外掛程式中提供特殊支援。開發一個與新 Maven Central 發佈 API 相容的 Gradle 外掛程式,將有助於使用 Gradle 的程式庫作者在新流程中獲得流暢的體驗。
目前,Gradle 中有多個 Maven Central 發佈外掛程式的實作,例如 Maven Publish Plugin 或已經嘗試採用新 API 的 New Maven Central Publishing。在申請或社群溝通階段,潛在的貢獻者需要審查這些實作,並建議更新現有的外掛程式,或是決定建立新的外掛程式或進行分支 (fork)。交付成果將包括現有 Maven Central 發佈外掛程式的新版本,或是一個新的 Gradle 外掛程式。我們預期實作將使用 Kotlin 或 Java,並具有適當的測試涵蓋率與文件。其他交付成果可能包括簡化外掛程式使用的 Kotlin DSL 擴充套件以及 宣告式 Gradle 擴充套件。
預期成果
- 更新的 Maven Central 發佈外掛程式或新外掛程式
偏好的技能
- Kotlin
- Gradle
- Maven 存儲庫
可能的導師
Oleg Nenashev 與 Gradle 團隊
改進關鍵 Gradle 外掛程式中的配置快取與鎖競爭 [簡單到困難,90 小時到 350 小時]
Gradle 正在開發 隔離專案 (Isolated Projects) —— 這是一項新功能,它極大地擴展了配置快取以進一步改進效能,特別是 Android Studio 和 IntelliJ IDEA 同步的效能。從開發者體驗的角度來看,這是 Gradle 中最受期待的功能之一。
隔離專案的問題之一是 Gradle 核心中的鎖競爭 (lock contention),外掛程式有時會阻礙平行執行。我們希望減少鎖競爭,特別是在 Java、Kotlin、Android 和 Kotlin 多平台生態系統的關鍵 Gradle 建置工具外掛程式中。歡迎貢獻者根據其興趣和所需的專案規模來選擇交付成果。
潛在的交付成果包括但不限於:
- 將 Configuration Cache Report 工具嵌入到 Gradle Profiler 中(或「為其提供一個 GitHub Action」)
- 在各種專案中分析 (profile) Gradle 和一些熱門的 Gradle 外掛程式,並在 GHA 上自動化測試套件
- 確定可以減少鎖競爭的潛在領域和外掛程式,無論是否使用配置快取
- 在此期間,為目標外掛程式中其他領域的 配置快取相容性 做出貢獻
- 實作一些已發現的改進
預期成果
在 Gradle 的 Kotlin DSL 中實作擴充功能,並改進對常見專案整合的支援
偏好的技能
- Kotlin
- Gradle
- Java
- 效能分析
- 分析 (Profiling)
可能的導師
Oleg Nenashev, Laura Kassovic
用於開發 Jenkins 外掛程式的 Gradle 慣例外掛程式 [簡單到困難,90 小時到 350 小時]
目前有超過 50 個 Jenkins 外掛程式是使用 Gradle 實作的。雖然有一個 Gradle JPI 外掛程式,但它並不完全符合 Jenkins 的代管要求,需要更新。在此專案構想中,目標是恢復 Jenkins 的 Gradle 開發者流程,達到與 Apache Maven 流程的功能對等(Parent POM、Plugin Compatibility Tester、Jenkins Bill of Materials 等),並為使用 Gradle 開發 Jenkins 外掛程式的人員改進開發者體驗。
歡迎貢獻者根據其興趣和所需的專案規模來選擇交付成果。
潛在的交付成果包括但不限於:
- 更新 Gradle JPI 外掛程式,並使其符合代管最佳實務
- 將 Gradle JPI 外掛程式程式碼庫從 Groovy 遷移到 Kotlin
- 為 Jenkins 外掛程式實作一個新的慣例外掛程式,該外掛程式將涵蓋 Jenkins 外掛程式 Parent POM 的主要功能,並使用 Kotlin 和 Kotlin DSL。這不僅包括建置外掛程式,還包括根據 Jenkins 最佳實務進行測試和靜態分析
- 在最熱門的 Gradle 外掛程式(包括 Gradle 外掛程式本身)中採用更新後的外掛程式及/或慣例外掛程式
- 將 Gradle 外掛程式整合到 Plugin Compatibility Tester 和 Bill of Materials 中
- 為 Jenkins 外掛程式編寫更新後的 Gradle 開發流程文件
預期成果
更新的 Gradle JPI 外掛程式及/或用於 Jenkins 的新慣例外掛程式,發佈於 Jenkins Update Center 和 Gradle 外掛程式入口網站
偏好的技能
- Kotlin DSL
- Kotlin
- Gradle
- Jenkins
- Java
可能的導師
Oleg Nenashev, Stefan Wolf
Kotlin DSL 與宣告式 Gradle 文件範例測試框架 [簡單到中等,90 小時到 175 小時]
許多專案(包括 Gradle)都有大量的 Kotlin DSL 範例和程式碼片段(請參閱 Gradle 文件中的範例)。針對多個版本測試它們會帶來某些挑戰,因為為了簡潔起見,這些片段通常代表不完整的程式碼。我們希望建立一個測試框架,簡化在 GitHub Actions 或 TeamCity 上的單元測試框架(Kotest 或 JUnit 5)中對這些範例的驗證。稍後我們有興趣對 宣告式 Gradle 範例執行相同的操作。
預期成果
在 Gradle 的 Kotlin DSL 中實作擴充功能,並改進對常見專案整合的支援
偏好的技能
- Kotlin
- Gradle
- Java
- 靜態分析
可能的導師
Oleg Nenashev, Laura Kassovic
IntelliJ Platform Gradle Plugin – Gradle 報告與平行驗證 [中等,175 小時]
IntelliJ Platform Gradle Plugin 是用於 Gradle 建置系統的外掛程式,它簡化了為基於 IntelliJ 的 IDE 建置、測試、驗證和發佈外掛程式的環境配置。該外掛程式管理建置、測試和驗證步驟,同時跟上 IntelliJ 平台中引入的常態性變更。IntelliJ Platform Gradle Plugin 被 JetBrains、第三方開發人員和外部公司用於將其工作流程與 JetBrains 工具整合。
預期成果
- 引入 Gradle 報告功能,提供詳細且可配置的驗證任務報告。
- 利用 Gradle Worker API 實現對多個 IntelliJ Platform 版本的
verifyPlugin任務的平行執行,從而縮短任務執行時間。 - 探索其他的 Gradle 增強功能,以進一步改進外掛程式開發工作流程。
偏好的技能
- Kotlin
- Gradle
- IntelliJ Platform
可能的導師
Jakub Chrzanowski, JetBrains
新增更多 Kotlin OpenRewrite 配方 [中等,175 小時]
OpenRewrite 是一個強大的框架,用於以結構化方式自動化程式碼遷移和重構。雖然 OpenRewrite 對 Java 有強大的支援,但 Kotlin 生態系統將受益於更全面的 OpenRewrite 配方 (recipes) 集,以幫助開發人員無縫遷移其程式碼庫。
此專案旨在透過增加更多自動化轉換來擴展 Kotlin OpenRewrite 配方集合,例如將基於 Java 的 AutoValue 類別遷移到慣用的 Kotlin 資料類別、使 Kotlin 程式碼現代化以遵循最佳實務,以及實現跨 Kotlin 版本的無縫遷移。這些配方將幫助 Kotlin 開發人員以最小的手動努力維護整潔、最新且慣用的程式碼庫。
預期成果
- 為 Kotlin 程式碼遷移開發新的 OpenRewrite 配方
偏好的技能
- Kotlin
- OpenRewrite 框架
- Java 對 Kotlin 的遷移策略
可能的導師
Shauvik Roy Choudhary 與 Uber 團隊
在 Bazel rules_jvm_external 中新增 BOM 支援 [困難,350 小時]
Bazel 的 rules_jvm_external 提供了一種結構化的方式來宣告外部 Java 相依性,但目前缺乏對物料清單 (BOM) 檔案的完善支援。BOM 檔案在 Maven 和 Gradle 中被廣泛使用,以一致的方式管理相依性,而無需開發人員指定個別版本。此專案旨在透過增加 BOM 支援來增強 rules_jvm_external,允許開發人員在 Bazel 中使用基於 BOM 的相依性解析。該專案可能涉及對現有開源努力的貢獻,或直接在 rules_jvm_external 中實作 BOM 支援,以確保與廣泛使用的相依性管理方法相容。
預期成果
- 在 Bazel
rules_jvm_external中實作 BOM 支援 - 改進 Bazel 使用者的相依性解析和可用性
- 提供在 Bazel 中使用 BOM 支援的文件和範例
偏好的技能
- Starlark (Bazel 的腳本語言)
- Bazel 建構系統
- 相依性解析策略
可能的導師
Shauvik Roy Choudhary 與 Uber 團隊
適用於 Kotlin Gradle 程式碼品質外掛程式的簡潔且可操作報告 [簡單到中等,90 小時到 175 小時]
Gradle 最近引入了一個新的 Problems API,允許 Gradle 和第三方外掛程式以統一的方式傳遞問題和警告。此 API 提供簡潔且可操作的錯誤報告,並對主控台輸出、專用 HTML 報告和連接的觀測工具提供更多見解。諸如 IntelliJ IDEA 或 Android Studio 等 IDE 也可以透過 Gradle 的 API 整合工具存取詳細資訊,並直接在程式碼編輯器中顯示警告。一些核心功能和外掛程式已經採用了 Problems API:Java 編譯、相依性解析錯誤、棄用警告等。我們希望 Kotlin 的程式碼品質外掛程式也能採用此 API;這將顯著改進使用 Gradle 的 100,000 多名 Kotlin 開發人員的開發者體驗。
在此專案中,我們邀請貢獻者選擇一些 Kotlin 程式碼品質外掛程式,例如 Ktlint、Detekt、Diktat、ArchUnit 或用於 Kotlin 的 Checkstyle,並將其與 Problems API 整合。您也可以致力於為使用 KotlinDSL 定義的 Gradle 組建整合類似的分析。
預期成果
- 在上述外掛程式中實作 Problems API 整合
偏好的技能
- Kotlin
- Gradle
可能的導師
Oleg Nenashev, Balint Hegyi, Reinhold Degenfellner
