接触確認アプリ「COCOA」がMPL違反という誤解

厚生労働省の新型コロナウイルス接触確認アプリ「COCOA」が、ソースコードを公開しておらずライセンス違反であったという説が広がっている。これは誤解に基づくデマである。

ケータイWatchの誤報

厚労省の公式Twittterアカウントは9月1日、新型コロナウイルス接触確認アプリ「COCOA」のソースコードをGitHub上で公開したことを発表した。

これを報じたケータイWatchの記事で気になる一節があった。

 COCOAのベースとされているオープンソースプロジェクト「Covid19Radar」は、オープンソースライセンスであるMPLライセンスによって公開されているが、同ライセンスには改変内容の公開義務があり、COCOAがCovid19Radarをベースとしている場合は、これに基づいてCOCOA自身もソースコードを公開する必要があった。そのため、今回のソースコード公開はライセンス違反の解消が図られたとみられる。

つまり、今までCOCOAはライセンス違反の状態であったというのだが、これは全くの誤りである。そもそも事実を客観的に報じるニュース記事において、事実が確認されていない記者の主観を混ぜ込むのは客観報道の理念にも反する。

記事を書いた大泉勝彦(@_0_zero)氏にもメンションを飛ばしてみたが、解釈に困るリプライが一度あったのみで、根拠の提示や記事の修正は現在もされていない。記事に対するTwitterはてなブックマークでの反応もライセンス違反に言及したものが多く、もはや誤解は今更訂正不能なレベルで広がってしまった。

COCOAとCOVID-19Radarの違い

まずは2つの接触確認アプリ、COCOAとCOVID-19Radarの関係について簡単におさらいしよう。COVID-19Radarは有志によるオープンソースソフトウェア(OSS)プロジェクトで、その成果を元にしたのが厚労省のCOCOAである。

当初、COCOAへの批判や改善要望がCOVID-19Radarに殺到したこともあり、COVID-19RadarのREADME.ja.mdには次のような断り書きがされている。

「接触確認アプリは、厚労省の公式バージョンの一つのみ存在します。
こちらのGitHubは、厚労省の公式アプリのコードそのものではなく、公式アプリの元になっているオープンソースコードです。こちらのコードはコミュニティによってメンテナンスされており、issueやプルリクが公式アプリに反映されるとは限りません。」

ここで両者は別物であるという面が強調されたために、厚労省がCOVID-19Radarに何らかの非公開(プロプライエタリ)なコードを加えたものがCOCOAであるかのように捉えられている節がある。

しかし、現在までに厚労省はCOVID-19Radarに手を加えたという旨の発言はしておらず、実際に手が加わっている形跡はほとんどない。

試しに今回公開されたCOCOAのソースコードと現時点のCOVID-19Radarマスター(Ver.1.1.2)のソースコードをファイル比較ソフトのWinMergeで比較した結果、テスト用のdocディレクトリといくつかのMarkdownファイル以外は同一と判定された。

画像1

厳密にはCOVID-19Radar由来のコードが改変されていないことが確認できただけで、独自のコードが追加されている可能性もなくはないが、追加したコードをビルド対象にするには一般的に既存コードの改変が必要になってくるので、逆説的に独自のコードは追加されていないと見てよいだろう。

両者はプロジェクトとしては別物なので、責任主体やリリース時期、付属ドキュメントは一部異なるものの、(Ver.1.1.2)時点でのコード内容は同じである。ソースコードからビルドされるアプリは同じ「新型コロナウイルス 接触確認アプリ」であり、これを提供主体に応じて「COVID-19Radar」や「COCOA」と呼び分けているに過ぎない。

両者のコードがVer.1.0.0時点で同一であることは、園田裕貴氏がMPL 2.0の3.2項(後述)に基づいて厚労省にCOCOAのソースコードを請求した際の回答でも確認されている。

MPLにおけるソース開示義務

COVID-19RadarもCOCOAもソフトウェアライセンスとしてMPL 2.0を採用している。ソースコードの請求の根拠として挙げられたMPL 2.0の3.2項(a)は、MPLでライセンスされたコードからビルドされたアプリ(バイナリ)を配布する者に対する義務と権利を定めた条項である。

