Andrey Petrov 在 Sourcegraph 开源聚会 上分享了他从创建开源项目的成功和失败中吸取的教训。
Andrey 是流行的 urllib3 库以及 GitHub 上其他几个流行的开源库的作者。白天,他在 Briefmetrics 工作,也是 YC 校友、前 Google 员工和爱猫人士。他主要使用 Python、JavaScript 和 Go 编写代码。
为什么选择开源?
Andrey 在演讲开始时概述了开源的一些主要好处
- 这是获得代码的免费、复制备份的好方法。
- 它可以轻松链接到并寻求帮助。
- 它有助于扩大您在编程世界的影响力。
- 它可以让您最大限度地利用沉没成本。
您在代码上投入了大量时间和精力。开源使其可用且可重用。员工来来往往,公司也是如此,但开源代码将始终对您和其他发现它有用的人可用。
来自 urllib3 的代码片段,urllib3 是 Andrey 创建的流行的 Python 开源库。
开源有很多好处,但已经有很多开源代码了。如何让你的项目脱颖而出?以下是您可以用来构建出色的开源软件的 4 个步骤。
步骤 1:定义成功的标准
urllib3 每天被数百万人使用,在 GitHub 上有 785 个星,自 2008 年创建以来一直在增长。Andrey 还有另一个项目 ssh-chat,在 GitHub 上有 1,560 个星,但今天只有大约 15 人使用。那么哪个项目更成功呢?为了回答这个问题,Andrey 描述了在项目开始时定义成功将如何帮助您了解它是否成功。
每个开源项目的开始都像这样
- 构建一些东西。任何东西。
- 对最难的部分感到沮丧,构建库和工具来帮助。
- 放弃原始项目,专注于库,库成为你的新项目。
- 返回步骤 2 并重复。
urllib3 的故事始于 2008 年尝试将数十亿张图像上传到 S3 的问题。使用现有的 Python 库,这将花费超过三周的时间,因为没有良好的并发支持。您可以使用 s3funnel,一个多线程 S3 客户端,但管理线程很痛苦。您可以在 s3funnel 中使用工作池,但现有的 HTTP 库不重用连接,并且大多数解决方案不是线程安全的或缺乏 multipart (filepost) 编码。因此出现了 urllib3。
requests 的代码片段,requests 是 urllib3 中的一个流行函数
用 Andrey 的话说,“[在工程领域] 解决方案空间是关于构建一些东西并解决问题。对于 urllib3 来说,空间真的很小,而其他事物的解决方案非常有用,这就是它成功的原因。”
在定义项目目标时,请考虑解决一个小问题如何产生巨大的影响。
开源成功的另一种形式以 ssh-chat 为例,ssh-chat 是一个用 Go 编写的加密的基于 SSH 的聊天程序。Andrey 将 ssh-chat 作为周末项目启动。该项目成功的主要贡献之一始于创建详尽的 README。正如 Andrey 所说,“拥有出色的 README 基本上是成功的 80% 的工作。您需要能够为您的贡献者回答三个问题:“还有谁在使用它?”“他们用它做什么?”以及“我在哪里可以获得更多帮助?””
ssh-chat 的代码片段,ssh-chat 是一个流行的用 Go 编写的 ssh-chat 程序
但仅仅创建一个很棒的 README 并没有启动 ssh-chat 的惊人增长。为了使其蓬勃发展,它需要更多的吸引力。
步骤 2:招募核心贡献者
为了宣传 ssh-chat,Andrey 开始寻求帮助、寻求改进,并寻找将更多人带入项目的方法。为了帮助培养兴趣,Andrey 在 Twitter 上联系了人们,并提供免费的 Go 编程课程,以换取打开 pull 请求。这克服了让少数人参与并对项目感兴趣的最初惯性。这些早期的贡献者最终成为 ssh-chat 的拥护者,并开始在 Stack Overflow 上回答问题。
构建和维护开源项目的另一个组成部分是学习包容。Andrey 说,“非常慷慨和非常优雅地接受 pull 请求”是建立更多社区兴趣的关键步骤,也是许多开源作者在开始时忽略的事情。并且要求特定的人提交 pull 请求比更广泛地要求他的 Twitter 粉丝更有效。
步骤 3:营销和推广您的项目
一般来说,程序员往往不是自我推销型的人,因此积极营销和推广开源项目并不自然。考虑到这一点,Andrey 确定了程序员可以在不自我吹嘘的情况下推广项目的方法。
一种方法是撰写关于您的项目的有趣的博客文章,以提供更清晰的项目故事和使命背景。Medium 是在技术社区中分享的绝佳平台,并且比自托管博客有更多的潜在读者。
与为 urllib3 和 ssh-chat 工作的贡献者联系的其他机会包括
- 在 Stack Overflow 上回答问题(在 Stack Overflow 上设置特定主题的警报)
- 参与 Hacker News、reddit/r/programming 等上的讨论。
- 向其他开源项目销售并与他们建立合作伙伴关系。“urllib3 今天成为最流行的第三方 Python 库的唯一原因是它是 requests 的一部分。”
- 迎合非喷子:在您的公告帖子中获得赞只是一半的等式。更多的活动和讨论会吸引更多人点击它和更多更新,因此如果您回复几乎每条评论,那么评论数量将是原来的 2 倍。
步骤 4:盈利?
“我们想像 Docker 一样!” 我们不都这样想吗?
有两件事帮助 Docker 发展成为一个被广泛采用的开源项目
- 它资金非常充足。
- 它有成千上万的贡献者免费提供帮助。
Docker 成功的关键见解之一是,在 OSS 项目非常受欢迎之前,他们并没有过度关注商业模式。那么你如何复制这一点呢?引入“公司开源模式”——开源工作成为公司的核心竞争力和业务。
公司开源模式
一些最著名的拥抱公司开源模式的公司包括
- Docker(通过开放核心)
- Gratipay(通过试用自己的产品来获得收入)
- Nginx(通过咨询和支持)
- Mozilla(通过广告)
- GnuPG(通过慈善和赠款)
那么,作为自由职业者,你如何将你的贡献货币化呢?
嗯,你不能。至少不是直接的。
尽管 urllib3 被广泛采用,但 Andrey 分享说他只收到一位用户的 5 美元(他对此表示感谢!),这证明一个项目的广泛采用并不一定能提供可持续的收入模式来证明时间和精力的投入是合理的。
一些公司,如 Stripe 和 Sourcegraph 正在赞助开源工作。
开源:Just do it,并把它做好
开源非常有价值和有回报,但要成功地做到这一点,你必须努力。
在这种情况下,构建 urrlib3 的大部分工作意味着专注于一个小的但常见的挑战,编写一个很棒的 README,联系人们来贡献,并通过博客文章推广该项目。还值得一提的是,这些项目中的每一个都需要一些时间才能获得吸引力,而 Andrey 对随着时间的推移改进项目的承诺有助于他在编程社区中建立声誉和尊重。
简而言之,以下是如何让开源项目蓬勃发展
- 定义一个影响很多人的小解决方案空间。
- 编写一个很棒的 README,并招募能够并且愿意与您一起构建它的人。
- 通过博客文章和社交媒体活动营销和推广该项目。
- 确定并联系将从您的工作中受益的公司。
1 条评论