开源是一个蓬勃发展且有益的生态系统,它通过去中心化模型和社区贡献开发的软件,公开解决社区和行业中的问题。多年来,这个生态系统在爱好者和专业人士中的数量和实力都不断增长。它现在已成为主流——即使是专有公司也使用开源来构建软件。
随着生态系统的蓬勃发展,许多开发人员都想加入并构建新的开源项目。问题是:如何成功实现这一目标?
本文将揭秘开源项目的生命周期和结构。我想概述一下开源项目内部发生的事情,并根据我的个人经验向您展示如何构建一个成功且可持续的项目。
开源简介
开源促进会 (OSI) 提供了正式、详细的开源定义,但维基百科提供了一个很好的总结
开源软件是在许可证下发布的计算机软件,版权所有者授予用户使用、学习、更改和分发该软件及其源代码给任何人以及用于任何目的的权利。
开源软件是公开代码,通常在互联网上,由多人协作或由一个人开发。它关乎与来自不同地区、文化和技术背景的人们合作,通常是远程工作。这就是为什么创建一个欢迎所有人并使不同的人能够协同工作的项目至关重要。
开源项目的剖析
就像人体一样,开源项目由构成整个系统的几个结构组成。我将它们分为两个分支:人员(微观)和文档(宏观)。
分支一:人员
一般来说,一个开源项目包括以下几类人员
- 创建者:创建项目的人
- 维护者:积极管理整个项目的人
- 贡献者:为项目做出贡献的人(像您这样的人!)
- 用户:使用项目的人,包括开发人员和非技术客户
- 工作组:贡献者的集合,分为特定领域的组,专注于围绕特定主题领域(例如文档、入门、测试、DevOps、代码审查、性能、研究等)的讨论或活动
- 赞助者:为项目提供财务支持的人
在您准备构建新项目时,需要考虑上面列表中的每个群体。您对他们每个人有什么计划?
- 对于维护者,请确定您要用来任命他们的标准。通常,活跃的贡献者是最好的维护者。
- 对于用户和贡献者,您需要准备可靠的文档、入门流程以及他们在与您的项目合作时成功所需的一切。
- 对于工作组,请确定您是否需要它们,以及您的项目未来可能如何在逻辑上拆分。
- 最后,对于赞助者,您必须提供有关您的项目的足够数据和信息,以便他们选择赞助您。
您无需在项目开始时就弄清楚所有这些。但是,在早期阶段考虑它们是明智的,这样您就可以构建正确的基础,以确保未来的补充能够站稳脚跟并引导项目走向成功。
分支二:文档
开源项目通常包含以下文档,通常为纯文本或 Markdown 格式
- 许可证:这份法律文件解释了项目可以自由使用、修改和共享的方式和程度。OSI 网站上提供了 OSI 批准的许可证列表。如果没有明确的许可证,您的项目在法律上就不是开源的!
- 行为准则:本文档概述了任何决定以任何方式参与项目的人的规则、规范、可接受的做法和责任(包括当有人违反任何规则时会发生什么)。贡献者公约 是一个很好的例子,并且是开源的(根据知识共享许可获得许可)。
- README:此文件向新手介绍您的项目。在许多 Git 托管网站(例如 GitLab、GitHub 和 Codeberg)上,README 文件显示在存储库的初始文件列表下方。通常在此处提供文档,并链接到其他必要文档。
- 文档:这是一个文件或目录,包含项目的所有文档资源,包括指南、API 参考、教程等。
- 贡献指南:包含一份文档,解释如何为项目做出贡献,包括安装指南、配置等。
- 安全:包含一个文件,解释如何提交漏洞报告或安全问题。
此外,项目通常还具有用于问题、支持和协作的网页。
广义上讲,这些包括
- 问题或错误报告:用户可以报告错误的地方。此页面还为开发人员提供了一个地方,他们可以在其中分配自己修复一个或多个错误的任务。
- 拉取请求或合并请求:包含拟议的功能增强和错误解决方案的地方。这些补丁可能由任何人创建,由维护者审查,然后合并到项目的代码中。
- 讨论:维护者、贡献者和用户讨论开源项目的地方。这可以是专用网站,也可以是协作编码站点内的论坛。
大多数项目还有一个通信渠道,形式为在线聊天,用于社区成员之间的对话和互动。
许可
许可可能是创建开源项目之前要考虑的最简单但最重要的标准。许可证定义了允许使用、修改和共享您的项目的源代码和其他组件的条款和条件。
许可证包含大量法律术语,许多人并不完全理解。我使用 choosealicense.com,它可以帮助您根据您的预期社区、您希望从使用您的代码的人那里获得补丁的愿望,或者您是否愿意允许人们使用您的代码而不分享他们对其进行的改进来选择许可证。

(Bolaji Ayodeji,CC BY-SA 4.0)
创建开源项目的 13 个阶段
现在来回答最重要的问题:如何启动一个开源软件项目?
以下是我认为开源项目的各个阶段列表。
- 集思广益您的想法,编写概要,并妥善记录。
- 开始开发您的想法。这通常涉及弄清楚要使用的正确工具和技术栈,编写一些代码,对代码进行版本控制,调试,喝咖啡,在 StackOverflow 上闲逛,使用其他开源项目,睡觉,以及构建一些东西来解决已定义的问题——或者只是为了好玩!
- 在本地测试项目,根据需要编写一些单元测试和集成测试,根据需要设置 CI/CD 管道,创建一个暂存分支(在合并到主分支之前,您在其中实时测试代码的测试分支),并执行部署项目所需的任何其他操作。
- 编写良好且有效的文档。这应涵盖您的项目的功能、实用性、入门方法(用法、安装、配置、贡献)以及人们可以获得支持的地方。
- 确保记录您要使用的所有代码约定。使用诸如 linters、代码格式化程序、Git 钩子和 commitizen 命令行实用程序之类的工具来强制执行它们。
- 选择正确的许可证并创建 README。
- 在互联网上发布项目(您最初可能有一个私有存储库,并在这一步将其公开)。
- 设置用于进行发布和记录更改日志的流程(您可以使用 Changesets 之类的工具)。
- 向全世界推广该项目!您可以在社交媒体上发帖,开始时事通讯,私下与您的朋友分享,进行产品发布,直播或您知道的任何其他传统营销策略。
- 通过使用任何可用的资助平台(例如 Open Collective、GitHub Sponsors、Patreon、Buy me a Coffee、LiberaPay 等)寻求资金支持。当您使用这些平台创建帐户时,请在您的项目文档和网站中添加指向它的链接。
- 围绕您的项目建立一个社区。
- 在需要时考虑引入工作组,将您的项目管理分解为逻辑部分。
- 不断实施新的想法,以维持项目背后的资源和人员。
随着项目的进展,衡量项目的不同部分非常重要。这为您提供可用于评估和未来增长策略的数据。
现在开始一个项目吧!
我希望本文能帮助您推进您一直在考虑的那个项目。
随意使用它作为指南,并在构建您出色的开源软件项目时填补我遗漏的任何空白。
2 条评论