ソフトウェアの分類

# 概要

売り切り、サブスクリプション、クライアントアプリ、ウェブサービスなどのソフトウェアを分類してみました。

# 分類

## まとめ

| 分類 | インターフェース | コアロジック | 課金 | 例 |
|:-----------|:------------:|:------------:|:------------:|:------------:|
| 売り切り | アプリ | アプリ | 売り切り | 昔のゲーム、Visual Studio |
| サブスクリプション | アプリ | アプリ | サブスクリプション | Photoshop |
| クライアント | アプリ | サーバー | サブスクリプション, 都度課金 | ニコ動, Twitter |
| ウェブサービス | ウェブ | サーバー | サブスクリプション, 都度課金 | ニコ動、ECサイト |

### 存在しえないもの

インターフェースが**ウェブ**で、コアロジックが**アプリ**は、特殊なケースであるかもしれませんが、通常はコアロジックが**アプリ**ならインターフェースも**アプリ**にしてしまうと思うので、レアケースだと思います。
コアロジックが**サーバー**で、課金が**売り切り**は、最後のユーザーが居なくなるまでサーバーを稼動させるということなので、現実的に保証できません。

## 要素

### インターフェース

ユーザーが直接触るインターフェースが、**アプリ**か**ウェブ**かです。ウェブだと最初の障壁が少ないです。アプリは、ウェブと比べて色々なことを快適に行えます。

| 観点 | アプリ | ウェブ |
|:-----------|:------------:|:------------:|
| 最初の障壁が低いか | ×       | 〇         |
| 色々なことができるか？ | 〇 | × |
| 快適か？ | 〇 | × |

### コアロジック

ソフトウェアを他と差別化するような重要なもの(特許アルゴリズムやメインコンテンツ)をコアロジックとして、コアロジックが**クライアント**側にあるか**サーバー**側にあるかです。

コアロジックが**サーバー**にあると、クラッキングされません。
また、常に最新版を提供できますが、これはコアロジックがクライアント側にある場合でも、バージョンチェックを入れておけば実現できます。

クラッキングについて、そのソフトウェア自体の不正コピーだけが問題の場合は、 http://bsa.or.jp/news-and-events/news/bsa20160525/ によると日本の不正コピー率は18%らしいので、それほど影響は大きくなさそうです。一方で、アルゴリズム盗用が問題になる場合は慎重になったほうがよさそうです。ソフトウェアの利益が、アルゴリズムを盗用するためのコストと法的リスクを負うコストの合計よりも小さい場合は問題ないと思います。

プライバシーについてはgoogle docsが流行っているので、気にしない人は少なからず居そうです。

CPU, GPUについて、例えばCUDAを使うソフトウェアの場合、ユーザーにNVIDIAのGPUを強要することになるか、AMDのGPUでも使えるような代替ロジックを用意する必要があります。CPUの特殊な命令を使う場合も同様です。将来、ソフトウェアが機械学習系のアルゴリズムを使うことになった場合、どうしても高性能なGPUが必要になることがあります。現状はまだ全てのユーザーが高性能なGPUを所有していないので、性能要件で**サーバー**を採用するしかなくなる可能性があります。もし、他の観点をクリアしているなら、今の段階から**サーバー**を採用しておくのが無難かもしれません。

連携しやすさについて、**サーバー**でAPIとしてサービスを提供したほうが連携しやすいです。オープンソースならまだしも、課金のあるサービスで**クライアント**側にコアロジックを持っていると連携が面倒で管理コストがかかります。何より、そんなものを見たことが無いです。B2Bもしやすいと思います。少しぐぐっても、B2Bを考えるならAPIを提供しろという話が出てきます。

- http://nordicapis.com/apis-are-evolving-the-b2b-landscape-2/
- https://bbvaopen4u.com/en/actualidad/six-reasons-why-you-should-include-api-your-b2b-strategy

| 観点 | クライアント | サーバー |
|:-----------|:------------:|:------------:|
| クラッキングされないか？ | ×       | 〇         |
| サーバー管理費がかからないか？ | 〇       |    ×       |
| 転送量が少ないか？ | 〇       |    ×       |
| プライバシーで躊躇しないか？ | 〇       |    ×       |
| CPU, GPUの差を考慮しなくて良いか？ | ×       |    〇   |
| 連携しやすいか？ | ×       |    〇   |

### 課金

課金方法です。
**売り切り**は、その名の通り売り切りです。
**サブスクリプション**はこの記事中では、月額課金など一定期間自由に使えるような課金方法とします。
**都度課金**は、ソフトウェア中のなんらかの機能を利用するたびに課金する方法です。ゲームの1プレイ、変換単位、ファイル単位など粒度は問わないです。

| 観点 | 売り切り| サブスクリプション | 都度課金 | 
|:-----------|:------------:|:------------:|:------------:|
| ユーザーがリスクを負わないか？ | ×       | ×         |〇 |
| ユーザーの可処分所得を超えないか？ |  〇       | 〇         |× |

# 理想のソフトウェア

欠点が無い理想のソフトウェアを考えてみます。

**インターフェース**は、最初の障壁を減らすために**ウェブ**を用意しつつも、常用する人のために**アプリ**も用意します。

**コアロジック**は、クラッキングされなくてかつ転送量やサーバー管理費がかからない方法は思いつかないので、ここは要件に応じてどちらかを選択します。ただし、ウェブを用意しつつアプリも用意する場合、開発/保守コストを考えると、コアロジックを**サーバー**側に置いたほうが良い気もします。

**課金**は、**都度課金**をベースとしつつも、たくさん利用する場合は割引が効くようにして、可処分所得を超えないようにします。

# アルゴリズム盗用について

ソフトウェアの利益が、アルゴリズムを盗用するためのコストと法的リスクを負うコストの合計よりも小さい場合は、アルゴリズム盗用を気にしなくて良いと思うが、それが数値的にどの程度か見積もってみました。

## 見積もり1

盗用するためのコストは、優秀な人を雇って3ヶ月ほど解析させればたいていのものは盗用できる気がするので、多く見積もっても1000万円だとします。法的リスクを負うコストは、人や国の法律によって違うと思いますが低い人は低いと思うのでこれも1000万円だとして、合計で2000万円だとします。結論、ソフトウェアによる利益が2000万円以下の場合は気にしなくてよさそうです。

実際には、グレーな方法を使って作ったソフトウェアを大々的に売る(特に、先進国で売る)のは難しいと思うので、その信用の差を他の何かで覆すためのコストもかかる。また、そのコストは継続的に支払う必要があるので適当に10倍して、10 * 2000万円 = 2億円以下の利益なら気にしなくて良い？という結論が出ました。

## 見積もり2

アルゴリズムを盗用するためのコストは、ソフトウェアの価値に依存しないと仮定する。法的リスクを負うコストは、法律による一定のコスト + ソフトウェアの価値に比例した損害賠償コストになると仮定する。

法律に詳しくないので成立するか怪しいですが、自己破産があるので、ソフトウェアの価値が一定以上高くなると、法的リスクを負うコストは頭打ちになる。

結果、ソフトウェアの価値が一定以上高くなると、アルゴリズムを盗用するためのコストは定数になる。一方で、アルゴリズム盗用で得られる利益はソフトウェアの価値に比例すると思うので、盗用者は世界一価値が高いソフトウェアを狙う。なので、たいがいの人は心配しなくて良い。

それでもアルゴリズム盗用が怖くて夜も眠れない場合は、[themida](https://www.oreans.com/themida.php)などを使えば、ウイルス誤検知による信用低下リスクとのトレードオフですが、少し安らぐかもしれません。