オープンソースソフトウェアのライセンスについて

プログラミング

どうも、こんにちは!

僕はソフトウェア開発を行うエンジニアですが、実務上では、オープンソースソフトウェア(以下、「OSS」)ライセンスについて、あまり細かく理解していなくても、プログラミング作業をする上では支障がありません。

そのため、大事なことなのですが、曖昧なままにしていました😅

また、OSSライセンスは情報処理試験の基本・応用情報技術者試験ともに出題範囲となっています。

OSSライセンスについては、いろいろ区分けされていてややこしいので、この機会に勉強の意味でまとめていきたいと思います!

オープンソースソフトウェアとは

ライセンスのお話に入る前に、まずOSSについて触れておきましょう。

OSSはソフトウェア開発やプログラミング学習を行う上で、僕たちも大変お世話になっています。

例えば主なOSSとしては

OS Linux
webサーバ Apache, Tomcat
メールサーバ Postfix
DBサーバ MySQL, PostgreSQL
仮想ソフトウェア VirtualBox

などがあります。

定義

そもそもOSSはどのような定義になっているのでしょうか?

Wikipediaによると、団体によってそれぞれ定義付けされているようですが、一般的なのが、オープンソース・イニシアティブ(以下、「OSI」)による定義でした。

また、応用情報技術者試験のテキストにおいても、OSSの説明として、OSIの定義を用いています。

OSIでは、以下の10の基準に準拠したソフトウェアをOSSとしています。

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

オープンソース・イニシアティブ(OSI) 公式サイト

https://opensource.org/osd

オープンソースグループ・ジャパン 日本語訳
詳しくはこちらをご覧ください!

https://opensource.jp/osd/osd-japanese.html

OSSは、ソフトウェアは「人類の共通財産」であるという考え方に基づいています。

自宅のPCでプログラミング環境を構築する際、導入するソフトウェアは全てインターネットからダウンロードして自由に利用できますよね?

これはOSSとして、公開されているため、自由利用ができることになっています。

このことは、非常に便利である一方で、では、

OSSを利用して作成したソフトウェアについて、商用利用する際はどうのような扱いになるのだろう?

作成したソフトウェアを販売する際は、もちろん有料としたいし、ソースコードも開示したくないけど…

このあたりの疑問を整理するためには、ライセンスについて学ぶ必要があります。
では、以降で本題に入っていきましょう!

ライセンスについて

まずライセンスの解釈は、次のとおりとなります。

ライセンスとは

ソフトウェアを利用する権利

では、ライセンスにはどのようなものがあるのでしょうか?

大きく分けて3つのカテゴリがあります。

カテゴリ 代表的なライセンス 改変部分の
ソースコードの開示
他のソフトウェアの
ソースコードの開示
コピーレフト型 GPL
準コピーレフト型 LGPL, MPL ×
非コピーレフト型 BSD, Apache Licence × ×

コピーレフト型

OSSには、「人類共通の財産」という理念がありました。
この理念に厳格に則ったものが、コピーレフト型となります。

IPA(情報処理推進機構)では、コピーレフトの特徴について次のように発表しています。

著作者が著作物に対する権利(著作権)を保有したまま、著作物の配布条件として、利⽤者に著作物を複写・改変・再配布する⾃由を与える⼀⽅で、 複写・改変・再配布された派⽣物(⼆次的著作物)の配布者に対しても、全く同じ条件で派⽣物を配布することを義務付けるといった考えである。

この「コピーレフト」の概念は、著作物が配布され続ける限り、制限なく適⽤され続けるといった特徴をもつ。

OSSライセンスの比較、利用動向および係争に関する調査

コピーレフト型のOSSは、自由に利用することができますが、
そのOSSをもとに作成したソフトウェアについては、「派⽣物(⼆次的著作物)の配布者に対しても、全く同じ条件で派⽣物を配布することを義務付ける」とあるように、作成されたソースコードについても自由に利用できるように、つまり、ソースコードを全て公開する必要がでてきます

準コピーレフト型

しかし、現実では、OSSを利用して作成したソフトウェアを公開したいけど、ソースコードは開示したくないという場合は、多くあると思います。

