こんにちは、かとじゅんです。
『Chatwork Product Day 2022』に関連してブログを書こうということで、Akkaのプラグインの改善などをテーマに記事を書こうと思ったのですが、Akkaのライセンス変更が界隈ではちょっとしたニュースになりました。「Chatworkさんはどうするの?」とよく聞かれるので、Chatwork社での今後の方針について簡単にまとめてみたいと思います。
Akkaのライセンス変更
Akka 2.7 から Apache License Version 2.0 から Business Source License (BSL) v1.1 に変わりました。BSLはMariaDBでも採用されているライセンスです。
The new license for Akka is the Business Source License (BSL) v1.1, with an additional usage grant to cover some open source usage of Akka, such as part of the Play Framework. The BSL was created by David Axmark and Michael Widenius and has been adopted by MariaDB, Cockroach Labs, Sentry, Materialized, and others.
非プロダクション環境の開発では無償で使用できますが、本番環境での稼働にはLightbend社の有償ラインセンスが必要になります。(ただし、年間売上US $25 million以下は無償)
The BSL is a “Source Available” license that freely allows using the code for development and other non-production work such as testing. Production use of the software requires a commercial license from Lightbend. The commercial license will be available at no charge for early-stage companies (less than US $25 million in annual revenue). By enabling early-stage companies to use Akka in production for free, we hope to continue to foster the innovation synonymous with the startup adoption of Akka.
詳しいことはFAQをみればよさそう。
以下のLightbend CTO Jonas Bonérさん曰く、 2.6は2023年9月までセキュリティアップデートが提供される模様。
2.6.x maintenance proposal - #2 by jboner - Akka - Discussion Forum for Akka Platform technologies
いくら掛かるのか
価格がどうなるかというと Akka Standard で年間で$1995USD。
Akka - Build Reactive Microservices | Lightbend
ライセンス変更発表時はCore is defined as a thread / vCore / vCPU
と書かれたのですが、今(2022/10/4現在)みたらCore is defined as a hardware core / vCore / vCPU
になっていますね…。JDBCの固定スレッドプールでは同時接続数分確保することが多いので、スレッド単位課金はしゃれにならないなぁーと思っていたのですが、なくなったようです…。よかった。
Akka2.6のフォーク Pekko
Apache Flinkでは、ApacheライセンスであるAkka2.6 のフォークが Apache プロジェクトとして認められるように動いているとのことでしたが、すごい勢いで進んでいて、Pekko(ペコちゃんのペコではなく、ペックオーと呼ぶっぽい)という名前でApache Incubatorにサブミットされたそうです。
[FLINK-29281] Replace Akka - ASF JIRA
もしかすると依存関係とインポートだけ書き換えると乗り換えできるのではと思ったりしてます。Akka2.6のセキュリティアップデートの期限までにPekkoのファーストリリースがでればいいのですが…。
とはいえ、フォークしてApache Incubatorになってもうまくいく保証はないですね…。依存度が少ないうちにAkkaから撤退するという選択肢も普通にあると思います。
Chatwork社の対応方針
というわけで、本題です。ウチではどうすんの?ということで整理しました。Akka独自の機能を必要とするか否かが重要な判断基準になりそうです。
既存システム
弊社のScalaを使ったマイクロサービスのほとんどでAkkaが利用されています。改めて確認すると、それらのシステムでAkka独自機能を使わないと実現できない機能というのはありませんでした。
正直言って、Pekkoが使えるのであれば、そちらを使いたいというのはあります。それが期待できないなら以下のような方針になると思います。
- Akkaを切り離す工数が大きくならないシステムでは、他のスタックへ移行する
- akka-httpを使っているだけのシステムは移行が容易だと思われる
- が、akka-actor, akka-streamなどを使っているシステムは簡単には脱Akkaしにくいと思われる
- Akkaを切り離す工数が大きくなるシステムでは、今回の商用ライセンスを契約する方向
次期システム
絶賛開発中の次期システムでは、CQRS/Event SourcingのためにAkkaの独自機能(akka-cluster, akka-persistence)などを前提に設計しているので、商用ライセンスの契約が前提となると思います。 今のところakka-clusterやakka-persistenceなどはコマンド側のみで採用し、Read Model UpdaterやRead APIはRustを前提に考えていたので、そこまで多いライセンス数にはならない予定です。
短期的には(2〜3年?)akka-clusterから技術変更することはないと考えています。5年以降先はおそらく現状の技術スタックをそのまま継続して利用しているかもわかりません。
まとめ
今回はAkkaが問題になりましたが、他のOSSでも起きる可能性はゼロではないと思います。OSSの開発元の企業の方針転換によってOSSのライセンス変更が起きないとは言い切れません。OSS利用者として諸行無常を感じざるを得ませんが、営利企業ならこういう意思決定は当然ありえるでしょう。
いずれにしてもOSS開発の好循環をどう作って維持するのかという問題がありますね。開発母体が営利の組織なのか、非営利なのかで考え方が変わってきそうです。そういう意味では、Pekkoのように、ある程度コミュニティ規模があるOSSはApache Foundationのような非営利団体が管理するのが妥当なのかもしれません。
というわけで、まだはっきりしない部分も多いので情報を集めながら変化に対応していきたいと思っています。そして、Lightbend社やAkkaの関係者の方々には敬意を払いつつも、Pekkoなどのコミュニティーに対してもChatwork社として何らかの支援ができないか真面目に検討したいと思っています。
前述した弊社 Chatwork が主催するオンラインカンファレンス『Chatwork Product Day 2022』は、2022/10/07(金) に開催します。 興味のある方はぜひ、参加してください。