引言
大家好,我是maple,这篇文章主要是给想做开源但是不知道从何下手的小伙伴一点思路,开源的路径有很多很多,并不一定按照我说的去做才是开源,我这里只是从我个人的角度出发谈谈如何入手去做,如果你有更好的想法,也欢迎在评论区补充,谢谢你❤️
什么是开源?
开源含义
“开源”(Open Source)是指一种软件开发和分发的模式,其核心特点是源代码公开,允许任何人查看、使用、修改和分发该软件。这种模式强调透明、协作、社区驱动和自由共享。
开源项目的许可证
但是不同的项目遵循不同的开源许可证,常见的有:
- MIT 许可证:非常宽松,几乎允许任何用途,只需保留原作者版权声明。
- GPL :要求衍生作品也必须以 GPL 发布(“传染性”条款)。
- Apache 2.0:允许商业使用和修改,但对专利有明确授权条款
许多开源项目由 Apache 软件基金会(ASF) 、Linux 基金会 或 CNCF(云原生计算基金会) 等组织托管,这些项目通常具有良好的治理和社区支持
常见的开源项目
这里我按照常见的分类给大家列举几个:
操作系统:Linux,华为的openEuler等等。其中最大名鼎鼎的就是Linux,它可以说是真正的开源鼻祖,开源精神最为耀眼的一个(hhh,这里个人喜爱色彩太过了,不喜勿喷)
网关:nginx,Apache shenyu,Higress等等,其中Higress因为有ai基因,现在特别火
数据库:MySQL,PostgreSQL这几个大哥位我就不再强调,还有腾讯的openTenbase,Apache Hugegraph等等
云计算与容器平台:k8s及其衍生中间件
RPC框架:dubbo,Trpc等等
其他中间件:Apache RocketMQ,Apache Seata等等,这些都是业内非常知名的项目,值得关注
还有很多很多非常好的项目,由于篇幅就不一一列举。
如何开始自己的第一次开源经历?
自己到底喜欢什么方向
做开源并不是盲目去做,一开始的时候,我建议都是深耕一个领域,比如你是喜欢网关方向,那就去了解网关的相关框架;假如你喜欢RPC框架,那就去了解这里的相关知识。
我想说的是,不要强迫自己去干一件自己不喜欢的事情,这在开源这种事情上更是如此,开源绝大多数都是为爱发电。
如何开始第一次pr
ok,确定好自己想做什么方向之后,接下来就是确定自己想去了解的项目,然后根据项目文档去逐步深入它,看源码。
我建议是先了解整体,然后单独对一个模块进行了解,然后再扩展到其他模块。
那么如何提pr呢?
1.做单测(UT)
对于一个刚刚上手该项目的新人来说,最简单的贡献就是给项目不同的模块提供单测,以提高单测覆盖率(很多项目都需要提高单侧覆盖率)。写单测不仅可以了解这里代码是怎么运作的,而且也是我认为提pr最简单的方法。
同时项目各个模块的单测也可能有不足之处,你去改进它也可以提pr
2.接issue
Github上的项目一般都会有issue,issue是用户在使用该项目时所提出的困惑或者bug,又或者是管理员希望项目所能具备的功能和改进,在上面发布的任务。
总之,你可以在上面接任务,就像是冒险者工会的公告栏一样。但是我不建议一开始就挑选难度大的,如果做不了feature,则可以选择optimize等等的。
做这个issue可以带你去深入了解项目的对应模块,是开展第一次pr的不错之选。
ps:请不要争抢issue,注意社区礼仪是第一位
3.主动发现,主动写pr
这个适用于对项目有比较清晰的认识,对这个项目了解比较透彻的同学。
一个项目总是会有隐藏的bug,你对项目足够了解,就可以发现并提出issue,表达自己想要解决这个问题,自己提pr即可。
4.社区共建
除了上述的方法,还有其他的贡献方式。
比如改进项目的ci流程,改进项目的相关插件等等。这些贡献虽然不太关乎项目本身,却也是为项目做贡献的,社区也非常欢迎这种方式进行贡献。
pr的过程
提pr后,会有reviewer或者committer来cr这个pr。如果是第一次提交pr,被打回重做是非常正常的,大家不要怀疑自己的能力有问题,请正视reviewer所给的建议,查看是否存在这个问题,这样改进是否正确。
有则改之,无则加冕。这是做pr的过程中的正确心态,且需要注意社区礼仪,不要和社区的人员发生冲突,大家都是为项目共同发展而共同努力的,没有利益冲突。
ps:社区成员的地位都是平等的
开源之夏
除了在开源社区做贡献以外,还可以参加开源之夏活动来进行pr贡献,而且这种活动往往伴随着活动奖励。
ps:一般只限于大学生参加
活动流程
简单来说,活动的流程一般就是学生选中项目,向项目导师发邮件沟通项目规划书,然后申请,中选则进行相关开发,最后进行评估是否结业。
不同开源活动流程或许有差异,但是大抵都是这样。
有什么常见的开源之夏活动?
下面我列举一些常见的开源之夏活动,大家可以自行查看:
- GSOC(谷歌开源之夏):这个难度最大,但是所获得的奖励也是最大的。在简历上非常加分。
- OSPP:这是中科院主办的开源之夏,难度不算很大,在我看来中选并不难,奖励适中。
- GLCC: CCF开源发展委员会举办的面向全国高校学生的暑期编程活动,这个我不太了解,应该和ospp差不多
- 腾讯犀牛鸟:由腾讯主办的开源之夏活动,但是这个项目不是一个人中选的,是好几个人一起入选一个项目,结业难度较大,奖励适中
- ASOC:由阿里巴巴主办的开源之夏活动,这个我同样不太清楚,感兴趣可以了解一下。
还有很多开源之夏活动我可能没有列举到,自己感兴趣可以去找找。但是我在上面列举的已经是非常主流的常见的开源之夏活动了,如果能中选并成功结业,在简历上也是非常加分噢。
我推荐第一次参加开源之夏的人员参加OSPP,难度适中。
总结
做开源不是一蹴而就的,它一般是一个非常漫长的过程,如果你是以一种非常功利的心态,沉不下心去好好沉淀这个项目,那大概率也是竹篮打水一场空。
如果你拥抱开源,开源也会拥抱你。如果你能长期耕耘在一个社区,为其长期做贡献,那么可能就会从一个contributor任命为committer,甚至PMC。不过这都是后话了。