构建成功的开源项目的重要建议
使用这些步骤来为你的第一个或接下来的项目打下坚实的基础。
开源项目
116.130.195.26
长知识了
来自荷兰的 Chrome Mobile 106.0|Android 13 用户
2023-07-15T13:29:50.000
使用这些步骤来为你的第一个或接下来的项目打下坚实的基础。
![](/data/attachment/album/202307/14/145640gqnqawqqqhqqh65w.jpg)



> 
> 使用这些步骤来为你的第一个或接下来的项目打下坚实的基础。
> 
> 
> 


[开源](https://opensource.com/resources/what-open-source) 是一个蓬勃发展且有益的生态系统，它通过分散模式和社区贡献开发的软件，公开解决社区和行业问题。


随着这个生态系统的爆炸式发展，许多开发者想要参与并且构建新的开源项目。问题是：如何成功实现这一目标呢？


这篇文章将会揭秘开源项目的生命周期与结构。给你一个对开源项目内部运作的概述，并根据我个人的经验，向你展示如何构建一个成功和可持续发展的项目。


### 对开源的简单概述


<ruby> <a href="https://opensource.org">  开源促进会 </a> <rt>  Open Source Initiative </rt></ruby>（OSI）提供了对“<ruby> 开源 <rt>  Open Source </rt></ruby>”的正式、详细的定义，但是维基百科提供了一个很好的总结：



> 
> 开源软件是指根据许可证发布的计算机软件，版权持有人授予用户使用、研究、更改和向任何人、为了任何目的分发软件和它的源代码的权利。
> 
> 
> 


开源软件通常在网络上有公开的代码，它由多人合作或一人开发。这就需要与来自不同地区、不同文化和不同技术背景的人合作，而且往往是远程合作。


### 开源项目的构成


就像人类的身体，一个开源项目由多个结构组成，这些结构构成了整个系统。我认为它们是两个分支：人员（微观）和文档（宏观）。


#### 分支一：人员


通常，一个开源项目包括以下人群：


* 创建者：创建项目的人
* 维护者：积极管理整个项目的人
* 贡献者：为项目做贡献的人（像你一样的人！）
* 用户：使用这个项目的人，包括开发者和非技术客户
* 工作组：将贡献者分成特定领域的小组，专注于围绕特定主题领域（如文档、指引、测试、DevOps、代码审查、性能、研究等）的集合。
* 赞助人：为项目提供资金支持的人


当你准备构建一个新项目时，你需要考虑以上列表中的每一个群组。你对他们每个人有什么计划？


* 对于维护者，请确定任用维护者的标准。通常，积极的贡献者就是最适合的维护者。
* 对于用户和贡献者，你需要准备可靠的文档、引导流程和他们使用你的项目取得成功所需的一切。
* 对于工作组，请确定你是否需要它们，以及你的项目将来如何有逻辑地拆分。
* 最后，对于赞助人，你必须提供足够的数据和有关你项目的信息，以便他们选择赞助你。


你不必在你项目的起始阶段解决上面所有问题。然而，在早期阶段思考它们是很明智的，这样你就能打下正确的基础，确保未来的扩建项目能够站稳脚跟并取得成功。


#### 分支二：文档


开源项目通常包括下列文档，通常为纯文本或 markdown 格式：


* 许可证（`License`）： 这份法律文件解释了如何以及在何种程度上可以自由使用、修改和共享本项目。OSI 网站上有 OSI 认可的许可证列表。如果没有明确的许可证，你的项目在法律上就不是开源的！
* 行为准则：该文件概述了任何决定以任何方式参与项目的人的规则、规范、可接受做法和责任（包括当有人违反任何规则时会发生什么）。[贡献者公约](https://www.contributor-covenant.org/version/2/1/code_of_conduct) 是一个很好的示例，它是开源的（采用知识共享许可协议）。
* 自述文件（`README`）：这个文件向新用户介绍你的项目。在很多 Git 托管网站上，比如 GitLab、GitHub 和 Codeberg，自述文件会显示在仓库的初始文件列表下。这里通常会提供文档，以及其他必要文档的链接。
* 文档（`Documentation`）：这是一个包含所有本项目文件资源的文件或目录，包括指南、API 参考、教程等。
* 贡献指南（`Contributing`）：包含一份说明如何为项目做出贡献的文件，包括安装指南、配置等。
* 安全（`Security`）：包括一个解释如何提交漏洞报告或安全问题的文件。


此外，一个项目通常有用于议题、支持和协作的网页。


大致包括：


* 议题或错误报告：用户可以报告错误的地方。该页面还为开发人员提供了一个地方，让他们可以分配自己的任务来修复一个或多个错误。
* 拉取或合并请求：提供功能增强建议和错误解决方案的地方。这些补丁可以由任何人创建，由维护者审核，然后合并到项目代码中。
* 讨论：维护者、贡献者和用户讨论开源项目的地方。它可以是一个专门的网站，也可以是协作编码网站中的一个论坛。


大多数项目还通过在线聊天的形式为社区成员之间的对话和互动提供交流渠道。


### 许可证


[许可证](https://opensource.com/tags/licensing) 也许是创建开源项前需要考虑的最简单但也是最重要的标准。许可证定义了允许使用、修改和共享项目源代码和其他组件的条款和条件。


许可证包含大量的法律术语，很多人并不完全理解。我使用 [choosealicense.com](https://choosealicense.com)，它可以帮助你根据你的目标社区、你从使用你的代码的人那里获得补丁的愿望，或者你允许别人使用你的代码而不分享他们对你的代码所做的改进来选择许可证。


![图片由： (Bolaji Ayodeji, CC BY-SA 4.0)](/data/attachment/album/202307/14/145653fovw6fm0vzvo5mvp.png)


这为何时使用 MIT 许可或 GNU GPLv3 许可提供了指导。它还建议为社区做出贡献的人们使用该社区所偏好的许可证。该图表还指出，还有更多许可证可供选择。网站 [choosealicense.com](http://choosealicense.com) 有一个基于文本的版本，可以链接到更详细的信息。


### 创建一个开源项目的 13 个阶段


现在是关键问题：如何开始开源软件项目？


以下是我所认为的开源项目的各个阶段。


1. 集思广益，撰写提纲，妥善记录。
2. 开始根据你的想法进行开发。这通常包括确定要使用的正确工具和技术栈、编写一些代码、对代码进行版本控制、调试、喝点咖啡、在 StackOverflow 上闲逛、使用其他开源项目、睡觉、构建一些东西来解决确定的问题 —— 或者只是为了好玩！
3. 在本地测试项目，根据需要编写一些单元测试和集成测试，根据需要设置 [CI/CD 管道](https://opensource.com/article/19/9/intro-building-cicd-pipelines-jenkins)，创建一个暂存分支（在合并到主分支之前测试代码的测试分支），并完成部署项目所需的其他工作。
4. 编写 [良好有效的文档](https://slides.com/bolajiayodeji/effective-oss-docs)。这应该包括你的项目是做什么的，为什么它是有用的，如何开始使用它（使用、安装、配置、贡献），以及人们在哪里可以得到支持。
5. 确保记录所有你希望使用的代码约定。使用诸如 <ruby> 代码检查工具 <rt>  Linter </rt></ruby>、代码格式化工具、Git 钩子和 <ruby> 注释规范化工具 <rt>  Commitizen </rt></ruby> 命令行工具等工具来执行这些约定。
6. 选择合适的许可证并创建自述文件。
7. 在互联网上发布项目（可能最初是一个私有的资源库，在这一步将其公开）。
8. 建立发布和记录更新日志的流程（你可以使用 Changesets 等工具）。
9. 向全世界推广项目！你可以在社交媒体上发帖、创办新闻简讯、私下与朋友分享、进行产品发布、现场直播或其他任何你知道的传统营销策略。
10. 使用任何可用的融资平台寻求资金支持，如 Open Collective、GitHub Sponsors、Patreon、Buy me a Coffee、LiberaPay 等。当你在这些平台上创建账户时，请在项目文档和网站中添加相关链接。
11. 围绕你的项目建立一个社区。
12. 在必要时，考虑引入工作组，将项目管理分成合理的部分。
13. 不断实施新理念，维持项目背后的资源和人员。


随着项目的进展，对项目的不同部分进行评估非常重要。这将为你提供可用于评估和未来发展战略的数据。


### 现在开始一个项目吧！


我希望这篇文章能帮助你推进你一直在考虑的项目。


你可以将其用作指南，并在构建你的一流开源软件项目时填补我遗漏的任何空白。


*（题图：MJ/a22b4011-9b1e-41e6-a73f-bdeac4858007）*




---


via: <https://opensource.com/article/22/9/build-open-source-project>


作者：[Bolaji Ayodeji](https://opensource.com/users/bolajiayodeji) 选题：[lkxed](https://github.com/lkxed) 译者：[wcjjdlhws](https://github.com/wcjjdlhws) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

