2013 年 Facebook 在开源方面的工作回顾
自从 Facebook 的第一行PHP代码,第一句 MySQL 的 INSERT 语句,开源就已经是我们工程哲学中的一个重要的部分。
现在,我们使用、维护并为大量的主要项目做出了贡献——涉及多种领域如手机工具、大数据系统、客户端的web库、后端的运行库和基础架构,也涉及到开放计算项目,服务器和存储硬件。
2013 是我们开源项目具有重要意义的一年,我们拥有大量令人自豪的新项目,为正常运行和维护它们的更新承诺,和使用它们的充满活力的社区一起工作的愿望。仅在我们的 Github账户上,我们现在已经有超过90个仓库,有超过40,000次的提交,一共被复制了15,000次。
年末是一个很好的机会来回顾我们投入精力的一些主要的领域,简要重述(不是详细的!)下我们工作的一些项目列表。
手机
我们最自豪的开源贡献常常是我们为了解决在 Facebook 遇到的规模和性能的挑战而开发的一些技术。
手机也不例外:Facebook 的手机应用已经是我们产品团队今年的一个重点,我们现在也还需要开发新的兼容性——在这种情况下,那些要迅速开发、编译、测试并发布我们手机应用的需求变得更加的高效。开源我们的工作,正如我们已经做的那样,是很自然的事情,这些工具已经成为我们手机开源作品集的核心。
比如,在四月份,我们发布了 Buck,我们的Android编译工具。开发者的效率对我们来说很重要,自然速度是Buck的首要工作:在Facebook,我们发现它在编译我们的应用时,比 Ant 快了超过两倍。从一开始,这个项目就越来越强大,并被Android社区也包括一些有名的Java项目广泛应用。
对于iOS,我们也有类似的瓶颈,发现我们需要加速和自动化Xcode的手动编译过程。结果就是非常流行的 xctool ——也在四月份发布——可以使工程师(更不说那些持续集成的机器)更加简单的编译和测试iOS和Mac项目。
我们在十月份举行的 Mobile @ Scale上推出了 Rebound,一个Android的物理和动画库。Will Bailey在 这篇最近的博文中详细介绍了这个项目,我们相信对真实世界的物理建模是一个有力的方式,方便在应用中创建自然、可触的动画和交互效果。
最后,通过发布另一个手机工具来结束这一年,还有比这更好的方式吗?今天我们很激动的发布 Origami,一个 Quartz Composer的工具集,允许设计者更快的编译和构建手机交互的原型。
Web
Web技术也和Facebook相关,包括手机和桌面的客户端。在前段,我们开源的重点更多的在于支持在五月份的 JSConf上发布的快速灵活的JavaScript库 React。
从那以后,React库——和社区的热心者——有了一定的发展。现在在 编译工具上有了大量的集成,服务器端的环境(像 node, Rails,和 Python)和其他 客户端的库——也包括一些备受瞩目的外部的部署工具如 Khan Academy。团队维护了一个出色的 社区概要博客,包括大量其他React项目的例子、演示和教程。
总之,我们也想帮助提高JavaScript语言和web应用的质量。例如, Regenerator,是用来转换ECMAScript 6的yield语法到现今的浏览器的一个转换器, Huxley,在夏天由Instagram团队构建的,已经快速成为web应用中一个非常流行的可视化正则测试工具。
数据
Facebook与开源数据基础设施(open source data infrastructure)颇有渊源,回顾我们对MySQL, Cassandra,Hadoop,Hive和Hbase所做的贡献可以看出这一点。2013年也不例外,仅仅在过去的几个月里,我们就上线了两个新的旗舰级数据项目。
首先是 Presto,一个新的分布式SQL查询引擎,被设计用于高性能分析我们用于运行交互式查询的300PB数据仓库。
我们在夏天的 Analytics @ Scale event上公布了Presto并且在上个月于 我们的blog上对它做了更多介绍。从那以后,我们激动的看到它被许多像Airbnb和Dropbox这样的公司采用,并且从许多热情的社区得到了贡献,包括 new clients, Ansible playbook和 debian packaging。
第二个项目是 RocksDB,一个非常与众不同的数据基础设施(data infrastructure):一个基于LevelDB的嵌入式key-value存储类库,并且为拥有多核CPU和快速闪存的环境做了优化。此外, 在它上线的以后几个月里,它引起了广泛的兴趣,一些伟大的社区已经把它绑定到其他的语言上。
我们对数据基础设施(data infrastructure)的贡献和支持拓展得很好也已经超过了我们本身。我们对 Giraph提供了强大的支持,比如,它已经被提高到可以支持1万亿边缘的图形结构。
基础设施项目
最后,但绝对不是最不重要的,基础设施项目在我们对开源项目的贡献中仍然是最为重要的一部分。
HHVM,the HipHop Virtual Machine,是目前为止我们的项目资产中最为显著并且是追随人数最多的项目,并且得到了大量的来自PHP生态系统的支持。2013年有近4000次提交,并且在性能和第三方php框架的兼容性上有了长足进步,这对于社区的广泛采用来说是非常重要的。
这个团队刚刚从封闭中走出来并且在昨天分享了他们 最新进度的消息。并且我们很激动的看到在持续不断的集成测试之后,VM 被集成到Travis CI,并且为集成到其他流行的web server加入了 FastCGI支持。
我们今年也为许多其他的显著的基础设施项目工作过。对于我们自己的项目,包括 pfff,我们的代码分析工具箱, libPhenom,一个高性能的事件框架,和 folly,我们流行的C++类库。并且我们今年为 Mercurial, LLVM和 GNU grep提供了许多显著的贡献。
Open Compute项目在2013年继续壮大,使用 new work on networking hardware,新的社区和基础管理,以及全年众多的hackathons和讨论会。Facebook致力于支持项目建设并且它的目标是开发设计用于所有数据中心技术的开源服务器和数据中心 – 并且让我们期待下个月的 Open Compute Summit。
2013年我们的开源项目…
当你在使用或者为一个开源项目做出贡献时,我们知道没有比看到它停滞不前更糟糕的了:bug 没有被修复,问题没有解决,pull requests 被忽略。关于 Facebook,我们的目标是,通过我们的投资组合,保持强有力的社区参与责任感。
我们已经采取了具体的措施来达到这个目标。例如:我们现在鼓励我们的工程师团队在使用或者开发一个开源项目的时候,首选 Github,Bitbucket 或者 Apache 软件基金会的项目作为源码的来源。
我们有一个新的工具链,使 repos 和我们内部系统同步,同步代码评审过程,任务跟踪等等。同时把我们最近检测的所有 repos 仪表化,保证他们保持健康的发展:我们有内部的仪表盘来显示commits 的数量,pull requests 的数量和每个团队 issues 的数量。这给我们提供了一个早期预警系统,提醒社区中有哪些被我们无意中忽略了。
同时我们很自豪的宣布,我们正在做的 Bountysource 项目帮我们社区解决了很多问题,其中包括鼓励大家参与各种开源项目,奖励那些参与开源项目的开发者。我们已经有了 一系列的奖励计划,包括 HHVM 和 D。
就在上个月,我们宣布 Facebook Open Academy 已经把开源带到世界各地大学的计算机科学课程中。
在 2013 年,我们也同步开始了 “ @ Scale” 工程活动的项目,这个项目旨在汇集开发人员讨论和分析各种技术大规模实施面临的挑战,分享他们的解决方案和相关的开源项目。今年的活动包括 Analytics @, Mobile @ 和 Data @ Scale,相关的视频已经放在了我们的 Facebook Developers channel。 敬请期待明年更多的 @ Scale 活动。
最后,欢迎访问我们新工程的网站 code.facebook.com!我们尽可能让您更方便的关注我们所有的活动详细信息,在 blog posts, events, videos, academic publications 和 open source projects 上都可以找到我们所有的工程项目和活动。订阅我们的 Facebook Page 和 open source news 可以获得更多的更新新闻。
…以及未来
Facebook 的著名格言:我们的开源项目仍然是只完成了1%。
通过上面提及的所有主题,我们知道还有很多方面需要我们继续努力。我们很庆幸在我们众多的项目中有强大而热情的社区支持,给予我们强烈的责任感和动力。
不管你们是在移动端,web,数据亦或是基础设施社区,我们都很期待能继续与你们合作,2014年再见!