首先找一个你感兴趣的项目,然后慢慢融入进去
开发:
1.fix typo,从项目的patch中找一个typo patch,比如'helo'->'hello',然后在此项目下全文检索‘helo’,基本上能发现类似的typo,然后发patch(这个只是偏招,补一两个玩玩就行,主要是熟悉流程)。
2.trivial patch,比如linux kernel中常用kmalloc申请内存,却忘了校验返回值是否为空。又比如代码风格,多人合作项目难免出现有人不遵守代码风格,阅读官方文档中有关代码风格的部分也是必须的。
3.RTFSC,找项目中你最关心的部分,读,加trace log观察输出,用gdb定位核心流程等,读懂他,兴许会发现代码中一些问题(一般概率不是很大),一旦发现,仔细验证,确认无误,准备发patch。
4.test,一些知名的开源项目会有自己的测试主页,自己感觉能力可以了,可以去领取一些测试任务,反馈正确信息。
5.bugfix,一些项目有自己的bug追踪系统,可以参与讨论,甚至自己提交patch修复。(列如官方的bugzilla,或者github上issue页面)
6.feature, 通过深度使用(无论是私人娱乐还是工作需要)开源项目,总会感觉项目或多或少有些功能不支持或者不能完全满足个人需求。此时,你可以给官方提需求。如果你有兴趣且你的能力足够强,就可以给此项目添加新功能,然后可以发个新特性给官方源。新特性的需求和发现,都是需要自己深度使用并足够了解原项目的不足才可以的。
7.review,以github上开源项目来说,可以从项目的pull requests页面上看到新代码的提交。如果能理解新代码作用,给出积极的反馈,并参与其中讨论可以帮助你熟悉项目和开发的方向。
文档
这个可以做的事很多,并且特别适合接触新项目(不过我本人其实不是很热衷这个),至少可以做的:
1. 官方文档翻译。大部分知名开源项目,都有对中文文档的需求,项目开发者是很乐见文档被翻译的。(不过有能力入手项目的人,一般都不太愿意做)
2. 补足官方文档。好多社区项目的文档写较为晦涩,不会配有相应实例。此时你要是愿意,根据自己的学习和使用经验写一个逐步教程还是对后来学习的人很有帮助(也可以向文档维护者申请友链或者存放教程的空间)。
3. 写源码分析。这个其实很难,除了自己理解还要通俗地让其他人理解,还是需要付出很多的。官方一般不会系统地提供源码分析,顶多也就是架构分析,而且时效性很难保证。
安装包 帮助一些开源项目维护其在各种操作系统的安装包(rpm,deb等等)
说一些自己的体验,我大二的时候用过几个偏招给linux 提交过patch,后来也有提交过几个稍有质量的patch,但都不是核心子系统。像linux这种大项目中,很多小子系统少有人关注,所以从这些小子系统入手可能会比较容易,另外linux中staging/目录下的驱动代码都是处于正在开发或未完成状态,代码质量也不是很高(容错或者代码风格)。
不过我现在更喜欢在github上关注一些有趣的项目,读->发现问题->fork->pull request,体验感极佳。
开发:
1.fix typo,从项目的patch中找一个typo patch,比如'helo'->'hello',然后在此项目下全文检索‘helo’,基本上能发现类似的typo,然后发patch(这个只是偏招,补一两个玩玩就行,主要是熟悉流程)。
2.trivial patch,比如linux kernel中常用kmalloc申请内存,却忘了校验返回值是否为空。又比如代码风格,多人合作项目难免出现有人不遵守代码风格,阅读官方文档中有关代码风格的部分也是必须的。
3.RTFSC,找项目中你最关心的部分,读,加trace log观察输出,用gdb定位核心流程等,读懂他,兴许会发现代码中一些问题(一般概率不是很大),一旦发现,仔细验证,确认无误,准备发patch。
4.test,一些知名的开源项目会有自己的测试主页,自己感觉能力可以了,可以去领取一些测试任务,反馈正确信息。
5.bugfix,一些项目有自己的bug追踪系统,可以参与讨论,甚至自己提交patch修复。(列如官方的bugzilla,或者github上issue页面)
6.feature, 通过深度使用(无论是私人娱乐还是工作需要)开源项目,总会感觉项目或多或少有些功能不支持或者不能完全满足个人需求。此时,你可以给官方提需求。如果你有兴趣且你的能力足够强,就可以给此项目添加新功能,然后可以发个新特性给官方源。新特性的需求和发现,都是需要自己深度使用并足够了解原项目的不足才可以的。
7.review,以github上开源项目来说,可以从项目的pull requests页面上看到新代码的提交。如果能理解新代码作用,给出积极的反馈,并参与其中讨论可以帮助你熟悉项目和开发的方向。
文档
这个可以做的事很多,并且特别适合接触新项目(不过我本人其实不是很热衷这个),至少可以做的:
1. 官方文档翻译。大部分知名开源项目,都有对中文文档的需求,项目开发者是很乐见文档被翻译的。(不过有能力入手项目的人,一般都不太愿意做)
2. 补足官方文档。好多社区项目的文档写较为晦涩,不会配有相应实例。此时你要是愿意,根据自己的学习和使用经验写一个逐步教程还是对后来学习的人很有帮助(也可以向文档维护者申请友链或者存放教程的空间)。
3. 写源码分析。这个其实很难,除了自己理解还要通俗地让其他人理解,还是需要付出很多的。官方一般不会系统地提供源码分析,顶多也就是架构分析,而且时效性很难保证。
安装包 帮助一些开源项目维护其在各种操作系统的安装包(rpm,deb等等)
说一些自己的体验,我大二的时候用过几个偏招给linux 提交过patch,后来也有提交过几个稍有质量的patch,但都不是核心子系统。像linux这种大项目中,很多小子系统少有人关注,所以从这些小子系统入手可能会比较容易,另外linux中staging/目录下的驱动代码都是处于正在开发或未完成状态,代码质量也不是很高(容错或者代码风格)。
不过我现在更喜欢在github上关注一些有趣的项目,读->发现问题->fork->pull request,体验感极佳。