(57)【特許請求の範囲】
【請求項１】
ソフトウェア間のライセンス伝播を判定するライセンス伝播判定システムであって、
関数のライセンスと、前記関数を呼び出すバイナリと動的リンクされたバイナリを含むソフトウェアと、前記ソフトウェア同士の関係とを記憶するライセンス伝播情報データベースと、前記ライセンス間の優先度を記憶する優先度データベースとを記憶する記憶部と、
前記ライセンス伝播情報データベースと前記優先度データベースとに基づいて、ソフトウェアに適用すべきライセンスを決定するライセンス伝播決定部と、
を備えることを特徴とするライセンス伝播判定システム。
【請求項２】
請求項１に記載のライセンス伝播判定システムであって、
前記記憶部は、バイナリのインストール先ディレクトリの情報を記憶するインストール情報データベースと、インストール先ディレクトリにインストールされたバイナリ間の動的リンクの情報を記憶する動的リンク情報データベースと、バイナリの関数呼出における呼び出し元の情報を記憶する呼出元関数情報データベースと、バイナリが外部に公開している関数の情報を記憶する公開関数情報データベースとを記憶し、
前記インストール情報データベースと、前記動的リンク情報データベースと、前記呼出元関数情報データベースと、公開関数情報データベースとを用いてライセンス伝播に関する情報を生成し、生成したライセンス伝播に関する情報を、前記ライセンス伝播情報データベースに記憶するライセンス伝播情報生成部、
を備えることを特徴としたライセンス伝播判定システム。
【請求項３】
請求項２に記載のライセンス伝播判定システムであって、
前記インストール情報データベースに記憶されている前記インストール先ディレクトリを用いてバイナリ間の動的リンクに関する情報を検出し、検出したバイナリ間の動的リンクに関する情報を、前記動的リンク情報データベースに記憶する動的リンク検出部、
を備えることを特徴としたライセンス伝播判定システム。
【請求項４】
請求項２記載のライセンス伝播判定システムであって、
前記記憶部は、ソースコードファイル名を含むソフトウェアのライセンス情報を記憶したライセンス情報データベースを記憶し、
前記インストール先ディレクトリと、前記インストール情報データベースと、前記ライセンス情報データベースとを用いて関数呼出における呼出元に関する情報を検出し、検出した関数呼出における呼出元関数に関する情報を、前記呼出元関数情報データベースに記憶する関数呼出検出部、
を備えることを特徴としたライセンス伝播判定システム。
【請求項５】
請求項２記載のライセンス伝播判定システムであって、
前記記憶部は、ソースコードファイル名を含むソフトウェアのライセンス情報を記憶したライセンス情報データベースを記憶し、
前記インストール先ディレクトリと、前記インストール情報データベースと、前記ライセンス情報データベースとを用いて関数呼出における公開関数に関する情報を検出し、検出した関数呼出における公開関数に関する情報を、前記公開関数情報データベースに記憶する関数呼出検出部、
を備えることを特徴としたライセンス伝播判定システム。
【請求項６】
請求項１記載のライセンス伝播判定システムであって、
ソフトウェアの名称と前記関数の名称のうちの少なくとも１つと、前記関数のライセンスとを、前記ライセンス伝播決定部が決定した結果として表示部に出力する出力部、
を備えることを特徴とするライセンス伝播判定システム。
【請求項７】
請求項６記載のライセンス伝播判定システムであって、
前記出力部は、ソフトウェア名と、ソフトウェアに含まれるバイナリのパスと、動的リンク元のバイナリから呼び出される公開関数と、前記公開関数のライセンスと、前記公開関数を記述しているソースコードファイル名と、前記ソースコードファイルのライセンスと、バイナリ間の動的リンクによるリンク関係とを、前記ライセンス伝播決定部が決定した結果として出力する、
ことを特徴とするライセンス伝播判定システム。
【請求項８】
請求項６記載のライセンス伝播判定システムであって、
前記出力部は、ソフトウェア名と、ソフトウェアに含まれるバイナリのパスと、前記関数のライセンスと、バイナリ間の動的リンクによるリンク関係とを、前記ライセンス伝播決定部が決定した結果として出力する、
ことを特徴としたライセンス伝播判定システム。
【請求項９】
請求項６記載のライセンス伝播判定システムであって、
前記出力部は、ソフトウェア名と、ソフトウェアに含まれるバイナリのパスと、バイナリのライセンスと、バイナリ間の動的リンクによるリンク関係とを、前記ライセンス伝播決定部が決定した結果として出力する、
ことを特徴としたライセンス伝播判定システム。
【請求項１０】
請求項６記載のライセンス伝播判定システムであって、
前記出力部は、ソフトウェア名と、ソフトウェアのライセンスと、ソフトウェア間の動的リンクによるリンク関係とを、前記ライセンス伝播決定部で決定した結果として出力する、
ことを特徴としたライセンス伝播判定システム。
【請求項１１】
ソフトウェア間のライセンス伝播を判定するライセンス伝播判定方法であって、
バイナリのインストール先ディレクトリの情報を記憶するインストール情報データベースに記憶されている前記インストール先ディレクトリを用いてバイナリ間の動的リンクに関する情報を検出すること、
前記インストール先ディレクトリと、前記インストール情報データベースと、ソースコードファイル名を含むソフトウェアのライセンス情報を記憶したライセンス情報データベースとを用いて関数呼出における呼出元に関する情報を検出すること、
前記インストール先ディレクトリと、前記インストール情報データベースと、ソースコードファイル名を含むソフトウェアのライセンス情報を記憶したライセンス情報データベースとを用いて関数呼出における公開関数に関する情報を検出すること、
関数のライセンスと、前記関数を呼び出すバイナリと動的リンクされたバイナリを含むソフトウェア同士の関係とを記憶するライセンス伝播情報データベースと前記ライセンス間の優先度を記憶する優先度データベースとに基づいて、ソフトウェアに適用すべきライセンスを決定すること、
ソフトウェアの名称と前記関数の名称のうちの少なくとも１つと、前記関数のライセンスとを、前記決定した結果として表示部に出力すること、
を含むことを特徴とするライセンス伝播判定方法。
【請求項１２】
コンピュータに、
バイナリのインストール先ディレクトリの情報を記憶するインストール情報データベースに記憶されている前記インストール先ディレクトリを用いてバイナリ間の動的リンクに関する情報を検出すること、
前記インストール先ディレクトリと、前記インストール情報データベースと、ソースコードファイル名を含むソフトウェアのライセンス情報を記憶したライセンス情報データベースとを用いて関数呼出における呼出元に関する情報を検出すること、
前記インストール先ディレクトリと、前記インストール情報データベースと、ソースコードファイル名を含むソフトウェアのライセンス情報を記憶したライセンス情報データベースとを用いて関数呼出における公開関数に関する情報を検出すること、
関数のライセンスと、前記関数を呼び出すバイナリと動的リンクされたバイナリを含むソフトウェア同士の関係とを記憶するライセンス伝播情報データベースと前記ライセンス間の優先度を記憶する優先度データベースとに基づいて、ソフトウェアに適用すべきライセンスを決定すること、
ソフトウェアの名称と前記関数の名称のうちの少なくとも１つと、前記関数のライセンスとを、前記決定した結果として表示部に出力すること、
を実行させるプログラムがコンピュータ読み取り可能に記録された記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアにおけるライセンスの伝播を自動的に判定するライセンス伝播判定システム、ライセンス伝播判定方法、および記録媒体に関する。
【背景技術】
【０００２】
従来から、ソフトウェアが依存する他のプログラムから受けるライセンス制限についての様々な技術がある。例えば、特許文献１では、対象ソフトウェアが自身のプログラム情報テーブルを有し、各種ソフトウェアのプログラム情報テーブルと各種ライセンス情報テーブルを格納したデータベースを参照することより、対象ソフトウェアが依存するソフトウェアから受けるライセンス制限が判別される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−２５２８７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１には、ソフトウェアが依存する他のプログラムから受けるライセンス制限を自動的に判別する仕組みが記載されている。しかし、特許文献１は、ソフトウェア間のライセンス制限の関係が事前に必要であり、バイナリ間の動的リンク関係の自動抽出及び関数レベルでのライセンスについては記載がない。したがって、バイナリ間の動的リンク関係の自動抽出及び関数レベルでのライセンス伝播を判別することができない。【０００５】
そこで、本発明は、バイナリ間の動的リンク関係の自動抽出と関数レベルでのライセンス伝播情報を用いることで、バイナリ間の動的リンク関係の自動抽出及び関数レベルでのライセンス伝播を判別する機能を有するライセンス伝播判定システム、ライセンス伝播判定方法、および記録媒体を提供する。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、例えば特許請求の範囲に記載の構成を採用する。本発明は、ソフトウェア間のライセンス伝播を判定するライセンス伝播判定システムであって、関数のライセンスと、前記関数を呼び出すバイナリと動的リンクされたバイナリを含むソフトウェアと、前記ソフトウェア同士の関係とを記憶するライセンス伝播情報データベースと、前記ライセンス間の優先度を記憶する優先度データベースとを記憶する記憶部と、前記ライセンス伝播情報データベースと前記優先度データベースとに基づいて、ソフトウェアに適用すべきライセンスを決定するライセンス伝播決定部と、を備えることを特徴とするライセンス伝播判定システムとして構成される。【０００７】
また、本発明は、上記ライセンス伝播判定システムで実行されるライセンス伝播判定方法、および記録媒体としても把握される。
【発明の効果】
【０００８】
本発明によれば、バイナリ間の動的リンク関係の自動抽出と関数レベルでのライセンス伝播情報を用いることで、バイナリ間の動的リンク関係の自動抽出及び関数レベルでのライセンス伝播を判別する機能を有するライセンス伝播判定システム、ライセンス伝播判定方法、および記録媒体を提供することができる。【０００９】
上記以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態に係るライセンス伝播検出装置構成のブロック図である。
【図２】本発明の実施形態に係るディレクトリ構造図である。
【図３】本発明の実施形態に係る処理の流れを示したイメージ図である。
【図４】本発明の実施形態に係るインストール情報DBである。
【図５】本発明の実施形態に係るライセンス情報DBである。
【図６】本発明の実施形態に係るライセンス優先度情報DBである。
【図７】本発明の実施形態に係る動的リンクを検出する処理を示すフロー図である。
【図８】本発明の実施形態に係る動的リンク情報DBである。
【図９】本発明の実施形態に係る関数呼出を検出する処理を示すフロー図である。
【図１０】本発明の実施形態に係る関数呼出を検出する処理を示すフロー図である。
【図１１】本発明の実施形態に係るライセンスを決定する処理を示すフロー図である。
【図１２】本発明の実施形態に係る呼出元関数情報DBである。
【図１３】本発明の実施形態に係る公開関数情報DBである。
【図１４】本発明の実施形態に係るライセンス伝播情報を生成する処理を示すフロー図である。
【図１５】本発明の実施形態に係るライセンス伝播情報ＤＢである。
【図１６】本発明の実施形態に係るライセンス伝播を決定する処理を示すフロー図である。
【図１７】本発明の実施形態に係るライセンス伝播を決定するためのツリーである。
【図１８】本発明の実施形態に係るライセンス伝播判定システムのユーザインタフェースおよび出力例である。
【図１９】本発明の実施形態に係るライセンス伝播判定システムのユーザインタフェースおよび出力例である（ツリー表示）。
【図２０】本発明の実施形態に係るライセンス伝播判定システムのユーザインタフェースおよび出力例である（ツリー表示）。
【図２１】本発明の実施形態に係るライセンス伝播判定システムのユーザインタフェースおよび出力例である（ツリー表示）。
【発明を実施するための形態】
【実施例１】
【００１１】
本実施例は、本発明にかかるライセンス伝播判定システム、ライセンス伝播判定方法、および記録媒体の一実施例である。以下、本実施例を図１から図１８を用いて説明する。【００１２】
図１は、本実施例におけるライセンス伝播検出システムの構成を示すブロック図である。以下では、本実施例におけるライセンス伝播検出システムを、１つの本実施例におけるライセンス伝播検出装置として実現する例について説明しているが、例えば、情報記憶部１０８を他の装置によって構成する等、複数の装置に分けて構成してもよい。【００１３】
図１に示すように、本実施例におけるライセンス伝播検出装置は、入力部１０１と、演算部１０３と、記憶部１０８と、出力部１１８とを有して構成されている。入力部１０１は、例えば、キーボードやマウスなどのユーザインタフェース１０２を有する。演算部１０３は、例えば、中央演算処理装置などの演算装置から構成される。記憶部１０８は、例えば、プログラムの実行や各部の制御などを行う主記憶装置や補助記憶装置などの記憶装置から構成され、プログラムや設定値などを保存する。出力部１１８は、例えば、モニタなどの表示装置から構成され、ライセンスの伝播結果などを表示や伝播結果を記録したファイルを出力する。【００１４】
なお、ライセンス伝播検出装置で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録されて提供されてもよい。また、情報端末１で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードして提供したり配布してもよく、ＲＯＭ等に予め組み込んで提供するように構成してもよい。【００１５】
演算部１０３は、動的リンク検出部１０４と、関数呼出検出部１０５と、ライセンス伝播情報生成部１０６と、ライセンス伝播決定部１０７とを有している。【００１６】
動的リンク検出部１０４は、バイナリファイル間の動的リンクを検出する処理をする。関数呼出検出部１０５は、バイナリファイル間での関数呼び出しを検出する処理をする。ライセンス伝播情報生成部１０６は、インストール情報DB１１１、動的リンク情報DB１１２、呼出元関数情報DB１１４、公開関数情報DB１１５を統合してライセンス伝播情報DB１１６を生成する。ライセンス伝播決定部１０７は、ライセンス優先度情報DB１１７とライセンス伝播情報DB１１６を用いてライセンスの伝播を決定する処理をする。これらの各部が行う具体的な処理については、フローチャートを用いて後述する。【００１７】
情報記憶部１０８は、<作業>ディレクトリ１０９と、<インストール先>ディレクトリ１１０と、インストール情報DB１１１と、動的リンク情報DB１１２と、ライセンス情報DB１１３と、呼出元関数情報DB１１４と、公開関数情報DB１１５と、ライセンス伝播情報DB１１６と、ライセンス優先度情報DB１１７とを有している。【００１８】
<作業>ディレクトリ１０９は、各パッケージのソースファイルや、ソースファイルをコンパイルした後のバイナリファイルを有する。<インストール先>ディレクトリ１１０は、<作業>ディレクトリ１０９で生成されたバイナリファイルがインストールされるディレクトリである。インストール情報DB１１１は、<作業>ディレクトリ１０９内のバイナリファイルが<インストール先>ディレクトリ１１０にインストールされるときのインストール先のパスを記録したDBである。動的リンク情報DB１１２は、動的リンク検出部１０４で検出されたバイナリファイル間の動的リンクに関する情報を記録したDBである。なお、パッケージとは、テキストファイルやバイナリファイル、ディレクトリをひとまとまりにしたソフトウェアであり、ソースコードも含まれるものである。【００１９】
また、ライセンス情報DB１１３は、<作業>ディレクトリ２０１の各パッケージのライセンス情報を記録したDBである。呼出元関数情報DB１１４は、関数呼出検出部１０５で検出された関数の呼び出し元に関する情報を記録したDBである。公開関数情報DB１１５は、関数呼出検出部１０５で検出されたバイナリファイルの公開関数に関する情報を記録したDBである。ライセンス伝播情報DB１１６は、ライセンス伝播情報生成部１０６で生成され、ライセンスの伝播を決定する際に用いられるDBである。ライセンス優先度情報DB１１７は、ライセンス情報DB１１３が記憶する各ライセンス間の優先度を記録したDBである。これらのディレクトリやDBについての具体的な内容については後述する。【００２０】
出力部１１８は、ライセンス伝播決定部１０７で決定されたライセンスの伝播に関する情報を表示する表示画面１１９やテキスト１２０に出力する処理をする。【００２１】
図２は、本実施例のパッケージとファイル、バイナリのパスを示すディレクトリ構造図である。図２に示すように、本実施例におけるディレクトリ構造図は、各パッケージのソースファイルや、ソースファイルをビルドした後のバイナリファイルを有する<作業>ディレクトリ２０１によってあらわされる。例えば、<作業>ディレクトリ２０１は、パッケージ名が記載されたパッケージ名ディレクトリ２０２と、そのパッケージ名ディレクトリ２０２に属するファイルを示すソースファイル２０３とを対応付けたツリー構造として表現される。【００２２】
また、本実施例におけるディレクトリ構造図は、そのディレクトリ２０２に含まれるバイナリファイルをインストールする<インストール先>ディレクトリ２０４によってあらわされる。例えば、<インストール先>ディレクトリ２０４は、実行形式のバイナリファイルが設置されることを示すbinディレクトリ２０５と、そのbinディレクトリ２０５以下に属する実行形式のバイナリファイル２０６とを対応付けたツリー構造として表現される。【００２３】
本実施例では、<作業>ディレクトリ２０１以下にある各パッケージ内のソースファイル２０３や各パッケージ内のファイルがコンパイルされて生成されたバイナリファイルが、<インストール先>ディレクトリ２０４にインストールされる。本実施例ではバイナリファイルに含まれるシンボル情報やバイナリファイル中の関数の定義ファイルのパスを使用するため、コンパイル時には必要に応じてコンパイルオプションを付加する。なお、図２のディレクトリ構造、ディレクトリ名及びファイル名は、説明のしやすさのために記したものであり、必ずしも同じ構造、ディレクトリ名及びファイル名である必要はない。【００２４】
図３は、本システムで行われる処理の流れを示したイメージ図である。図３に示すように、本システムでは、まず、<インストール先>ディレクトリ１１０とインストール情報DB１１１が動的リンク検出部１０４に入力され、動的リンク検出部１０４における処理の結果、<インストール先>ディレクトリ１１０の各バイナリファイル間の動的リンクの情報が、動的リンク情報DB１１２に記録される。【００２５】
次に、<インストール先>ディレクトリ１１０、インストール情報DB１１１及びライセンス情報DB１１３が関数呼出検出部１０５に入力され、関数呼出検出部１０５における処理の結果、<インストール先>ディレクトリ１１０内の各バイナリファイルから他のバイナリファイルの関数を呼び出している情報が呼出元関数情報DB１１４に記録され、<インストール先>ディレクトリ１１０内の各バイナリファイルの公開関数の情報が公開関数情報DB１１５に記録される。【００２６】
次に、動的リンク情報DB１１２、呼出元関数情報DB１１４及び公開関数情報DB１１５がライセンス伝播情報生成部１０６に入力され、ライセンス伝播情報生成部１０６における処理の結果、ライセンス伝播の検出を容易にするための情報がライセンス決定情報DB１１６に記録される。【００２７】
次に、ライセンス優先度情報DB１１７とライセンス伝播情報DB１１６がライセンス伝播決定部１０７に入力され、ライセンス伝播決定部１０７における処理の結果、<インストール先>ディレクトリ２０４の各バイナリファイルや<作業>ディレクトリ２０１の各パッケージのライセンス伝播が決まる。ライセンス伝播の検出だけであればライセンス決定部１０７のみで良いが、出力部１１８において、ライセンス伝播の情報をテキストや画面に出力することでユーザの理解の向上や情報の再利用を行いやすくすることができる。【００２８】
図４は、インストール情報DB１１１の例を示す図である。インストール情報DB１１１は、上述したように、本実施例における各パッケージがインストールするバイナリファイルのインストール先とバイナリファイルが実行形式ファイルであるか否かを示すDBである。図４に示すように、インストール情報DB１１１は、インストールパッケージ名欄４０１と、インストール先パス４０２と、実行形式欄４０３とが対応付けて記憶されている。【００２９】
インストールパッケージ名欄４０１は、<作業>ディレクトリから<インストール先>ディレクトリ以下にバイナリファイルをインストールしたパッケージ名を示す欄である。インストール先パス４０２は、<作業>ディレクトリ２０１以下にある各パッケージのバイナリファイルが<インストール先>ディレクトリ１１０以下にインストールされた際のインストール先のパスである。実行形式欄４０３は、<インストール先>ディレクトリ１１０以下にインストールしたファイルが実行形式ファイルであるか否かを示す欄である。【００３０】
実行形式欄４０３は、Yなら実行形式ファイル、Nなら非実行形式ファイルであることを表している。図４に示す例では、レコード４０４では、パッケージPKG1の<作業>/PKG1以下にあったバイナリファイルbin11が<インストール先>/bin/bin11にインストールされ、同じく<作業>/PKG1以下にあったバイナリファイルbin12が<インストール先>/bin/bin12にインストールされ、bin11とbin12は共に実行形式ファイルであることを示している。【００３１】
通常、パッケージのライセンスはパッケージ内のライセンスファイルに記述されている。しかし、パッケージ内のファイルごとにライセンスを設定したり、関数ごとにライセンスが設定されたりすることがある。そのため本実施例では、パッケージ全体のライセンスだけでなく、ファイルごとに設定されたライセンス、更に関数ごとに設定されたライセンスまでも考慮したライセンスの伝播を判別できるシステムを示す。【００３２】
図５は、ライセンス情報DB１１３の例を示す図である。ライセンス情報DB１１３は、上述したように、本実施例における各パッケージや各ファイル、各関数のライセンスを示すDBである。図５に示すように、ライセンス情報DB１１３は、ライセンスパッケージ名欄５０１と、ライセンス設定済ファイルパス欄５０２と、ライセンス設定済関数欄５０３と、設定済ライセンス欄５０４とが対応付けて記憶されている。ライセンスパッケージ名欄５０１は、ライセンスが設定されたパッケージ名を示す欄である。ライセンス設定済ファイルパス欄５０２は、<作業>ディレクトリ２０１以下にありかつパッケージ内のライセンスファイルに記述されたライセンスとは異なるライセンスが設定されたファイルのパスを示す欄である。ライセンス設定済関数欄５０３は、ライセンス設定済ファイル５０２のファイル内にありかつパッケージ内のライセンスファイルに記述されたライセンスとは異なるライセンスが設定された関数の名前を示す欄である。設定済ライセンス欄５０４は、パッケージ全体やライセンス設定済ファイルパス、ライセンス設定済関数のライセンスを示す欄である。【００３３】
レコード５０５は、パッケージごとに、そのパッケージを構成するファイルおよび関数のそれぞれに設定されたライセンスの情報を示すレコードの例である。レコード５０５に示すように、このレコードには、PKG4パッケージ全体のライセンスを示すPKG4ライセンス行５０８と、PKG4パッケージの<作業>/PKG4/file41ファイルのライセンスを示す行５０７と、PKG4パッケージの<作業>/PKG4/file41ファイルで宣言された関数func412のライセンスがL3であることを示すfunc412ライセンス行５０６とを含んでいる。【００３４】
例えば、レコード５０５では、ライセンス設定済パッケージ名５０１が示すパッケージPKG4全体はPKG4ライセンス行５０８に示すようにL1ライセンスであり、ファイル<作業>/PKG4/file41はfile41ライセンス行５０７に示すようにL2ライセンスであり、ファイル<作業>/PKG4/file41で宣言された関数func412はfunc412ライセンス行５０６に示すようにL3ライセンスであることを示している。パッケージ全体のライセンスよりファイルのライセンスが優先され、ファイルのライセンスより関数のライセンスが優先される。【００３５】
図６は、ライセンス優先度情報DB１１７の例を示す図である。ライセンス優先度情報DB１１７は、上述したように、本実施例におけるライセンスを適用する際のライセンス間の優先度を示すDBである。図６に示すように、ライセンス優先度情報DB１１７は、比較ライセンス名６０１と、被比較ライセンス名６０３と、優先度６０２とが対応付けて記憶されている。比較ライセンス名６０１は、２つのライセンスを比較する際の一方のライセンス名を示す欄である。被比較ライセンス名６０３は、比較ライセンス名のライセンスとの比較相手を示す欄である。優先度６０２は、比較ライセンス名６０１と被比較ライセンス名６０３との間の優先度を示す欄である。【００３６】
図６に示す例では、レコード６０４は、優先記号＜の具体例を示す右辺優先例示行であり、レコード６０５は、優先記号＞の具体例を示す左辺優先例示行であり、レコード６０６は、優先記号＝の具体例を示す等価優先例示行である。ここで優先度とは、ライセンス間でどちらのライセンスが優先されるのかを示す情報である。例えば、右辺優先例示行６０４ではライセンスL１よりライセンスL２が優先され、左辺優先例示行６０５ではライセンスL７よりライセンスL６が優先され、等価優先例示行６０６ではライセンスL８とライセンスL９の優先度は同じであることを示している。この優先度によって、あるバイナリファイルにライセンスL１とライセンスL２が伝播する場合、あるバイナリファイルには優先度のより高いライセンスL２が適用されることを決定することができる。【００３７】
以下、本実施例の動的リンク検出部３０３におけるバイナリ間の動的リンクに関する情報を取得し、データベースに保存する処理手順の詳細を、図７、図２（ディレクトリ構造）、図４（インストール情報DB）及び図８（動的リンク情報DB）を用いて説明する。【００３８】
図７は、本実施例におけるインストールされたバイナリファイルから動的リンクを検出する処理（動的リンク検出処理）の処理手順を示すフローチャートである。【００３９】
まず、動的リンク検出部３０３は、インストール情報DB１１１を読み込む（ステップ７０１）。次に、動的リンク検出部３０３は、インストール情報DB１１１におけるパッケージ名４０１のパッケージ一覧を取得する（ステップ７０２）。例えば、図４に示した例では、パッケージ一覧は、PKG1、PKG2、PKG3、PKG4である。【００４０】
次に、動的リンク検出部３０３は、ステップ７０２で取得したパッケージ一覧から１つのパッケージPを選択する（ステップ７０４）。次に、動的リンク検出部３０３は、インストール情報DB１１１からステップ７０２で選択したパッケージPのバイナリファイルのインストール先一覧を、インストールパス４０２を参照し取得する（ステップ７０５）。例えば、図４に示した例では、パッケージ名PがPKG1の場合、インストール先一覧は、<インストール先>/bin/bin11、<インストール先>/bin/bin12である。【００４１】
次に、動的リンク検出部３０３は、ステップ７０５で取得したインストール先一覧から１つのインストール先Dを選択する（ステップ７０６）。次に、動的リンク検出部３０３は、ステップ７０６で選択したインストール先Dのインストールパス４０２にあるバイナリファイルBを選択する（ステップ７０７）。【００４２】
次に、動的リンク検出部３０３は、ステップ７０７で選択したバイナリファイルBが動的リンクしているバイナリファイル一覧（リンク先一覧）を取得する（ステップ７０８）。リンク先一覧は、バイナリファイルBをコンパイルする際に、バイナリファイルBの中に記述されるため、動的リンク検出部３０３は、リンク先一覧の取得ではバイナリファイルBからリンク先一覧を取り出す作業を行う。【００４３】
次に、動的リンク検出部３０３は、ステップ７０８で取得したバイナリファイル一覧を動的リンク情報DB１１２に記録する（ステップ７０９）。次に、動的リンク検出部３０３は、ステップ７０５で取得したインストール先一覧にある全てのインストール先Dが全て選択されたかを判断し、全て選択されていれば、７１１に進み、選択されていなければ前記７０６に戻る（ステップ７１０）。【００４４】
次に、動的リンク検出部３０３は、ステップ７０２で取得したパッケージ一覧にある全てのパッケージPが全て選択されたかを判断し、全て選択されていれば、一連の処理を終了し、選択されていなければステップ７０４に戻る（ステップ７１１）。ステップ７１１の処理が終了すると、図７に示した動的リンク検出処理が終了する。【００４５】
図８は、動的リンク情報DB１１２の例を示す図である。動的リンク情報DB１１２は、上述したように、本実施例における動的リンクで接続されたバイナリファイルの接続関係を示すDBである。図８に示すように、動的リンク情報DB１１２は、リンク元バイナリファイルパス８０１と、リンク先バイナリファイルパス８０２とが対応付けて記憶されている。リンク元バイナリファイルパス８０１は、動的リンクにおけるリンク元のバイナリファイルのパスである。リンク先バイナリファイルパス８０２は、動的リンクにおけるリンク先のバイナリファイルのパスである。【００４６】
レコード８０３は、リンク元とリンク先の関係を示した動的リンク対応行である。例えば、動的リンク対応行８０３は、<インストール先>/bin/bin11にあるバイナリファイル（リンク元）が、<インストール先>/lib/lib21と<インストール先>/lib/lib31にあるバイナリファイル（リンク先）と動的リンクをしていることを示している。【００４７】
以下、本実施例の関数呼出検出部１０５におけるバイナリファイル間の関数呼び出しに関する情報を取得し、データベースに保存する処理手順の詳細を、図９、図１０、図１１のフロー図、図４（インストール情報DB）、図５（ライセンス情報DB）、図１２（呼出元関数情報DB）及び図１３（公開関数情報DB）を用いて説明する。【００４８】
まず、図９を用いて関数呼出検出部１０５の処理手順について説明する。図９は、関数呼出検出部１０５において動的リンクでつながったバイナリファイル間の関数呼び出しの関係を検出する処理（関数呼出検出処理）の処理手順を示すフローチャートである。【００４９】
まず、関数呼出検出部１０５は、インストール情報DB１１１を読み込む（ステップ９０１）。次に、関数呼出検出部１０５は、インストール情報DB１１１のパッケージ一覧を取得する（ステップ９０２）。例えば、図４に示した例では、パッケージ一覧は、PKG1、PKG2、PKG3、PKG4である。【００５０】
次に、関数呼出検出部１０５は、ステップ９０２で取得したパッケージ一覧から１つのパッケージPを選択する（ステップ９０４）。次に、関数呼出検出部１０５は、インストール情報DB１１１からステップ９０４で選択したパッケージPのバイナリファイルのインストール先一覧を取得する（ステップ９０５）。例えば、図４に示したように、パッケージ名PがPKG1の場合、インストール先一覧は、<インストール先>/bin/bin11、<インストール先>/bin/bin12である。【００５１】
次に、関数呼出検出部１０５は、ステップ９０５で取得したインストール先一覧から１つのバイナリファイルBを選択する（ステップ９０６）。次に、関数呼出検出部１０５は、バイナリファイルBの関数呼出検出処理を行う（ステップ９０８）。なお、関数呼出処理の詳細については後述する。【００５２】
次に、関数呼出検出部１０５は、ステップ９０５で取得したインストール先一覧にある全てのインストール先Dが選択されたかを判断し、全て選択されていれば、ステップ９１０に進み、選択されていなければステップ９０６に戻る。次にステップ９０２で取得したパッケージ一覧にある全てのパッケージPが選択されたかを判断し、全て選択されていれば、一連の処理を終了し、選択されていなければステップ９０４に戻る。【００５３】
図１０は、本実施例におけるバイナリファイルBの関数呼出を検出する処理（バイナリファイル関数呼出処理）の処理手順を示すフローチャートである。【００５４】
まず、関数呼出検出部１０５は、ステップ９０７で選択したバイナリファイルBのシンボル情報一覧を取得する（ステップ１００１）。バイナリファイルBのシンボル情報一覧は、バイナリファイルBの中に記述されているため、シンボル情報一覧の取得ではバイナリファイルBからシンボル情報一覧を取り出す作業を行う。次に、関数呼出検出部１０５は、ステップ１００１で取得したシンボル情報一覧から１つのシンボル情報Sを選択する（ステップ１００２）。【００５５】
次に、関数呼出検出部１０５は、ステップ１００２で取得したシンボル情報Sが呼出元関数であるかを判断し、呼出元関数である場合にはステップ１００４に進み、呼出元関数でない場合にはステップ１００５に進む（ステップ１００３）。そして、関数呼出検出部１０５は、ステップ１００４では呼出元関数シンボル情報Sの情報を呼出元関数情報DBに記録し、ステップ１００８に進む。【００５６】
一方、関数呼出検出部１０５は、ステップ１００５では、関数シンボル情報Sが公開関数であるかを判断し、公開関数である場合はステップ１００６に進み、関数シンボル情報Sが公開関数でない場合はステップ１００８に進む。さらに、関数呼出検出部１０５は、ステップ１００６では公開関数のライセンス決定を行い、ステップ１００７に進む。なお、公開関数のライセンス決定処理の詳細については後述する。【００５７】
関数呼出検出部１０５は、ステップ１００７では、ステップ１００６で決定したライセンスを公開関数情報DB１１５に記録し、ステップ１００８に進む。ステップ１００８では、ステップ１００２で選択したシンボル情報Sが全て選択されたかを判断し、全て選択されていれば、一連の処理を終了し、選択されていなければステップ１００２に戻る。【００５８】
図１１は、本実施例におけるパッケージPのファイルCに定義された関数FのライセンスLを決定する処理（ライセンス決定処理）の処理手順を示すフローチャートである。本実施例では、動的リンクで接続されたバイナリファイル間の関数呼び出しにおいて、呼び出し元の関数を呼出元関数、呼び出し先を公開関数と呼んでいる。また、公開関数は、あるバイナリファイルに実装され、別のバイナリファイルから呼び出すことができるように設定された関数のことである。なお、本実施例では、呼出元関数と公開関数の名前は一致する。【００５９】
まず、関数呼出検出部１０５は、ライセンス情報DB１１３を読み込む（ステップ１１０１）。次に、関数呼出検出部１０５は、ライセンス情報DB１１３の中からステップ９０４で選択したパッケージPがパッケージ名５０１と一致し、かつCがファイルパス５０２と一致し、かつFがライセンス決定済関数５０３と一致する行を探索する（ステップ１１０２）。【００６０】
次に、関数呼出検出部１０５は、ステップ１１０３では、ステップ１１０２で一致する行あった場合には、ステップ１１０８に進み、関数FのライセンスLにライセンス情報DB１１３の該当行のライセンス（L3）をセットする。ステップ１１０３で一致する行がない場合はステップ１１０４に進む。関数呼出検出部１０５は、ステップ１１０４では、ライセンス情報DB１１３の中からステップ９０４で選択したパッケージPがパッケージ名５０１と一致し、かつCがライセンス設定済ファイルパス５０２と一致する行を探索する。【００６１】
次に、関数呼出検出部１０５は、ステップ１００５では、ステップ１１０４で一致する行があった場合には、ステップ１１０９に進み、関数FのライセンスLに前記ライセンス情報DB１１３の該当行のライセンス（L2）をセットする。ステップ１１０５で一致する行がない場合はステップ１１０６に進む。ステップ１１０６では、関数呼出検出部１０５は、ライセンス情報DB１１３の中からステップ９０４で選択したパッケージPがパッケージ名５０１と一致する行を探索する。【００６２】
次に、ステップ１１０７では、関数呼出検出部１０５は、ステップ１１０６で一致する行があるか判断し、一致する行があった場合には、ステップ１１１０に進み、関数FのライセンスLにライセンス情報DB１１３の該当行のライセンス（L1）をセットする。一方、関数呼出検出部１０５は、一致する行がない場合はステップ１１１１に進み、関数FのライセンスLに不明とセットする。【００６３】
関数呼出検出部１０５は、関数FのライセンスLに値がセットされたらセットしたLの値を、図１０に示したステップ１００６に返す。例えば、P=PKG4かつC=<作業>/PKG4/file41かつF=func412のとき、ステップ１１０２でPとCおよびFがライセンス情報DB１１３のfunc412ライセンス５０６と一致するため、ステップ１１０８に進み関数FのライセンスLにはL3がセットされる。【００６４】
P=PKG4かつC=<作業>/PKG4/file41かつF=func419のとき、ライセンス情報DB１１３において、ステップ１１０２ではFに一致するものはないが、ステップ１１０４ではPとCがfile4ライセンス５０７と一致するため、ステップ１１０９に進み、LにはL2がセットされる。【００６５】
P=PKG4かつC=<作業>/PKG4/file49かつF=func499のとき、ライセンス情報DB１１３において、ステップ１１０２ではFに一致するのもがなく、更にステップ１１０４ではCに一致するものがないが、ステップ１１０６にではPがライセンス情報DB１１３のPKG4ライセンス５０８と一致するため、ステップ１１１０に進み、LにはL1がセットされる。【００６６】
バイナリファイル関数呼出処理を示すフロー図１０において、ステップ１００４では、関数呼出検出部１０５は、呼出元の関数情報を呼出元関数情報DB１１４に記録する。以下、呼出元関数情報DB１１４について図１２を用いて説明する。図１２は、呼出元関数情報DB１１４の例を示す図である。呼出元関数情報DB１１４は、上述したように、本実施例における関数呼び出しの呼び出し側の関数に関する情報を示すDBである。図１２に示すように、呼出元関数情報DB１１４は、呼出元関数実行バイナリパス欄１２０１と、呼出元関数欄１２０２とが対応付けて記憶されている。【００６７】
呼出元関数実行バイナリパス欄１２０１は、呼出元関数が実行されるバイナリのパスを示す欄である。呼出元関数欄１２０２は、呼出元関数の名前を示す欄である。呼出元関数情報例１２０３は、呼出元関数実行バイナリパス１２０１とその呼出元関数実行バイナリパス１２０１で実行される呼出元関数を示した呼出元関数情報の例を示すレコードである。例えば、呼出元関数情報例１２０３は、バイナリファイル<インストール先>/bin/bin11が別のバイナリファイルの公開関数func211とfunc212、func311から呼び出されることを示している。【００６８】
バイナリファイル関数呼出処理を示すフロー図１０において、ステップ１００７では、関数呼出検出部１０５は、公開関数の情報を公開関数情報DB１１５に記録する。以下、公開関数情報DB１１５について図１３を用いて説明する。図１３は、公開関数情報DB１１５の例を示す図である。公開関数情報DB１１５は、上述したように、本実施例における関数呼び出しの際における呼び出され側の関数（公開関数）に関する情報を示すDBである。図１３に示すように、公開関数情報DB１１５は、公開関数実装バイナリファイルパス欄１３０１と、公開関数欄１３０２と、公開関数ライセンス欄１３０３とが対応付けて記憶されている。【００６９】
公開関数実装バイナリファイルパス欄１３０１は、公開関数が実装されているバイナリファイルのパスを示す欄である。公開関数欄１３０２は、公開関数実装バイナリファイル１３０１で実装されている公開関数を示す欄である。公開関数ライセンス欄１３０３は、図１１に示した処理フローにより決定した公開関数のライセンスを示す欄である。公開関数情報行１３０４は、バイナリファイルとこのバイナリファイルに実装されている公開関数と、この公開関数のライセンスを示したレコードである。例えば、公開関数情報１３０４は、<インストール先>/lib/lib21内に実体があり、更に外部に公開している関数func211、func212及びfunc213がライセンスL2であることを示している。【００７０】
以下、本実施例のライセンス伝播情報生成部１０６におけるライセンス伝播の検出を行いやすくするためのライセンス伝播情報DBを生成する処理手順の詳細を、図１４のフロー図、図１５、図４（インストール情報DB）、図８（動的リンク情報DB）、図１２（呼出元関数情報DB）、図１３（公開関数情報DB）を用いて説明する。まず、図１４を用いてライセンス伝播情報生成部１０６の処理手順について説明する。【００７１】
図１４は、ライセンス伝播情報生成部１０６が、インストール情報DB１１１と動的リンク情報DB１１２、呼出元関数情報DB１１４、公開関数情報DBを統合し、図１５（ライセンス伝播情報DB）を生成するための処理（ライセンス伝播情報生成処理）の処理手順を示すフローチャートである。【００７２】
図１４に示すように、ライセンス伝播情報生成部１０６は、まず、動的リンク情報DB１１２を読み込み（ステップ１４０１）、ライセンス伝播情報生成部１０６は、呼出元関数情報DB１１４を読み込む（ステップ１４０２）。次に、ライセンス伝播情報生成部１０６は、公開関数情報DB１１５を読み込み（ステップ１４０３）、インストール情報DB１１１を読み込む（ステップS１４０４）。【００７３】
次に、ライセンス伝播情報生成部１０６は、動的リンク情報DB１１２のリンク元バイナリファイルパス８０１の欄から１つのリンク元バイナリファイルパスAを選択する（ステップ１４０５）。次に、ライセンス伝播情報生成部１０６は、インストール情報DB１１１からリンク元バイナリファイルパスAがインストール先パス４０２と一致する行の、インストールパッケージ名４０１と実行形式４０３を取り出す（ステップ１４０６）。【００７４】
次に、ライセンス伝播情報生成部１０６は、動的リンク情報DB１１２からリンク元バイナリファイルパスAのリンク先バイナリファイルパス一覧を取得する（ステップ１４０７）。次に、ライセンス伝播情報生成部１０６は、記呼出元関数情報DB１１４からリンク元バイナリファイルパスAが呼出元関数実行バイナリパス１２０１と一致する行の、呼出元関数１２０２の一覧（呼出元関数一覧）を取得し（ステップ１４０８）、呼出元関数一覧から、１つの呼出元関数Fを選択する（ステップ１４０９）。【００７５】
次に、ライセンス伝播情報生成部１０６は、リンク先バイナリファイルパス一覧から、１つのリンク先バイナリファイルパスBを選択し（ステップ１４１０）、公開関数情報DB１１５からリンク先バイナリファイルパスBと公開関数実装バイナリファイルパス１３０１が一致する行の、公開関数１３０２の一覧（公開関数一覧）を取得する（ステップ１４１１）。【００７６】
次に、ライセンス伝播情報生成部１０６は、公開関数一覧の中に呼出元関数Fが存在するか調べる（ステップ１４１２）。ステップ１４１２で存在していた場合、ライセンス伝播情報生成部１０６は、ステップ１４１３に進み、ライセンス伝播情報DB（後述）に記録する。一方、ライセンス伝播情報生成部１０６は、ステップ１４１２で存在していなかった場合、ステップ１４１４に進む。【００７７】
次に、ステップ１４１４では、ライセンス伝播情報生成部１０６は、リンク先バイナリファイルパス一覧にある全てのリンク先バイナリファイルパスBを処理したのかを確認し、処理していた場合はステップ１４１５に進み、処理していなかった場合はステップ１４１０に戻る。次に、ライセンス伝播情報生成部１０６は、ステップ１４１６でリンク元バイナリファイル一覧にある全てのリンク元バイナリフィルAを処理したのかを確認し、処理していた場合フローの終了に進み、処理していなかった場合はステップ１４０５に戻る。【００７８】
図１５は、ライセンス伝播情報DBの例を示す図である。上述したように、ライセンス伝播情報DB１１６は、本実施例におけるバイナリファイル間の動的リンクの関係や関数呼出関係などを記憶するDBである。【００７９】
図１５に示すように、ライセンス伝播情報DB１１６は、ライセンス伝播情報リンク元欄１５０１と、ライセンス伝播情報リンク先欄１５０２と、ライセンス伝播情報呼出関数欄１５０３とが対応付けて記憶されている。ライセンス伝播情報リンク元欄１５０１は、動的リンクで接続している２つのバイナリファイルのうち、リンク元に関する情報を示す欄である。ライセンス伝播情報リンク先欄１５０２は、リンク先に関する情報を示す欄である。ライセンス伝播情報呼出関数欄１５０３は、ライセンス伝播情報リンク元１５０１のバイナリファイルが呼ぶライセンス伝播情報リンク先１５０２のバイナリの公開関数とそのライセンスを示す欄である。【００８０】
また、ライセンス伝播情報リンク元欄１５０１は、ライセンス伝播情報リンク元パッケージ名１５０４と、ライセンス伝播情報リンク元パス１５０５と、ライセンス伝播情報リンク元実行形式判別欄１５０６とが対応付けて記憶されている。ライセンス伝播情報リンク元パッケージ名１５０４は、ライセンス伝播情報リンク元１５０１となるバイナリファイルのパッケージ名である。ライセンス伝播情報リンク元パス１５０５は、ライセンス伝播情報リンク元１５０１であるバイナリファイルのパスである。ライセンス伝播情報リンク元実行形式判別欄１５０６は、ライセンス伝播情報リンク元１５０１であるバイナリファイルが実行形式ファイルであるか否か（実行形式ファイル場合はY、実行形式ファイルではない場合はN）を示す欄である。【００８１】
また、ライセンス伝播情報リンク先欄１５０２は、ライセンス伝播情報リンク先パッケージ名１５０７と、ライセンス伝播情報リンク先パス１５０８とが対応付けて記憶されている。ライセンス伝播情報リンク先パッケージ名１５０７は、ライセンス伝播情報リンク先１５０２であるバイナリファイルのパッケージ名である。ライセンス伝播情報リンク先パス１５０８は、ライセンス伝播情報リンク先１５０２であるバイナリファイルのパスである。【００８２】
例えば、レコード１５１０は、パッケージ名PKG1がインストールしたバイナリファイル<インストール先>/bin/bin11が実行形式であり、パッケージ名PKG2がインストールしたバイナリファイル<インストール先>/lib/lib21と動的リンクし、<インストール先>/lib/lib21のライセンスL2の関数func211とライセンスL2のfunc212を呼び出していることを示している。【００８３】
図１６は、本実施例における図６と図１５からライセンス伝播を決定する処理（ライセンス伝播決定処理）の処理手順を示すフローチャートである。図１７は、ライセンス伝播を決定するためのツリーである。図１８は、ライセンス伝播判定システムのユーザインタフェース及び出力例(関数単位)である。以下、本実施例のライセンス伝播決定部１０７が行うライセンス伝播決定処理の詳細を、図１６、図１７、図６（ライセンス優先度情報DB）及び図１５（ライセンス伝播情報DB）を用いて説明する。【００８４】
まず、ライセンス伝播を決定するためのツリーである図１７について説明する。図１７に示すツリーでは、パッケージ１７０１、１７０５、１７１０、１７１１、１７１２がパッケージを示し、例えば、パッケージ名欄１７０２や１７０６は、パッケージ１７０１、１７０５のパッケージ名を示している。また、バイナリファイルパス欄１７０３は、パッケージ１７０１がインストールしたバイナリファイルパスを示している。【００８５】
また、バイナリファイルパス１７０７は、パッケージ１７０５がインストールしたバイナリファイルのパスを示している。また、バイナリファイルパス１７０３が指すバイナリファイルが、バイナリファイルパス１７０７が指すバイナリファイルと動的リンクしていることを示している。動的リンクしていることを示す線の左側が動的リンク元、線の右側が動的リンク先である。関数名１７０８は、バイナリファイルパス１７０７が指すバイナリファイルと動的リンクしているバイナリファイルパス１７０３が指すバイナリが呼び出す関数である。ライセンス１７０９は、関数名１７０８のライセンスである。【００８６】
続いて、ライセンス伝播決定処理について説明する。まず、ライセンス伝播決定部１０７は、ライセンス伝播情報DB１１６を読み込み（ステップ１６０１）、ライセンス伝播決定部１０７は、ライセンス優先度DB１１７を読み込む（ステップ１６０２）。次に、ライセンス伝播決定部１０７は、ライセンス伝播情報DB１１６のリンク元実行形式１５０６が実行形式ファイルであることを意味するYとなっているバイナリを始点として、前記ライセンス伝播情報リンク元１５０１と前記ライセンス伝播情報リンク先１５０２とを結び、ツリーを作る（ステップ１６０３）。例えば、ライセンス伝播情報DB１１６の一実施例が図１５のとき、ライセンス伝播決定部１０７は、ライセンス伝播を決定するためのツリー図１７を生成する。【００８７】
次に、ライセンス伝播決定部１０７は、ライセンス伝播を決定するためのツリーの中の始点から一番遠いバイナリファイルから、各バイナリが持つ呼出関数の中で、最も優先度の高いライセンスをライセンス優先度情報DB１１７で判定し、リンク元のバイナリに伝播すると決定する（ステップ１６０４）。【００８８】
例えば、ライセンス伝播を決定するためのツリーが図１７であり、ライセンス優先度情報DB１１７が図６のとき、パッケージ１７０５は、パッケージ１７１０のfunc411(ライセンスL4)とパッケージ１７１１のfunc421(ライセンスL3)、func422(ライセンスL1)を呼び出す。このためパッケージ１７０５にはライセンスL1、ライセンスL3およびライセンスL4が伝播し、更に最も優先度の高いライセンスL4が優先的に伝播すると判定することができる。同様に、パッケージ１７０１は、ツリーをたどると、func211(ライセンスL1)、func212(ライセンスL2)、func411(ライセンスL4)、func421(ライセンスL3)、func422(ライセンスL1)、func311(ライセンスL3)を呼び出す。このため、パッケージ１７０１にはライセンスL1、ライセンスL2、ライセンスL3、ライセンスL4が伝播し、最も優先度の高いライセンスL4が優先的に伝播すると判定することができる。【００８９】
なお、図１７では、最下層のパッケージの関数のライセンスが、優先度が最もの高い前提で説明しているが、途中階層や最上層のパッケージの関数のライセンスの優先度が最も高い場合には、そのライセンスが伝搬することとなる。【００９０】
以下、本実施例の入力部１０１におけるユーザインタフェース１０２と、出力部１１８におけるライセンス伝播の判定結果の出力について、図１７（ライセンス伝播判定ツリー）と図１８を用いて説明する。【００９１】
図１８は、入力部１０１におけるユーザインタフェース１０２と、出力部１１８におけるライセンス伝播の判定結果の出力例である。まず、ユーザは、ライセンス伝播判定システム１８０１を起動する。次に、入力部１０１は、<インストール先>ディレクトリ指定ボタン１８０２のクリックを受け付け、<インストール先>ディレクトリ３０１の指定を受け付ける。【００９２】
次に、入力部１０１は、インストール情報DB指定ボタン１８０３のクリックによるインストール情報DB１１１の指定を受け付ける。次に、入力部１０１は、ライセンス優先度情報DB指定ボタン１８０４のクリックによるライセンス優先度情報DB１１７の指定を受け付ける。そして、入力部１０１は、最後に伝播検出開始ボタン１８０５−１のクリックを受け付ける。これにより、ライセンス伝播判定が開始され、ライセンス伝播判定結果出力部１８１５にライセンス伝播の判定結果が出力される。【００９３】
なお、<インストール先>ディレクトリ指定ボタン１８０２、インストール情報DB指定ボタン１８０３、伝播検出開始ボタン１８０４は、予め設定ファイルを用意しその設定ファイルを読み込ませることで設定しても良い。【００９４】
また、入力部１０１が伝播検出開始ボタン１８０５−１のクリックを受け付けた場合、さらに、ツリー表示ボタン１８０５−２のクリックを受け付けた場合、出力部１１８が、図１９に示すように図１７に示したツリーと同様のツリーを画面に表示することとしてもよい。この場合、出力部１１８は、図２０に示すように、関数名を除いた情報を表示したり、さらに、図２１に示すように、ライセンス名のみを表示することとしてもよい。出力部１１８がこのような画面を表示することにより、ユーザは、ライセンスの伝搬をより直感的かつ容易に把握することができる。【００９５】
バイナリファイルID１８０６は、バイナリファイルの識別情報である。同一のバイナリファイルに複数のIDが振られることもあり得る。バイナリファイルパス１８０８は、そのバイナリファイルのパスであり、パッケージ名１８０７は、そのバイナリファイルパス１８０８のパッケージ名である。【００９６】
実行形式１８０９は、バイナリファイル１８０８が実行形式ファイルであるか否か(Yなら実行形式であり、Nなら実行形式でない)を示す情報である。全伝播ライセンス一覧１８１３は、バイナリファイル１８０８に伝播する全伝播ライセンスの一覧である。最優先伝播ライセンス１８１０は、全伝播ライセンス一覧１８１３の中で、最も優先度の高い伝播ライセンスであることを示す情報である。この優先度の決定にはライセンス優先度情報DB１１７が用いられる。【００９７】
動的リンク先ID１８１１は、バイナリファイル１８０８が動的リンクしているバイナリファイルの識別情報である。動的リンク元ID１８１２は、バイナリファイル１８０８に対して動的リンクしているバイナリファイルの識別情報である。動的リンク先ID１８１１および動的リンク元ID１８１２における「−」の表示は、リンクしているバイナリファイルがないことを意味する。【００９８】
実行される公開関数（ライセンス）１８１４は、バイナリファイル１８０８が別のバイナリから動的リンクされている場合に呼び出される関数とそのライセンスの一覧である。１つのバイナリファイルの情報は、バイナリファイルID１８０６、パッケージ名１８０７、バイナリファイル１８０８、実行形式１８０９、最優先伝播ライセンス１８１０、動的リンク先１８１１、動的リンク元１８１２、全伝播ライセンス一覧１８１３、実行される公開関数（ライセンス）１８１４の欄から構成される。【００９９】
図１８に示すライセンス伝播判定結果出力部１８１５は、図１７に示したツリー図から分かるライセンス伝播に関する情報を、ユーザに分かりやすく示している。例えば、レコード１８１６のバイナリファイルは、図１７に示したバイナリファイルパス１７０３のバイナリファイルを表示している。このレコードでは、バイナリファイルID１８０６からID＝１であり、パッケージ名１８０７欄に示すようにパッケージ名はPKG1であり、バイナリファイル１８０８欄に示すようにインストール先が<インストール先>/bin/bin11であることを示している。【０１００】
また、実行形式１８０９欄に示すようにこのファイルは実行形式であり、動的リンク先１８１１欄に示すようにID＝２とID＝５のバイナリファイルを動的リンク先としており、動的リンク元１８１２欄に示すように動的リンク元がないことを示している。また、レコード１８１６のバイナリファイルは、全伝播ライセンス一覧１８１３欄に示すようにライセンスL1、L2、L3、L4が伝播し、最優先伝播ライセンス１８１０欄に示すように一番優先度が高いライセンスがL4であることを示している。また、実行される公開関数（ライセンス）１８１４欄に示すように、他のバイナリファイルから公開関数が呼び出されないことも示している。【０１０１】
ID＝２のバイナリファイルは、ID＝３のバイナリファイルと動的リンクし、ライセンスL4の関数func411を実行している。また、ID＝４のバイナリファイルとも動的リンクし、ライセンスL3の関数func421とライセンスL1の関数func422も実行している。このためID＝２のバイナリファイルの全伝播ライセンス一覧１８１３欄には、伝播した関数func411、関数func421、関数func422のライセンスL1、L3、L4が表示されている。ID＝３とID＝４のバイナリファイルは、他のバイナリファイルの関数を実行しないため、ライセンスの伝播はない。【０１０２】
ID＝１のバイナリファイルは、このID＝２のバイナリファイルを動的リンクし関数を実行するため、ID＝２に伝播している全てのライセンス（L1、L3、L4）がID＝１のバイナリファイルにも伝播する。ID＝１のバイナリファイルに伝播しているL2ライセンスは、ID＝２のバイナリファイルと同様に動的リンクしているID＝５のバイナリファイルから伝播したものである。パッケージPKG1は、全伝播ライセンスL1、L2、L3、L4の中で最優先ライセンスL4のID＝１と全伝播ライセンスL3で最優先伝播ライセンスL3のID＝６のバイナリファイルを持つため、パッケージPKG1は全伝播ライセンスL1、L2、L3、L4で最優先ライセンスL4のパッケージとみなすこともできる。【０１０３】
図１８ではバイナリファイル間での動的リンクや関数呼出といった詳細とともにライセンスの伝播情報を表示したが、図１９〜２１に示したように、パッケージ単位でライセンス伝播の情報を表示してもよい。このユーザインタフェースを使用することで、ユーザはパッケージのライセンス伝播を知ることができる。なお、図１８ではユーザインタフェースをGUIにしたがCUIでもよい。また、他のアプリケーションで再利用しやすいようにライセンス伝播の情報はCSV形式やEXCEL形式などのテキストファイルに出力してもよい。
【符号の説明】
【０１０４】
１０１…入力部
１０２…ユーザインタフェース
１０３…演算部
１０４…動的リンク検出部
１０５…関数呼出検出部
１０６…ライセンス伝播情報生成部
１０７…ライセンス伝播決定部
１０８…情報記憶部
１０９…<作業>ディレクトリ
１１０…<インストール先>ディレクトリ
１１１…インストール情報DB
１１２…動的リンク情報DB
１１３…ライセンス情報DB
１１４…呼出元関数情報DB
１１５…公開関数情報DB
１１６…ライセンス伝播情報DB
１１７…ライセンス優先度情報DB
１１８…出力部。
【図１】
0006023357.tif 000002
【図２】
0006023357.tif 000003
【図３】
0006023357.tif 000004
【図４】
0006023357.tif 000005
【図５】
0006023357.tif 000006
【図６】
0006023357.tif 000007
【図７】
0006023357.tif 000008
【図８】
0006023357.tif 000009
【図９】
0006023357.tif 000010
【図１０】
0006023357.tif 000011
【図１１】
0006023357.tif 000012
【図１２】
0006023357.tif 000013
【図１３】
0006023357.tif 000014
【図１４】
0006023357.tif 000015
【図１５】
0006023357.tif 000016
【図１６】
0006023357.tif 000017
【図１７】
0006023357.tif 000018
【図１８】
0006023357.tif 000019
【図１９】
0006023357.tif 000020
【図２０】
0006023357.tif 000021
【図２１】
0006023357.tif 000022