批評:オープンソースソフトウェアの総所有コストに関するガイドライン

この記事はヨーロッパを中心に Qt のコンサルティングを行っている Burkhard Stubert が 2022/05/17 に公開した Critique: Guide to the Total Cost of Ownership of Open-Source Software というブログ記事を、彼の許可を得て日本語に翻訳したものになります。


(The Qt Company 社の) Peter Schneider による Guide to the Total Cost of Ownership of Open-Source Software というブログ記事では、みなさんが LGPL 版の Qt ではなく商用ライセンスを購入すべき理由を、様々な角度から提示しています。彼の営業仲間の多くと同じように、彼が Qt の商用版を推し進めるために Qt の LGPL 版の悪口を言うという皮肉を私はだまって見過ごすことはできませんでした。Qt の LGPL 版と商用版はソースコード的には同じものなのです。

Qt の LGPLv3 版が商用版よりもコストがかかるわけではない理由

「The Myth of Open Source is Free」という章で Schneider は4つの「ガイドライン」の概略を示し、メインの主張を行っています(重要)。

While the use of commercial software includes little hidden costs over the product’s lifetime, several additional costs must be considered when using open-source libraries.

(商用版のソフトウェアにも製品の寿命を通すと見えないコストが少しだけ存在しますが、オープンソースのライブラリを使用した際には様々な追加のコストが考えられます。) ということで以下の4つがあげられています
1. Fixing bugs yourself […]
2. Implementing the open-source obligations […]
3. Implementing legal checks […]
4. Performing regular license compliance checks […]

Peter Schneider

なんというか、おめでたいですね。現実的には組み込み機器を開発する際には LGPL 版を選択しても商用版を選択してもコストはそれほど変わりません。今回は様々な業界で広く普及している組み込み Linux のシステム開発に焦点を当てて彼の主張の批評を行いたいと思いますが、同様のことが RTOS やベアメタルを採用している組み込み機器や PC 向けのアプリケーション、モバイルアプリでも言えるでしょう。

ライセンスのコンプライアンスの話をする際には、1つのライブラリだけではなくシステム全体について考える必要があります。標準的な組み込み Linux のシステムにはおよそ300〜500のパッケージが含まれ、様々なツールやライブラリや設定ファイルなどが提供されています。それらの大多数は何かしらの FOSS ライセンス(MIT、BSD、LGPL、GPL など)もしくはこれらを複数組み合わせた形で提供されています。商用ライセンスのものはほんの一部です。Qt はそのいい例でしょう。ちなみに Qt は商用ライセンス、LGPL v3、GPL v3 の3種類のライセンスから選択が可能です。

組み込み機器を出荷する際には 企業は FOSS か商用かに関わらず、すべてのパッケージのライセンスの義務に従わなければいけません。ライセンスの準拠の確認の負担は必ず負う必要があります。 Qt の商用ライセンスのコストはそこに追加される形で必要になります。

それでは Schneider の「ガイドライン」を1つ1つ反論していきましょう。

Fixing bugs yourself(自分でバグを直す件)

Fixing bugs takes time. Every software has bugs, whether it uses open source or not. The question is only who fixes the bug. If one buys commercially supported software libraries, the code maintainer does the bug fixing. If one uses open-source, then one can hope that the bug is fixed in the open-source community by somebody else.

(バグの修正には時間がかかります。オープンソースにしろそうではないにしろ、ソフトウェアにはバグはつきものです。問題は、つまり、誰がそれを修正するかです。商用ライセンスのソフトウェアのライブラリを購入されている方は、コードのメンテナーがバグの修正を行います。オープンソース版を利用している場合は、オープンソースコミュニティの誰かがそのバグを修正するのを祈る形になります。)

Peter Schneider

Schneider によると、組み込み機器を開発している企業にとっては、フリーのオープンソースソフトウェア(FOSS)は商用のものに比べてバグ修正のコストが高いということになります。これは控えめに言っても議論の余地があるでしょう。一般的な話ですが、FOSS の開発者は驚くほど反応がいいです。数時間でバグが修正されることもたくさん経験しました。また、FOSS の場合は致命的な問題にあたるケースがとても少ないです。Qt よりは確実に少ないと言えます。

