2025 年 Kotlin 的 Google Summer of Code
這篇文章包含 2025 年 Kotlin 參與 Google Summer of Code 的 專案構想列表和貢獻者指南。
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 感興趣的原因以及您使用 Kotlin 的經驗。
- 如果您參與開源專案,請參考您的貢獻歷史。
- 如果您有 GitHub、Twitter 帳戶、部落格或技術或科學出版物的作品集,也請參考它們。
- 揭露由於其他承諾(例如考試和假期)而與 GSoC 時間表發生的任何衝突。
謝謝!我們期待閱讀您的申請!
專案構想
建置伺服器協定:新增 Kotlin 支援 [Hard, 350 hrs]
Kotlin 團隊希望擴展官方 Kotlin 支援,不僅支援 Gradle 和 Maven 建置系統, 還支援任何其他建置系統,並以最少的努力在本機支援 JetBrains IDE。 另一方面,我們也希望在非 JetBrains IDE 中提供基本的 Kotlin 支援 - 這種支援的一部分是能夠從任何支援 Kotlin 的建置系統獲取 Kotlin 特定的資訊。
這些需求的解決方案可以是 建置伺服器協定 (Build Server Protocol, BSP), 它在建置系統和 IDE 之間提供了一個抽象層。
這個專案的目標是實作一個原型,該原型使用 BSP 協定從使用者專案獲取 IntelliJ IDEA 所需的所有資訊, 以便可以在專案中使用 Kotlin 程式碼。 為了限制此原型的範圍,使用者專案將使用 Gradle 自動建置自身。
偏好的技能
- Kotlin 知識
- 了解如何編寫 Gradle 外掛程式
- Bonus: 了解如何編寫 IntelliJ IDEA 的外掛程式
可能的指導者
Yahor Berdnikau、Bálint Hegyi 和 Reinhold Degenfellner
申請人的任務
-
Task #1. 您為什麼對這個專案感興趣?
-
Task #2. 實務作業: 建立一個 Gradle 外掛程式,該外掛程式公開一個特定的任務。 如果存在 Kotlin Gradle 外掛程式,則此任務應擷取所有 Kotlin 來源的結構並將其輸出。 包含測試將是一個 bonus。
在 Firebase 中使用 Vertex AI 在 Kotlin Multiplatform 中支援 Android 和 iOS 目標 [Medium, 175 hrs]
這個專案旨在建立一個開放原始碼的 Kotlin Multiplatform (KMP) 函式庫,該函式庫支援在 Firebase 中使用 Vertex AI 的 Gemini, 至少在 Android 和 iOS 上。 它將展示為現有服務建立 KMP 函式庫的最佳實務, 重點是適當的生產實作(例如,適當的 API 金鑰管理、使用者管理的 API 金鑰支援 和客戶端節流)。
預期成果
- 一個新的 Kotlin Multiplatform 函式庫,支援現有的 Google 服務
- 範例程式碼和文件
偏好的技能
- Kotlin
- Kotlin Multiplatform
- 行動應用程式開發(Android 和 iOS)
可能的指導者
Matt Dyor 和 Google 團隊
在 Bazel 中新增 Kotlin Multiplatform 支援 [Hard, 350 hrs]
Bazel 對 Kotlin 的支援正在發展,但適當的 Kotlin Multiplatform (KMP) 整合仍然是一個挑戰。
這個專案旨在透過解決相依性解析問題、增強 rules_kotlin
和 rules_jvm_external
相容性
並啟用跨平台建置來改善 Bazel 的 KMP 支援。
主要改進將側重於處理平台特定的相依性(expect/actual 機制)、 改善 Gradle 元資料支援,並確保 Bazel 中 KMP 的開發人員體驗更加順暢。
預期成果
- 增強 Bazel 中 Kotlin Multiplatform 的相依性解析
- 改善與
rules_kotlin
和rules_jvm_external
的整合 - 在 Bazel 中建立一個可用的 KMP 建置設定,以實現無縫的多平台開發
偏好的技能
- Kotlin Multiplatform 和 Gradle
- Bazel 建置系統
- 相依性解析策略
可能的指導者
Shauvik Roy Choudhary 和 Uber 團隊
Kotlin 語言伺服器 (Language Server Protocol, LSP) [Hard, 350 hrs]
語言伺服器協定 (LSP) 是一種廣泛採用的標準,它可以在不同的編輯器和 IDE 中啟用程式碼智慧功能,例如自動完成、 跳轉到定義和重構。 雖然目前沒有官方的 Kotlin LSP 伺服器,但社群對它的需求很大。 公開維護、社群驅動的實作可以支援廣泛的用例, 包括程式碼遷移、AI 驅動的程式碼協助以及與各種開發環境的無縫整合。
這個專案旨在開發一個 Kotlin LSP 實作,確保與關鍵 LSP 功能的相容性 並擴大 Kotlin 在各種開發環境中的可訪問性。
預期成果
開發 Kotlin LSP 實作
偏好的技能
- Kotlin
- 語言伺服器協定 (LSP)
- IDE 的外掛程式或擴充功能開發
可能的指導者
Shauvik Roy Choudhary 和 Uber 團隊
具有新 API 的 Gradle 的 Maven Central 發佈外掛程式 [Medium, 175 hrs]
Maven Central 是發佈 以 JVM 為中心的函式庫和專案的最受歡迎的 Maven 儲存庫之一。 它被 Apache Maven 或基於 Gradle 的開放原始碼專案積極使用, 並且基於 Sonatype Nexus v2,等待遷移到較新版本。 開放原始碼專案正在遷移到新的 Maven Central 實例,該實例具有非常不同的 API 實作,並且需要在建置工具外掛程式中提供特殊支援。 開發與新的 Maven Central 發佈 API 相容的 Gradle 外掛程式將有助於 使用 Gradle 建置的函式庫作者在使用新流程時獲得順暢的體驗。
目前,Gradle 中有多個 Maven Central 發佈外掛程式的實作,例如 Maven Publish Plugin 或 New Maven Central Publishing,它已經嘗試採用新的 API。 在申請或社群聯繫階段,潛在的貢獻者需要審查這些實作 並建議更新現有的外掛程式,或決定建立新的外掛程式或 fork。 交付成果將包括現有 Maven Central 發佈外掛程式的新版本或 Gradle 的新外掛程式。 我們預期該實作將使用 Kotlin 或 Java,並且具有適當的測試覆蓋率和文件。 其他交付成果可能包括 Kotlin DSL 擴充功能,以簡化外掛程式的使用和 Declarative Gradle 擴充功能。
預期成果
- 更新的 Maven Central 發佈外掛程式或新外掛程式
偏好的技能
- Kotlin
- Gradle
- Maven 儲存庫
可能的指導者
Oleg Nenashev 和 Gradle 團隊
改善關鍵 Gradle 外掛程式中的組態快取和鎖定競爭 [Easy to Hard, 90 hrs to 350 hrs]
Gradle 正在開發 Isolated Projects – 一項新功能 ,它極大地擴展了組態快取,以進一步提高效能,尤其是 Android Studio 和 IntelliJ IDEA 同步的效能。 從開發人員體驗的角度來看,它是 Gradle 中最受期待的功能之一。
Isolated 專案的問題之一是 Gradle 核心中的鎖定競爭,外掛程式有時會妨礙平行執行。 我們希望減少鎖定競爭,尤其是在 Java、Kotlin、Android 和 Kotlin Multiplatform 生態系統的關鍵 Gradle 建置工具外掛程式中。 歡迎貢獻者根據自己的興趣和所需的專案規模選擇交付成果。
潛在的交付成果包括但不限於:
- 將 Configuration Cache Report 工具嵌入到 Gradle Profiler 中(或「為其實作 GitHub Action」)
- 在 GHA 上自動執行測試套件,分析 Gradle 和幾個流行的 Gradle 外掛程式在各種專案中的效能
- 確定可以減少鎖定競爭的潛在區域和外掛程式,無論是否具有組態快取
- 同時,為目標外掛程式中的 Configuration Cache 相容性 的其他領域做出貢獻
- 實作一些已發現的改進
預期成果
在 Gradle 的 Kotlin DSL 中實作可擴展性功能,並改善對常見專案整合的支援
偏好的技能
- Kotlin
- Gradle
- Java
- 效能分析
- 效能分析
可能的指導者
Oleg Nenashev、Laura Kassovic
用於開發 Jenkins 外掛程式的 Gradle 慣例外掛程式 [Easy to Hard, 90 hrs to 350 hrs]
有超過 50 個使用 Gradle 實作的 Jenkins 外掛程式。 有一個 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 外掛程式整合到外掛程式相容性測試程式和物料清單中
- 記錄 Jenkins 外掛程式的更新 Gradle 開發流程
預期成果
更新的 Gradle JPI 外掛程式和/或 Jenkins 的新慣例外掛程式,發佈在 Jenkins 更新中心和 Gradle 外掛程式入口網站上
偏好的技能
- Kotlin DSL
- Kotlin
- Gradle
- Jenkins
- Java
可能的指導者
Oleg Nenashev、Stefan Wolf
Kotlin DSL 和宣告式 Gradle 文件範例測試框架 [Easy to Medium, 90 hrs to 175 hrs]
許多專案(包括 Gradle)都有大量的 Kotlin DSL 範例和程式碼片段(請參閱 Gradle 文件以獲取範例)。 針對多個版本對它們進行測試會帶來一定的挑戰,因為這些片段通常為了簡潔起見而代表不完整的程式碼。 我們希望建置一個測試框架,該框架簡化了在 GitHub Actions 或 TeamCity 上的單元測試框架(Kotest 或 JUnit 5)中驗證這些範例的過程。 稍後,我們將有興趣對 Declarative Gradle 範例執行相同的操作。
預期成果
在 Gradle 的 Kotlin DSL 中實作可擴展性功能,並改善對常見專案整合的支援
偏好的技能
- Kotlin
- Gradle
- Java
- 靜態分析
可能的指導者
Oleg Nenashev、Laura Kassovic
IntelliJ Platform Gradle Plugin – Gradle 報告和平行驗證 [Medium, 175 hrs]
IntelliJ Platform Gradle Plugin 是 Gradle 建置系統的外掛程式,簡化了配置環境以建置、測試、驗證 和發佈基於 IntelliJ 的 IDE 的外掛程式的過程。 該外掛程式管理建置、測試和驗證步驟,同時跟上 IntelliJ Platform 中不斷引入的變更。 JetBrains、第三方開發人員 和外部公司使用 IntelliJ Platform Gradle Plugin 將其工作流程與 JetBrains 工具整合。
預期成果
- 引入 Gradle 報告以提供詳細、可配置的驗證任務報告。
- 利用 Gradle Worker API 啟用針對多個 IntelliJ Platform 版本的
verifyPlugin
任務的平行執行,從而減少任務執行時間。 - 探索其他 Gradle 增強功能,以進一步改善外掛程式開發工作流程。
偏好的技能
- Kotlin
- Gradle
- IntelliJ Platform
可能的指導者
Jakub Chrzanowski、JetBrains
新增更多 Kotlin OpenRewrite 配方 [Medium, 175 hrs]
OpenRewrite 是一個強大的框架,可以以結構化的方式自動執行程式碼遷移和重構。 雖然 OpenRewrite 對 Java 具有強大的支援,但 Kotlin 生態系統將受益於更全面的 OpenRewrite 配方集,以幫助開發人員無縫地遷移其程式碼庫。
這個專案旨在透過新增更多 自動轉換(例如,將基於 Java 的 AutoValue 類別遷移到慣用的 Kotlin 資料類別、使 Kotlin 程式碼現代化以遵循最佳實務,並啟用更 無縫地跨 Kotlin 版本進行遷移)來擴展 Kotlin OpenRewrite 配方集合。 這些配方將幫助 Kotlin 開發人員以最少的手動工作量維護乾淨、最新和慣用的程式碼庫。
預期成果
- 開發用於 Kotlin 程式碼遷移的新 OpenRewrite 配方
偏好的技能
- Kotlin
- OpenRewrite 框架
- Java 到 Kotlin 的遷移策略
可能的指導者
Shauvik Roy Choudhary 和 Uber 團隊
將 BOM 支援新增到 Bazel rules_jvm_external
[Hard, 350 hrs]
Bazel 的 rules_jvm_external
提供了一種結構化的方式來宣告外部 Java 相依性,
但它目前缺乏對物料清單 (Bill of Materials, 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 程式碼品質外掛程式的乾淨且可操作的報告 [Easy to Medium, 90 hrs to 175 hrs]
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 或 Checkstyle for Kotlin,並將它們與 Problems API 整合。 您還可以致力於整合 KotlinDSL 定義的 Gradle 建置的類似分析。
預期成果
- 在提到的外掛程式中實作 Problems API 整合
偏好的技能
- Kotlin
- Gradle
可能的指導者
Oleg Nenashev、Balint Hegyi、Reinhold Degenfellner