全てのソースコードを開示しなければならないとなると、商用利用が促進されないことにもつながってしまいます。

そこで、開示条件を緩めたライセンスが、「準コピーレフト型」になります。

上記の表では、「他のソフトウェアのソースコードの開示」が「×」となっています。
つまり、独自に開発したソースコードは、公開しなくてもよいことになります。

ただし、元のOSSのソースコードを改変した箇所がある場合には、その箇所は開示する必要があります。

非コピーレフト型

さらに開示条件を緩めたライセンスが、「非コピーレフト型」となります。

緩めたというよりは、「開示しなくてもよい」ということになります。

コピーレフトという名前について

コピーレフトは、コピーライト(著作権)をもじったものになります。

コピーレフトの考え方が広まる以前は、ソフトウェア・ソースコードは、コピーライトにより、著作者のものとして保護されていました。

一個人や組織のものとして保護されることは、非常によいことなのですが、ソフトウェアの幅広い利用や普及の観点から考えると、自由に利用ができないことは望ましくありません。

そこででてきたのが、コピーレフトの考え方だったのです。

人類共通の財産であり、みんなで共有できるもの、まさにコピーライトとは真逆の考え方だったのですね。

情報処理試験での出題内容

問題形式で再確認すると理解が深まると思いますので、応用情報技術者試験で、過去に出題された問題をご紹介します。

応用情報技術者 平成22年秋期 午前問21

オープンソースソフトウェアの特徴のうち,適切なものはどれか。

  1. 一定の条件の下で,ソースコードの変更を許可している。
  2. 使用分野及び利用者を制限して再配布できる。
  3. 著作権が放棄されている。
  4. 無償で配布しなければならない。
回 答

「1」が正解となります。
「一定の条件の下で」という点は、コピーレフト型であればソースコードを開示することであり、準コピーレフト型についてもソースコードの変更は「改変」となりますので、開示することが条件になります。

2については、OSSの定義である10の基準のうち「5 個人やグループに対する差別の禁止」「6 利用する分野に対する差別の禁止」に反することになります。
※ 上記「定義」を参照。

3は、著作権は放棄されていません。
ソースコードを全て開示する必要がある「コピーレフト型」であっても、「著作者が著作物に対する権利(著作権)を保有したまま」となっています。
※ 上記「コピーレフト型」を参照。

4は、OSSの定義である10の基準のうち「1 再頒布の自由」で、「ソフトウェアを販売あるいは無料で頒布することを制限してはなりません。」としています。
つまり、OSSを利用して作成したソフトウェアを無料で公開することはもちろん、販売することも認めています。
要は、有償無償は関係なく、ソースコードが開示されているかどうかがOSSは重要ということになります。

まとめ

OSSは、てっきり全て無償という意識がありましたが、有償か無償が基準となるのではなく、「どの程度ソースコードを開示する必要があるか」がポイントになります。

OSSは、3つのカテゴリに分かれ、ソースコードをより開示する必要があるカテゴリから並べると、

コピーレフト型 > 準コピーレフト型 > 非コピーレフト型

となりました。

これまでは、インターネットに公開されているソフトウェアについて、「無料で使えて便利だなぁ」くらいにしか思っていませんでした😅

これからは、どういったライセンスとなっているのか意識してみるとより理解が深まるかもしれません。

また、エンジニアとして、業務で必要となる知識でもありますので、忘れないようにしておきたいですね!

参考資料

【送料無料】 ニュースペックテキスト応用情報技術者 2020年度版 / TAC株式会社情報処理講座 【本】
プログラミング
ダイジュをフォローする
効率的にプログラミングスキルを身につけて、ITエンジニアになろう!

どの企業も中途採用では、入社後に新人研修のような手厚いプログラミング研修を用意していることはなく、すぐに現場配属となることがほとんどです。
そのため、転職前にしっかりと学習しておくことが必要となります。
僕は、企業の新人研修とプログラミングスクール受講のどちらも経験したことがありますが、スクールの受講内容は、企業の研修にも引けを取らないと感じます!
エンジニアへの転職を本気で考えている方は、効率的に差を埋めるためにもぜひプログラミングスクールの受講をおすすめします!

ITエンジニア ダイジュBlog
タイトルとURLをコピーしました