ライセンス問題へのFessの対応

ElasticsearchのライセンスがElastic LicenseとSSPLのデュアルライセンスになるということで、Fessへの影響について考えてみます。(別に私は法律家ではないので、私の理解が完全に正しいかは置いておいて…)

まず、Fessの利用者観点から考えると、ほぼすべての利用者は気にすることはない話かなと思います。サービスプロパイダで利用者にElasticsearchまで触れるようにしてしまっているとかのケースは検討だが必要だと思いますが、Fessの利用者ではこの可能性はほぼないのかなと思います。

次に、Fessを作るという開発者の観点から考えます。まずは前提として、Fess自体は今まで同様にApache Licenseを維持するということを前提に話を進めていきます。としたときに、現状ではいくつか課題があるかなと考えています。

  1. elasticsearch-moduleでMaven Centralに置けない
  2. elasticsearch-cluster-runnerが作れない
  3. Elasticsearchのコア機能の参照

まずは、今まで、いくつかのelasticsearchのJarファイルがMaven Centralに置かれていないので、Apacheライセンスだからelasticsearch-moduleでアップロードしていたのですが、ライセンス変更により、できるのかが怪しくなりました…(怪しいので、やらない)。

そして、それらのJarファイルがMaven Centralに置けないと、elasticsearch-cluster-runnerが作れなくなります。elasticsearch-cluster-runnerはFessで組み込みElasticsearchを動かしたり、ElasticsearchのAPIを使えるようにしてくれています。なので、これが使えなくなるとFessも作れない感じです。

ということに加えて、FessはTransportClient時代からElasticsearch APIを内部的に結構使っていたりするので、コードレベルでは依存度は高い感じで、SSPLのようなGPLから派生したライセンスだと、Fess自体もSSPLに変更しないと厳しい感じだと思います。

という感じで、開発者観点から考えると、わかっている範囲でも厳しい感じです。なので、ここ数日、どのように対応するかを検討していました。Solrに戻ることも案としては検討したのですが、結構な工数になり、短期では解決できなそうなので、現時点では

  1. elasticsearch 7.10.2をフォークして、デフォルトの検索エンジンとして利用する
  2. 利用者は、デフォルトの検索エンジン または elasticsearchを選択して利用する
  3. elasticsearchプラグインの依存度を減らす

を軸に変更して、Apacheライセンスを維持することを考えています。elasticsearchはフォークした後は、最新のElasticsearchとインターフェースを追随する実装は必要な気はするので、Elasticsearchの外部仕様をもとにFessで必要な機能だけは対応しようかなとは思っています。(AWSのOpen Distroがもっと頑張ってくれていれば、それをベースにとも考えたのですが、そんな感じでなくて、Open Distroも消えるのではないかなという気もしたので…)

あとは、Elasticsearchプラグインの依存を減らしてメンテ工数を下げていこうとも考えています。プラグインの依存度が下がれば、SaaSのelasticsearchとかも使えるようになる可能性もふえますし。

という感じで進んでいくと思うので、Fess 13.11から変わる予定で考えています。

eckctl

ElasticsearchをKubernetes上で便利に使えるものとして、Elastic Cloud on Kubernetes(ECK)があるけど、ローカル環境でも手軽にKubernetesクラスタを作って、そこでECKを動かせるようにしたいな、ということで、eckctlにまとめてみました。

手軽にKubernetesクラスタも作る必要があるので、eckctlではデフォルトでkindを利用することにしてます。なので、

$ ./eckctl create

とすると、ローカル環境にKubernetesクラスタができて、そこにECKを入れて、Elasticsearchクラスタができます。

サービス経由でアクセスするか、ポートフォワーディングで、

$ ./eckctl proxy

をして、別ターミナルで

$ ./eckctl curl https://localhost:9200/

みたいにするとElasticsearchのクラスタにアクセスできます。ECKのElasticsearchにはパスワードがかかっているので、eckctl経由にすることで、パスワードを付加してアクセスしています。

あとは、使い終わったら

$ ./eckctl delete

すれば、きれいに削除することができます。

使いながら、もう少し便利にしていこうかとは思いますが(ドキュメントを含めて…)、別にkindに依存しているわけではないので、そのうち、AWSやGCPにもデプロイできるようにしたいなとも思いますが、そこまで時間がないような気も…。とりあえず、FessのK8s対応が保留になっているので、eckctlベースに対応を進められないかなと考えています。

Fess 13.10.2のリリース

Fess 13.10.2をリリースしました。細々とした修正をしたリリースになります。

まず、#2507の話で、Tomcat 9.0.41に上げました。13.10.0のリリースのときに上げておきたかったのですが、依存関係のエラーになったので見送っていたのですが、見直したところ、今までがtomcat-jasperを使っていたのが良くなかったようで、組み込みTomcatなので、tomcat-embed-jasperに置き換えたら解決しました…。という感じで、正しい依存関係になった感じです。

次に、#2508では、FessでGCログを出すようにしていますが、ローテーションして保存しているファイルが結構、多すぎる感じがするので、減らしました。過去分は5ファイルくらい残っていれば十分かなと…。今まで多すぎた感があった。

#2510はMicrosoft系のシステムだと、大文字小文字の区別がゆるいシステムがあったりするので、それに対応するためにAzureから得られる権限情報を小文字にする設定を追加しました。デフォルトは無効になっているので、今までとデフォルトの動作は変わらないです。

#2511はラベルのログメッセージが適用されたかがわかりにくかったので、修正しました。

#2512は、前回のリリースあたりで、検索クエリーにファジーを加えましたが、prefix_lengthやtranspositionsとかのパラメータを指定できなかったので、一通り設定できるようにしました。ついでに、min.lengthを-1にすれば、ファジークエリーを無効にすることもできるようにしました。

あとは、#2513では、検索結果に緑色の文字列としているサイト情報部分の文字列の取得の仕方を改善しました。siteフィールドから値を取っているつもりだったのですが、検索結果の表示時にURLから生成する状態になっていたので、siteフィールドに値がある場合はそれを表示して、なければ、URLから生成にしました。

これら以外には、fess-crawlerもバージョンを上げたので、jcifs-ngから取り込んだ修正が入ったくらいです。いつもはelasticsearchがリリースされてからリリースするのですが、商用案件がいくつかあって、このリリースを使いたいというのもあり、elasticsearchのリリースを待たずにリリースしました。

今回は、修正内容について、コメントしてみました。時間があれば、次回もコメントしたいところではありますが、忙しければしないかも…。そんな感じではありますが、何かあれば、フォーラムをご利用ください。