第一次接触开源,该从何处入手?
没有基础,怎么在开源社区做贡献?
如何成长为开源社区的大牛?
……
刚接触开源的你,可能还有很多困惑。别担心,SegmentFault 思否通过调查问卷的方式收集了开发者对于开源的十大问题,并邀请社区开源大咖对这些问题进行深入讲解,他们的答案或许可带你轻松上手。
第一问:第一次接触开源,我该从何处入手?
来自 openEuler 社区的开源大咖马全一回答道,“想干的事情、适合干的事情和最终能干的事情是否匹配,是决定将来工作是否幸福的关键。”选择一个适合自己的开源项目至关重要。
那么具体应该如何选择适合自己的开源项目呢?可以考虑以下四个方面:
1.技术趋势,综合考虑技术趋势发展,选择一个有前景的技术方向才能在未来的竞争中获得优势。
2.个人技术领域,需要开发者认真评估自身技术栈,选择和自身能力、兴趣爱好匹配的开源项目,只有真正有兴趣投入的技术领域才能最大的发挥开发者的能动性,也才有机会获得更大的成功。
3.合理调配投入时间,在工作、生活和家庭之间需要合理平衡投入,通过合理规划可支配时间,保证对技术领域的研究和投入,只有持续的参与开源项目,才能从开源中获得优厚的回报。
4.建立开发者关系,和社区内的核心开发人员建立紧密的联系,良好的开发者关系有利于扩展人脉,为在开源项目的发展建立扎实的基础
第二问:没有基础,如何在开源社区做贡献?
作为开源社区里活跃着的年轻开发者,华东师范大学、X-lab 实验室成员夏小雅表示:“新人对于一个社区是格外珍贵的,在邮件列表、会议中收到的回应和鼓励也会非常多,这一点我深有体会。”所以千万不要觉得自己是一个“后来者”就羞于表达。不懂就问、勇于表达、刷脸熟、主动请求帮助,积极参与讨论、活跃贡献是享受开源的第一步。
想要为开源项目贡献代码,确实需要一定的技术功底。但没有基础就不能为开源社区做贡献了吗?并不是!Apache北京本土社区发起人姜宁强调,除了提交软件代码,还有很多参与开源贡献的方式。作为新手区的我们,可以先参与一些翻译和本地化、文档撰写、设计等工作,这些非代码贡献对于项目也同等重要,还能帮助我们快速和社区大牛熟悉起来,加深对开源项目的理解。
在新手如何参与开源这一问题上,马全一也给出了一些建议:
1.写代码远远不够,开发者需要善用搜索引擎。同时与社区大牛建立沟通联系,去了解各类开源开发问题;
2.仔细观察,深入思考。搜索引擎及社区大牛给出答案后,你能不能看到东西,能不能思考,这一点很重要;
3.穷举法。有时候思考的结果不见得对,你可以把所有的可能试一遍;
4.写文章。输出是最好的输入,如果你能够给别人讲明白这件事情,你自己对这个问题就是理解的;
5.参与社区活动。
第三问:哪些开源项目是值得关注、有前景的?
挑选值得关注、有前景的开源项目需要考虑多种因素,比如技术和社区运营是否前沿 ——
1.技术的前沿性既涵盖技术本身的先进性,还体现在支撑该项技术的底层技术是否先进。比如开源软件的基础设施是否主流、开源,这决定了项目的开放性、透明性和可持续性。
2.社区运营的前沿性体现在社区是否有完整的治理机制,是否具备多样性,有很多企业参与项目贡献,社区玩家是否覆盖完整的产业链。此外,在挑选项目时,我们还需要关注社区贡献者的活跃度。
另外,开源项目是否在基金会也是一个重要的考量要素。
当然,在选择值得关注的项目时,每个开发者本身都是带着自己的兴趣和待解决问题的。找到自己感兴趣的项目,开发者才能支撑自己投入更多时间做这件事。
目前,开源社区涵盖大量项目,如 Vue.js、React.js、Angular 等前端项目,Django、Spring-Boot、next.js等后端框架,TensorFlow、PyTorch 等机器学习框架,还有华为 MindSpore、KubeEdge 等新秀项目。
第四问:怎么才算加入开源社区?
1.成为某个开源项目的用户(user)
2.当你开始在该项目的邮件列表 (mailing list) 里参与讨论并提供补丁、文档和建议,就会成功晋升为开发者(Developer)或贡献者 (Contributor )
3.当你不断修炼 (提交 Bug 报告、贡献代码、参与邮件列表讨论、参与社区建设),就有可能受邀成为提交者(Committer)或维护者(Maintainer)
4.成为有影响力的贡献者后,可能会进一步被推选进入该开源项目的技术决策委员会等,更深度参与开源项目的管理与决策
每个社区的文化和风格其实各不相同,如果把“加入”开源社区看作一个动作,那么之前你在不经意间,使用开源社区某一个项目,就可以当做是加入开源社区的开端。
第五问:如何成长为开源社区的大牛?
Apache 软件基金会首位华人董事,Apache SkyWalking 创始人吴晟向我们介绍 ——
开源社区的大牛,往往是已经把开源的技术、品牌和宣传,变成职业化的一群人。
他们以开源的模式进行广泛的协作和共赢。因此他们在开源社区的设计、开发、跨社区合作和基金会工作中,展现出高人一等的职业性素养,以及开源爱好者无法比拟的超长投入时间。
类似大家熟悉的一万小时定律,在开源圈子也同样成立。当这些爱好变成了职业性,在高强度的投入后,其他人会看到他们异乎寻常的成长速度。
所以,确保自己有足够的时间来从事开源。让自己参与的开源成为经济正向循环的一环,才能成为大家眼里所谓的「大牛」。
但与此同时,我并不建议大家去过分追求成为「大牛」。毕竟开源在职业化、商业化之外,也可以给贡献者带来属于自己的成就感和满足感。并不是每个人都需要成为一个职业开源人,普通开发者和爱好者也能享受到开源协作的乐趣。
此外,姜宁强调,对于普通开发者而言,如果你梦想有一天成为开源社区的大牛,要从勇敢承担开源项目的核心任务开始,在不断贡献中获得成长。
开源社联合创始人刘天栋补充道“这个社会有提出问题的人,有制造问题的人,但是更需要的是解决问题的人。当我们参与到开源贡献里,协助他人解决问题的时候,不但能更好的实现自我,也能够让他人更快的认识我们的价值,成为他人眼中的「大牛」。而我们参与开源贡献的经历就是我们最有价值的履历表。”
第六问:怎样深度参与开源项目?
要回答这个问题,首先需要回答“怎样才算深度参与了开源项目?”——
成为核心贡献者拥有代码仓库直接写入权限?
入选项目委员会会直接参与开源项目的管理与决策?
或者哪怕只修复过一次代码核心 BUG?
……
这个问题见仁见智,业内并没有一个绝对标准。
作为潜伏在各大社区的开源大咖,SegmentFault 思否创始人、 CTO 祁宁表示 “其实,开发者并不需要把「深度」二字看得过于沉重—— 实际上国际上很多知名的开源大咖也都是在某次不经意的贡献中「入坑」开源的,或许第一次只是为了收获一件社区周边、或是使用开源软件过程中的顺手为之。随后才逐渐深入接触、持续贡献,从 Contributor 到 Maintainer。”所以深度参与开源项目和成为开源大牛一样,都是一个循序渐进、水到渠成的过程。
但需要强调的是,如果你期待深度参与某一开源项目,或者成为某一项目的核心成员,一定要多思考、多维度贡献 —— 当你除了贡献代码、解决 issue 以外,也在开始思考项目的价值、规划项目的前景时,就离深度参与不远了。
第七问:开发者如何通过参与开源项目提升技术?
许多开发者,特别是应届毕业生,大多面临缺少大型、高质量项目开发经验的困境。较为成熟的开源项目,很多已具备一定的生产环境应用经验,参与贡献的开发者可以深入项目,理解、学习优秀的代码逻辑、架构设计等,收获宝贵的研发经验。
我们都知道,作为一名开发者,学习与解决问题的能力至关重要,开源项目可以给予每位参与者充分的锻炼空间。具体来说,提升技术的方式大致分为以下几种:
1.关注社区动态,紧跟技术潮流新方向,向技术选型库中装填新「弹药」;
2.阅读开源项目中的高质量源码,研究代码逻辑,在日常工作中学以致用;
3.持续贡献文档,通过提交 PR、贡献 Issues 等方式,提升书面表达能力;
4.通过邮件列表,issue或者代码审查的方式与社区前辈交流, 学习他们的研发经验,提升视野;
5.与使用者多交流,根据反馈不断优化项目,更好地理解产品、了解用户需求;
6.学会提问,在开源社区中,不是所有问题都能够得到答案。提问者需要把问题的上下文环境讲清楚,并且尽量谦虚的表达才可能得到帮助,当你学会提问,沟通的能力势必也会提升不少。
在 SegmentFault 思否 COO、开源社副执行长江波看来,参与开源项目是初学者、大学生最好的练兵场,除了提升技术,还会有很多额外收益,“近两年,SegmentFault 思否一直在支持中科院软件所和 openEuler 社区联合发起的开源之夏活动,有不少大学生在社区导师的指导下提升技术、结识大牛、收获了宝贵的工作机会,或通过选举成为开源项目的 Committer、受到了社区的认可。而 9 年前,SegmentFault 的诞生也和开源息息相关,SegmentFault 最早的几位合伙人正是因为在大学时期参与开源项目相识,后来一起成立了公司。”
参与开源是弯道超车的最佳路径,快让开源社区成为你的成长加速器吧!
第八问:项目捐给开源软件基金会与不捐开源软件给基金会,有什么区别?
CNCF大使王泽锋介绍“一般来讲,基金会对于项目的治理是有开放性要求的,对于其他潜在的参与者来说,参与一个基金会管理的开源项目,可以有稳定的心理预期。”
参与开源软件基金会管理的开源项目时,只要有一定足够的投入,就能在社区中获得相应的话语权,进而影响社区的发展,把自己对于开源项目的发展方向和诉求推进社区。相反,个别企业的开源项目,开放性和连续性是存在一些问题的 —— 近年来发生了很多类似的事件:MongoDB、Redis、ELK 等项目修改开源协议,背后其实是商业公司控制开源项目时,开源与商业变现的冲突,其参与伙伴便失去了保障。
此外,姜宁补充道:“捐献给基金会的项目还会有更完善的法律保障。”开源软件允许使用、修改、分发,但是用什么样的方式呢?这里就涉及到开源协议的问题,不同于商业软件靠知识产权控制,开源软件是靠 License 控制的,对开源社区而言,License 更像是开源社区的“基本法”,它是跨国别跨地域的存在,甚至是全球的基本法。
第九问:开源社区如何能持续发展?
openEuler 社区品牌宣传委员会主席梁冰向我们介绍,一个开源社区能否获得持续发展,关键要看以下四个关键指标:
1.任何社区运营的关键指标都是开发者
开发者是社区的灵魂,开发者的数量和质量决定了这个社区的项目的数量和质量。
2. 第二个指标是CODE
我们有了高质量和高数量开发者,自然会有开发者带来高质量的代码。
3. 第三个指标是用户案例
任何一个开源社区对自己所有的定义,都取决于用户对你的定义。只有你有足够多的用户才能反馈使用中的具体需求,对项目形成一个非常正向的推动。这其实跟你做产品营销是一样的,一个产品没有用户就活不下来,一个开源项目没有用户也是活不下来的。
4.第四个是文档
就像产品需要手册一样,如果开源项目没有很好的文档,很多开发者来了无从下手。所以对于一个成熟、友好的社区,一定要有一套文档去指导大家如何用,如何参与,如何来贡献。
管理和运营社区是开源项目持续发展的核心,一个健康、友好的社区需要完整的治理制度,公平开放的社区氛围,这可以不断吸引新的贡献者加入。当然,资金、资源、基金会的帮助也对开源项目的持续发展有很大帮助,不过最重要的还是项目核心团队不断地努力与持续的投入。
第十问:开放治理对社区的成长到底意味着什么?
openEuler 在过去一年凝聚了超过 3000 名贡献者,有超过 4 万次下载、4万社区用户,也吸引了中国移动、中国联通、银联、飞腾等 60 多家企业、机构和高校的加入。全方位的快速发展就与社区的开放治理密切相关.
梁冰向记者介绍,“只开放源代码,没有社区开放治理的项目是没有前途的。开放治理对于一个开源项目而言就好比养育和陪伴它成长,至关重要,这背后也体现了开源项目的成熟度和严谨、认真、持续投入的态度。”
而以 MindSpore 举例,MindSpore 可能是国内第一个采用开放社区治理的深度学习开源框架。在 MindSpore 社区里,有着非常完善的章程,多国家、多样性团队组成的技术治理委员会,所有流程都在社区公开的邮件列表中,一切决定都有标准化的章程作为依照。公开和开放让 MindSpore 受到了众多开发者的信赖和支持,得以快速发展。
我们常常说“Community Over Code(社区胜于代码)”,一个活跃、开放、友好的社区对开源项目而言,意义非凡。健康的社区甚至远远比优秀的代码更重要 —— 代码不够优秀不要紧,只要持续有贡献者,代码便可以被不断优化、迭代,但如果没有社区,再优秀的代码也会付之东流。只有对新老成员一视同仁、公平开放的社区氛围,才能够持续吸引新成员加入项目贡献,也为开源项目带来持续的生机与活力。
以上十问是否解答了你心中对开源的困惑呢?春风十里,不如代码和你。开源大势所趋,快和我们一起上车吧!