Hello大家好,今天我给大家带来的分享是如何参与CNF开源项目并成为Materna,首先介绍一下我自己。我叫郭旭东,来自几户GateLab,是一名原生架构师,目前还是阿里原MVP,原生设计上海战战长以及高业会成员,我个人非常热爱开源。目前是CNF三胞项目Govela和Calsplay的Materna,在我参与开源的时候有非常多的同学询问我,问我如何才能参与开源,我怎样才能和你一样,在CNF以及其他开源项目中能有自己的一些致力。所以我进行了本次分享,首先第一个要分享的是关于开源你应该了解的一些知识,其实在目前这个情况下有很多同学并不清楚开源代表着什么,开源意味着什么。所以首先我会跟大家分享一下,我关于开源,希望大家能在参与开源项目之前了解一些知识。首先是open source开源软件,open source这个这个这个,其实是一个注册商标可以看到,他又称这个开放原代码软件是一种这个原码可以任意获取的计算机软件,这种软件的注册权是有人在软件协议的规定之下,保留一部分权利并允许用户学习修改,以及任何目的的向任何人分发软件。其实这里面要注意的就是,他是要有这个软件协议,同时他还要符合这个开放原代码定义的要求。目前有一些这个软件,他称自己为开软件,但是他只是对原码进行开放,但他并不符合这个开放原代码的这个定义。所以我们认为这些软件其实不应该算是开软件。而如果这个你在危机百科里面搜索这开软件的话,你会发现一个特别有意思的现象,就是这个每个开软件,只要下完,他都会有一个提示,他会在开软件下面提示这个字条目不是自由软件。而在自由软件条目里面,他会提示字条目不是这个免费软件,而在免费软件里面,他会提示这个字条目不是自由软件。所以在这个里面,可以看到开软件,自由软件和免费软件是三个概念。很多情况下,大家会将他们混为一谈。首先介绍自由软件,自由软件是根据自由软件基金会对其的定义,是一类可以不受限制的自由使用,复制研究,修改和分发的这个尊重用户自由的软件。而免费软件,免费软件是不以金钱购买使用授权的电脑软件。但是在使用上有一定限制,大家可以看到它的使用上是有一定限制的,包括一些免费软件其实有的时候它是不提供原码的,并且它也是禁止修改软件代码,同时也禁止再次散播。所以在我们看来,免费软件和自由软件和开软件的区别更大,而开软件和自由软件他们其实是有更多的共通。所以这里面来介绍一下,很多人会认为开软件与自由软件是相同的,但如果就定义而言,自由软件仅是开软件的一种。也就是说自由软件叫开软件的定义,叫更为严格,并非所有的开放原代码的软件都可以成为自由软件。但换过来讲,自由软件一定是开软件。所以说我们其实在介绍开放原代码的时候,我们更愿意说它是一种软件开发的,以及开发以及开放的模式,是使用开放原代码的方式来进行开发的。这里面最具代表性的也就是Linux。而自由软件它相较开软件来说,它更加严格。它其实是完全要遵照自由软件基金会的要求,自由软件会定义符合这个要求的裁叫自由软件。所以一般情况下,比如说遵循GPR和BSD这个许可证的都是可以称之为自由软件,而比如说我们常见MIT其实也是自由软件一种,但是并不是说所有的开软件都可以称之为自由软件。所以在这个情况下,我更希望大家能把自由软件开软件以免费软件的概念进行一个区分。然后我要介绍的是为什么要参与开原。经常在参与社区活动的时候会有灵魂考问,他们说你为什么要参与开原?开原给你带来了什么好处?对吧?因为大家看来,开原大家都是相当于在无私的在做贡献,但是从明面上看不到任何特别好的回报。所以这里面要介绍一下,首先从我的角度出发,以及我为什么要跟大家分享,就是为什么要参与开原。首先要介绍一下我的开原之路。对于我来说,我是16年开始接触开原,18年开始真正参与开原。2021年也就是今年加入了疾苦Glab,然后全职从事开原工作。然后期间呢,其实我也参与过多个SenseF项目,就包括Glubinitis,Cosmite,K3S,Candle和Harm,還有East2等项目。在2020年呢,我是作为这个初创成员,八个初创成员之一,参与了Covila项目,并且Covila项目于今年这个正式加入SenseF这个三报项目。我也是在今年成为了这个Covila项目的Martiner,同时我还是另一个SenseF三报项目Cosplay的Martiner。所以说对于我来说,我整个开原的成长是伴随着SenseF的各个项目来成长的。所以对我来说,SenseF的基金会对我的开原的帮助是贝拉的。然后是个人成长方面,首先在个人成长中参与开原,其实我们更多的是一个个人竞争力的提升。首先是职业技能,比如说开发技能,使用软件的技能,文档数学能力以及调试能力。开发能力和这个我就不多多介绍了,使用软件的能力就比如说你在开原软件中你会遇到一系列的相关工具的使用。各种各种测试,各种调试,包括github,git这种软件的使用,这种工具在工作中往往都是非常重要的,所以这个技能也很重要。然后是文档数学能力,文档数学能力后面会详细介绍,因为对于一个开发者来说写文档如果写得好的话是一个特别厉害的优势。同时调试能力就不多多介绍了,你开发出来的软件一定是需要调试的。我再想更强调的就是更着重介绍的是非技术的能力,也就是软技能。比如说沟通能力,组织能力以及管理能力。沟通能力在开原社区里面非常非常重要。我们要和来自全球的contributor进行沟通,进行协作,一起来完成我们共同的目标。所以沟通能力提升起来是非常强的。组织能力以及管理能力在你参与开开原当中,你不可避免的会去组织一些活动,以及会管理一些事情。这个时候对我们个人的技能的提升是在工作中的所达不到的这种机会。我们可以有机会去组织一个在全球范围内有影响力的项目的活动,并且甚至是管理它一部分的能力。所以这个对于我们来说非常重要。最后一点就是,基于上面两点,我们可以有非常丰富的简历。现在开完项目的参与经历越来越受各种孤独的侵蓝,所以说现在参与开完项目的经历,可以为大家的减力增色不少。这也是比较现实的一个情况,但更多的是我刚才强调的就是软实力的提升,以及职业技能,包括开发的能力,对代码的理解能力的提升。然后就是解释更多智同道合的朋友。人们经常调侃,Github是全球最大的同性交友平台。事实上确实如此,我们在参与开完项目的时候,我们会解释各种各样的人来自全球各地的这种开发者。大家同样对一项技术一个开完项目感兴趣,然后大家同时愿意为这个项目进行探讨。这样的话,就是我们很,如果经常举办这种线下的这个Mintab这种活动的话,我们经常会称之为这种大型的网络界面会。从右边这个图是去年Github的一个一个调查报告上可以看到有非常多的这个开发者,有非常多的这个项目在这个Github上,同时大家在这个图面上进行交流,同时会解释很多的兴趣相同,兴趣类似的朋友,然后将来可能会一起做出一番事业。最后一点呢,其实是促进开源,就是我们是开源的一份子,同时我们也肩负着这个推广开源文化促进开源的这个促进开源运动的一个使命。我们在参与活动的时候,我们也是活动的组织者,我们也是活动的这个主人,然后我们看着这个,我们的参与同事,我们可以从一个,把一个项目从一个名不经转的,名不见经转的小项目最终发展成世界级的顶级项目,这个对于个人成就来说是一个非常大的一个提升。接下来我会介绍一下这个参与开源需要了解的知识和技巧,这部分针对一些,针对一些初学者以及这种刚开始技术开源的朋友,因为很多人他觉得这个,很多人会找到我,会询问这个,哎,这个我想参与开源,但是我怎么参与,我从哪下手,然后我必须掌握哪些技巧,然后对于我们来说其实,你可能觉得这个是一个比较简单的,简单的事情,但对于大部分初学者来说,大部分这个想要参与开源的人来说,他其实是缺这么一个机会的,他作为可能并没有人在做开源,或者也没有人去关心这个开源,但是他个人有非常强的意愿来做,所以我觉得这一部分的内容也非常重要。首先就是交流,就是前面也提到了这个交流其实是一切贡献的技术,相比技术能力而言,这个沟通和交流的能力在开源社区里面更加重要,比如说在这个开源的协动模式下,所有的contributor可能来自于全球的任何地方,在拥有不同的语言,不同的文化,不同的塑造语水平,所以说一个良好的沟通方式可以很好的抹出这些差异带来的困难,并将开源社区就是往良性的方向进行推进,同时,我认为在开始贡献之前进行充分的交流与沟通是十分必要的。尤其是在这个开源中,大家在医术中对一个问题已经讨论,充分讨论之后再提交PR会是一个非常nice的这种方式,而不是说你直接提交PR,然后去admattainer给你reveal,这其实也是一个非常不好的行为,因为大家并不知道你提交代码的上下文的情境是什么,如果直接看代码的话,可能会浪费mattainer非常多的时间,所以在社区中有非常多这种直接提mr就立马去希望合并的一些情况。所以说我这边希望通过我的分享,然后大家交流其实是更加重要的,不管是在e-show里面还是在PR里面,一个有效的信息来进行与别人沟通是一个非常重要的能力。第二点就是要改发表自己的观点,我去年我写过一篇文章叫做如何参与开源项目,开篇介绍的和别人不太一样介绍的就是心理建设,就是参与一个开源项目,很多人会有这个惧怕的这种情绪,他认为参与开项目的人都是这种大佬,都是这种非常牛逼的人才能参与开项目,但其实并不是如此,项目是开放的,他可以接受任何对自己有意的行为,有意的建议,主要是对项目有利的这种贡献,大家都会得到这个社区的认可,所以要敢于发表自己的观点,然后包括这个社区,不管是社区还是在这种其他方面,从来就没有人说开源是大神明的专属,而敢于交流也是非常重要的一项特质,再然后我要介绍的话,介绍的话就是在开源社区里面的沟通方式,首先要介绍的第一点,也是我最想强调的一点,就是要使用MList的进行交流,MList是开源社区里面一种非常重要的交流,交流沟通的方式以及途径,很多著名的开源项目,都是使用这个MList的进行沟通交流的,包括Kubernetes,包括Linux,包括一些其他的著名的项目,首先,因为这种使用MList在国内的是比较少的,所以我这里面会花比较多的时间去介绍,因为首先这种方式,它是一种异步的交流方式,可以让更多这种关心该交流内容的人加入进来,所以是以一个异步的方式而不是同步,我发问题立马就要得到回复,而同时MList是永久保留的,如果你对某个话题感兴趣,你可以先在MList里面搜索,你可以找到一些人们之前对于该方向的讨论,该方向的这个回答,然后包括一些成年老Bug的解决,其实这个是一个非常有意思的过程,就包括你可以看到这个项目,最早是怎么一步一步发展过来的,这都是一步记录完整的内容,同时,虽然即时通讯软件,微信,叮叮,非常便利,但是其实很多问题都会立马被大量的发言去顶掉,所以说,虽然诸如此类这种工具,它通过它的功能解决了部分这方面的问题,但还是不如MList的更好归宿,同时最重要的一点其实是,这个是我在刚参与开源的时候,一个社区的朋友跟我说的,并不是所有地区的开发者都有高速的宽带优秀性能的PC,在世界上很多地区的人,他可能只能使用波浩上网,网速很慢,然后他们甚至连Galab SQL都无法访问,但是你们也不能剥夺他们参与开源项目的权利,所以说MList发送email是一种非常好的交流方式,然后您可以通过MList的很好的掌握社区动态,这种效果明显要比Galab里面的ESU的Works要好。接下来介绍一下其他的沟通工具,主要这里面推荐的是使用Galab SQL进行沟通,一般情况下Galab SQL的问题都会在最快的时间会得到回复,并且它会记录下来,然后成为后续的,不管是feature request,还是backfix的依据。而slide channel相对来说,每个SinsF项目都会开通一个slide channel,如果有一些这种需要实时沟通的问题,比如说是这种一问一答的方式,你需要很快的知道答案的这种方式,你可以在slide channel里面进行提问,也会有相应的mytenor进行回复,而官方交流群一般情况下在国内的开源项目比较常见,比如说是dingding还有微信群,包括我这边的qvilla以及calsplate都是有相应的微信群,可以直接在群里面提问,但是有可能会有一些回复慢的情况,因为群里的人实在太多了,说话是比较难以得到关注的。然后接下来我要介绍的是如何真正开始参与一个开项目。首先,参与开项目一个好的开始是非常重要的,如果一般会有这种打着goodfirst issue这种label的ease来提供给这个初学者,他们可以通过这种发布一些小的bugfix以及小功能的开发,在这种goodfirst issue里面来帮助开发者快速了解整个项目的架构也好,单码情况也好。选择该ease请務必在ease里面进行交流,你需要提供comment,你需要和maternard或者comptv交流,同时你需要在该ease里面确定我接受这个任务,然后我在什么时候会把这个任务完成提交相应的pr。这一点是非常重要的,同时你要去看这个任务有没有被人接,如果它已经有指定的人员了,一般情况下是不会再指定人来做的,因为如果说你做的话,很有可能在别人也提交相应功能的情况下,你的pr是不会得到合并的。接下来非常重要的一点,就是阅读的这个贡献指南,我发现有很多朋友他们不愿意去阅读这个贡献指南,那贡献指南是一个开玩项目非常重要的部分,在这个项目开玩之初就会写,就会完善这个贡献指南,就是里面会包括很多这个项目贡献者的一些要求,甚至一些slide channel以及mail list的链接,或者说是一些津津微信群的交流的二维码,这个包括你在这个参与这个项目贡献的时候,你要遵循哪些要求,都可以在这个贡献指南里面找到,是非常重要的。接下来我介绍的主要就是一个Folk项目的技巧,怎么样强调的一点就是,不要在Folk代码的must分支上进行任何修改,该分支是用来与上游代码固定同步的,所有的feature,所有的代码编写都需要check out一个新的开发分支来进行,同时一个分支,对应一个e9,对应一个pr,就是一个功能写在一个pr里面,不要在一个pr里面提供多个功能,因为有可能reveal这个功能的matinger可能是多位,如果说是你一个pr里面提供的多个功能,有可能这个功能是一位matinger去reveal的,另一个功能可能是另一位,这样的话,这个pr被合并的概率就会小很多,所以说一定要确保你这个提交代码的一个力度的问题,要尽可能小的这个提交功能的力度,然后就是这个提交pr的技巧,提交pr技巧其实就是你需要在这个pr里面,首先要标出你这个相关连的e9有哪些,然后你只要建入一个新号,然后它就会给你出来补权,你找到你相关e9就行了,同时一些这个比如说sense-cf的这个项目都会有要求,你提交pr后它会有一个自动一个robot,自动机器人,来来检测你是否有签数e9资金会的这个贡献区一个协议,如果你没有的话,他会要求你签,因为如果说你这里面涉及到一个注册权的问题,你签数这个协议就证明,你把这个开源代码的这个注册权,转到了这个开源项目而非你自己,如果你这个注册权还在你自己的话,开源项目是无法使用的,同时呢这个机器人会给这个项目打打一些标签,这个pr打一些标签,来帮助马天的来筛选这个review的这个情况,同时呢就是还有一个小技巧,就是在pr合并之后,请删除这个开发分支并进行一个同步,这样就能确保你folk的这个项目的代码和上游是这个同步的,而不会出现这个上游已经已经开发了可能100个200个这个提交了,你再去一个老的提交过去发生冲突的情况,这种这种情况是需要避免的。那再先来介绍的话,就是也是我最想介绍的一个内容就是除了贡献代码,我们还能怎样参与开源项目,这个也很重要,就是我们除了贡献代码,其实开源项目还有很多很多样的这种参与方式。首先第一点就是文档,这是我认为最重要的,对于开源项目来说一份好的文档是这个非常非常重要的,你可以看到一个好的开源项目都有一个好的文档,因为它是有广泛的这个用户基础,用户可以快速的通过文档去找到自己自己如何使用,如何用好这个项目,所以说一个优秀的文档是非常重要的,大家可以这个同时的这个项目,很多项目又缺乏这种优秀的项目文档维护者,然后去缺乏这种文档工程师,同时呢最近有很多朋友联系我,让我推荐什么有没有厉害的文档工程师,开出来的薪资也很高,文档工程师其实也是很多工联网大厂经常追逐的对象,右边的话我也这个列出了一些这个,比较常见的开项目的官网,文档网站,包括今天一面的构建框架,就是你会使用这些工具,包括你会使用markdown,你就可以参与到文档的这个编写当中了,是一个非常方便的这种方式,接下来就是bug report,这个其实不只是bug report,包括还有这个feature request,都是很重要的,就是没有不存在没有bug的这个完美软件,而bug的存在会极大影响这个软件的体验,以及出会出现安全风险,所以说这个开开完模式下的,它的优势其实就是用户可以非常容易的获得使用软件,同时用户汇报这个bug的方式,包括它提交feature request的方式,也是也是非常重要的,当你不断的提交bug报告,以及提交这个feature request,也是可以非常好的帮助这个开完项目,更好的成长,更好的完善,这是一个非常重要的节目,接下来就本地话,就是我在本地话这边,翻译和本地话这边做了非常多的工作,就包括云烟生社区这边,我们去年我们做了coolbuilder,做了银贸易,做了Eastel的这个中文文档翻译,今年我们还做了这个,今年我这边还组织了这个coolvilla,这个官方文档这个翻译,就是一个优秀的本地话的这个文档,对于很多本地的用户,也就是国内的用户来说,是非常好的,是很好的打破这个误解,以及在数据隔阂的一种方式,可以让更多的人使用我们这个开完的软件,从而让更多的人了解和认识到这个软件的这个便利,以及以及它的这个优势,再然后其实就是技术不到啊,技术不到其实,在我们公司,也就是在基本面内部,其实有个口号叫做人人都是步道师,其实就是因为这个互联网时代,就拉近了我们的这个,与这个技术的距离,知识与技术不再是某些特定人群的专属,所以说现在人人都可以使步道师,然后通过博客公众号,视频,就是分享的方式,来推广和步道这个开完项目,让更多人加入进来,共同发展,共同进步,这是一个非常良心的一个循环,同时对,步道者来说,有可以更好的获得成长,对这个项目来说,他获得了更多的反馈,他这个项目也可以越走越远,最后就是时间经验分享,这块的话,原来叫这个自家使件,但是这个,最终改成了时间经验分享,就是除了官方自家时间的分享,其实社区中有很多这个民间大神,他们的一些分享,其实是基于非常多的不同的角度,有的时候我们的一些产品设计,一些项目的设计,都是基于这个,大家的一些想法,基于大家的一些实践,在实践中遇到了一些,痛点,一些这个,很很不错的IDL,吸纳进来,然后帮助了这个项目的开发,最终我会谈谈我自己想法,本来这里面的题目应该是,如何成为马天尔,但是我想了一下,马天尔的这个,成为马天尔的路非常的,我认为非常简单,可能第一点的话,就是如果你深度的参与,像一个开丸项目,你参与的越多,你最终一定会成为马天尔,你不管是在哪个项目里面,最终都是这样的,你只需要这个不断的参与,你只需要这个不断的贡献,刚才我说了,就是除了丹马贡献之外,你还可以通过各种,这种讨论,各种交流,各种这种,文档的修复呀,还是这个,时间的总结呀,这个技术的步道呀,最终,你获得了社区的认可,之后,成为马天尔是一个自然而然的事,所以我这里面要谈的想法,就是一个,首先是一个,好的开人特制,首先好的开人特制,来报乐与分享,乐与分享是一个开人,最,最明显的特制,因为这个乐与分享,乐与分享的代码,乐与分享自己的经验,乐与分享自己的知识,对于开,开源领域,是非常常见的一种情况,大家都,乐与把自己的经验技术拿出来分享,然后让大家共同进步,从事第二点是,对基础报有热情,你对一下新技术,对一下这个,技术报有热情的话,才会参与开业项,如果你只是一个认为我做这行,我只是为了生存吃口饭,是不会有这方面的热情的,你也基本上也不会能进行参与开员。第三点就是良好的时间管理,就是我们很多人是有在不是全职做开员的,很多时间是在工作的,所以说,拿业余时间,规划好自己的业余时间来做开员是一种非常重要的能力。我们非常不鼓励在工作时间来参与开员项目,我们认为这并不是一个很良好的品格。除非你是全职做开员,这个就不说了。第四点其实就是自我驱动。自我驱动的话就是你不断地给自己有要求,让自己技术上有进步,能力上有进步。这点是一个开员必备的特质。最终不断学习这个我认为是所有技术人都应该有的。我们对比现在这个五年前和现在这五年以及往前推再推五年十年的这个技术是完全不一样的,所以我们一定要不断地学习,不断地充实自己,才能确保自己这个不断地进步,然后不被淘汰。最后其实也是我最后要讲的就是这个,看下我们的核心进行力从来都不是代码,确实,对于开员项目最重要的永远是人。如果这个项目没有人使用,如果这个项目,它的代码再好,没有人使用,它也不是一个成功的项目。所以说对于我们来说,对于开员项目来说最重要的永远是人,人产生了代码,最终才产生了好的项目,好的软件,而不是代码产生了任何的价值。所以说这就是我本次分享,最想跟大家谈的就是确定我们人的价值,我们人是创造的生产力。那我的分享就到这里,大家如果有兴趣的话可以扫描二维码,然后添加我的微信,然后进行一些后续的交流,我的分享就到这里,谢谢大家。