iOSアプリのソースコード公開とライセンス

あすかです。

f:id:kmynews:20170507073229p:plain

WindowsAndroidiOSで動作するストーリー制作支援ソフトStoryCanvasのソースコードを、GitHubで公開しました。

github.com

StoryCanvasにはいくつかの設計ミスがありますが、それは別の日に改めてお話するとして、
なぜいきなりソースを公開したかというと、
開発当初の想像を超えたユーザに使っていただき、かなりの量の要望をいただいたにもかかわらず、
私には漫画など他にも趣味があり、また他にも作りたいアプリがあるため、
全ての要望に応えるのは難しい、自分一人では限界があると思ったからです。

ところで、今回はライセンスの話です。

App Storeオープンソース

App StoreOSSは一歩間違えると危険

App StoreGPLのアプリを公開することはライセンス上不可能といわれており、実際に例もあります。

(L)GPLとApp StoreとVLC for iOS

上の記事は、GPLLGPLに限った話でしたが、オープンソースそのものがこの規約に抵触するのではないかと思います。

The Open Source Definition | Open Source Initiative

以上のURIにある「The Open Source Definition」では、以下の条件を満たしたものがオープンソースであるとされています。(The Open Source Initiative: オープンソースの定義(日本語)も参考にしています)

1. 自由な再頒布
2. ソースコード入手の自由
3. 派生の自由
4. 作者のソースコードの完全性
5. 個人や団体への差別の禁止
6. 利用用途の差別の禁止
7. ライセンスの平等な分配
8. 特定製品でのみ有効になるライセンスの禁止
9. 他のソフトウェアへの制限の禁止
10. ライセンスは技術中立的でなければならない

さて、先程のGPLなんとかの記事は以前の話でしたが、今の規約はどのようになっているのでしょうか。
メディアサービス規約から考えてみます。(App Storeが再頒布を行う者であると仮定しています)

iTUNES STORE - サービス規約

お客様は、個人的、非商用目的での使用に限って本サービスとコンテンツを利用することができます (以下の App Store コンテンツのセクションに明記されているものを除く) 。

App Store コンテンツ

営利事業、政府機関、教育機関 (以下「エンタープライズ」という) の代表として業務を行う個人は、(i) エンタープライズが所有または管理する 1 台または複数のデバイスで 1 名の個人が使用する目的で、または (ii) エンタープライズが所有または管理する 1 台の共有デバイスで複数人が使用する目的で App をダウンロードし、同期できます。 複数のユーザが連続して、または集団で使用する各デバイスには、別個の使用許諾が必要です。

別個の使用許諾がどのようなものかわかりませんが、内容次第でオープンソースの定義6.に抵触する可能性はあります。
ただし、これがアプリの開発者を保護するために作られた条項であるならば、オープンソースの精神に抵触しない可能性もあります。

Apple がコンテンツをお客様に提供しても、それは何らかの販売促進使用権をお客様に譲渡したことになりません。また、著作権所有者が持つ何らかの権利を与えたり、放棄したりするものではありません。

上記の定義には反しませんが、GPLなどコピーレフト型ライセンスへの明確な違反です。

App Storeの規約は、オープンソースの定義に違反するほどの性格はありませんが、それでも一部のライセンスにはふさわしくないのは確かです。
先述した記事にある日本語訳と比べると少し穏やかになっているように感じますが、iOSアプリをオープンソースにするには一抹の不安が残るのも事実です。

また、規約には書いていないことですが、「App Store審査のガイドライン」というのもあります。
App Store審査ガイドライン - Apple Developer

4.1 模倣
独自のアイデアを生み出してください。自分だけのアイデアがあるはずです。それを形にしましょう。App Storeでもっとも人気のあるアプリケーションを単にコピーしたり、他のアプリケーションの名前やUIを少し変更して自分のアプリケーションとして提出したりすることは避けてください。知的財産侵害の申し立てをされるリスクがあるだけでなく、App Storeの運営が困難になり、また、他のデベロッパにとってもフェアではありません。

これは一見、どうでもいいことのように思えます。
しかし、オープンソースの定義にある「1. 自由な再頒布」を侵害する可能性があります。

