ページの本文へ

Hitachi

日立ソリューションズ ソフトウェア部品管理ソリューション

OSS管理ブログ

FOSSologyの解析オプション(エージェント)の詳細

FOSSologyの解析オプション(エージェント)の詳細

はじめに

FOSSologyにはnomosやmonkなどのさまざまな解析エージェントが含まれています。これらはソースコードのアップロード時にオプションにて指定することになりますが、今回はこれらの解析オプション(エージェント)について解説したいと思います。

FOSSologyアップロード画面オプション項目

中心的な役割を担うエージェントから順に説明していきます。それではいきましょう。

Nomos License Analysis

Nomos(読み方:ノモス)はMonkと並ぶFOSSologyの中心的なスキャンエージェントの1つです。正規表現ベースのライセンススキャナーで、短いフレーズとヒューリスティックを用いて識別をおこないます。

具体的なイメージを持つために実際に使われる正規表現を見てみます。
https://github.com/fossology/fossology/blob/master/src/nomos/agent/STRINGS.in

かなり大きいファイルですが各正規表現のパターンは以下のように記載されています。

%ENTRY% _TITLE_XYZ-LICENSE1
%KEY% "licen[cs]"
%STR% "XYZ-licen[cs]e (v|version ) 1\.?0" 

まずKEYを使用してライセンスに関連する文を特定した後、正規表現を使用してライセンスの識別がおこなわれます。このような段階的な認識と特定によって解析が効率的になるようです。

またNomosはライセンス認識が不十分な場合にも「UnclassifiedLicense」と特定したり、「BSD」「GPL」といったライセンスカテゴリーの特定をおこなったりします。

例えば、ライセンススキャンにおいては以下のような場面があります。

  • 何らかのライセンスと思われるフレーズが認識できたが、OSSライセンスかどうかは特定できない。
  • BSDであることは認識できたが、何条項かがわからない。
  • GPLであることは認識できたが、バージョンがわからない。

このような場面において、Nomosは分かる範囲で「UnclassifiedLicense」「BSD」「GPL」といったレベルの特定をおこないます。

nomosの解析結果(unClassifiedLicense)
例:何らかのライセンスと思われる文字列が検出された場合
nomosの解析結果(BSD)
例:何条項かはわからないがBSDカテゴリーのライセンスが検出された場合

ここまで説明したようにNomosは「広めにライセンスを検出すること」に長けたツールです。偽陽性を許容し、ライセンスと思われるものは(完璧に特定までいかなくても)すべて検出しようとするのが特徴です。

次に説明するMonkはこの逆の特徴を持っていますので、この2つを組み合わせることで効果的なライセンススキャンが可能となります。

ちなみにNomosという名前は「法」を表すギリシャ語(ギリシャ神話の法の守護神)にちなんで付けられたもので、これがFOSSologyの起こりとなっています(詳細)。

参考:NomosのWiki
https://github.com/fossology/fossology/wiki/Nomos

Monk License Analysis

Monk(読み方:モンク)はNomosと並ぶ中心的なスキャンエージェントの1つです。解析対象のファイルにライセンステキストが出現するかどうか、実際のライセンステキストとの一致率を計算して出力します。

monkの解析結果
例:Monkの解析結果

ライセンステキストと判断されたものはJaccard係数で類似度が計算されます。現在は66%以上の一致率のものがMonkで検出される仕様になっているようです。

※検出される最低値はmonk.hのMIN_ALLOWED_RANKで66と指定されています。
https://github.com/fossology/fossology/blob/master/src/monk/agent/monk.h

Monkは既存のライセンスを正確に検出することが得意ですが、未知の(新しい)ライセンスなどは認識することはできません。実際のところMonkの検出が出現することは多くないため、Nomosと組み合わせて使用するのがベストプラクティスとなります。

参考:MonkのWiki
https://github.com/fossology/fossology/wiki/Monk

Copyright/Email/URL/Author Analysis

