什么是开源
- 开源vs闭源
- 商业模式, 业务数据, 用户, 业务场景,服务等才是企业核心价值,代码不是
- 闭源不等于安全
- 开源是一种的开放心态, 构建共赢生态圈. 而不是做出一个产品,垄断市场;
- Free is not free --- 自由,而不是免费
- 所谓自由,是开发者、测试者、贡献者、用户,可以自由使用、自由交流,以及自由离开。这样的状态使得所有人都感觉舒适自由,在此程度上舒服地做事,进而有一个好的 idea 去改进。
- 开源是种商业模式. 大公司靠开源占领技术高地, 广告公司技术实力, 岗前培训,挖掘人才?
代码免费,服务收费. 约等于产品试用? - 开源是一种营销模式,它使得以往封闭的需要很长周期技术验证的项目,以开源的方式可以很快进行验证.
开源现状
- 中国缺少一个在开源商业化获得巨大成功的企业
- 开源概念普及不够, 社会对开源的认识和接触度不够
- 普通用户对开源的理解:很多普通用户对开源可以说完全没有概念的,他们从来没有接触过开源,他们不知道开源背后的发展历史和理念,他们也很难像开源开发者那样对开源从感动到信仰。
- 开发者对开源的理解:大多数开发者,依然把开源当做是快速抄代码的地方,甚至很多开发者是为了开源而开源,通过参加各种高大上的开源会议来获得名气以更快的跳槽。
- 企业对开源的理解:开源对企业的要求其实和传统的闭源Windows开发要求一样,甚至要求更低。但是大多数企业依然只是把开源当成免费软件库在使用,然后永远不再更新和维护。大多数使用开源库的企业几乎都不会向上游提交任何补丁和改进,即使他们在使用开源库的时候发现并改进了很多问题。
- 政府对开源的理解
- 学校教育落后开源社区,培养不出开源人才
- 生态构建意识薄弱
- 市场化步伐太慢
- 核心技术落后国外
- 测试体系不够完善,测试缺乏标准和无用功太多
- 对开源,我们用的多,贡献少
- 一言不合就动口,看到不爽就开骂
更好的交流方式是,吐槽诸如某功能如何,哪里做的不好,又如何去改进。
如何开源
理解、学习、使用开源
- 理解一个开源产品的应用场景是什么;
- 想明白当初这个作者为什么会设计它,设计这个产品当初是为了解决哪一些问题;
- 原作者解决的这些场景问题,是否符合我的场景问题?
运营开源项目
- 开放的源代码
- 详细的文档
- 一个活跃的社区
- 持续改进
开源好处
快速验证商业模式
扩展眼界 你的用户里会有各种各样的使用场景和业务需求
调整心态, 不再和人对喷,而是积极应对,真正解决问题
-
个人能力提升 全世界都在review你的代码,并有人提出改进意见
-
沟通能力提升
- 你需要去写文档们需要去 github 回复,需要去 qq 群、微信群里去沟通交流。
- 直白的文档,才能让最没有编程技术的人也能看得懂. 写文档也是思维的重新梳理,对个人也是种能力提升
team work 团队精神
你单兵作战,是可以做一个好项目。但是你持续要有一个团队是很有必要的。像 beego,有很多人可以维护的,像小黑同学,余双棋同学,有一个貌似意大利的很牛的。只有你很积极地参与进来,我才会认可你,才会把你纳为 contributor,才会是团队的人。那团队的人要怎么样一起工作,怎么样相互的 review,怎么样把代码做好,怎么样去完善它,协调好各方面。大公司靠开源占领技术高地, 广告公司技术实力, 岗前培训,挖掘人才?
代码免费,服务收费. 约等于产品试用?
小米开源原则
- 快。快速选型,快速定位,快速掌握,快速推出产品。
- 绝不重造轮子。宁愿学习掌握,化为己有而不要自己重写,这个投入远远大与前者。
- 不用则已,要用则精。
- 永远抱着开放与共享的态度。如果讲自由主义,讲政治上的一些东西的话,道德层面的,这个是反映的一块。
- 与其他公司所不同的,小米会尽力推出自己的Committer。
怎么有效回报社区?
- 要勇于参与;
- 描述清楚想法和算法;
- 还有就是自信,坚定自己的观点,不要被社区中某些貌似大牛的人所吓到了,没必要的;
- 一定负责任,不要打一枪换一个地方,就是写了代码一定要维护,要做QA,要做测试,要做自己的用户,要做客服,你的问题有人提问要及时回答。
开源社区的协作模式
第一代开源协作模式
- 作为协作核心的Maillist
- Bugzilla应运而生
- 代码提交流程的规范化
总结:在简陋的工具条件下,发展出高效、严格的社区协作模式
第二代开源协作模式
- issue & milestone
- 服务平台化
- 在线代码浏览,并能够支持不同的配置库
- 需求管理、Bug管理,通常合并为Issue tracking
- 版本与里程碑管理
- 文档编写与管理,以Wiki的形式为主
总结:以Web形式提供的集成化开源项目托管平台,标志着开源项目的协作模式,进入成熟期
第三代开源协作模式
- 激励机制
借鉴了社交网络中的各种数值化模型,关注者数量,Star数量,Fork数量,Issue数量,Pull Request数量,都在显要位置标示出来,对于开发者形成正向激励,还有很多的统计图表,形象的展示了项目的活跃程度。 - 基于fork/pull request的协作机制
在github,一键就能够fork自己的分支,然后可以跟原有的分支毫无关联,也可以非常方便的提交pull request,这就带来了更加频繁的分裂,使得分裂常态化了。
Pull request,从一个代码合并的方式,变成了开发者之间主要的交流方式,他们发现,最好的交流,正是通过源代码来交流,一切的讲道理,都不如用源代码来讲道理。这恰恰是程序员们最习惯,也最喜欢的一种交流方式。 - 围绕Github出现的扩展服务
- 与其他项目管理工具集成(Bugzilla,Asana, Basecamp,Redmine,JIRA,ZohoProject)
- 与持续集成服务集成(Travis,Bamboo,CircleCI)
- 与消息通知服务集成(Amazon SNS,Email,IRC,Jabber)
- 与DevOps服务集成(AWS OpsWorks, DeployHQ)
总结:社区天生就应该是社交化的,Social Coding与开源社区,简直就是天作之和。
开源协作模式的新探索
- Git:作为标配
- Code Review:必不可少
- Workflow:百花齐放
- CI、CD、DevOps