Crunchy DataのPostgreSQL OperatorのPGOってOSSとは呼べないよねという話。

PGOとは

PGOは、Crunchy Data社が開発したPostgreSQL Operator。 要はKubernetes上でPostgreSQLクラスタを管理するツール。 PostgresClusterというCustom ResourceをKubernetesに登録すると、その内容に従ってPostgreSQLのPodをデプロイし、クラスタを構築してくれる。

ソースはGitHubで公開されていて、ライセンスはApache License 2.0となっている。

SRA OSS Tech Blogで紹介されていたり、Cloud Native Database MeetupでOSSとして紹介されていたり、@ITの記事でも有力なPostgreSQL OperatorのOSSとして紹介されている。

PGOのライセンス

確かに、PGOそれ自体はソースが公開されていて、明確にApache License 2.0と書いてある。 けど、問題なのは、PGOがデプロイするPostgreSQLクラスタに使われるコンテナイメージがOSSじゃない、ということ。

PGOがデプロイするコンテナイメージはいくつもあるけど、その一つがcrunchy-postgres。crunchy-postgresには、Crunchy Dataのコンテナレジストリで配布されているのと、Docker Hubにおいてあるものがある。 いずれの配布元もよくみると、Crunchy Data Developer ProgramのTerms of Useに従って使ってね、と書いてある。

Crunchy Data Developer ProgramのTerms of Useには、このソフトウェアは、Crunchy Data Support Subscriptionを買うか、書面での同意を交わさない限り、プロダクション環境での使用は意図に反すると書いてある。

For avoidance of confusion, the Crunchy Developer Software without an active Crunchy Data Support Subscription or other signed written agreement with Crunchy Data are not intended for: using the services provided under the Program (or any part of the services) for a production environment, production applications or with production data,

明確にダメ(may not)とは書いてなくて、意図してない(not intended)と書いてあって若干あいまいだけど、Crunchy Data Support Subscriptionを買わずにプロダクション環境で使ってはダメということだろう。 これは、オープンソースの定義の6条「利用する分野(fields of endeavor)に対する差別の禁止」に明確に反しているので、crunchy-postgresはOSSではない。 まあそもそもcrunchy-postgresのソースは公開されてないっぽいのでその時点でOSSじゃないけど。 (Crunchy Container SuiteというすごくそれっぽいソースはApache License 2.0で公開されてるけど、crunchy-postgresとかのコンテナイメージを使うツールやサンプルが置かれてるだけで、コンテナイメージのソースはない。)

PGOはPostgreSQLクラスタをデプロイして初めて価値を成すソフトウェアだし、デプロイされるcrunchy-postgresは素のPostgreSQLだけでなくPatroniとかを詰め込んでPGOから管理される用にカスタマイズされたコンテナイメージなので、crunchy-postgresはPGOの一部と考えるのが自然。 そうなると、PGOがApache License 2.0のOSSというのは無理がある。

実際に、Hacker Newsのとあるスレッドに、PGOをOSSだと思って使っていたら、Crunchy Dataのセールスからサブスクリプションを買わないと使っちゃダメと言われたひとがたくさんいる、という情報が書かれている。

number of customers who started using Crunchy Kubernetes Operator based solution thinking it is Open Source and were contacted by Crunchy Sales team to indicate they need subscription to use it.

ついでに、crunchy-postgresとかのコンテナイメージの配布元にはDeveloper Program Data Collection Noticeというのも書いてあって、様々なメトリクスを取得してCrunchy Dataに送るのでよろしくとなっている。 動作中にメトリクスを集めてどこかに送信するというのはWindowsとかもやるし、OSSでもたまにあるけど、知っている限りではオプトアウトできるものばかりだったと思う。 crunchy-postgresにはオプトアウトするオプションはなさそう。 Personal Dataは送らないよとは書いてあるけど、若干気持ち悪い。

PGOの代わり

PGOは筆者が調べた限り、一番多機能でドキュメントもしっかりしてていいので、納得してお金払って使う分には全然ありだと思うが、上記のようなだまし討ちっぽいビジネスをしてるところは気にかかる。 真のOSSで、オプションとして有償サポートを明示しているような善良なPostgreSQLオペレータはほかにあるので、そっちを選んだほうが気持ちよく使えそうではある。

例えばZalandoのPostgres Operatorは、モニタリング以外はPGOと遜色ない多機能で、PGOと同様のPatroniを使ったアーキテクチャなので、PGOの代替として有力。 そもそもPatroniはZalandoが開発したものなので、こっちが本家本元と言える。

他にも、PGOのだまし討ちに引っかかった人々を救うために開発されたPercona Operator for PostgreSQLとか、graduated CNCFプロジェクトのCloudNativePGとか、新進気鋭のStackGresとか、PostgreSQL以外のDBMSにも対応しているKubeDBとか、シンプル目なKubegresとか、OSSで無料でプロダクションに使えるのは色々あるので、PGOを敢えて使う必要があるかはよく考えるべき。