如何开始一个开源项目?
接触开源零零散散也快有三年了,虽然听上去时间很长,但是我实际参与的开源项目寥寥无几,只是描述我的见闻而已。
最基础的就是些开源相关的常识,比如开源协议,开源使用的工具等等,如果有意学习我相信大多数人很快就能掌握。我也就大致列了一些在下面。当然,最快速的方法是寻找一些新兴的正在开发的开源项目,观察其规范、行为乃至参与其中,这样的学习效率是最高的。
开源协议
常见的开源协议
- MIT License:这是一个非常宽松的协议,允许任何人几乎无限制地使用、复制、修改和分发代码。
- Apache License 2.0:与MIT类似,但它增加了专利授权条款,并要求保留原始版权声明。
- GPL(GNU General Public License):强制衍生作品必须以相同的许可证发布,确保开源精神得以延续。
- LGPL(GNU Lesser General Public License):适用于库,它允许专有软件链接到该库而不需要开放其源码。
- BSD Licenses:提供了两种版本,新BSD协议包含了禁止使用贡献者名字进行推广的条款。
- AGPLv3(GNU Affero General Public License version 3):扩展了GPLv3(GNU General Public License version 3)的条款,特别针对通过网络提供服务的应用程序。
开源的平台
常用的开源平台
- GitHub:最流行的代码托管平台之一,支持Git版本控制。
- GitLab:提供更多的CI/CD集成选项,并且可以自托管。
开源使用的工具
版本控制
使用Git进行版本控制, 跟踪代码更改历史, 多人合作.
Git Hook
Hook 脚本可以在特定时间发生时自动运行, 顾名思义 Hook(钩子)就是在某事发生必然发生的事, 用途比如提交前检查代码风格或者提交后部署代码.
Git Ignore
使用 .gitignore
文件列出不应被 Git 追踪的文件, 例如编译产物或IDE配置文件.
Issue 模板
创建 issue 模版可以帮助开源社区贡献者清晰描述问题, 包括复现步骤和期望行为. 规范的 issue 不仅可以帮助提问者快速的解决问题, 节省维护者了解问题的精力, 还节省了后续查询相关 issues 的用户的时间. 遇到过不少不规范 issue 的项目, 去查 issue 查个半天会发现一些提问者描述的既不清晰, 而且在没有给出解决方案(不管可行不可行)的情况下就把 issue 关闭了.
Pull Request模板
PR模板有助于确保所有必要的信息都被包含在内,如变更描述、测试结果等。可以方便审查代码.
CI/CD
持续集成和持续部署工具,如GitHub Actions、GitLab CI、Jenkins等,可以自动化测试和部署流程。比如自动编译 Release, 自动部署, 自动打包 Docker 镜像等等.
宣传
东亚文化是一种集体主义,社会鼓吹的是踏实、谦虚、低调,不要突出自己。所以很多人喜欢在集体中默默无闻的奉献,这是最经典的一种驯化。长期演变下来,你会发现,身边很多人是不擅长或者说不屑于展示自我的,因为我们的文化里常常将"Selling yourself"等同于一种负面的道德品格。 当你做完一件事情其实还不够,你得"Show your work",把它"贩卖"出去。
我亲眼目睹了一个开源项目在宣传前后star数的井喷,在那个项目的开发者还没有下场宣传的时候,它不到一千的star,但是在宣传之后,那个项目的star在短短两天之内就到了五千star。"酒香也怕巷子深",因此好的宣传也是做好一个开源项目必要的。
开源软件如何进行宣传?
- 社交媒体:国内利用Bilibili、知乎、小红书, 国外利用Twitter、LinkedIn等社交网络分享项目进展。
- 技术博客:撰写关于项目的博客文章,解释其用途和技术细节。
- SEO优化:确保项目页面针对搜索引擎进行了优化,以便更容易被发现。
- 多交朋友:与其他相关的开源项目或公司建立合作关系扩大影响力。
当然开源项目是经过众人不断用实践检验的。清晰的文档,用户友好的指引,会有助于新人的到来。规范的代码实践和沟通机制,会使得贡献者和维护者更有效的发展项目(对于正在不断开发的项目)。
按照国内的环境,对于个人来说,开源是一项要求极高,且和做慈善没有区别的事。这种情况估计还会持续下去。