本オプションは、著作権関連の情報を検出する解析エージェントを有効にします。正規表現によって、「"Copyright 2022 xxxx"」のような「"Copyright"」で始まる文字列を検出したり、「"written by"」「"maintained by"」で始まる文字列などを検出します。またコード所有者に関する情報として、メールアドレス(例:xxxx@mail.domain)やURL(例:http://…)についても検出します。

Copyrightの解析結果
例:著作権表示の検出結果

正規表現はこちらで見ることができます。
https://github.com/fossology/fossology/blob/master/src/copyright/agent/copyright.conf

インストール先はこのあたりになります。
/usr/local/share/fossology/copyright/agent/copyright.conf

参考:CopyrightのWiki
https://github.com/fossology/fossology/wiki/Copyright

ECC Analysis

ECC(Export Control Codes / Export Control and Customs)のオプションは、輸出規制に関連する文字列検出をおこなう解析エージェントを有効化します。正規表現に基づいて「"export control"」「"crypt"」などの文字列が検出されます。

ECCの解析結果
例:ECCの検出結果

正規表現はこちらで見ることができます。
https://github.com/fossology/fossology/blob/master/src/copyright/agent/ecc.conf

インストール先はこのあたりになります。
/usr/local/share/fossology/ecc/agent/ecc.conf

参考:ECCのWiki
https://github.com/fossology/fossology/wiki/ECC

Keyword Analysis

本オプションは、任意のキーワードを検出する解析エージェントを有効化します。デフォルトでは「"patent"」「"licensed under"」などの文字列を検出可能です。設定ファイルに検出したい文字列を指定すれば、任意の文字列を検出することができます。

Keywordの解析結果
例:Keywordの検出結果

正規表現はこちらで見ることができます。
https://github.com/fossology/fossology/blob/master/src/copyright/agent/keyword.conf

インストール先はこのあたりになります。
/usr/local/share/fossology/keyword/agent/keyword.conf

例えば以下のように「hogehoge」を追記すれば、解析時に「hogehoge」という文字列を検出してくれます。

sudo sed -i "$ a keyword=__keyword__|(hogehoge)" /usr/local/share/fossology/keyword/agent/keyword.conf

MIME-type Analysis

本オプションではMIMEタイプを検出することができます。解析済みファイルのInfo画面からMIMEタイプを確認することができます。

MIMEの解析結果
例:cssのファイルが「text/css」として検出されている場合

Package Analysis

本オプションではrpmファイル(CentOSなどRed Hat系のLinuxパッケージ)の解析をおこなうエージェントを有効化することができます。rpmのメタデータをパースして出力します。

Packageの解析結果
例:rpmの解析結果

なお「Package Analysis」という名称から、例えばnpmパッケージなどの依存関係の解析ができそうな印象も受けますが、これはサポートされていないようです。

★本オプションについては現状、上記のとおりログとして参照する方法しかわかっていません(専用のGUIで視覚的に見るようなことはできないように思われます)。またドキュメントなどを見るとdebファイルも解析できるようなのですが、試したところ解析できませんでした。念のためご注意ください。

Ojo License Analysis

Ojoは「SPDX identifier」を検出するオプションです。

参考:SPDX IDs
https://spdx.dev/ids/

SPDX identifierは、SPDX(Software Package Data Exchange)というLinux Foundation傘下のプロジェクトが定義しているライセンスの識別子です。例えば、Apache License 2.0なら「Apache-2.0」、MIT LicenseとGPL 2.0のデュアルライセンスなら「MIT OR GPL-2.0」といった具合に表現します。

SPDX identifierはLinux Kernelをはじめ、さまざまなプロジェクトで使われているライセンス表現のスタンダードです。
https://www.kernel.org/doc/html/latest/process/license-rules.html#license-identifier-syntax

Ojoは以下のようにSPDX identifierを検出します。

Ojoの解析結果
例:Ojoの解析結果

REUSE.Software Analysis

REUSEは、FSFE(Free Software Foundation Europe)によって開始された取り組みで、ソフトウェアプロジェクトにおける著作権・ライセンスの宣言仕様を定義しています。

参考:REUSE Specification
https://reuse.software/spec/

本仕様では、例えばソースファイルのヘッダーには以下のように1つ以上のSPDX-FileCopyrightTextタグ(著作権表示)と1つ以上のSPDX-License-Identifierタグ(ライセンス名)を含めることが指定されています。

# SPDX-FileCopyrightText: 2016, 2018-2019 Jane Doe 
# SPDX-FileCopyrightText: 2019 Example Company
#
# SPDX-License-Identifier: GPL-3.0-or-later 

またテキストファイルではない場合で、上記のようなコメントを書けないとき(例:foobar.jpg)には、対象ファイルに.licenseを付けたファイル(foobar.jpg.license)を作成して上記のような情報を記載することが指定されています。

参考:REUSE準拠のソースコードのサンプル
https://github.com/fsfe/reuse-example

本仕様に則って書かれたソースコードがFOSSologyの解析対象である場合、この規則に沿ってライセンス情報を検出すれば効率よく、かつ正確に(誤検知なく)解析ができそうです。これがREUSE.Software Analysisの特徴です。またREUSE.Softwareは「ReSo」と略され、FOSSologyの解析結果画面においては「reso」と表示されます。

ReSoの解析結果
例:ReSoによって画像ファイルのライセンスが検出される場合

なお本オプションを有効にすると自動的にOjoも有効化されます。ReSoは単独で解析は実施しておらず、Ojoの解析結果を使っています。

仕組みは以下のとおりです。

  1. ojoがSPDXのライセンス表現を見つける
  2. 見つけたファイルのファイル名が *.license(例:foobar.jpg.license)だった場合、REUSE対象としてresoに情報を渡す
  3. resoはojoの情報から対象ファイル(例:foobar.jpg)を同一ライセンスとして検出する

Software Heritage Analysis

「Software Heritage」は、ユネスコ(UNESCO)とフランス国立情報学自動制御研究所(INRIA)の連携協定によるプロジェクトです。簡単にいうと「Internet Archive(Wayback Machine)のソースコード版」になります。

参考:Software Heritage
https://www.softwareheritage.org/

世の中の利用可能なすべてのソフトウェアソースコードを収集・保管するサービスで、GitHubやGitLab、npmなどのホスティングサイトから情報を収集してアーカイブしています。

FOSSologyでは2019年にSoftware Heritageとの統合機能が実装されています。解析対象ファイルがSoftware Heritageで公開されているものかどうか(≒解析対象にOSSが含まれているかどうか)を調べられるようになっています。

統合の詳細はこちらに記載されています。
https://github.com/sandipbhuyan/fossology/wiki/GSoC-Final-Report:-Integration-of-Software-Heritage-in-FOSSology

仕組みは以下のとおりです。

  • 解析対象の各ファイルからsha256を計算する。
  • FOSSologyのAPI「/api/1/content/sha256:(hash)」によりSoftware Heritageを検索する。
  • 該当データがあればライセンス情報とともにFOSSologyのGUIで表示する。
Software Heritageの解析結果
SoC Final Report: Integration of Software Heritage in FOSSology

sha256以外は社外に送信されることはないため、ソースファイルの内容が外部に流出することはありません。企業ユーザーも安心して使っていただける機能かと思います。

以上です。

今回はFOSSologyの解析オプション(各エージェント)の解説をおこないました。OSSコンプライアンス活動の一助になれば幸いです。

もう少しくわしい情報が欲しいなどのご相談がありましたら、こちらからお気軽にお問い合わせください。

オープンソース管理ソリューション
タグ一覧
新着記事