Qt の商用版は、The Qt Company が私たちにとって重要なバグを必ず修正してくれるとは限りません。Qt にお金を払っているお客さんであっても自分たちでバグを修正したり、そのバグの修正を依頼できる人をよく探しています。 幸運なことに、Qt の開発はオープンソースとして行われているため、これは実現可能なことです。同様のことが、その他のすべてのオープンソースのソフトウェアに対しても言えます。我々は、商用ソフトウェアのベンダの言いなりになる必要はありません。これこそが本当の意味での自由であり、そこには計りしれない価値があります。

これまでの話は、そんなに大事なことではありません。一番大事なポイントは、Schneider がリンゴと馬の比較を行っているということです。彼は総所有コストについて見てみようと言っています。それであれば、組み込み Linux のシステム全体を見るべきです。もしそうしていれば、バグの修正の大変さは Qt の商用版でも LGPL v3 版でも変わらないことが発見できたでしょう。Qt の LGPL v3 版と Qt の商用版のソースコードは同じなのです。Qt の商用版と LGPL v3 版を比較するのは意味がありません。。。よね?

Implementing the open-source obligations(オープンソースの義務に従う)

Schneider はオープンソースライセンスの義務については煙に巻いています。彼は「オープンソースのソフトウェアの使用に関する典型的な義務」を4つ例にあげていますが、この4つはあくまでもLGPL v3 で「コンシューマ製品」を開発する際の典型であって、(例えばテレビやセットトップボックス、家電などの)民生機器用のアプリケーションを LGPL v3 版の Qt で開発した場合の話です。彼は話の中に GPL に関する脅しも混入しています。 それでは彼の Qt の LGPL v3 版を使う事に対する主張を1つ1つ順番に確認していきましょう。

  1. Qt の LGPL v3 を利用したアプリケーションはユーザーインターフェース上に Qt の LGPL v3 版を利用している旨を表示し(LGPLv3 (4a))、LGPL v3 と GPL v3 のライセンスとコピーライトの文章を表示しないといけません(LGPLv3 (4c))。
    私が過去に行った Using Qt under LGPLv3 という発表(のスライド9〜11)で、実際の見栄えを紹介しました。この実装には半日かかりました。処理としては、ライセンスとコピーライトの文章をメニュー階層を反映させたディレクトリ構造の中のファイルから読み込んでいます。
  2. アプリケーションをリリースする企業は、利用している Qt のライブラリのソースコードをウェブサーバーからダウンロードや DVD などの形で提供しなければなりません。download.qt.io のリンクを提供するだけでは不十分です。ここで Schneider はなぜか LGPL から GPL へ話をすり変えています(重要)「アプリケーションのユーザーはオープンソースのソースコードをダウンロードし調査することが可能で、オープンソースのライセンスによっては 自分で書いたソースコードもその対象になりえます
    ここははっきりとさせましょう。私たちは、もしアプリケーションが GPL ライセンスで提供されているなんらかのライブラリにリンクしている場合にのみプロプラエタリなアプリケーションのソースコードを公開する必要があります。Qt の LGPL 版でも商用版でも条件は同じです。これは、Qt の LGPL v3 を使っているアプリケーションのソースコードは公開しなくてよい とも言えます。
  3. Yocto や Buildroot はライセンスの文章やコピーライトの文章とソースコードがパッケージごとにディレクトリで管理されています。組み込み機器のユーザーに提供すべきコンプライアンスのアーカイブはこのディレクトリ構成から生成することができます。このアーカイブにはライセンスの義務を満たすための情報が含まれています。このディレクトリ構成を利用することで、ライセンスとコピーライトの本文を画面上に表示したり、(エクセル形式などに)一覧をまとめることも可能です。この作業を自動化するには1日程度あれば十分で、それをしてしまえば、リリースごとに必要となる作業はすべて自動で行うことができます。
  4. Schneider の反 TiVo 化条項の説明はこう読める(重要)「御社の製品のユーザーは デバイス上のオープンソースライブラリを修正できなければならない」これはスマホやテレビ、セットトップボックス、家電、車、民生用の医療機器のような「ユーザー製品」もしくは B2C の製品 (GPLv3 (6)) に対してのみ正しいと言えます。B2B の製品に関してはこれには当たりません (過去に私が行った発表 Using Qt under LGPLv3 の12ページを参照してください)。トラクターやショベルカー、トラック、プロ向けのアプリケーション、病院や医療機関などで利用される医療機器など B2B 製品の場合は、このインストール情報(改変した Qt をビルドし、実機にインストールし、実行するための情報)を提供する必要はありません。これは、産業機器の製造メーカーの大多数が Qt の LGPL v3 版を選択している理由でもあります。
    インストール情報の提供自体は難しくはありません。既存のもの (私が過去に行った発表 Using Qt under LGPLv3 の 13-14 ページ)を流用することができます。ユーザーは、アプリケーション開発者が利用する SDK と同じものを利用することが可能です。自分の実機を OTA や USB 接続のような一般的な方法でアップデートすることができます。ユーザーによってビルドとインストールが行われた Qt のライブラリを端末が認識した際に、製品の保証を止めたり、道路上を走行する車の許可を取り消したりすることも可能です。世界的に有名な車と家電メーカーのいくつかは実際に Qt の LGPL v3 版で問題なく製品を出荷しています。

