この件を知った発端
QiitaでECMAScriptの最新事情を眺めていたら、Reactで有名なFacebookがやらかしてOSSコミュニティで村八分になっているとのこと。
どういうことか
実際にgoogleで調べてみたらその関連の記事が出ること出ること。
Facebookの特許条項付きBSDライセンスが炎上している件について
記事を上記より引用すると、
ことの始まりは、Apache Software Foundation(以下、ASF)という著名OSSプロジェクトを多数保有する非営利団体が、Facebookが自社OSSに付加している独自ライセンス Facebook BSD+Patents license を「Category-X」リスト(禁忌リスト)に追加したことだ。
情報自体は先月中旬のため非常に新しいお話である。
どういうことかというと、Webサーバーで最も多く使用されるApacheの親元が定めるOSSの非営利団体にFacebookのOSSを「やってはいけないことをしたからうちのOSSを使うプロジェクトでは使ってはいけない」という認定をしたということ。
これに対しFacebookは8月18日に自社のブログにおいて「方針を変えない」と発表したため、より大きな反響が広がり、炎上案件にまでなっている。
Reactを簡単に。
Reactは2011年とか2012年のフレームワーク黎明期においてなされた革新的な仕組みを持つフロントエンド技術である。MVCにおけるVの部分のコンポーネントを重点的に作るもので、ViewとModelを分けないことが逆にコード圧縮を可能にしたりより柔軟な記述を可能にし、よりプログラマブルなコードを書いている人がなじみやすい形式となっている。WebのDOMに関する仕組みに対しての不便な部分の多くが改善されることから大きく広まり、今や世界最大のフロントエンドのフレームワークとなっている。
React NativeはWeb以外のプラットフォームにおいても活用できるように作られ、ReduxはFluxの概念を含んでReactにWebの統合フレームワークを提供した。
ASFに限ったら
ASFのOSSはCategory-Xに属する対象に依存するようなプロジェクトを作れない。
例えばCordovaなどにReactなどを用いる前提は不可能ということになる。
仮に世界で一番多く使われているHTTPdサーバーを例にした場合。
この件では、別にApacheHTTPdサーバーの上でreact使ったWebアプリ動かしてはいけないということではない。
だが、Apache HTTPdがreactNativeやらreduxに依存するモジュール、のような組み合わせプロジェクトを作ったらアウトということである。
そういったわかりやすい形でのアウトならともかく、もし知らず知らずにASFとFacebookのOSSを共存させて依存関係が作られるプロジェクトを作ってしまった場合が問題になる。
そんなことより大きな問題
「Facebook及びFacebookの関連会社を特許で訴訟した場合、ライセンスは破棄され、Facebookのコードを使う権利を失う」
つまりFacebookのOSSに関して何か特許違反があったから訴えると、FacebookのOSSを使う権利を失うということ。
大多数の個人や企業がFacebookと係争する案件を持っているはずがないので、その件自体に何が問題があるのかという話だが、逆に言えば「Facebookと競合する可能性のある企業はFacebookのOSSを使わなくなる」ということ。下請けとなった時にそのことが大きくのしかかる可能性がある。
飛び火してさまざまな企業でReactが大きな火種になる危険性をはらむ以上は使用をためらうものなのだ。
そのため、例えばGoogleやMicroSoftなどではReactを含むFacebookのOSS使用を禁止している。
このライセンスはOSSの定義に反する。
この事項を遵守した場合、オープンソースの定義における、特定の個人やグループへの制限をしてはいけないという項目に抵触する行為にあたる。
暴論ではあるが、つまりReactはオープンソースではない。
これからの対策。
- ReactなどのFacebook関連のOSSを採用しない。学ばない。
別に個人で使う分にはと思われがちだが、企業案件として使いにくい→収益を上げるためには使いにくいということであり、さらに使用することで被るデメリットが大きすぎる。
しかもこれはアンチReactな方とか競合フロントフレームワークの人間が持ち上げたとかそういう問題ではなく、Facebook自身が自ら招いたことである。
今から遅くない案件であれば、手を出さないに越したことはない。
また、今学んでいるのであればあくまで知識の片隅程度とし、すぐに他のフレームワークに学習移行することをお勧めする。 - すでに使われている場合は一時的な保守のみとし、将来的に撤退する。
少なくとも現行で走っている中で、問題が表面上にないのであればすぐにどうこうなる危険性はない。時間的猶予は十分にあるので、まずは目の前のシステムが問題なく稼働できるように努め、Facebookがより浸食を深める前に別システムへの移行を進めるようにする。 - 代替のフレームワークや互換性のあるライブラリの使用。
例えばjQueryを卒業する必要はない。
Reduxなどの統合フレームワークなら、VueやAureliaやemberやriotなどなどのライセンスクリーンかつ先進的なフレームワークが存在するのでそちらに移行するとよい。Angularは迷走している感はあるが、現行で動いているものがあるならそれを無理して移ることはない。
もしどうしてもReact的なコーディングをするのであれば、Preactという選択肢もある。