Open Source License API ?
- Announcing the Open Source License API | Open Source Initiative
- OpenSourceOrg/api: Light API based on the licenses spec
う~ん? どうやらオープンソース・ライセンスに関する情報(メタデータ)を取り出せる仕組みのようだ。
たとえば Apache License 2.0 の情報を取り出すには https://api.opensource.org/license/Apache-2.0 にリクエストを投げる。 すると結果が JSON 形式で返ってくる。 (以下は見やすいように適当に改行を入れている。 各項目の Schema はリポジトリの doc/endpoints.md に説明がある)
{
"id":"Apache-2.0",
"identifiers":
[
{
"identifier":"Apache-2.0",
"scheme":"DEP5"
},
{
"identifier":"Apache-2.0",
"scheme":"SPDX"
},
{
"identifier":"License :: OSI Approved :: Apache Software License",
"scheme":"Trove"
}
],
"links":
[
{
"note":"tl;dr legal",
"url":"https://tldrlegal.com/license/apache-license-2.0-%28apache-2.0%29"
},
{
"note":"Wikipedia page",
"url":"https://en.wikipedia.org/wiki/Apache_License"
},
{
"note":"OSI Page",
"url":"https://opensource.org/licenses/Apache-2.0"
}
],
"name":"Apache License, Version 2.0",
"other_names":[],
"superseded_by":null,
"keywords":
[
"osi-approved",
"popular",
"permissive"
],
"text":
[
{
"media_type":"text/html",
"title":"HTML",
"url":"https://www.apache.org/licenses/LICENSE-2.0"
}
]
}
あるいは SPDX の識別子を使って https://api.opensource.org/license/SPDX/Apache-2.0 にリクエストを投げても同じ結果が帰ってくる。
キーワードで検索することもできるようだ。 たとえば Copyleft なライセンスを探すのであれば https://api.opensource.org/licenses/copyleft とリクエストを投げれば,先程のようなライセンス情報が配列で返ってくる。 ちなみに licenses/ のうしろに何もキーワードを付けないと登録されている全ライセンスの情報1 が返ってくるようだ。
リポジトリを見ると Go 言語による実装がある2。 こんな感じで使える。
package main
import (
"fmt"
"github.com/opensourceorg/api/client"
)
func ohshit(err error) {
if err != nil {
panic(err)
}
}
func main() {
license, err := client.Get("Apache-2.0")
ohshit(err)
fmt.Printf("%s\n", license.Name)
}
これを実行すると以下のような出力になる。
$ go run sample.go
Apache License, Version 2.0
キーワードで探すならこんな感じかな。
package main
import (
"fmt"
"github.com/opensourceorg/api/client"
)
func ohshit(err error) {
if err != nil {
panic(err)
}
}
func main() {
licenses, err := client.Tagged("copyleft")
ohshit(err)
for _, license := range licenses {
fmt.Printf("%s\n", license.Name)
}
}
このコードの実行結果は以下のとおり。
$ go run sample2.go
GNU General Public License, Version 2.0
GNU General Public License, Version 3.0
GNU Lesser General Public License, Version 2.1
GNU Lesser General Public License, Version 3.0
Licence Libre du Québec – Réciprocité forte, Version 1.1
Licence Libre du Québec – Réciprocité, Version 1.1
Mozilla Public License, Version 2.0
う~ん。 正直に言って,既に SPDX のようなサービスがあるのに,わざわざこのような仕組みを作る意味がよく分からない。
OSI がやることに意味があるということだろうか。 あるいは API に著作権があるとされた昨年の判決を受けての防衛措置だったりして。