1番目の義務は LGPL v3 特有のものです。4番目は GPL v3 および LGPL v3 とコンシューマ製品(B2B の製品ではないもの)に限ったものです。2番目のソースコードの開示については(MIT や BSD のような)パーミッシブ・ライセンスの場合には該当しません。Qt のライブラリは組み込み Linux のシステムのなかでほぼ唯一 LGPL v3 のみで利用可能なものでしょう。その他の LGPL のライブラリは LGPL2 (version 2 only)、LGPL2+ (version 2 or later)、LGPL2.1 (version 2.1 only)、 LGPL2.1+ (version 2.1 or later)で提供されているため、上記の義務が発生するのは一般的な組み込み Linux システムでは 5% 未満のケースになります。

Qt の商用ライセンスには金銭的なもの以外にも独自の義務があります。一般的な Qt のライセンス契約には以下の規定があります。

  • Qt の商用ライセンスで開発されたアプリケーションは、LGPL 版で開発されたソフトウェアの使用や結合、協力、リンク、統合をしてはならない。例えば、商用版で開発されたアプリケーションは、LGPL v3 版のソフトウェアと Qt Remote Object や D-Bus、MQTT などで通信することも禁止されています。
  • Qt LGPL v3 版を利用したソフトウェアの開発に商用版を使用してはなりません。例えば、PC 上で商用の Qt SDK を利用してクロスコンパイルしたものを、LGPL v3 版の Qt が載っているデバイスで実行してはいけません。現行製品を Qt の商用版で開発し、次世代の製品を Qt の LGPL v3 版で開発するような場合には、開発者は Qt の商用版と LGPL v3 版の分離に気を遣う必要があります。あるリリースから次のリリースに移る際に、Qt の商用版から LGPL v3 版にスイッチすることは可能です。その際には、通常3〜5年有効である Qt のライセンス契約に従う必要があります。

Implementing legal checks(リーガルチェックの実施)

Schneider は無料のオープンソースのソフトウェアに対してのみ、費用をかけて弁護士にリーガルチェックをお願いする必要があると誘導しています。これは当然そうはならないでしょう。すべての責任のある会社は法務部門があり、商用ライセンスのチェックも行っています。私は、Qt のライセンス条項が少なくとも LGPL v3 や GPL v3 と同じくらい難しいということを知っています。私はこれまでその3つのライセンスの本文を何度も何度も読んでいます。

購買部では、価格の交渉が何度も繰り返されます。Qt のライセンスを購入した際には、四半期ごとにディストリビューションライセンス(ロイヤリティ)を支払い、製品の出荷台数を証明する必要があります。The Qt Company には、監査を行う権限まで保有しています。

