ApacheライセンスのソースコードをGitHubにあげるまで


猫も杓子もMIT License、みたいな感じなので…

* [自作ソースコードに、MITライセンスを適用する３つのやり方 | オープンソース・ライセンスの談話室](https://www.catch.jp/oss-license/2013/09/27/mit_license/)
* [MITライセンスのソースコードをGithubにあげるまで](https://qiita.com/bpyamasinn/items/ac9ceda558e03378a658)
* [CC0ライセンスのソースコードをGitHubにあげるまで](https://qiita.com/spiegel-im-spiegel/items/cc3d9cc46cc931b0e921)

Apacheライセンスってなんだ
----------------------

[Apache Software Foundation](https://apache.org/)[^1]が提供する製品のソフトウェアライセンスです。概ねBSDライセンスと同じ(つまりMITライセンスとも同じ)なのですが、さらに許諾の範囲が明確です。

 * [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
 *  日本語訳 [licenses/Apache_License_2.0](https://licenses.opensource.jp/Apache-2.0/Apache-2.0.html)

あんまり長くないので、全文読んだ方が良いと思ひます。まあMITライセンスの数倍長いけど。

MITライセンスなどの短いライセンスとの差は以下のようになるかと思ひます。

* 用語の定義が明確
* 特許の許諾が含まれる
* Submission of Contributions(コントリビューションの提出)条項がある

筆者は別に特許とか持ってないので関係ないといへば関係ないのですが、利用者としては安心できる要素ですね。

「コントリビューションの提出」は、GitHubではPull Requestにあたりますね。

ソースコードでコミュニケーションをとるSNSであるところのGitHubですが、Pull Requestと著作権の関係は実のところ曖昧に運用されることが多いですよね。Apacheライセンスにはその点が組み込まれてるので、非常にGitHub向きのライセンスだと思ひます。


やること
--------

 1. Apacheライセンスの原文を取得
 2. README.mdに記載する
 3. ソースコードの冒頭にライセンス表記をする
 4. GitHubにあげる

### Apacheライセンスの原文を取得

Apache Licenseには複数のバージョンがありますが、 **必ず** 2.0より新しいもの[^2]を使ってください。

プレーンテキスト版のファイルは https://www.apache.org/licenses/LICENSE-2.0.txt にあります。

```
curl https://www.apache.org/licenses/LICENSE-2.0.txt > LICENSE
```

### README.mdに記載する

ほかの方の記事に書いてあったんでコピペしてみましたが、いままで公開したリポジトリでREADME.mdにライセンスを記載してるケースってないですね…

> ### Copyright

> see ./LICENSE
>
>     Guard object of logger for debugging.
>     Copyright (c) 2015 USAMI Kenta <tadsan@zonu.me>

↑ みたいな感じで著作権表記と「`LICENSE`ファイルを嫁」とだけ書いてます。

これは私がこうしてる、って話なので各位好きにやるのが良い気がします。

npmやpackagistなど最近のパッケージリポジトリでは、`package.json`や`composer.json`、`bower.json`などの構成管理ファイルにライセンスを記述できるようになってるので、こちらには明記しておきます。

基本的には`"license": "Apache-2.0"`と書いた行を追加すれば大丈夫です。

例: https://github.com/zonuexe/php-logger-guard/blob/master/composer.json

### ソースコードの冒頭にライセンス表記をする

ソースコードの冒頭にライセンスブロックを書いておくのが確実。

```php
<?php
/**
 * Copyright [yyyy] [name of copyright owner]
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
```

しかし、全部のファイルにこれを書くのは大変なので、筆者はPHPの場合はPHPDoc形式でこのように表記します。

```php
<?php

/**
 * Guard object of Logger for debugging
 *
 * @package   Baguette\Application
 * @author    USAMI Kenta <tadsan@zonu.me>
 * @copyright 2015 USAMI Kenta
 * @license   https://www.apache.org/licenses/LICENSE-2.0 Apache-2.0
 */
final class Guard implements Log\LoggerInterface
{
```

最初の表記はAPPENDIXの内容なので、「その通りに書かなければライセンスが適用されない」わけではありません。要は著作権者とライセンスの表記があれば用は足りると筆者は解釈してます。

### Githubにあげる

上記のファイル、READMEとLICENSEを追加して`git push`すれば良いですね ヾ(〃＞＜)ﾉﾞ

## あとがき

MITの代りにApacheライセンス、わるくないですよ。

### 次回予告

MPL


[^1]: ApacheはWebサーバー(Apache HTTP Server)が有名ですが、Web関係の関連ツール、分散コンピューティング環境のHadoopや周辺プロジェクト、全文検索エンジンのLuceneやSolrなどいろいろ[^3]やってますね。 [Apache Projects List](https://projects.apache.org/projects.html?category)
[^3]: おもしろどころでは、LibreOfficeと分裂したOpenOffice.orgがApacheプロジェクトに寄贈された「Apache OpenOffice」になったりしました。
[^2]: 本稿執筆時点での最新版は2004年に発表された2.0です。