写点什么

LinkedIn 开源成功的秘密

  • 2016-06-20
  • 本文字数:2979 字

    阅读完需:约 10 分钟

开源就是不断的奉献自己,除非它将你的业务先毁掉。但是,有太多的人先入为主,将各种偏见灌输给你,诸如:开源有“毒”,开源根本无法赚钱之类的。这个时候,你只需要默默的,转身看看那些成功的利用开源的公司即可。

互联网的巨头,即使如 LinkenIn,也是开源的“专家”,让我们先过一遍 LinkedIn 的 GitHub 账户, 竟然是一家发布了 75 个开源项目的公司。而且其中有一些已经是获得巨大成功的项目了,有众多的开发者和公司参与开发和使用。是的,没错,这就是 LinkedIn,外表光鲜的互联网公司,主营的业务是招聘,标榜自己是“将全世界的专家联系起来,让他们更具生产力,并变得更加的成功。”

最近被各大公司释放开源项目的新闻刷屏,Google 刚刚开源了人工智能项目、FaceBook 开源机器学习项目 等等,几乎每周都有这些 IT “大鳄”们发布新的开源项目,令人目接不暇。 LinkedIn 也不甘示弱,近期又开源了其旗下项目 Amdry ,这是一款对象存储系统。其实,LinkedIn 已经悄然建立了一个世界级的开发者团队,和开源社区紧密联系,从开源中获益、也反馈给社区。近来 LinkedIn 的工程副总裁 Igor Perisic 接受了 InfoWorld Matt Asay 的采访。让我们来了解下 LinkedIn 是如何让开源在公司中成功运转的。

将代码开放仅仅是个开始

任何人都可以将自己的代码开放,事实上,类似 Sourceforge 上的很多项目经年累月的都是只有很少的开发者,(80% 的项目只有两个人或更少的开发者)若是有人加入的话,那真是让人兴奋不已。即使是某个项目有多个贡献者,但是绝大多数的项目有超过6 个月的时间没有更新。

事实上,仅仅从 LinkedIn 开源了75 个项目这个角度来说,并没有多大的意义,因为一个开源项目的意义在于能够在多大程度上引起社区的兴趣来,而这也是 LinkedIn 的开源故事的魅力所在。

正如 Perisic 所说:“数字通常只是表面的、虚的标杆,我们认为社区采用量才是成功的关键指标。” 举例来说, Pinot REST.li ,前者是一个实时的分布式的 OLAP 数据存储,LinkedIn 用来交付可扩展的实时分析,后者是一 REST 的框架,在 GitHub 上都是超过一千个 Star 和 Fork 超过 200 的项目。

另外,一个开源项目最好的健康指标就是代码仓库的贡献者数量和最后的更新时间,这两个指标随着时间的推移,也会为项目带来更多的贡献者以及更加频繁的更新,形成一个正循环。但是对于社区来说,这还不够。能够得到业界标准的承认,才是 LinkedIn 的开源工作所取得的成绩,比如得到 Apache 基金会的承认。

LinkedIn 有多个项目被 Apache 基金会当选为其顶级项目,诸如 Kafka Samza 、 以及 Helix 。还有其它项目,如分布式键值存储系统 - Voldemort 正在变得流行起来。REST.li 就不用说了,已经是非常受欢迎的开发框架了。总体而言,LinkenIn 通过在开源的努力已经在开源项目上赢得了开发者的认同。

开源现在已经是一个被滥用的词汇了,举例来说,太多的公司所发布的代码是对自己有用的,然后希望出现大规模的社区围绕着它来进行,然后希望这个项目对自己的公司更加的有用处。其实,开源基金会也是遵循着同样的如此的以自我为中心的逻辑,所谓的开放治理其实是一种伪装,不过依然是由单一的厂商控制最终的产出罢了。

