> For the complete documentation index, see [llms.txt](https://freebsd-journal-cn.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://freebsd-journal-cn.bsdcn.org/2016-0506-armv8/building-community-around-the-google-summer-of-code.md).

# 围绕谷歌编程之夏构建社区

* 原文：[Building Community Around the Google Summer of Code](https://freebsdfoundation.org/wp-content/uploads/2016/06/Building-Community-Around-the-Google-Summer-of-Code.pdf)
* 作者：**Pedro Giffuni**

FreeBSD 每年都作为导师组织参与谷歌 Summer of Code（简称 GSoC），这是资助大学生参与开源项目的计划。这是让学生参与软件开发的好方式，同时帮助通常资源紧缺的社区获得开发资金。

就 FreeBSD 而言，我们非常幸运。没有多少项目能像我们这样年年入选。我们的成功部分无疑来自拥有一个极具影响力和创新性的优秀项目。另一部分成功则来自背后始终如一的管理员 Gavin Atkinson，以及一群愿意指导学生的出色导师。

我承认，自己是在帮助学生完成 GSoC 项目后成为 FreeBSD 提交者的。我不是导师，只是帮忙。真正的导师认为我可以成为好的提交者；如今 1300 多次提交之后，加上偶尔的失误，我希望他仍然这么认为。那个学生没有获得提交权限，但他找到了新工作，最终成为一个相关开源项目的主要贡献者，所以我认为这次经历对参与的每个人都很令人满意。过去三年我一直是谷歌编程之夏的导师，今年开始参与 GSoC 的管理工作。

## 那么真的值得吗，还是我们只是在从谷歌那里捞钱？

绝对值得，但可能不是大多数人想的那样。学生的代码很少能进入 FreeBSD 主代码仓库。FreeBSD 已成为极其复杂的项目，要达到将新代码纳入主仓库的代码质量并不容易。Bugzilla 数据库——如果你有勇气去看——有许多悬而未决的问题附带看似能修复的补丁，但如果我们盲目提交，会打开更多漏洞。

GSoC 让学生接触一个广泛部署和测试过的代码库，任务往往具有挑战性。作为 FreeBSD 开发者，我学到了许多书本上不教的东西，从这个意义上说，参与项目意味着作为专业人士不断学习和成长。

## 指导项目

任何 GSoC 项目的关键在于指导：没有导师就无法承担任何项目。事情就是这样，我们也没有多少简单的任务交给学生，因此有一位深入了解现有代码库的导师至关重要。

我有幸在大学层面教过书，GSoC 项目中与之相似的是，你在过程中学会教学/指导。和现实生活中一样，学生并不总是真正掌握他们自以为掌握的东西。和现实生活中一样，学生和导师并不总是相互理解，如果看不到对方的面孔更是如此。项目可能失败，但失败本身也有价值。

我的第一个项目失败了，虽然我认为这并非我的过错，但我仍然认为我们不应害怕失败。我们双方都在过程中学到了东西，即使学生并不认同自己表现不佳，他后来又申请了另一届 GSoC 加入我们，所以这远非无法恢复的创伤。就我而言，每次指导都让我不断学到新东西。

成功项目背后真正的关键不在于代码；关键在于回答这些问题：学生是否理解和学到东西？学生是否从参与社区中获得价值？以及偶尔冒出的——“如果我们尝试……会不会很有趣？”

当然，代码最终可能成形，而且总有可能其他人会觉得它有用。我个人曾从另一个项目的 GSoC 中拿来代码，经过大量努力后导入 FreeBSD。最终我回退了它，又重新修复并再次导入，但是……嗯……如果让我从零开始写，根本不会发生。

我们还努力让学生融入一种文化：让他们使用与我们相同的工具，大量使用版本控制，代码经过审查，并鼓励与其他社区成员互动。令人失望的是，有些其他项目——这里不细说——完成 GSoC 时没有状态报告，也没有任何作为项目一部分开发的代码痕迹，无论好坏。

我们注意到的另一件特别有意思的事是，当其他项目——可能是但并非一定是某个 BSD 变体——未能入选 GSoC 时，我们可能会迎来一批有那些项目经验的开发者涌入。这很棒，因为我们为自己的开发流程引入了重要的多样性：我希望我们能开始与其他 BSD 项目合作，也与相关的代码库 Illumos，或 Debian kFreeBSD、UbuntuBSD 等变体，甚至 Apache Cloudstack 等不同代码库合作。我们显然还没有穷尽所有可能。

## 我们如何选择

导师始终是关键：每年都有稳定的学生流入，但开发者不会凭空出现。选拔过程包括导师为他们最喜欢的提案投票，但最终取决于能否为项目找到导师。

随着我们在 GSoC 计划中不断前行，我们改进了早期指导等概念，即让潜在学生在公开场合讨论他们的提案，并在提案提交前与可能的导师讨论。我们确实偏好有 FreeBSD 社区经验的学生，以及已经有版本控制经验的人，无论是 subversion、git，甚至 perforce。如果学生已经使用过 FreeBSD，知道如何重新编译内核，或已经提交过补丁，也是个好迹象。

FreeBSD 当然相当特殊，因为它是一个完整的操作系统：虽然只影响内核或只影响用户空间的项目并不少见，但一个项目跨多个领域来实现目标也不意外。虽然我们不会放弃任何通用项目，但通常会偏向那些别处无法完成的项目，因此任何与 FreeBSD 特有技术（如 capsicum、netgraph、netmap、bhyve、Jail）相关的工作，甚至不太特有但相关的技术（如 ZFS 和 DTrace），都更可能引起我们的注意。

截至本文撰写时，我们收到 36 份提案，接受了 15 份。我们保守了一些，但我希望我们抓住了用户最希望在 FreeBSD 中看到的精华。

## 从 GSoC 毕业

我们有学生多次参与，他们认为这是一段很棒的经历，这最终决定了一个项目是否完全成功。最近谷歌决定学生只能参与两次该计划。这是可以理解且公平的，虽然我们因此失去了一个非常有趣的项目，但我们只需记住，我们不是为了钱，而是因为喜欢。当出现特别的项目时，我们终会找到其他方式资助。

让学生参与会议、与其他开发者互动，甚至帮助他们联系使用 FreeBSD 的公司，对社区至关重要，这是我们仍在学习的过程。

衷心感谢，谷歌！

***

**Pedro Giffuni** 是哥伦比亚国立大学的机械工程师。他在 14 岁左右开始接触计算机，那时他在 Tandy Coco 上 Microsoft Basic 的早期时代与 Intellivision 之间徘徊。Pedro 第一次接触 FreeBSD 是在 1997 年，他在波哥大的学校里通过当时“高速”的 19.2K 调制解调器下载软盘安装了 2.1.5-Release。那时他已经非常精通 Pascal 和 Fortran 编程，后来发现这些基本毫无用处。在乐趣远多于痛苦的探索后，Pedro 自那以后无需尝试其他类 Unix 变体。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://freebsd-journal-cn.bsdcn.org/2016-0506-armv8/building-community-around-the-google-summer-of-code.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
