企业和个人开发者如何获取开源项目的红利
作者:互联网
什么是开源
「开源」一词对应英文 Open Source,最初起源于软件开发领域,因此也称为「开放源代码」,对应的软件则称为开源软件(Open Source Software)。除了我们熟知的开源软件以外,开源的表现形式还有开源硬件(Open Source Hardware)、开放设计(Open Design)、开放文档(Open Document)
开源软件
开源软件的定义:开源软件是一种技术和立场中立的使用许可证约束的开放源代码的软件。
开源软件需要保持开放的心态,对任何技术和立场都保持客观公正的态度,而且在开放源代码时,还需要遵循开源许可协议,允许任何人使用、拷贝、修改以及重新发布。开源许可协议主要分为宽松许可协议(Apache、BSD、MIT 等)和严格许可协议(GPL、GPL v3、LGPL、Mozilla 等)两大类
开源硬件
目前比较有名的开源硬件有 Arduino、树莓派(Raspberry Pi)、BeagleBone 等等
开源设计
开源设计是开源项目的另一表现形式,开源设计的定义是遵循开源许可的可以通过公开渠道获得的设计类项目,主要指的是非源代码类型的项目,比如: icon、UI、画稿、图纸等。这些项目也需要遵守开源协议,并且享受协议规章的保护。
下面提供一个 icon 的设计,供大家参考。
开源文档
比如csdn博客,博客园 wikl等
开源社区的角色
开源社区的每一个人都有自己的角色,每个角色在开源社区内,都能收获不同方面的成长与提升。一般一个大型的开源社区有以下几种角色:
- 开源领导者(Leader):领导者承担了带领项目发展的责任,一般拥有项目事务的决策权。
- 开源维护者(Maintainer):维护者承担了项目日常维护工作,一般拥有项目事务的管理权。
- 开源提交者(Committer):提交者负责对项目提交成果物(一般指源代码提交),并参与项目事务的处理。
- 开源贡献者(Contributor):贡献者通过多种方式为项目做贡献(如解答 Issues、社区宣传等)。
- 开源使用者(User):使用者是项目的使用者,一般会围绕项目进行技术讨论和意见反馈。
开源领导者
开源领导者这个角色,就像是 QQ 群的群主、BBS 的创始人,是开源项目的决策者
开源维护者
开源维护者是项目中的主要管理者,可以类比为 QQ 群的管理员、BBS 的版主
开源提交者
开源提交者是可以直接提交代码到主干的人,在项目模块的维护中发挥重要作用。就像一个班级的学习委员、宣传委员、体育委员一样
开源贡献者 & 开源使用者
开源贡献者是一股推动项目发展和改进的不可小觑的力量,贡献者可以通过 提交 PR、提交 Issues、解决 Issues、邮件反馈、社区分享、社区答疑、宣传推广等方式,为开源项目贡献自己的一份力量。如果对项目有一定研究,对项目发展起到推动作用,那可以认为是一名开源贡献者。
有关开源的常见误区
开源并不等于完全免费和随意使用。
在使用开源软件时,您需要严格遵守项目的开源许可证(又称开源许可协议)。开源许可证是对开源软件著作人版权的保护,在开放源代码的同时,也确保了开源软件的权利是受到保护的。例如:GPL、MIT、BSD 等比较流行的开源许可证允许使用者修改源代码,但是不允许修改版权信息。
而部分开源许可证则对于商业应用需要购买并支付费用。还有部分开源许可证表明不能将软件用作任何政治相关的用途,特别是政治宣传。
所以开源并不意味着完全免费和随意使用源代码!
开源项目不能转为闭源
认识开源首先的一点是要认识各种开源许可证,不同开源许可证对待开源转闭源有不同的规定:
LGPL、GPL、MPL 这类许可证禁止开源软件转为闭源软件。
BSD、MIT、Apache 这类许可证允许开源软件转为闭源软件。
开源项目只需要开放源代码就可以了
一个开源项目不仅仅要开放源代码,还要有一套完整的项目管理流程以支撑开源项目的健康推进。
一个优秀的开源项目,开放源代码只是第一步,更重要的是维护一个开源社区。开源社区包含了一套完整的项目管理流程,它包括开放源代码、社区协作流程、项目质量管理为一体的系统管理,绝对不逊色于公司企业的项目管理流程。同时开源发起人还需要考虑社区传承等重大问题,大量的开源项目就是因为无法传承而被取代或者失败。或者由于项目管理本身的问题,导致问题频出被社区放弃。因此,开源项目并非开放和维护源代码这么简单
一个好的开源项目社区很重要
企业视角看待开源
开源本身是很好的,非常利于行业的进步和发展的,纵观历史,只有拥抱开源,解放思想,乐于分享,才能够有更加长足的进步和发展。
举个很简单且大家都知道的例子:
假设:我手里只有一个苹果,你手里只有一个梨,我舍不得给你吃,你也舍不得给我吃,那么我就不知道梨的味道,你也不知道苹果的味道。
反之:则我分一半给你,你分一半给我,咱俩就都可以尝到苹果和梨的味道。
开源的好处及优势
- 开源的好处
开源软件的好处真的是数不胜数,一个很有代表性的例子就是,比如你要做一个项目,现在没有现成的框架。如果自己要去开发一套框架,那势必要有足够的时间,精力去写它,如果写的成熟点少则数天,多则数月,那么项目急着要做,总不能等你把框架开发完了再去写吧。
那么开源的好处来了,开源框架开箱即用,还有非常完善的文档,交流群,各种采坑经验分享,可以从搜索引擎中搜索到一大把。
- 开源的坏处
开源软件不能被简单地认为只涉及产品研发过程中的选型和开发。从企业视角看,开源软件还涉及产品外销时的知识产权法务风险、企业的研发效率、产品架构、软件生态系统、开放标准构建手段、人才竞备、商业利益角逐等。 企业可以用多个视角去理解开源的意义和价值
企业用多个视角看待开源
1.把开源看作是一个外购件或技术获取方式,看到的问题是:如何开源选型获取新技术?如何在软件生命周期过程有效迭代管理?
2.把开源看作外部协作的一种方式,看到的问题是:获取外部人才的一种方式。与社区的技术人员、以及其他公司协作。
3.把开源当做发展手段:看到的问题是如何在新技术领域产生影响力;在新的技术和业务领域,如何通过开源,站在行业发展前沿等问题。
- 产品中大规模嵌入开源代码,会产生一系列研发管理问题:
1.版权许可证(License)选择不慎会潜伏知识产权法务风险,成为企业拓展海外市场的绊脚石。
2.不同团队选择多种同类开源软件会带来巨大的管理成本。
3.产品研发初期,如何在众多类似的开源组件中选择合适的代码?方向选择错误会导致陷入产品生态与业界不兼容的困境,面临放弃重写还是继续往下走的两难抉择。
4.产品开发时难免会对代码进行修改,修改后的商用代码是闭源还是开源?随着时间的推移,社区版本更新迭代,继续闭源,意味着会重复投入资源,进行不增值的代码合入;而开源则意味丧失产品竞争力。
5.主动开源并不意味着社区就能接纳,需要长期有大量的回馈代码才能建立信誉及影响力,公司内的社区管理人员才能得到锻炼和培养。但是,社区管理人员个人知名度的提升会增加被猎头公司挖走的风险。
6.软件在开发过程中或完成之后,如果出现同类开源软件,该如何处理?
企业参与开源的动机
总的来说,企业参与开源项目的动机主要有以下几个:
1.参与制定行业标准(比如云计算厂商参与 CNCF 项目,大数据厂商参与 Hadoop 项目)
2.增强公司的技术品牌和技术输出
3.为公司招聘人才提供标杆和增加吸引力
4.寻找商业化的机会(大公司的开源团队都有很多的商业化 KPI 压力)
企业为什么会主动贡献开源
1.吸引人才: 当贵司依赖开源软件,那么寻找人才最好的地方莫过于熟悉项目内部本身,而且还是项目社区成员。通过在社区的公开的工作,贵司可以吸引到一些既是做自己喜欢的工作,还能获得一定报酬的人。尤其重要的一点,贵司现有的项目参与的员工,每天都会和他们在一起打交道,自然是非常熟悉的,找到他们也很容易;
2.降低维护成本: 如果一个企业开始在本地的分支做缺陷修复、增加新的功能,然而却没有将这些代码提交到上游的开源项目中,那么很快维护本地的分支,将成为该公司的一个成本噩梦。将上游作为优先的提交缺陷修复和增加新功能是最为明智的做法,因为这样的维护成本最低;
3.项目影响力: 在一个开源的项目中,新的特性或功能来自社区的贡献,那么这些贡献就会影响到项目的走向,如果你认为为项目所贡献的新功能对于贵司非常的重要,那么你应该去安排积极的贡献者对这些功能进行开发和实现。通过贵司的贡献,自然而然就可以影响到项目的走向;
4.有利可图:商本逐利,无可厚非。一方面,对现有开源项目的贡献可以让企业在降低维护成本的同时促进相关业务的发展,获取利润;另一方面,开源本公司的个别项目吸引全球各地的开发者共同维护,借助开源的优势扩大该项目在本行业的影响力,扩大市场占有率,在保持项目开源继续发展的前提下,通过附加其他手段来获取丰厚的利润回报。
个人为什么参与开源
-
解决诉求
日常工作中需要用到对应的开源技术
多某项目很有兴趣
获得满足感 -
专业技能
提升个人技术能力
参与开源项目丰富简历
企业为什么参与开源
- 短期回报
短期回报是指通过开源短期内获取既得利益的行为。企业能够通过开源占领市场份额,获得更大的市场利益,比如:对外发放品牌授权、对外提供咨询和服务费用。此外,企业还可以通过吸引开源项目参与者,集思广益,反哺到自己闭源版本的项目,降低技术升级的成本。
- 项目质量提升、加快项目进度:
谷歌首席科学家杰夫·迪恩(Jeff Dean)指出,传统的软件研发实在是太慢了,通常是一个程序员花上几个月写完代码,然后上会讨论,再根据其他人的意见进行相应的修改。
相比之下,如果采用开源的协作开发形式,谷歌开发人员能够实时与科学界进行协作,谷歌之外的人才也能够参与 TensorFlow 源代码的编写,而机器学习技术的共享能够广泛吸引更多的技术人才完善 TensorFlow 系统。这样, TensorFlow 的开发进度就大大加快了。
- 长期回报
吸引更多的人才:
将产品开源,如果能建立良好的声誉,会让开源开发者对公司产生兴趣,而公司则可以从开源贡献者中选取人才,这提供了一种互相发现对方的机会,招聘到这种人才是非常划算的,因为该程序员的能力早已在项目的贡献中得到检验,而且入职后无需磨合就能够直接上手工作。
技术影响力提升:
公司将代码开源,使更多的开发者参与进来,参与进来的开发者可以凭借自身渠道为项目做一定的宣传,从而带动更多的人参与开源项目,形成良性循环,为公司带来一定程度上的声誉从而进一步提高公司在技术方面的影响力。
企业最初并不认为使用开源软件有什么成本,但经过两三个版本的迭代以后,成本会急剧上升。一般公司经历了多次实践后才认可这种模型,这是付出了惨痛代价以后才意识到的。如果从一开始就选择与社区合作,就可以与社区一起讨论产品的特性,然后再进行修改。最初的维护成本并不高,研发的成本会很高,但由于所要求的团队能力并不一样,维护成本会逐渐降低。
基于开源软件修改,社区下一步准备做什么、怎么做,然后就都清楚,与社区有很好的互动沟通。虽然在前期投入了很大的成本,但最终取得了相应的成果
如何找到适合的项目进行贡献
- 寻找自己感兴趣的开源项目
- 从工作需求招收,工作中使用的开源项目
- 参加某个领域大佬的开源项目,成为Contributor
- 根据自己的技术栈寻找合适的开源项目
参与开源项目的方法
注意 并不是只有给开源项目贡献代码才叫参与贡献
-
阅读开源项目的README.md
-
寻找该开源项目的贡献指南,并阅读
-
先fork该开源项目
-
clone项目,checkout分支,增删改内容 ,提交内容
-
向原项目提交pr
-
等待项目的维护者,code review
-
在PR内和维护者沟通交流,根据意见修改
-
等待内容被merge
参与开源项目的小技巧
- 首先熟悉该开源项目仓库的维护者
- 观察平时的code review记录,了解是个什么脾气的人
- 提交issue或者pr的时候,严格按照issue和pr标准提交(没有人会喜欢不守规矩的人)
- 在pr和issue的开头,首先夸奖该项目,比如这个项目真棒,真伟大,他解决了我什么样的问题(没有人会对夸奖自己的孩子的人而反感)
- 其次描述问题要准确,比如系统版本,软件版本,什么情况发生的,日志,现象,期望发生正常情况(如果你恰好遇见的是高冷的维护者,那么你做好描述信息,不然很可能你的诉求不会得到回应)
- 找到项目维护者的国家,和工作时间点,如果你想和项目维护者无间断的沟通,那么你需要考虑到时差问题
- 如果这个项目对于你很重要,可以考虑多在项目维护者露出你的身影,比如回答其他的人issue,评论其他的pr,多参与该项目的贡献,那么你的问题被回复和解决的概率将会增大
怎样快速成为开源项目的贡献者
- 一般不是大型的开源项目的文档都做的不是很好,可以考虑补足文档的方式,成为项目的贡献者
- 如果是国际化的项目,很多国际化的开源项目本地化都做的有问题,可以考虑从国际化方式快速入手
- 检查文档的单词是否有拼写错误,很多开源项目的单词都用的很有歧义
- 为开源项目写测试用例,很多开源项目的测试用例都不会很全,可以考虑从这方面入手
- 为开源项目写sample,很多开源项目的sample都写的不是很完善,或者没有,可以考虑从这方面入手
- 实际上本地去运行下开源项目,可能会出现环境问题或者其他问题运行出问题,找到答案,补足文档或者代码
- 在该开源项目的pr和issue列表找到其他人提交的问题,由于此时项目的维护者还没有合并该pr,那么你可以在其他人的pr上,增删改查,更加容易被理解和接收,导致维护者合并你的pr(十分不提倡,不道德)
- clone开源项目,使用代码检查工具如p3c,检查是否有不符合规范的地方,如eslint检查是否有不符合代码规范的地方,进行pr
参考文献
标签:社区,项目,红利,维护者,开源,开发者,软件,源代码 来源: https://blog.csdn.net/qq_28880087/article/details/113529141