自分自身のライセンスのコンプライアンス作業のために、過去に弁護士を2時間ほど雇ったことがあります。その弁護士には、(L)GPL v3 のインストール条項やその他の内容について、自分の理解を明確化してもらいました。ちなみに、FOSS ライセンスと知的財産権(IPR)が専門の弁護士の場合は日当が3000〜4000USD程度かかるようです。

これらをすべて総合すると、Qt の LGPL v3 版のリーガルチェックのコストは Qt の商用版に比べて高いということはないでしょう。Qt 以外のパッケージのライセンスの確認を弁護士にお願いしている場合には、Qt が LGPL v3 版であろうと商用版であろうとその費用は発生します。

Performing regular license compliance checks(定期的なライセンスのコンプライアンスチェックの実施)

Schneider は、ここでもまた Qt の商用版を選択した際には 300〜500 ある組み込み Linux システムのパッケージのライセンスチェックをあたかも行わないフリをしています。何度同じ事を繰り返し言っても、これはナンセンスです。Qt の商用版を使っていたとしても

  • 自社開発のアプリケーションが直接もしくは間接的にリンクしている GPL v3 のライブラリがないかの確認が必要となります
  • EPL(Eclipse Plugin Library)のライブラリがリンクされている場合には、LGPL2+ や Apache 2.0 、MPL 2.0 と一緒になっていないかの確認が必要となります
  • 商用にせよ FOSS にせよ、すべてのパッケージのライセンスの義務に従う必要があります

私には The Qt Copmany が Qt の商用ユーザーに対してサードパーティーのライブラリによるライセンス違反の保証を行っているかどうかはわかりません。自動のライセンスチェッカーを販売している会社でさえそれは行っていないことです。TÜV Süd でさえそういうことはしていません。つまり、誰もそんなことはしていないということです。細部を見落とすのはとても簡単なことです。例えば、あるマルチメディアのパッケージでは、ビルド時の選択によって GPL のコードが含まれることがあります。多くの BSP では、その設定が有効で、 GPL のコードが含まれている状態です。

結論

Schneider は4つの視点からオープンソースソフトウェアを使用する際の総所有コストを見積り、5年間で 135,498 USD になるという試算を行いました。彼は Qt の商用ライセンスをそこに加えることを当然のように忘れました。彼はシステム全体を見てはおらず、また、比較のために設定したゴールポストを何度も動かしているので、この結果にはなにも意味はありません。彼の記事は全体的を通して Qt の LGPL v3 版を Qt の商用版に対して悪く/高く見せるための薄っぺらい宣伝です。皮肉な事に、Qt の LGPL v3 版のソースコードは Qt の商用版と共有されています。

私は、副業で組み込み Linux システムのライセンスのコンプライアンスチェックを行っています。1度きりの場合には、25,000 EUR くらいの費用をいただいています。成果物として、300〜500あるパッケージすべてに対して、すべてのライセンスを満たすための、ライセンスの文章と、コピーライトのお知らせと、ソースコードを提供しています。500以上のパッケージに対するコンプライアンス結果をまとめたデータベースも提供しています。さらに、ライセンスを製品のユーザーインターフェース上に表示するための QML のソースコードも提供しています。それに加えて、自社でコンプライアンスチェックを行うためのトレーニングも実施しています。

私が行った初回のコンプライアンスチェックをベースに、アップデートをする必要があります。ひどい場合には、1度に3〜5個のパッケージのライセンスが変更されていたこともありますが、そういった確認は半日で行える仕組みになっています。年に4回リリースがあるとしても、1年間に必要な工数は2人日です。時給を 100 EUR と仮定すると、年間で 1,600 EUR になり、5年間に換算してみると 33,000 EUR 相当になります。

ちなみに、この 33,000 EUR は Qt の商用版を利用しても LGPL v3 版を利用しても発生する費用で、Qt の商用版を利用する場合はそれ自体のコストが上乗せされます。開発者が3名で、製品の出荷台数が年間1000個くらいの規模の場合、年間の予算は 100,000 EUR 以上になるでしょう(詳細は私の過去の発表の Using Qt 5.15 and Qt 6 under LGPLv3 をご覧ください)。