0. 序言

0.1 本文的目录

0.2 阅读本文可以给你带来什么

了解开源项目的运作。

1.介绍

1.1 我是谁

个人github账号,曾经参与过两个开源项目,拿了一个Apache开源项目的commiter,以及参与一个从0->1开源项目。

1.2 开源相关概念

开源:顾名思义是指“开放源代码”,代表着share和use,源代码或源设计因此可 以被大众审查、修改和增强,最终达到分享和使用双向促进的目的。

开源软件:字面意思是公开源代码的软件,但开源软件的发布还需要遵循开源许可证,允许任何 人使用、拷贝、修改以及重新发布。

开源项目:开放式源代码项目,指的是开发者将自己的项目源码上传到 互联网,并遵循社区规范维护,供公众使用。

开源社区:又称开放源代码社区,一般由拥有共同兴趣爱好的人所组成,根据相应的开源软件许可 证协议公布软件源代码的网络平台,同时也为网络成员提供一个自由学习交流的空间。

开源协议:指开源软件所遵循的许可协议,获得了开源软件的用户,需要在该协议的允许范围内对 软件的源代码进行使用、修改和发行(包括以盈利为目的商业发行)。

2.为什么要开源

这个需要讲讲开源的历史:自由软件运动之始

简而言之:软件从免费开源到收费闭源的转变,让很多软件开发者感到不爽,然后理查德·斯托曼发起了自由软件运动。

开源的最终目的就是反哺商业,通过知识共享和集体创新使整个社区收益,也让商业公司为用户提供更好的产品。

3.做开源项目的挑战

个人认为做开源项目最大的挑战是可持续性问题:为什么有些开源软件突然就宣布不维护了?

  1. 个人投入的开源时间越多你生活上的时间就越少,随着社区越做越大需要投入的时间也越多,就需要更多人力
  2. 即使是理想主义者也需要获得报酬

4.如何做开源项目

做开源项目前还是需问自己一下:真的确认把自己的时间奉献给开源社区?多投入开源项目一分钟,你的个人生活就会少一分钟。

目前个人只有前期阶段和中期阶段的建议,目前对后期暂时无好的见解(无经验)。

4.1 前期阶段:完善社区运作流程,保证一定质量

需要做的事情有:1. 创建代码库;2.明确开源协议;3.完善项目文档;4.CICD;5.版本管理; 6.议题管理;7.贡献值指南;8.吃自己的狗粮,有一定质量保障;…做完上述的一些事情后可以尝试开始找用户。

4.2 中期阶段:保障软件质量,积极宣传,寻找更多社区开发者和客户

需要做的事情:1.寻求更多的曝光度:写文章、做直播、参与xxx大会;2.明确各责任田主保障各组件质量,看护软件架构,确保架构不腐化;3.不断完善文档,用户手册、开发者手册、xxx手册、FAQ等;

5.个人经验分享

5.1 创建代码库

  1. 可以在github或者gitee上新建代码库,建议先建立一个组织————因为后续开源这个开源项目会有一些新库,还有一个原因是可以利用组织名作为项目文档的官方域名(organization.github.io)免费用;
  2. 明确好license,注意license的选择,每个license要求不一样,license介绍
  3. 完善好Readme;

5.2 创建项目文档

  1. 建议在github或者gitee上创建文档库,方便合作修改;
  2. 使用博客模板,比如Hugo静态网站生成器工具;
  3. 构建&部署推荐使用netlify;

项目文档一般包含:简介,核心概念(架构、组件),快速开始,用户手册,开发者手册等。

5.3 DevOps————Github Actions

配置PR、Release以及定时任务等工作流,工作流中包含:CodeCheck、UT、E2E等作业。

5.4 版本管理

确定版本节奏:一年几个版本,一个版本的维护周期多久?比如我之前做的项目是一年2个版本,一个版本维护一年。

这边你还需要一个版本管理方案MAJOR.MINOR.PATCH

  • 当你进行了不兼容的 API 变更时,递增 MAJOR 版本
  • 当你以向后兼容的方式添加了一个功能时,递增 MINOR 版本
  • 当你进行了向后兼容的缺陷修复时,递增 PATCH 版本

发版本时的写的release note:需说明这个版本干了啥,比如新增xxx特性功能,修复了xxx问题,注意最后写下这个版本哪些人做出了贡献。

5.5 使用PR和议题模板

为PR和Issue定义几个模板,可以自定义和标准化你希望贡献者在你的仓库中打开议题和拉取请求时加入的信息。 比如问题议题模板有以下几个需要版本填写的信息:使用软件的版本;使用的OS;问题描述;如何复现;其他而外信息等。

5.6 贡献者指南

告诉贡献者如何提交PRs、docs等(一些编码风格和注意点),Github Action workflow工作介绍,以及如何成为Commiter和PMC等。

5.7 责任田OWNERS

明确各组件责任田主reviewers和approvers,若相关组件做了修改/出现啥问题可以@找到相关责任田主。

5.8 标签管理

给Issue和PR打上有用的标签,方便进行搜索和过滤。比如help-wanted,bugenchancementxx组件等。

5.9 如何推广项目

建立微信交流群,写文章宣传项目相关的xxx技术或者xxx最佳实践,然后附上相关信息;直播做技术分享;参与xxx大会做分享。

6.总结

以上就是做开源项目一些注意点,个人经验,仅供参考,欢迎与我交流。想做好一个开源社区真的很难!!!

参考:

https://www.freecodecamp.org/chinese/news/ultimate-owners-guide-to-open-source/#%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86

https://blog.csdn.net/weixin_46880696/article/details/127551861