当然,LinkedIn 也不是第一天就明白成为开源社区的典范的美德的。正如 Perisic 所描述的那样:“从早期的失败中,我们学到的重要的一课就是你不可以将一个项目扔给社区,然后就不再创新了。还有另外重要的就是,一个开源项目的成功与否取决于你如何参与到社区中来。”

Perisic 进一步解释,这也就是意味着,最为艰难的工作是在将刚刚将代码开源后的那一段时间,举个例子来说,LinkedIn 现在所总结的获得社区的反馈非常的重要,以及确保项目的目标是容易理解的。这都是经历了很多才学到的。不过,只为重要的还是团队的决定,如果你没有准备好将正在进行的工作开源的话,最好是先不要将之开源了。

何苦呢?

这里就有很多人提出了疑问了,既然开放代码已经困难重重了,再加上来自社区增长的压力,何必这么折腾了呢?Perisic 进一步点出了其中的奥义,虽然开源对于 LinkedIn 来说有让价值在外部流动的好处,但是最重要的一个缘由还是开源社区能够影响到工程师。

Perisic 说道:“我们发现,在开源了项目之后的第一个结果竟然是我们开发者撰写出了质量更好的代码。将代码放在自家的门后,只会成为鼓励大家偷懒、马虎,开源之后,则不一样,这样会激励开发者们,使他们更加的细心。开源之后改进尤为明显的有,文档也有人写了、代码也更容易让人阅读了、而且非常注重每一次的测试结果。”

将代码开放以后,也就意味着开发者们要接受批评--非常公开的批评。用 Perisic 的话就是:“当一位开发者将某一段代码公开以后,也就是将自己的声誉放在了网上,其本质上是一种类似同行评审。这样就让开发者们能够激励自己,将他们的代码写的更好、撰写更完善的文档、以及对于可重用性的重视。”

Perisic 又说道:“当然,开源也不仅仅是有利于代码质量。它也能够确保开发人员的视野不至于太过于狭隘,总是盯着自己眼前那点事。在一个开源项目下工作,也就意味着一起共事的不仅仅是自己身边的同事,而且还有来自其它公司的开发者,这会帮助大家对于技术、业务方向的发展趋势有一定的意识,而且可以帮助他们学习如何评估其他开发者的输入。在这个多元的世界中,开发人员应该学习如何更加高效的来领导自己的团队。”

最后,Perisic 指出:”从公司的角度来看, 这也有助于发展你的品牌工程, 这证明在吸引新的人才和留住现有员工方面非常的有好处。”

“种”下你的代码,让它茁壮成长

Perisic 非常认真的说:“我认为在创建一个项目并将之开源,应该像你的内部组织一样去花时间用心去做。而且发布什么样类型的代码也是有讲究的,是蛮重要的事情。这就是为什么有一些项目无法发展出强大社区的重要原因之一,因为所发布的项目是孤立的。孤立的代码可能就是那些仅仅只是对本公司业务有用的代码,如果它对于外部其它公司没有任何用处的话,那么它失败的可能性就会很大。”

但是有的时候,最好还是在现有的项目上去投入资源和人员,即使它们可能还没有获得大家公认的高度。独立的开源项目是伟大的,但是如果它是在 Apache 的羽翼下而且也蛮有意义,那就不要犹豫了。如果已有的社区的开发者们渴望使用它,那就更不用有所犹豫了,赶紧将之开源!

既然这样,那么问题又来了,当来自 LinkedIn 外部的代码对于 LinkedIn 毫无用处的时候是怎么处理的?Perisic 是这么回答的:“你不能只是将项目放弃就不管了,你应该为原来选择你的用户提供相应的替代和迁移的途径。” 这里举个例子,LinkedIn 曾经放弃了一个叫做 Camus 的项目,这个项目的功能是用于将数据从 Kafka 导入 HDFS 的一个管道实现,放弃归放弃,但是 LinkedIn 另外开发了一个叫做 Gobblin 的项目,LinkedIn 新的数据感应框架,也可以实现 Camus 的功能,只是更加的完善,LinkedIn 此时做的决策就是,为 Camus 的用户提供迁移的路径。

