FOSSology の新しいOSSライセンススキャン 「Atarashi」 調査

# はじめに
OpenChain Japan WG Advent Calendar 2019 Day18を担当する @K-Hama です．OSSマネジメントプロセスの研究とOSS管理に利用するツールの研究開発が主な仕事ですが，最近はOSS関係のコミュニティ活動も行っています．本日はFossologyプロジェクト[^0]が進めている新しい検索エンジン「Atarashi[^atarashi1]」を調べて分かったことを簡単にまとめ,インストール方法までを紹介しようと思います．
[^0]: https://www.fossology.org/

# Fossology とは
最初に簡単にFossologyとは何かを紹介します．Fossologyはソフトウェアを構成するソースコードを分析し，中に含まれているOSSライセンス，コピーライト，ECCなどの情報を検出，リストアップするツールです．Fossologyは The Linux Foundationの傘下プロジェクト主体で開発されていて，Fossology自体もOSSライセンスで利用許諾されているので誰でも自由に無料で利用可能となっています．基本的な使い方や情報は日本語のハンズオン資料がOpenChain Japan[^1]（日本語）, FossologyのGithub[^2]で(日本語，英語，ベトナム語)公開されているのでそちらを参考にしてください(日本語の内容はどちらも同じ)．また，誰でも無料で参加できるFossologyのイベントが OpenChain Japan WG Tooling Sub-WG 主催で2019年12月20日に東京で開催されます[^3]．（このイベントにはFossologyの主開発者のMichael C. Jaeger さんも来ます）．Fossologyに関して他に以下のドキュメントが参考になります．

