自從 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年再見!