Facebook のオープンソースプロジェクトには、妙にかっこいいものが多い。 企業発 OSS の中でもかっこよさが突出している。 有名どころでは React (2013) と PyTorch (2016) があるけれども、 他にも MySQL のストレージエンジンをとりかえた MyRocks/RocksDB, Microsoft も使い始めた静的解析ツール Infer (これは買収だな), AWS が managed service をはじめるに至った OLAP DB の Presto, Rust で書いてしまった Marcurial Backend の Eden などなど枚挙に暇がない。
プロジェクトの数だけなら他にも数多く公開している会社はあるし、 プロジェクトの規模(つっこまれている人員)が特別多い感じでもない。 が、かっこよさは企業発オープンソースの中で一歩先を行っている、気がする。
昔の Facebook は、それほどオープンソースが得意な印象ではなかった。 Hive なんかは割と古い (2010) ヒット作だけれど、 Cassandra (2008) は他の会社に引き取られてしまったし(それはある意味ではヒットしているが)、 Thrift (2007) に至っては自分ではじめたオープンソースなのに なぜか自らフォークしている。意味不明。
それがいまやこのかっこよさ。 かっこよさを感じる理由はいくつかある。
一つはプロジェクトの小粋さ。 React は全部入りのフレームワークでないし、 PyTorch は(当初は)割と小さく、API もきちんとレイヤリングされているし、 MyRocks はデータベースをフルスクラッチでなく MySQL を再利用してるし、などなど。
プログラミング言語選択のリベラルさも良い。Infer に限らず妙に OCaml が幅を利かせていたり、 一時期は Haskell や D もまじっていたし、 最近は Rust まである。 ハック精神を感じる。そういえば言語作ってたな: Hack.
もう一つ感じるのはコミュニティづくりを含めた見せ方のうまさ。 これはなぜなのだろうとウェブを眺めていたら Facebook の OSS 担当者が一時期やっていた The Diff という Podcast の 最初のエピソード が社内のオープンソースの取り組みを紹介していた。
これによれば彼らはオープンソースプロジェクトの活発さのメトリクスを監視し、関係者を ping したりしているらしい。 たとえば PR の数、その対応時間、フォークの数などをトラックしている。 オープンソースプロジェクト公開のバーも高い。担当者がきちんとコミュニティ対応にコミットできる確約がないと公開させてもらえない。 プロジェクト自身の新規性なども加味される。 こうした企業としての Facebook の取り組みは、企業オープンソース支援団体 TODO Group の ガイド でも紹介されている。
もっともこうした「オープンソースの見せ方の上手さ」は新しい世代の企業なら多かれ少なかれ持っている。 やはり見せるに値するプロジェクトを持っているのが重要。 たとえば Netflix とか企業ブログは割とかっこいい話が多いけれど、 GitHub をみると(自分がクラウド素人である事実を差し引いても)そんなにピンこない。
Profilo
自分が Android アプリで性能関係の仕事をしている関係もありその手のライブラリをたまにひやかす。 そんな中ででくわしたのが Facebok Profilo. 機能豊富なのもそうだけど、実装のえげつなさが Facebook 的でとてもよい。 息をするように libc の関数を置き換えたりする。 ここでは Android の Trace の実装をフックし、 本来ならアプリケーション内からは見えないはずの Android Framework からのトレースをアプリケーション側で採取している。 普通ならかったるくて遠ざけがちな AIDL もさらっと使っており、練度が高い。
こういう低レイヤのコードは傾向としてぐちゃっとしがちなのに、極めて淡麗。こういう C++ なら書いて良いかもと思わせる品質。 気のせいだと思うけど。
最近 C++ 書いてる karino2 も Facebook のコードを褒めてた気がしますが、読みどころのおすすめはありますか。