・[Fossologyインストール方法](https://github.com/fossology/fossology/wiki/Install-from-Source)
・[Fossologyインストール方法 日本語](https://github.com/OpenChain-Project/Japan-WG-General/blob/master/Compliance-Tooling/FOSSology/Installation/install_from_source_debian_jp.md)
・[FOSSology - Install from Sourceのススメ](https://elinux.org/images/c/c3/FOSSology-InstallFromSource.pdf)
・@y-ashiduka さんがOpenChain Japan WG Advent Calendar 2019 Day 10に投稿された
　[Yocto環境にmeta-spdxscannerを適用し、SPDX出力環境を構築する（fossdriver利用編）](https://qiita.com/y-ashiduka/items/86a88e4138a7fadc14a1)

[^1]: https://github.com/OpenChain-Project/Japan-WG-General/tree/master/Compliance-Tooling/FOSSology/Hands-on
[^2]: https://github.com/fossology/FOSSologySlides
[^3]: https://lists.openchainproject.org/g/japan-sg-tooling/message/15

# Atarashi の調査にあたって
FossologyにはNomos, Monkなどのライセンス検索エージェントが存在しています．これらに加えてテキストマイニングをしてライセンス検知を行おうとしているのものが、Atarashi[^atarashi1]とのことです．AtarashiはFossologyの１検索エンジンとして開発されているようですが，現時点ではFossologyの本家にPull Request[^pullrequestAtarashi]が行われているもののマージされておらず，FossologyをインストールすればそのまますぐにAtarashiを使えるわけではないみたいです[2019年12月時点]. そこで，本記事ではAtarashiが何を目指して開発されているのか調査し，その上で分かったことをここにまとめようと思います．Atarshiに実装されている細かい検索アルゴリズムについては今回は名前を出すに留めます. ソースコードはGitHub[^Atarashi0]で公開されていますので誰でも確認できます．また，Google Summer of Code Projectの一つのプロジェクトとしてもAtarashiは進められていたたようです．他にAtarashiに関する資料がとしては以下のものが公開されています．

<iframe src="//www.slideshare.net/slideshow/embed_code/key/byKNR0w3td5pM" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/ShaneCoughlan3/fossology-two-new-approaches-for-license-scanning" title="FOSSology: Two New Approaches For License Scanning" target="_blank"> ・ FOSSology: Two New Approaches For License Scanning</a> </strong> from <strong><a href="//www.slideshare.net/ShaneCoughlan3" target="_blank">Shane Coughlan</a></strong> </div>

[^atarashi1]: https://fossology.github.io/atarashi/
[^Atarashi0]: https://github.com/fossology/atarashi/
[^pullrequestAtarashi]: https://github.com/fossology/fossology/pull/1408

## Atarshiの目的

[fossology-two-new-approaches-for-license-scanning](https://www.slideshare.net/ShaneCoughlan3/fossology-two-new-approaches-for-license-scanning)によると，Atarashi はテキスト統計および情報検索をもとにしたnon-rule based scannerです．

ファイルの展開をした後に，
1. SPDX identifiers を見つける
2. SPDX headers　を見つける
3. 見つけたものを適用
4. 類似度をもとにランキング作成
5. 出力表示

といったプロセスで進んでいくようです．SPDX identifiers / SPDX headers についてはSPDXのページ[^spdx]に詳細が書いていますので是非参考にして下さい．

なお　OpenChainJapanのSPDXに関する取り組みは　@Yoshiyuki_Ito　さんが[「製品開発サプライチェーンでのライセンス情報授受の仕組みに関わる、「組織間のライセンス情報授受」サブグループの活動ご紹介」](https://qiita.com/Yoshiyuki_Ito/items/57bed91912ac4cf7d06c)で紹介してくれています．　

また，1. SPDX identifiers を見つける の部分に関してはすでにFossologyで [ojo Agent](https://fossology.github.io/ojo.html)として実装されており，利用可能です．使い方は簡単で検索オプション指定時に[ojo]を選択するだけです．

![ojo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/af4557d2-6883-6401-b407-aca68f66dc60.png)


結果は以下みたいな感じになります．![ojo_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/e1f18ea7-5538-99bf-1b0e-c62a15d4c3ad.png)



[^spdx]: https://spdx.org/ids
## Atarashiの構成
公式ドキュメントによるとAtarashiの中にもいくつかの検索エージェントが含まれており，それを指定し利用する仕組みになっています．名前はそれぞれ利用しているワード検索の手法に由来してます．

- DLD agent
    - レーベンシュタイン距離を求めて類似度検索
        - [Damerau–Levenshtein distance](https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance)
    - https://github.com/fossology/atarashi/blob/master/atarashi/agents/dameruLevenDist.py
 
- wordFrequencySimilarity agent
    - https://github.com/fossology/atarashi/blob/master/atarashi/agents/wordFrequencySimilarity.py
- tfidf agent
    - （Term Frequency、単語の出現頻度）&　idf（英: Inverse Document Frequency、逆文書頻度)
        - [Term Frequency(TF)](https://ja.wikipedia.org/wiki/%E8%8B%B1%E8%AA%9E)、
        - [Inverse Document Frequency(IDF)](https://ja.wikipedia.org/wiki/%E8%8B%B1%E8%AA%9E)
    - https://github.com/fossology/atarashi/blob/master/atarashi/agents/tfidf.py 
- Ngram agent
    - https://github.com/fossology/atarashi/blob/master/atarashi/agents/cosineSimNgram.py


#前準備
以下をインストール

* Python >= v3.5
* pip3

#インストール
今回はインストール方法まで紹介しようと思います．(以下 commit id 387e144)  
はじめに　requirement.txt を利用してパッケージを導入すればいいのですが、numpyだけは別途入れる必要があります。


```
$ git clone  https://github.com/fossology/atarashi.git
$ cd atarashi
$ pip3 install numpy
$ pip3 install -r requirements.txt
$ pip3 install .
```

以上でインストールは完了です．

下記のようにヘルプコマンドを押して

```
$ atarashi -h
```   

以下のように出てきたらインストールは成功
<img width="367" alt="fossology-atarashi-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373931/2046a1b2-e3ac-90bb-f1a1-b5903c2655fb.png">

インストールのあとどのように利用するか，利用した結果などを今後紹介できたらいいと思います．


#さいごに
FOSSologyのを含めOSSライセンスの検索エンジンに関しては，いろいろなニュース出てきてて，今とても熱い分野だと言えそうです．(例： [Digging for license information with FOSSology](https://lwn.net/Articles/803725/) ). 今後OpenChain Japan WG Tooling Sub-WGでは企業の枠を超えてFossologyやAtarashiの利用方法調査や機能の実装も協力して進めていきたいと思います．興味があればメーリスに登録することをお勧めします．　https://lists.openchainproject.org/g/japan-sg-tooling

なお、OpenChain Japan WG Tooling Sub-WGの活動については @ystk-k さんの記事を参考にしてみてください。
https://qiita.com/ystk-k/items/1ec2b416cc05b98597a9

#追記(2020/01/06)
Fosoology/Atarashiのレポートが公開されてたようなので共有しておきます．
https://github.com/fossology/atarashi/files/4016573/Atarashi-Report.pdf

公開場所: https://github.com/fossology/atarashi/pull/60 

#明日は
@yuichi-kusakabe さんがOpenChainとAGLに関係する記事を書いてくれます．Automotive Grade Linuxに興味がある方は是非一読しましょう．