FacebookのOSSとかFB内部版とかについてメモ
FacebookのOSSについてRelayとかReact Nativeは割とIssueなど見たりしてきた。 その結果、それらにはどうやらFB内部版とOSS版があるんだなあといつしか思うようになった。
そう思うに至った会話すべてをあげつらうことはできないけど、いくつか記憶に残ってたり調べたりした結果出てきたものをメモしておこうと思った次第。
React NativeはOSSのものをそのままFacebook内部で使っているわけではない(※)
We use different Image and caching modules internally - - https://github.com/facebook/react-native/issues/9581#issuecomment-287834859
※と書いたのは、下記の記事には「OSSと全く同じものを使っている」と書いてあったりするから。ただ日付としては上記のIssueの方が新しい。全く同じものを使っていたらImageモジュールは別なの使っているとは言わないから、やっぱ別なのかなって感じ。
Facebook engineers use the exact same React Native code you see on GitHub; we don’t have a fork of the codebase. -- React Native: A year in review - Facebook Engineering
RelayもOSS版とFacebook内部版に違いがあるぽい
there is an issue with the OSS compiler -- https://github.com/facebook/relay/issues/1656#issuecomment-303007406
Relay Classicの時は割と顕著だった:
Relay was built to support server-side rendering, and we are doing so internally at Facebook. @voideanvalue gives a great overview of how that works. However, the necessary hooks and APIs are not exposed in the OSS release. --https://github.com/facebook/relay/issues/136#issue-102433255
We have one failing test in OSS which doesn't fail internally. -- Fix OSS-only test failure in RelayGraphQLMutation · Issue #1065 · facebook/relay · GitHub
Relay、Classicの時すでに数々の欠けていた機能、SSRやオフライン対応、サブスクリプションがFB内部の実装では使えていたぽい。これを見ると"in OSS"と新機能欄に書かれている。
FBにはでかいモノレポがある
So this is due to Facebook internal infrastructure. The code they have internally (React, React Native, Metro) sits in a big mono repository. That said, all packages are always coupled to its master version.
— Mike Grabowski (@grabbou) 2018年4月4日
Github, on the other hand, is always pinned to a specific version.
Facebook中の人によるとレポジトリ2つしかないぽい
90%+ of devs work in one of two repos (one with all our web code, one with most everything else)
— Sophie Alpert (@sophiebits) 2018年6月6日
まあこんなツールも作ってるしね
他
FWIW at Facebook we don’t have these problems because there’s a single giant monorepo. Of course that only works if you build a lot of tooling around it.
— Dan Abramov (@dan_abramov) 2018年5月15日
感想
React Nativeでは画像のキャッシュ調べてたときは「その内部で使われてるモジュール公開してもらえると嬉しいです」と思ったり「使ってないからメンテされないのか」みたいな納得をした。Relayについては client schema はやはり内部的には困ってないのかあ(内部では使えてる実装があるから)みたいなことを思った。
最後に
詳しい方や、OSS版と内部版の関係について書かれているドキュメントを知っている方がいれば教えてもらえたら嬉しいです。