3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
a. such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and
b. You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License.

拙訳は以下の通り。

3.2.実行可能形式の配布
対象ソフトウェアを実行可能形式で配布する場合、
a. かかる対象ソフトウェアは、第3.1節の説明通りに、ソースコード形式でも利用できるようにする必要があります。また、あなたは実行可能形式の受領者に対し、かかるソースコード形式の複製を合理的な手段(適宜かつ、受領者への配布コスト以下の料金であることを意味します)で取得する方法を通知する必要があります。
b. あなたは本ライセンスの条件に基づいてかかる実行可能形式を配布しても構いません。あるいは、その実行可能形式のライセンスが本ライセンスに基づくソースコード形式の受領者の権利を制限または変更しないことを条件として、異なる条件に基づいてサブライセンスしても構いません。

俗に「ソースコードの開示義務」と言われる部分だが、ライセンス文では「開示」「公開」に相当する単語は一切使われていない。重要なのは「ソースコード形式の複製を合理的な手段で取得する方法を通知する」必要があるということだ。これはGPLなどでも同様で、GNUは「ソースコードへのアクセスを提供する」という言い回しを用いている。極端な話、配布者自身がソースコードを開示する必要はなく、その所在だけ記載すれば足りる。

COCOAの場合、ソースコード入手方法の通知は接触確認アプリケーション利用規約(Wayback Machineによる6月19日時点のアーカイブ)第5条3項に記載されている。前述の通り、COCOAとCOVID-19Radarのコードは現時点において同一なので、COVID-19RadarのGitリポジトリを参照リンクすることで、MPL 2.0の3.2項(a)を満たしていることになる。

3 前2項にかかわらず、オープンソースの利用に関連して、当該オープンソースの規定に従う必要がある事項については当該規定が優先します。当該オープンソースに関しては、 https://github.com/Covid-19Radar/Covid19Radarにおいて確認することができます。

ただし、COCOAとCOVID-19Radarのコードが今後とも同一であるという保証はなく、このまま他者のプロジェクト参照を続けるのはライセンスを抜きにしても色々と問題がある。厚労省がCOCOAとしてのGitリポジトリを公開するべきというのはその通りで、ちょうど、これを書いている間に利用規約のURLも書き換わったようだ。

3 前2項にかかわらず、オープンソースの利用に関連して、当該オープンソースの規定に従う必要がある事項については当該規定が優先します。当該オープンソースに関しては、 https://github.com/cocoa-mhlw/cocoaにおいて確認することができます。

書き方が不親切で世間の誤解を招いたとか、リバースエンジニアリング禁止条項ってどうなのとか、色々言いたいことはあるが、結論としてはCOCOAは公開当初よりライセンス違反ではなかったし、将来的なライセンス違反のリスクも取り除かれたと言える。

日経Linuxの誤報

ところで、COCOAがライセンス違反という話はどこから出て来たのだろうか。というのも、COCOA公開当初からしばらくはライセンス違反の可能性について言及されることはあってもすぐに否定され、そこまで誤解が広がることはなかったからだ。

誰がそんなことを言い始めたのかと調べてみると、Rubyの父として知られるまつもとゆきひろ(@yukihiro_matz)氏が、日経Linuxの連載コラムでライセンス違反の可能性に言及していることが分かった。

「まつもとゆきひろ プログラマのこだわり」(日経Linux 2020年9月号)には次のようにある。

 ただ、MPLライセンスには改変の公開義務があります。もしCOCOAにCovid19Radarからの改変があればその部分を公開する義務がありますが、現状、COCOAのソースコードは公開されていません。パーソル側にCOCOAのソースコード開示要求を出した人もいらっしゃるようですが、原稿執筆時点ではまだ返答がないようです*1。
*1 この点についてCOCOAは現状MPL違反の可能性が高いです。早急な改善が望まれます。https://blog.yugui.jp/entry/2020/06/20/095443参照。

