在过去的 15 年中,Facebook 改变了我们与朋友保持联系的方式,改变了我们与家人发生争执的方式,改变了我们对隐私的看法,改变了我们消遣俄罗斯政治宣传的方式。同时,Facebook 也改变了计算方式。从 Netflix 到 Uber 再到沃尔玛的网站,我们每天使用的很多应用程序和服务都是使用由 Facebook 开发和共享的技术构建的。
当 Facebook 发展到需要为数百万甚至是数十亿的用户提供服务时,它必须开发一些工具,从能够处理海量用户信息的数据存储软件到托管这些数据库的数据中心的硬件设计。近年来,Facebook 创建了一些新的构建 Web 和移动应用程序界面的方式。关键的是,Facebook 并没有将这些东西留给自己独享,而是将它们开源出来,让所有人都可以使用、修改和分享它们。
Linux 基金会执行董事 Jim Zemlin 说:“多年来,Facebook 一直是开源的驱动力,与广泛的社区共享了很多关键技术”。基金会有一个专门致力于 GraphQL 发展的组织,GraphQL 是由 Facebook 创建的一种编程语言,用于处理应用程序和服务器之间的通信。
由于 Facebook 的开放性,它的很多技术已成为行业标准。Airbnb 技术负责人 Adam Neary 说:“Facebook 不仅在构建服务器的方式方面发挥了巨大作用,在浏览器和移动开发方面也发挥了巨大作用。整个生态系统都是由 Facebook 开源的技术在推动。”
Facebook 对计算社区的第一个重大贡献是 Cassandra,这是一个可以扩展到数百甚至数千台服务器的数据库系统。
Facebook 并不是第一家推出这类数据库的公司。亚马逊和谷歌也都发表了他们自己的分布式数据库论文,但他们都没有真正公开过他们的代码。Facebook 工程师 Avinash Lakshman(曾参与亚马逊论文的撰写)和 Prashant Malik 将亚马逊和谷歌论文的想法结合在一起,创建了 Cassandra。然后,在 2008 年,他们公开了代码。很快,它就被其他公司采用,例如云计算公司 Rackspace。
Jonathan Ellis 说:“他们不只是翻版了谷歌和亚马逊所做的东西,他们还做了一些不一样的事情”。Jonathan 曾经是 Rackspace 的员工,随后在 2010 年共同创立了 DataStax,一家为企业客户提供 Cassandra 支持的公司。
DB-Engines 网站的数据表明,Cassandra 现在是世界上排名第 11 位的数据库。Apple、Netflix、Instagram 和 Uber 都是这个项目的用户和贡献者。
Facebook 也是开源数据处理平台 Hadoop 的早期贡献者。Hadoop 几乎成了大数据的代名词。Hadoop 的早期开发大都是基于谷歌发布的论文,由雅虎完成。但 Facebook 是雅虎以外首批采用 Hadoop 并为该平台贡献额外工具的公司之一。Hadoop 催生了多家创业公司,如 Cloudera,由前 Facebook 研究科学家 Jeff Hammerbacher 共同创立。
Facebook 近年来在人工智能研究方面投入了大量资金,以便更好地利用他们的数据,并且已经发布了一些相关的工作成果。2015 年,Facebook 开放了一些人工智能算法实现,用在一个叫作 Torch 的人工智能平台上,差不多是在谷歌开放其人工智能引擎 TensorFlow 的前一年。数据科学家 Jeff Hale 的一项分析显示,Facebook 继续为 Torch 的变种 PyTorch 提供开发资金,PyTorch 现在是第三大最受欢迎的人工智能框架。
Facebook 不满足于只是构建可以处理数百万用户的软件,它还设计了用于管理这些数据的计算机和建筑物。
在这个过程中,Facebook 提出了一些不同寻常的想法,从使用室外空气而不是工业冷却系统的“露天”数据中心,到能够让你快速交换处理器和其他组件的“模块化”服务器。
Facebook 将这些设计作为 Open Compute Project 的一部分发布出来,Open Compute Project 现在是一个独立的组织。Facebook 在 2011 年宣布 Open Compute Project 时曾经遭到质疑。尽管那个时候开源软件已经成形,但还不清楚 Facebook 的特殊想法是否对其他公司有用。很快,台湾广达公司开始销售基于 Facebook 设计的电脑,其他公司(包括 Rackspace、微软和苹果)也为这项计划贡献了自己的硬件设计。
今天,Facebook 正在与爱立信和德国电信等公司合作 Telecom Infra Project 项目,帮助他们建立新的电信开源基础设施,包括一个叫作 ARIES 的远程天线系统和一个叫作 Terragraph 的用于连接无线电塔的系统。
在第一个十年里,Facebook 被使用最为广泛的开源贡献是这些基础设施。Netflix 可能使用 Cassandra 来管理用户信息,但这并不意味着你会在 Facebook 网站上直接与 Facebook 的代码发生交互。这种情况在 2013 年开始发生变化,Facebook 发布了 React,一个开放源代码的“库”,Facebook 和很多其他公司用它来构建看起来像原生应用程序的 Web 界面。
React 花了一些时间才流行起来,近年来已经成为构建“前端”应用程序方面是有最为广泛的一个库,超越了谷歌的 Angular 框架。Airbnb、Netflix 和沃尔玛都使用了 React。
编程教育网站 FreeCodeCamp 创始人 Quincy Larson 表示:“在 2015 年,我突然发现旧金山的朋友们开始放弃 jQuery 和 Angular,转向了 React,他们对此非常笃定。”
这可能与 2015 年 React Native 的发布有关。React Native 使开发人员能够使用 React 为 Android 和 iOS 构建原生应用程序,这意味着他们可以为 Web 和移动应用程序使用同一套代码。
Facebook 并不是第一家为使用 Web 技术构建移动应用程序提供工具的公司,也不是第一家为开发 Web 应用程序提供开源库的公司。咨询公司 Rightpoint 首席创新官 Greg Raiz 表示,将这两种想法结合起来才是一个完整的故事,才是一个完整的拼图。
https://www.wired.com/story/how-facebook-has-changed-computing/
Facebook 是 Github 上排名靠前的开源公司。Facebook 每个月都会发布数个开源项目,并且有数百个工程师会持续地支持这些项目——他们参与全世界的各个开源社区,改进软件的体验。但是,Facebook 究竟为何要使用、支持和发布开源项目?这个问题比探究 Faceboot 如何做开源更有意思。
Mark Zuckerberg 选择开源是因为 Facebook 的黑客社区吗?还是因为 Facebook 所感受到的社会责任吗?这些都是真的,但都不是这家公司走上开源之路的真正原因。
真正原因到底是什么?对公司有利,仅此而已。
共享 Facebook 的代码(通常是软件“栈”,偶尔也包括硬件设计)促进了这个世界的创新。这些代码帮助他人更快地开发软件。因为 Facebook 不是一家软件公司,所以它在开源过程中没有面临竞争对手的威胁,相反,开源带来的价值在逐渐显现。用户使用 Facebook 的开源代码可以更快地构建应用,而他们也乐于回馈代码,使 Facebook 从中受益。
拥抱开源,意味着 Facebook 必须一开始就写出更优秀的软件。如果他们知道某个软件从诞生起就要公开,那就必须要好好做,提高可用性和可靠性,因为将来外面的人都会用它。这种压力也会给公司内部带来更多的价值。
开源带来了共享挑战的机会。开源项目面临的难题会吸引一些外部的优秀人员,而结果是,他们也带动了公司内部人员的能力提升。每天 Facebook 都承载了超过一亿人的沟通互联,何以能做到?唯有开源的力量。
Facebook 的开源办公室员工不多,所以开源项目团队的工作必须高效,他们需要自己去收集数据来判断项目的当前状态。他们大量使用 GitHub 的 API 去获取尽可能多的数据,每分钟都在获取。然后他们把这些数据收集起来实时地共享,并且每个月会做个月报。这给工作带来了些许刺激的趣味,开发人员们可以互相竞赛,看谁的项目表现更好。尽管被成功的光环笼罩,Facebook 总是力求做得更好。
比如,React 和 ComponentKit 等最初都只是个别工程师自发开始的项目。在使用过程中,有些工程师认为已有的工具不够完美,于是就有了创建更加好用工具的想法。然而,作为个人的一些奇思妙想,很多项目在最初是与当时工程团队所认为的主流发展方向背道而驰的。以 React 为例,该项目目标为构建反应式图形界面的 JavaScript 库,在 2013 年正式开源。React 直接挑战了 Facebook 当时认定的其他 JavaScript 框架。因此,在开源之初,React 项目受到了 JavaScript 社区的嘲笑。很多人认为 React 库把视图和逻辑混了起来,而且与已有框架相比它的代码冗长。甚至内部开始运行的头几个月,Facebook 内部很多工程师也都不看好该项目。
然而,Facebook 公司却不这么认为。与平常项目相比,React 等项目风险更高,失败的概率也比较高。但是,Facebook 不仅仅是允许,甚至鼓励员工进行这样的实验。其实,Facebook 更看重的是 React、ComponentKit、HHVM、GraphQL、Immutable.js、Flow、Pop 或者 AsyncDisplayKit 等这样成功案例所带来的好处。作为全球最大的社交网站,Facebook 能够负担、也情愿负担这些实验的风险,从而获得更大的收益。
此外,这些项目都遭受到了来自内部的反对声音。出于多种因素考虑,有些人总是希望项目能够早日承认失败。但是,Facebook 良好的工程管理理念以及一批优秀的工程管理人员能够帮助屏蔽这些声音。无论外部环境如何,这些管理者能够坚持相信自己的工程师,让项目稳步推进。
另外一方面,无论是个别部门,还是绝大部分的 Facebook 员工都认同一个理念——创新和突破不能随着产品而停止。因此,React、ComponentKit、HHVM 等这样的项目才能在相关工程师的推动下一步步成长,渐渐拥有独立的社区,并改变很多人思考和开发软件的方式。
最后,对于 Facebook 公司而言,“开源”对其意义非凡。很多工程师都是因为对个别项目有兴趣,然后才申请加入 Facebook 的。甚至 Facebook 内部,员工也会根据兴趣或者项目需求,而进行跨组调动等。通过开源,Facebook 吸引一批优秀的人士加入项目。然后,项目做的越好,也越能吸引到更优秀的人士加入。通过如此反复,Facebook 的开源项目必然更加成功。
通过以上分析可以看出,Facebook 这些项目的设立不仅满足了工程师对工具的需求,也符合了公司发展的需求。这些大胆创新的背后是 Facebook 公司对技术迅速发展和完善的渴望。其实,Facebook 第一位华人工程师赵海平之前也分享了类似的想法。他认为 Facebook 能够快速发展包括了公司用于创新和尝试的 Hack 文化、避免相互依赖的去中心化研发思路、善于争辩的员工思维方式以及一批优秀的员工。正是这多方面、从上而下的公司氛围与文化成就了 Facebook。
也许,这些正是国内的科技公司门值得学习的地方。
延展阅读:中国互联网公司开源项目调查报告:BAT们谁是开源王者?
点击下方图片即可阅读
996.ICU,中国程序员的呐喊与彷徨
点个在看少个 bug 👇