プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

OSSライセンスを自分のコードに付けてみよう

ライセンスをつけない場合

必ずしもライセンスをつける必要はありません。 ライセンスを付けずに公開されたソフトウェアはパブリックドメイン・ソフトウェアと呼ばれ、フリーソフトウェア扱いになります。 パブリックドメイン・ソフトウェアの利用には一切の制約がありません。

ライセンスをつける意味

ではなぜライセンスをつけるのでしょう?

第1に格好いいからです。 世の中のイケてるソフトウェアは有償無償を問わず皆、ライセンスが付いています。

次に自分の気持ちを利用者に明示的に伝えることができるからです。 自分の時間を割いて開発したコードを利用者がこういう形で利用して欲しい、利用して欲しくない、という気持ちはないでしょうか?

  • 自由だけどお金儲けには使ってほしくない
  • 自由だけどコードを公開してソフトウェアコミュニティに恩返しして欲しい

そんな気持ちをライセンスという形で伝えることができます。

無償ライセンスは自作しない

ライセンスを自作するのは大変です。 有償ならともかく、無償提供するなら既存のOSSライセンスを利用するのが手っ取り早いです。

OSSライセンスの選び方

世の中には無数のOSSライセンスがあります。 色々な考え方がありますが、以下のように考えれば大きく間違ってないと思います。

  1. 特定のOSSのエコシステムに参加したい -> そのOSSと同じライセンス
  2. フリーソフトウェア精神を大事にしたい -> GPLv2
  3. どうでもいい -> 2条項BSDApache

1. 特定のOSSのエコシステムに参加したい

そのままです。 説明不要だと思います。

2. フリーソフトウェア精神を大事にしたい

このようなケースではGPLのようにCopyleftが強いライセンスが有効です。 利用者は自分のコードを公開するという形でソフトウェアコミュニティに恩返しすることが求められます。 GPLの中では今日時点ではGPLv2が最も一般的な選択肢です。 大事な特許を含む場合はGPLv3。 クラウド上での恩返し回避(「クラウド利用だから配布していない」という理由でコード公開義務を回避すること)を抑止したい場合はAffero GPLv3。 逆にCopyleftによる抑止力を少し緩めて、利用を促したい場合はLGPLv2などの選択肢があります。 しかし新しいライセンスほど利用者から敬遠される傾向が強いです。 利便性と抑止力のバランスなどを考えて選んでください。

3. どうでもいい

意外と多いのではないでしょうか。 ライセンスなしでもよいかもしれませんが、格好つけるためになにかつけたいところです。 Copyleftがない、Attribute Styleなライセンスが適しています。 手間をかけたくないなら2条項BSDが手軽です。 しかし、BSDには特許に関する記載がありません。 昨今、サブマリン特許等(OSSに特許を忍ばせて利用させてから特許料を請求すること)、特許関連の訴訟被害を恐れる人も少なくありません。 広く利用してもらいたいのであれば利用者により安心感を与えられるApacheがよいでしょう。 Apacheにはコードに含まれる特許の使用権を利用者に付与する記載があり、訴訟リスクが低いです。 ユーザの利便性と自分の手間を天秤にかけて選んでください。

4. その他

ここに紹介したOSSライセンスだと合わない、という方は比較的希望に近いライセンスを手がかりに似たOSSライセンスを探してみましょう。


OSSライセンスの適用

以下にOSSライセンスの適用方法を記載します。

GPLv2の場合

1. ライセンスファイル作成

以下のリンクからライセンスファイルを入手し、LICENSE、またはLICENSE.txt等の名前でソースのルートディレクトリに保存します。 ソフトウェア配布時にはライセンスファイルをDocumentationに含めてください。

https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt

2. ソースコードへライセンス条項挿入

以下の内容を各ソースコードファイルの先頭に貼り付けます。 <最後に変更された年>は「present」とする人もいます。

/* ===========================================================
 * <ソフトウェア名> : <説明>
 * ===========================================================
 *
 * Copyright (C) <ソースコードが公開された年>-<最後に変更した年>  <制作者名/組織>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, see <https://www.gnu.org/licenses/>.
*/

3. READMEファイル編集

READMEファイルに以下のような文言を記載し、GPLv2が適用されていることを利用者に示します。

The software is licensed under the terms of the GNU General Public License (GPL) version 2.0

2条項BSDの場合

1. ライセンスファイル作成

以下の文言をLICENSE、またはLICENSE.txt等の名前でソースのルートディレクトリに保存します。 ソフトウェア配布時には下記ライセンスファイルをDocumentationに含めてください。

Copyright <ソースコードが公開された年>-<最後に変更した年> <制作者名/組織>

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

2. READMEファイル編集

READMEファイルに以下のような文言を記載し、2条項BSDライセンスが適用されていることを利用者に示します。

The software is licensed under the the BSD 2-clause "Simplified" License.

Apacheの場合

1. ライセンスファイル作成

以下のリンクからライセンスファイルを入手し、LICENSE、またはLICENSE.txt等の名前でソースのルートディレクトリに保存します。 ソフトウェア配布時にはライセンスファイルをDocumentationに含めてください。

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

2. ソースコードへライセンス条項挿入

以下の内容を各ソースコードファイルの先頭に貼り付けます。

/*
 * Copyright <ソースコードが公開された年>-<最後に変更した年> <制作者名/組織>
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */

3. NOTICE作成

NOTICE、またはNOTICE.txtに以下のような内容を記載し、ソースのルートディレクトリに配置してください。

<ソフトウェアの名前>
Copyright <ソースコードが公開された年>-<最後に変更した年> <制作者名/組織>

<利用しているOSSの情報>

4. README編集

READMEファイルに以下のような文言を記載し、Apacheライセンスが適用されていることを利用者に示します。

This code is licensed under the Apache License v2.