hnwの日記

PHPのJSONライセンス問題が一応決着

2012年頃に、PHPJSONエクステンションのソースコード中に次のようなライセンス文言が含まれていると話題になりました。

The Software shall be used for Good, not Evil.


これはJSONライセンスと呼ばれるライセンスの一文です。「このソフトウェアを良いことに使うのはいいけど、悪いことには使っちゃダメ」といったところでしょうか。


これはフリーソフトウェアの定義に反しており*1、各種LinuxディストリビューションJSONエクステンションを配布できないことになるため、ちょっとした騒動になったというわけです。


本稿ではこのJSONライセンスへの対応が現在どうなっているかを紹介します。

各種Linuxディストリビューションの対応

PHPJSONエクステンションはjson_encode()やjson_decode()などの重要な関数を提供するエクステンションですから、ディストリビューションとしても提供しないわけにはいきません。


多くのディストリビューションでは、標準のJSONエクステンションを削除し、代わりにpecl-json-cという別実装をphp-pecl-jsoncやphp5-jsonといったパッケージ名で提供しています。


このエクステンションは、この問題が発生したあとでPHPコミッターであるRemi Colletさんが開発したもので、JSON-Cのラッパーとして実装されています。


ただ、UTF-8以外の文字の取り扱いが標準のJSONエクステンションと異なるなど、ユーザー目線では不便も残っている状況のようです。pecl-json-cが気に入らなくて標準エクステンションを自前ビルドして使っている人もいるようですね。


ちなみに、自分の手元でどちらのエクステンションが使われているかはphpinfo()でわかります。JSONエクステンションの情報に「JSON-C version (bundled)」という表記があればpecl-json-c版です。

PHP本体の対応

この問題は「PHP :: Bug #63520 :: JSON extension includes a problematic license statement」でPHP本体のバグレポートとしても議論されていましたが、ずっと膠着状態が続いていました。


また、「PHP RFC: Switch from json extension to jsonc」というRFCPHP標準のJSONエクステンションをpecl-json-cに差し替えようという提案もされましたが、結局議論がまとまらなかったのか、最新のPHP 5.6.8でもライセンス的に問題のあるコードが残っています。


一方で、PHP7ではjsondが標準JSONエクステンションとして採用されました。これはJakub Zelenka(@bukka)さんがre2cとbisonで新規実装したものです。


PHP7からはライセンス問題がなくなるよ!ということでPHP本体としても解決といったところでしょうか。上記バグレポートもjsondのPHP7への取り込みをもってcloseされています。

*1:https://www.gnu.org/philosophy/free-sw.en.html の freedom 0「The freedom to run the program as you wish, for any purpose」に反している