もし、開発中のアプリを誰かが勝手にApp Storeに申請してしまったら?
StoryCanvasはすでにApp Storeで公開されていますのでその心配は不要ですが、ここで見方を変えてみます。
App Storeに申請する権利が、世界の中で、オリジナル版の作者1人にしか認められていない状態です。
これは、再頒布の自由に抵触しないか?

もちろん、iOSアプリの中でもオープンソースなアプリは山ほどありますので、上記を覆すほどの解釈も出ていると思いますが、
もしそれがないとしたら、他の開発者の良心に頼るしかないのが現状になってしまいます。

そして、もう1つ大切なことです。
App Storeは、iOSにおける唯一のアプリダウンロード手段です。

WindowsAndroidでは、いわゆる野良アプリをインストールすることができます。Windowsではそれが普通ですし、AndroidではGoogle Playの規約と適合しないところがあっても、最悪自分のサイトで頒布することができます。(もちろんGoogle Playで公開することによる宣伝の側面は犠牲にされます)

しかし、iOSは、App Storeの意向にあわないアプリは、一切頒布することができません。これはある意味でセキュアではありますが、一方で上記のような自由性、民主性が損なわれます。
したがって、私は今までiOSアプリのオープンソース化に慎重でした。

だからオープンソースで公開することをやめた

なので、StoryCanvasでは独自ライセンスを採用しました。

StoryCanvasは、ソースコードは公開していますが、オープンソースではありません。
これは、OSSに慣れている方にとっては奇妙にうつるかもしれませんが、StoryCanvasがとりうる現状最良の条件であると判断した結果です。
ソースを公開し、ユーザの協力を募りながら、「オープンソースでない」と言い張ることは、上記のオープンソースの定義にそくわないライセンスであれば、可能です。

私は、StoryCanvasのソースコード公開にあたって、「StoryCanvasライセンス」を制定しました。

github.com

このライセンスは、ユーザの再頒布の自由を制限します。要約すると、以下の条項になります。

  • オリジナル作者と特別な許可を受けた人以外は、App StoreGoogle Playにアプリをアップロードできないよ
  • だけど各自自分のサイトなら自由に配布してもいいですよ、商用OK
  • ただし再頒布の場合も、StoryCanvasライセンスは感染するから注意してね
  • 改変自由だけど、ソースはちゃんと公開してね
  • ソースのうち特許にさわる部分とかライセンスキーとかは公開しなくでもいいよ、でもその状態でもコンパイルできるようユーザを案内してね

有償頒布に関しては、有償で譲り受けた人がまた頒布することをこのライセンスの範囲内で制限することは不可能ですが、企業同士の契約であれば、秘密保持契約などの形でこれを拘束することは、GPLがそうであったようにStoryCanvasライセンスでも不可能ではないと思います。しかし個人レベルだと難しそうですね‥‥。

ストアでの公開を念頭に置くと、どうしてもアプリの再頒布者とオリジナルの作者を区別しなければいけません。オリジナルの作者とそれ以外の人とでは、再頒布できる範囲が異なります。これはオープンソースの定義にある再頒布の自由を侵害します。
また、特許が絡むソースコードの隠匿も許可しています。これはソースコードの完全性に反します。
したがって、このライセンスはオープンソースになりえませんが、それ以外の部分は、以下の観点に注意しながら作りました。

  • オープンソースの精神を最大限に受け継ぐことはできないか?
  • かつ、オリジナルの作者に必要な最低限の権利は保護できるか?
  • かつ、ユーザが安心してこのソフトウェアを利用するために最低限必要なものは何か?

オリジナルの作者以外がストアへアップロードできないことは、見方によっては、ユーザを保護することにも役立ちます。それでいて、オリジナル以外の開発者の権利をどれだけ確保できるかも考えました。
ライセンスを制定する時は、できる限りあらゆる状況を考えなければいけません。言ってしまうと、私みたいな貧弱な頭では無理です。こういうものは必ず悪用する人が出てきますので、そのあたりの監視もしっかりやらなければいけません。

まだ内容的に不完全なところが残されていますが、しばらくはこのライセンスで運用していきたいと思います。