#前書き
皆さんは「オープンソース」という言葉聞いた時、何を思いますか?「なんかかっこいい」とか、「よく知らないけどとりあえず私には関係なさそう」とか「いつか私もオープンソースプロジェクト作れないかな」とかいろいろあると思いますが、「なんかすごすぎて自分には届かなそう」とか思うのは非常に勿体無いと思います。だってオープンソースは誰にでもできることですから。やることは非常に単純で、ただ単に自分が書いたコードを公開して誰でも自由に入手できるようにするだけです。
まあそんなオープンソースですが、今となってはもはやプログラマにとって切り離せない存在となっています。だって何をやろうととりあえず何かしらのオープンソースプロジェクトと関わることになりますから。Windows 開発なら .NET framework とか、Android 開発ならそもそも Android 自体もオープンソースだし、そして UNIX とか FreeBSD とか Linux とかもういろんなものがオープンソースで私たちプログラマに提供されています。
すごいオープンソースプロジェクトがここまで充実してると、「なんかすごいもの作らないとオープンソースできない」とかいう思い込みも最初あるかもしれません。でもそんなの気にする必要なんて全くありません。GitHub とか BitBucket とかの公開リポジトリを見てみればわかると思いますが、世の中のオープンソースプロジェクトのほとんどは特にそんな大したものではありませんし、ましてはどうしようもないようなものすら中にはあります。ですのでオープンソースは別にそんな大げさなものではありません。自分さえ「自分の書いたソースコードを公開して誰かの役に立てれば」という心構えさえあれば、誰でもオープンソースのプロジェクトをつくれます。
ところが、オープンソースプロジェクトを作るにあたって、避けて通れないものが一つあります。「公開ライセンス」です。「なんかプロジェクト作りましたけどどんなライセンスで公開すればいいのかな…」という悩みはおそらく誰でも最初はあるはずです。というかむしろそもそも最初「公開ライセンス」というものが知らない人ももしかするといるかもしれません。Qiita でも検索してみたのですが、コーディングに関しての記事はいっぱいありますけどライセンスに関しての記事がほとんどありません。ですのでせっかくですから、ここでライセンスの話も少ししてみたいと思います。
#「オープンソース」の考え方
具体的なライセンスを見る前に、ソースコードの公開にあたっての大まかな幾つかの考え方を紹介しましょう。
まずは「パブリックドメイン」です。これはどういうものかというと、ズバリ言って「権利放棄」です。つまり自分が作ったコードに関して、自らこのコードのすべての権利を放棄し、誰でも自由に好きに使える、ということです。ソースコードも知的創作物ですので、通常なら作者には著作権がありますから、作者が自ら宣言しない限り自分のソースコードがパブリックドメインになることはまずありえません。もちろん自分がそう望むなら自分の書いたコードをパブリックドメインにしてすべての権利を放棄することはできますが(ただし EU では作者が自ら著作権放棄することができないらしいです)、通常のオープンソースプロジェクトではほとんどパブリックドメインはありえません。(一応全くないわけではありませんが…)
次は「コピーレフト」です。著作権などの権利は英語で言うと「Copyright」ですが、それをダジャレ的な感じで、「すべての権利を逆にする」という意味合いを込めて「Copyleft」にしたのがこのコピーレフトです。どういうものなのか、簡単に言うと、ソースコードを公開して、誰でも自由に利用、複製、再配布及び二次創作できますが、その反面、利用、複製、再配布や二次創作を制限してはならない(二次創作物にも適用)です。あらゆることに制限をかける「権利」と真逆であらゆることに制限をかけてはいけない制限という感じでまさしく「すべての権利を逆にする」→「Copyleft」って感じでしょ?
そして Copyright と Copyleft があれば、もちろん Copycenter もあります。これはどういうことかというと、この言葉を作った Kirk McKusick 大先生の言葉を引用しますと、「コピーライトというあらゆることに制限をかけるものもあって、コピーレフトというあらゆることに制限をかけてはいけない制限があるものもあって、じゃあコピーセンターという、何かをコピー機(Copy center)に持って好きなだけコピーを作れるものもあってもいいじゃないか」ということから来ているそうです。まあなんかかっこよさそうで見慣れない言葉ですが、普通はコピーセンターなんて名前ではなく、Copyfree もしくは Permissive(寛容)という言葉を使うのです(笑)
#それぞれのライセンス
上記の説明のように、普通の「オープンソース」のライセンスは、大きく分けて「コピーレフト系」と「コピーセンター/寛容系」というそれぞれの思想に基づいた2種類のライセンスがあります。それではそれぞれどんなライセンスがあるのかを見てみましょう。
##Copyleft 系
###GNU General Public License(GPL)
コピーレフト系のライセンスで最も有名なのがおそらく GPL でしょう。ほとんどの場合、コピーレフトといえば GPL、と言っても差し支えないくらいじゃないかと思います(もちろんコピーレフトライセンスは GPL 以外にもありますが)。GPL はバージョンによって細かい違いとかありますが、大雑把に言うと、
- 誰でも自由にプログラムを利用できる
- 誰でも自由にプログラムを改変できる(プログラムの改変はすなわちソースコードの公開を意味します)
- 誰でも自由にプログラムを再配布できる
- 改変したプログラムを公開した際、上記の 3 項目を満たさなければならない(すなわち誰でも自由に改変したプログラムを利用できるし、誰でもその改変したプログラムを自由に更なる改変を加えて再配布できるようにしなければならないことを意味します)
の 4 つが GPL ライセンスの基本中の基本です。ここで一番肝心なのは最後の項目です(むしろ上の 3 項目はコピーレフトじゃないオープンソースプロジェクトも大体同じです)。これはどういうことを意味するかというと、GPL ライセンスに基づいて公開したソースコードを利用し、改変したプロジェクトを公開した際、同じ GPL ライセンスでオープンソースしなければならない、ということを意味します。GPL ライセンスでなくても、コピーレフト系のライセンス(Mozilla Public License とか)ならみんな同じです。Wordpress のプラグインとかテーマとかのソースコードを触ったり、もしくはもう作ったりすることがある人ならきっとわかりますでしょう。それらはすべて GPL ライセンスでソースコードを公開されています。なぜならそもそも Wordpress 自体は GPL ライセンスに基づいて公開したプロジェクトですから、Wordpress 用のプラグインなりテーマなり当然 Wordpress 自体の API を使って公開されてるわけですから、同じ GPL ライセンスに基づいてオープンソースしなければならないのです。
ちなみに筆者個人的な感情論を言いますと、僕はコピーレフトは大っ嫌いです。二次利用者に何かしらの制限をかけるのは「自由」の精神を反していると思うからです。また後述もしますがコピーレフト系ライセンスはコピーフリー系ライセンスと両立できない場合もあります。だから僕はコピーレフト系ライセンスを自ら使うことは今までありません。今後もおそらくないでしょう。
しかし誤解しないで欲しいのは、コピーレフトは確かに我々プログラマみたいな「二次利用者」に制限をかけていますが、逆に「一般ユーザ」の利用の自由を保障したのも事実です。ですのでコピーレフトが嫌いなのはあくまで個人的な感情論であって、「コピーレフトを使うな」とかみたいなことを言うつもりは全くありません。
ちなみについでにコピーレフトに対するよくある誤解を更に挙げると、少なくとも GPL ライセンスは「改変したコードを同じライセンスで公開しなければならない」わけではありません。公開しなければならないのはあくまで改変したプログラム(コンパイルされたバイナリ)を公開した場合のみであり、例えば自分だけだとか社内だけだとか見たいなプログラムを一般公開していない場合はソースコードの公開を強要していません。
ただまあ前述通り筆者自身はコピーレフト精神に共感できないため、コピーレフト系ライセンスに関してはそこまで詳しくありませんから、ひとまず代表格である GPL のみ簡単に紹介して終わりにします。より詳しい情報を求めるなら Wikipedia 記事や GNU 公式 HP をご覧いただければと思います。
##Permissive 系
個人的に Copyleft 系はあまり好きではありませんが、逆に好きなのがこの Permissive 系です。Copyleft 系との最大の違いはまさに改変したコードの再配布に関して制限をかけていない、ということにあります。つまりどういうことかというと、コピーレフト系のソースコードを改変してプログラムを公開したら、同じコピーレフト系のライセンスで改変したソースコードも公開しなければなりませんが、Permissive 系のソースコードを改変してプログラムを公開しても、改変者としてそういったことは強制されません。商業利用ももちろん、ソースコードを公開したくない場合は公開しなくていいし、逆に公開したい場合もどんなライセンス使うかも含めて(ほとんどは)自由です。まあ先ほどコピーレフト系の紹介で言いました「一般ユーザの利用を保障した」というのはこのことですね。コピーレフト系の改変プログラムを公開された場合、一般ユーザとして必ずそのソースコードを入手でき、かつ改変の自由も保障されますが、Permissive 系の改変プログラムはもし改変者がソースを公開しなかったら一般ユーザとしてそのソースコードを入手できません。(まあ一般ユーザがソースコードを手に入れて何するかの問題はさておき)
ただし改変したソースコードを公開する場合、どのライセンスを使うかは「ほとんど」自由と言いましたが、一応制限はあります、それは一次ライセンス、つまり元ソースコードのライセンスと抵触しているライセンスは使えません(GPL 非両立ライセンスがまさにその代表格です)。
まあ前置きが長くなってきたので、代表的な例を幾つか挙げてみてみましょう。
###BSD License
おそらく Permissive 系ライセンスの中で一番広く使われてるライセンスではないでしょうか。歴史も長く由緒正しい Permissive 系ライセンスの代表格です。コピーレフトといえば GPL と同じように、Permissive といえば BSD License とか、Permissive と言う言葉を知らない人が Permissive 系ライセンスをを指したいとき「BSD スタイルライセンス」とかで代用するとかもありました。そして何回かのバージョン改定を経て、今一番使われているのはいわゆる「2 項目 BSD License」です。簡単に言うと、
- 誰でも自由にソースコード及びプログラムを自由に利用、改変、再配布できる
- 公開したソースコード及びプログラムは著作権情報とこのライセンスを表示しなければなりません
と言ったところです(原文では「2 項目」とは上記の 2 番目のソースコード部分とプログラム部分を分けて 2 項目から成り立ったため「2 項目 BSD License」と呼ばれ、1 番目の文言は制限ではないため「項目」の中には入っていません)。改変を再配布する際に同じライセンスでオープンソースしなければならないという GPL ライセンスと比べればわかると思いますが非常に自由なライセンスとなります。2 項目 BSD License の原文は下記のようになります:
Copyright (c) <YEAR>, <OWNER>
All rights reserved.
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 OWNER 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.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
自分のオープンソースプロジェクトにこの BSD ライセンスを適用したければ、上記の文言に <YEAR>
と <OWNER>
をそれぞれ今年の年数と自分の名前に直してテキストファイルとしてプロジェクトのルートディレクトリーとかに置いて、さらにプログラムにもこのライセンスを表示する機能をつければ OK です。
ちなみにこの 2 項目 BSD License が普及する前にも、3 項目 BSD License というのもありました。2 項目バージョンと比べて相違点は 3 項目バージョンは「元著作者の書面許可がない限り、元著者の名前及び元著者の所属組織の名前を改変した二次創作物の宣伝や販促に用いてはならない」と言う制限があります。3 項目 BSD License の原文は下記のようになります:
Copyright (c) <year>, <copyright holder>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* 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.
* Neither the name of the <organization> nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
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 <COPYRIGHT HOLDER> 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.
###MIT License
こちらも Permissive 系ライセンスの中で非常に人気のライセンスの一つです。簡単に言うと:
- 誰でも自由にソースコード及びプログラムを自由に利用、改変、再配布できる
- 公開した作品にこのライセンスを入れなければなりません
といった感じです。2 項目 BSD License と非常に似ています故、2 項目 BSD License が登場する前は二次創作物に宣伝とかの制限をかけたくなかった人の間では MIT License は非常に良かったチョイスでした。MIT License の原文は下記のようになります(BSD License と違い、MIT License は原文でも手動改行がありません):
The MIT License (MIT)
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
ちなみに、筆者も一昔は MIT License でオープンソースしたプロジェクトがありました(今はライセンスを変更しましたが)。
###Apache License
BSD License も MIT License も非常に緩く、二次改変の公開に制限をかけないことで人気を博しましたが、ただ逆にそれが緩すぎて、特許とか商標とかに関しての記述が全くないため、特に企業にとって使いにくいという弱点もありました。それを改善してくれたのがこの Apache License です。BSD License や MIT License と同じように二次改変や再配布に関して全く制限をかけませんが、特許の適用とか商標の利用とかに関しての説明や制限がかけられており、企業にとってより使いやすくなりました。BSD License や MIT License ほどの知名度ではありませんが、Swift などのビッグプロジェクトにも利用されているくらいの人気はあります。また、企業だけでなく、個人にとっても BSD License や MIT License では曖昧だった「コントリビューション(プロジェクトに加わった他人から貢献した修正)」について明確に「当事者が申し出ない限り本ライセンスに適用される」と記述してあり、特に GitHub などの Pull Request が盛んな SNS 的な要素を持ち合わせたサービスにソース公開した場合使い易いライセンスと言えます。
ちなみに Pull Request についてよく知らない人もいると思いますが、簡単に言うと例えば GitHub の場合、他人か公開したプロジェクトソースはもちろん誰でもそれをダウンロードできますが、そのプロジェクトに何か修正を加えて、元のプロジェクトにこの修正を採用してほしいと言った場合があります(主にバグ修正)。その際行うのがこの Pull Request というものです。つまりプロジェクトの原作者に対し「このプロジェクトにこんな修正を加えたからよかったら採用してプロジェクトに反映してください」というものです。その他人が手を加えた修正も元プロジェクトのライセンスに適用されるかどうかを明確に定めたのが、この Apache License、ということです。
ライセンスの内容が比較的に長くなってしまうのでここで原文を貼りませんが、興味ある方はタイトルリンクから見れますのでご覧いただければと思います。
###Do What the Fuck You Want to Public License(WTFPL)
英語分かる方なら一発でわかると思いますが、非常に汚い言葉遣いではありますがそれくらい緩いライセンスです。簡単に言うと:
- どうとでも好きにしやがれ
です。改変したい?もちろん OK。再配布?問題ない。そのまま何も改変せずに元の成果物を販売する?どうぞどうぞ。本当にライセンスの名前の語感をそのまま表現すると、「とにかくどうとでもお好きにしやがれやこのくそったれ」、です。著作権こそ放棄していないが、あらゆる権利を利用者に与えているのでパブリックドメインと変わらない扱いができます(そのため OSI 承認できませんでした)。最初の「考え方」の章で書いた通り、EU では自ら自分の著作物をパブリックドメインにできませんから、それと同等なことがしたい EU の人からは重宝されているそうです。ちなみに筆者自身も最近のオープンソースプロジェクトは割と WTFPL を使うケースが多いです(というよりだいたいはそんな大層なものでもありませんから MIT License すら使うのもったいない気がして…w)。
WTFPL の原文は下記のようになります:
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.
まあなんでもお好きにどうぞとは言え、利用するときは一応ライセンスに書かれている名前と年数を自分の状況に合わせて修正した方がいいでしょう(笑)
#あとがき
というわけで現在主流のオープンソースライセンス(WTFPL は一応主流ではないと思いますがまあ細かいことは気にせず)を簡単にご紹介しましたので、皆さんも自分に合ったライセンスを選んで、これからどんどん自分のオープンソースの世界に飛び込んでみればと思います。
ただし一応注意書きとして書いておきますが、上にも書いてありますが他のオープンソースプロジェクトを改変したプロジェクトを公開する際、ライセンスの選定には注意が必要です。大体の場合全く同じライセンスを選ぶ必要はありませんが、ただ元ライセンスと両立できないライセンスは使ってはいけません。まあ面倒と感じた場合は同じライセンスで公開すれば概ね問題ありませんがw
#参考記事
Wikipedia - オープンソースソフトウェア
Wikipedia - コピーレフト
Wikipedia - Permissive free software licence(英語)
Wikipedia - Free content(英語)
Wikipedia - ライセンスの互換性
GNU - さまざまなライセンスとそれらについての解説
Open Source Initiative - Licenses & Standards(英語)
Choosing an OSS license(英語)
Qiita - ApacheライセンスのソースコードをGithubにあげるまで
Qiita - ライセンスの選択を恐れる必要はありません