COCOAのソースコード開示要求を出した人というのは、参照リンクから察するに先述の園田裕貴氏のことだろうが、彼女は6月26日の時点で返答内容を公表している。本当に8月7日発売の雑誌の原稿締め切りに間に合わなかったのだろうか?

COVID-19対策接触確認アプリ「COCOA」は残念ながら不具合が報道されて話題になりました。そのOSS開発については、誤解が蔓延しているようです。今回はOSSと社会との関係について考察します。(まつもと ゆきひろ)

とコラムでは前置きされているが、政府やCOCOAにダメ出しするという方向性ありきで事実確認を疎かにした結果、誤解の蔓延を助長してしまったとしたら、実に皮肉なことだ。

厚労省からの回答(10/16追記)

私はnoteの書き溜めでも取材を心掛けている。

新型コロナウイルス接触確認アプリ(COCOA)についての問い合わせは、厚生労働省の電話相談窓口までお願します。
受付時間:午前9時から午後9時まで(土曜・日曜・祝日も対応)
電話番号:0120-565653(フリーダイヤル)

最初は高槻市の案内に従って厚労省の電話相談窓口に問い合わせてみたが、ソースコードとライセンスについて確認したいと伝えたところ、なぜかアプリのインストール方法を説明し始めたため、慌てて話を遮って踏み込んだ説明をしたところ、そうした問い合わせはメールでのみ対応しているとのことだった。

9月3日に問い合わせメールを送って、接触確認アプリサポートセンターから返答があったのが43日後の10月16日である。返答には「※本メールの全文および一部の転載、二次利用はご遠慮ください。」と書かれていたが、公共の利益に関する事柄で正確な情報の検証に必要不可欠であるため、文頭の接続詞と改行を除き、回答文をそのまま掲載する。

・今回公開されたソースコードがアプリのソースコードのすべてか?(一部公開してないプロプライエタリな部分があるのかどうか)

→MPL2.0にて定義されている公開範囲はソースコードに限定されており、アプリ内で使用しているHTMLファイル等は含まれておりません。当アプリとしてのソースについては公開および管理されており、厚生労働省のHP上でもその情報を公開しております。

・今回公開されたソースコードはアプリのどのバージョンに対応しているか? 旧バージョン(「1.1.1」や「1.0.0」)に対応するソースコードはどのように入手すればよいか?

→現状GitHub上ではTagを切って複数のバージョンを確認できる様になっており、最新版を含め各バージョンごとに公開されています。

※筆者注:問い合わせ時点ではTagや旧バージョンに対応するソースがCOCOAのリポジトリに存在しなかった。問い合わせを受けて修正したものと考えられる。

・Covid-19Radarからの変更点はあるか?(Covid-19Radarそのものなのか、Covid-19Radarの変更物なのか、より大きな著作物なのか)

→現状当アプリはCovid-19 Radarが開発した物をベースに開発された別アプリとなります。

※筆者注:問い合わせ時点では事実上変更点はなかったと考えられるが、9月8日のVer.1.1.3、9月24日のVer.1.1.4でCOCOA独自の変更が加えられており、回答時点では名実ともに別アプリとなっていた。

・現時点ではCovid-19Radarとコードが同じということは現時点ではCOCOA自体のライセンスもMPL 2.0という理解でよろしいか?

→当アプリも個別にMPL2.0を採用しており、GitHub上のライセンスにもその旨を記載しております。

・COCOAはソースコードを公開していないためMPLに違反していたという指摘(※)があるが、そのような認識はあるか? この指摘は正しいか?

→GitHub上にデータが無い事と非公開であることは同義ではなく、MPL2.0でソースコードを公開していない時期はございませんので、ライセンス違反の時期はない認識でございます。

※接触確認アプリ「COCOA」、ソースコードをGitHub上に公開 - ケータイ Watch
https://k-tai.watch.impress.co.jp/docs/news/1274433.html

以上が問い合わせ内容とその回答となる。

ケータイWatchの大泉勝彦(@_0_zero)氏も返信が来ている頃だと思うので、どのような内容であったのか、きちんと公表していただきたい。

※本記事は2020年9月3日時点および10月16日時点の情報を元に執筆されているため、現在の状況とは異なる場合があります。