总结以上所有,开源项目是需要付出巨大的时间来开发、精心培养、并时刻留意的。Perisic 非常明白其中的涵义,但是认为值得:“对于开源社区来说,再大的投入都是值得的,因为回报也是丰厚的。”


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-06-20 19:003083
用户头像

发布了 33 篇内容, 共 13.5 次阅读, 收获喜欢 13 次。

关注

评论 1 条评论

发布
用户头像
厉害
2018-12-12 21:43
回复
没有更多了
发现更多内容

Java | IO流缓冲流和转换流

陌上

Java 编程 11月月更

【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇」

码界西柚

log4j logback 全链路追踪 11月日更 MDC

10道不得不会的 Java容器 面试题

JavaPub

Java 面试 后端

Java | IO流数据流和标准输出流

陌上

Java 编程 11月月更

Python进阶(五十三)Flask Web开发实现将表单渲染成HTML

No Silver Bullet

Python flask web开发 11月月更

Java中的String类常用方法

共饮一杯无

Java string 11月月更

Python冷知识:如何找出新版本增加或删除了哪些标准库?

Python猫

Python

极客时间运维进阶训练营第四周作业

9527

K8S环境的Jenkin性能问题处理

程序员欣宸

Kubernetes jenkins 11月月更

【LeetCode】找到最高海拔Java题解

Albert

算法 LeetCode 11月月更

三面头条 + 四面阿里 + 五面腾讯拿 offer 分享面经总结

程序知音

java面试 大厂面试 java架构 后端技术 Java面试八股文

【C语言】int 关键字

謓泽

11月月更

一文搞懂MySQL表字段类型长度的含义

闫同学

MySQL 数据库 11月月更

Java 后端 100多道面试题,多看点题,没坏处!

钟奕礼

Java 程序员 java面试 java编程

云原生系列 【轻松入门容器基础操作】

叶秋学长

云原生 沙箱实验 11月月更 操作手册

2022年最新版68道Redis面试题,20000字干货,赶紧收藏起来备用!

钟奕礼

Java 程序员 java程序员 java面试 java编程

10道不得不会的 SpringBoot 面试题

JavaPub

Java 后端 springboot

拿下大厂?这几道jvm面试题必须要懂

钟奕礼

Java 程序员 java面试 java编程

面试中如何才能拿到阿里 P7 的职级?

Java永远的神

Java 阿里巴巴 程序员 架构师 程序员晋升

集合工具类Collections指南,以及Comparable和Comparator排序详解

共饮一杯无

Java 集合 11月月更

计算机网络:VLAN基本概念与原理

timerring

计算机网络 VLAN 11月月更

美团技术官手写的精品SpringBoot笔记,涵盖99%知识点,强到离谱

小小怪下士

Java spring 程序员 springboot

【LeetCode】无重复字符的最长子串题解

Albert

算法 LeetCode 11月月更

3年Java研发,突击30天,从14K变成了30K

程序知音

Java java面试 大厂面试 java架构 后端技术

这个bug,你中招了吗!!!

石臻臻的杂货铺

kafka 后端 11月月更

2022全网最全最新Java面试题-独家内部教材

钟奕礼

Java 程序员 java面试 java编程

仅hashmap一道面试题我就搞定了面试官成功入职面试官:我裂开了

钟奕礼

Java java面试 java编程 程序员、

从基础到实战,阿里巴巴高并发系统设计全彩版手册限时开源

Java全栈架构师

程序员 面试 程序员人生 高并发 架构师

这一次,带你深入浅出Go语言切片和数组

闫同学

Go 11月月更

Java | IO流文件专属流

陌上

Java 编程 11月月更

2022一线大厂10w字面试总结,每日刷几道,明年金三银四稳了

程序员小毕

spring 程序员 JVM 架构师 java面试

LinkedIn 开源成功的秘密_InfoQ_李建盛_InfoQ精选文章