オープンソース コードの使用

オープンソース プログラム オフィスの最も重要な責務の 1 つは、オープンソース コードを商用製品のプロプライエタリなソース コードやサードパーティ ソース コードと統合する際に、組織が確実に法的義務を果たすようにすることです。

開発者がオープンソース コードをどのように使用できるかのガイドライン、およびオープンソース コードの出所がどこで、どのようにライセンスされ、最終的にどう使用されるかを追跡する詳細なプロセスを確立する必要があります。このガイドでは、オープンソース コードを使用、リリース、配布するためのベースライン コンプライアンス プログラムについて説明します。

内容

  1. コードの追跡とレビューの必要性
  2. コンプライアンスにおける役割と責任
  3. オープンソース コード利用のためのシンプルなポリシー
  4. 5 段階のコード レビュー プロセス
  5. バージョン 1.0 後のプロセス
  6. オープンソース利用申請フォーム サンプル
  7. 結論
  8. アーキテクチャ概略図テンプレート

ガイド一覧 » GitHub上で貢献する »

このガイドの貢献者

Ibrahim Haddad Samsung Research America社 R&D 担当 VP 兼オープンソース グループ長

セクション 1

コードの追跡とレビューの必要性

単純な話として、開発者がオープンソース コードをどこでどのように使用しているかを把握してない企業は、適用されるオープンソース ライセンスに違反する恐れがあります。これは、弁護士費用の点でも、失敗の修正に費やされるエンジニアリング時間の点でもコストがかかる結果になる可能性があります。また、オープンソースの法的義務を無視することは、オープンソース コミュニティ内で企業の評判を損なうことにもなります。

オープンソース プログラム オフィスは、オープンソースの使用、配布、リリースに関わるポリシーおよび意思決定の一元化を支援し、コードの出所と使用を追跡して、組織がコンプライアンス義務に違反しないようにします。

オープンソース プログラムは包括的なコンプライアンス プログラムを含み、法務専門家の協力を得て開発されていることが理想的です。このガイドでは、コンプライアンス プログラムの重要な側面、つまりオープンソース コードを使用、リリース、配布するためのポリシーとプロセスについて説明します。

「うまく設計されたオープンソース コンプライアンス プロセスは、オープンソース ライセンス条項の遵守を確実にすると同時に、企業が自身の知的財産およびサードパーティ サプライヤの知的財産を意図しない漏洩やその他の結果から保護するのにも役立ちます。」

Ibrahim Haddad – Samsung Research America 社 R&D 担当バイスプレジテント 兼 オープンソース グループ長

オープンソース コンプライアンス プログラムを維持することにより、企業は次のようなメリットを得ることができます。

セクション 2

コンプライアンスにおける役割と責任

オープンソース プログラムでは、オープンソース コンプライアンスの確保を目的とする専任のオープンソース コンプライアンス チームを作る必要があります。

この中核チームは、監査チームまたはオープンソース レビュー ボード (OSRB: Open Source Review Board) とも呼ばれ、エンジニアリングと製品チームの代表者、1 人以上の法務専門家、およびコンプライアンス オフィサー (通常、オープンソース プログラム マネージャー) で構成されます。

ドキュメント製作、サプライ チェーン、経営企画、IT、ローカライゼーション、オープンソース戦略全体を監督するオープンソース執行委員会 (OSEC: Open Source Executive Committee) など、他のさまざまな部門の人々も、拡張チームのメンバーとしてオープンソース コンプライアンスの取り組みに継続的に貢献します。ただし、中核チームと異なり、拡張チームのメンバーは、OSRB から依頼された作業に基づいてパートタイム ベースでコンプライアンスに取り組むだけです。

OSRB は、オープンソース コンプライアンス戦略を策定し、企業が日常的に規則をどのように実施するかを決定する一連のプロセスを作成する責任を担っています。この戦略は、コンプライアンス確保のために何をすべきかを決定し、従業員がオープンソース ソフトウェアとどのように向き合えばよいかについて一連の統治原則を提供します。これには、オープンソースの承認、取得、使用のための正式なプロセス、およびオープンソースを含むソフトウェアまたはオープンソース ライセンスの元で許可されたたソフトウェアのリリース方法が含まれます。

セクション 3

オープンソース コードを利用するためのシンプルなポリシー

利用ポリシーは、オープン コンプライアンス プログラムの中で不可欠なコンポーネントです。利用ポリシーに含まれる一連の規則は、オープンソース戦略文書 (既にお持ちでは?) に含まれ、誰でも入手して簡単に参照できるようになっています。

利用ポリシーは、製品を支えるすべてのソフトウェア (プロプライエタリ、サードパーティ製、オープンソースを問わず) の監査、レビュー、承認が完了することを推進するものです。また、さまざまなソフトウェア コンポーネントを使用することで生じたライセンス義務を履行するための活動を製品が顧客の元に届く前に完了するようにします。

この利用ポリシーは長い文書や複雑な文書である必要はありません。良く出来たオープンソース利用ポリシーには、次の 6 つのシンプルな規則が含まれます。

セクション 4

5 段階のコード レビュー プロセス

利用ポリシーを策定したら、そのポリシーを容易に適用できるプロセスを作成する必要があります。さらに、開発者がオープンソースの利用とオープンソース プロジェクトへの貢献を円滑に行えるようにする必要があります。

「コードのレビュー プロセスがあまりに面倒なものだと、イノベーションのスピードが落ちたり、開発者にプロセス全体を回避する格好の口実を与えることになります。」

Ibrahim Haddad – Samsung Research America 社 R&D 担当バイスプレジテント 兼 オープンソース グループ長

プロセスではまず、対象となっているソフトウェア パッケージのソース コードをスキャンします。次に、発見された問題を特定および解決し、法的レビューとアーキテクチャ レビューを行ったのち、利用承認に関する決定を行います。

下の図は、コンプライアンス利用プロセスを単純化して図示したものです。実際には、プロセスはその性質上、かなり反復的です。以下の各段階は説明することを目的としており、企業特有の必要性やオープンソース プログラムの構成に応じて変更が必要なことに注意してください。

プロセスの各段階を順を追って説明しましょう。

第 1 段階:ソース コードのスキャン

ソース コードのスキャン段階では、専門のソフトウェア ツールを使用して、すべてのソース コードがスキャンされます (このようなツールは、いくつかのオープンソース ツールの他に、数多くの商用ベンダーから提供されています)。

この段階は、通常、技術者がオンラインの利用フォームを提出することで開始されます (以下のサンプルの利用フォームと利用規則を参照)。このフォームには、対象となっているオープンソース コンポーネントに関するすべての情報を含め、ソース コード リポジトリ システム内のソース コードの場所を指定します。

フォームを提出すると、JIRA、Bugzilla などのシステムにコンプライアンス チケットが自動的に作成され、決められた監査スタッフにソース コード スキャン要求が送られます。

対応する利用フォームの提出なしにオープンソース ソフトウェア コンポーネントがプラットフォームに統合されることがないようにするため、プラットフォームの定期的なフル スキャンも数週間ごとに行う必要があります。

何らかの問題が見つかった場合は、JIRA チケットが自動的に発行され、監査スタッフに割り当てられます

ソース コードのスキャンが開始される要因には、次のようなものがあります。

コードのスキャンが終了すると、スキャン ツールは、以下の情報を提供するレポートを生成します。

ダウンロードしたオープンソース パッケージに関する注意

Web からダウンロードしたオープンソース パッケージは、元の形のまま保管しておくことが重要です。 このパッケージは、後の段階 (出荷の前)で元のパッケージと変更後のパッケージの間の差分を調べることにより、ソース コードに加えられた変更を検証し、追跡するために使用します。

サードパーティ ソフトウェア プロバイダがオープンソースを使用している場合、そのコードを製品に統合する製品チームは、使用されているオープンソースについて記述したオープンソース利用申請フォームを提出する必要があります。 サードパーティ ソフトウェア プロバイダがソース コードを提供せず、バイナリしか提供しない場合は、製品チーム、またはサードパーティ ソフトウェア プロバイダとの関係を管理するソフトウェア サプライヤ マネージャーは、提供されたソフトウェアにオープンソースが含まれていないという確証 (たとえば、スキャン レポート) を得る必要があります。

第 2 段階: 特定および解決

特定および解決段階では、監査チームが、スキャン ツールによってフラグが付けられたファイルまたはスニペットを検査し、解決します。

たとえば、スキャン ツールのレポートは、矛盾するライセンスや互換性のないライセンスなどの問題にフラグを付けます。問題がない場合、コンプライアンス オフィサーはコンプライアンス チケットを法的レビュー段階へ進めます。

解決すべき問題がある場合、コンプライアンス オフィサーはコンプライアンス チケット内にサブタスクを作成して、適切なエンジニアリング担当者に割り当てて解決させます。コードを修正する場合も、確認だけで済む場合もあります。サブタスクには、問題の説明、エンジニアリング担当者が実施すべき解決策の提案、完了までのタイムラインを含める必要があります。

すべての問題が解決したら、コンプライアンス オフィサーはサブタスクを閉じ、チケットを法的レビューに渡すことができます。あるいは、まずソース コードの再スキャンを指示し、新しいスキャン レポートを生成してから、以前の問題がなくなったことを確認するという方法もあります。すべての問題が解決されたと納得できたら、コンプライアンス オフィサーは、レビューと承認のためにコンプライアンス チケットを法務部門の担当者に送ります。

法的レビューに向けた準備として、オープンソース ソフトウェアに関連するすべてのライセンス情報 (COPYING、README、LICENSE ファイルなど) をコンプライアンス チケットに添付する必要があります。

第 3 段階: 法的レビュー

法的レビュー段階では、法務専門家 (通常、オープンソース レビュー ボード (OSRB) のメンバー) がスキャン ツールによって生成されたレポート、ソフトウェア コンポーネントのライセンス情報、エンジニアリング担当者や監査チームのメンバーがコンプライアンス チケットに残したコメントなどのレビューを行います。

法的レビュー段階に到達したコンプライアンス チケットには、既に以下が含まれています。

この段階の目標は、コンプライアンスに関する法務専門家の見解をまとめ、対象となっているソフトウェア コンポーネントでの使用ライセンスと公開ライセンスについて決定することです。ソフトウェア コンポーネントには複数のライセンスの下で利用できるソース コードが含まれている場合があるため、使用ライセンスと公開ライセンスは、複数ある場合があります。この段階では、次の 3 つの結果が得られる可能性があります。

問題なし

ライセンスに関して問題がない場合、法務専門家は、ソフトウェア コンポーネントの使用ライセンスと公開ライセンスを決定し、コンプライアンス チケットのプロセスをコンプライアンスのアーキテクチャ段階へと一歩進めます。

使用ライセンスは、受け取ったソフトウェア パッケージに対するライセンスです。公開ライセンスは、自身がライセンスしているソフトウェアパッケージを公開するライセンスです。場合によっては、使用ライセンスが再ライセンス (BSD など) を許可するパーミッシブライセンスであることがあり、その場合、企業は、自身のプロプライエタリ ライセンスの下でソフトウェアを再ライセンスする場合があります。さらに複雑な例として、ソフトウェア コンポーネントにプロプライエタリ ソース コード、ライセンス A でライセンスされたソース コード、ライセンス B の下で利用できるソース コード、ライセンス C の下で利用できるソース コードが含まれる場合を考えます。

法的レビュー時、法務専門家は、使用ライセンスと公開ライセンスを次のように決定する必要があります。

使用ライセンス = プロプライエタリ ライセンス + ライセンス A + ライセンス B + ライセンス C 公開ライセンス = ?

問題あり

互換性のないライセンスを持つソース コードの混在など、ライセンスに関する問題が見つかった場合、法務専門家は、それらの問題にフラグを付け、JIRA のコンプライアンス チケットを再度エンジニアリング担当者に割り当てて、コードを修正させます。

たとえば、法的レビューにより、非公開の知的財産がオープンソース コード パッケージと組み合わされていることが明らかになったとします。法務専門家は、これにフラグを付け、コンプライアンス チケットを再度エンジニアリング担当者に割り当てて、オープンソース コンポーネントからプロプライエタリ ソース コードを削除させます。エンジニアリング担当者がオープンソース コンポーネントにプロプライエタリ ソースコードを保持することを主張する場合、オープンソース執行委員会 (OSEC) は、オープンソース ライセンスの下でプロプライエタリ ソース コードを提供する必要があります。

不明

ライセンス情報が不明確だったり、利用できない場合は、法務専門家またはエンジニアリング スタッフ メンバーがプロジェクト管理者またはオープンソース開発者に問い合わせて、曖昧さを解決し、その特定のソフトウェア コンポーネントがどのライセンスの下にライセンスされているかを確認します。

第 4 段階:アーキテクチャ レビュー

アーキテクチャ レビューでは、監査チームまたはオープンソース レビュー ボードのコンプライアンス オフィサーとエンジニアリング担当者が、オープンソース、プロプライエタリ、およびサードパーティのコード間の相互関係を分析します。これは、以下に示すアーキテクチャ概略図 (以下の例を参照) を調べることで実施されます。

アーキテクチャ レビューの結果として、ライセンス義務に関する分析が得られます。ライセンス義務は、オープンソースからプロプライエタリまたはサードパーティ ソフトウェア コンポーネントに及ぶ場合があり、また、複数のオープンソース コンポーネントにまたがって及ぶ場合もあります。

コンプライアンス オフィサーが問題 (たとえば、GPL ライセンスされたコンポーネントにリンクしているプロプライエタリ ソフトウェア コンポーネント) を発見した場合、コンプライアンス オフィサーは解決のためにコンプライアンス チケットをエンジニアリング担当者に送ります。問題がない場合は、コンプライアンス オフィサーはチケットを承認プロセスの最終段階へ送ります。

第 5 段階:最終レビュー

最終レビューは、通常、監査チームまたはオープンソース レビュー ボード (OSRB) の対面での会議で行われ、この会議で、チームはソフトウェア コンポーネントの使用を承認または却下します。

チームの決定は、ソフトウェア コンポーネントの完全なコンプライアンス レコードに基づいて行われますが、これには以下が含まれます。

ほとんどの場合、最終レビューに到達したソフトウェア コンポーネントは、何らかの条件が見つからない限り (ソフトウェア コンポーネントが使用されなくなった場合など)、承認されます。承認されると、コンプライアンス オフィサーは、承認されたソフトウェア コンポーネントのライセンス義務のリストを作成して適切な部門に渡し、義務を履行させます。これには、以下が含まれます。

OSRB 承認後に実施される手順

コンプライアンス オフィサーは、すべてのオープンなチケットを追跡し、製品出荷時またはサービス開始時までに完了するようにします。

詳細な利用プロセスと想定されるシナリオについては、電子書籍「企業におけるオープンソース コンプライアンス」を参照してください。

セクション 5

バージョン 1.0 後で実行すべきこと

初期のコンプライアンス (ベースライン コンプライアンスとも呼ばれる) は、開発が開始された時点で発生し、製品の最初のバージョンのリリースまで継続します。コンプライアンス チームは、ベースライン ソフトウェアに含まれるすべてのオープンソース コードを特定し、すべてのソース コンポーネントに対して上述の 5 段階の承認プロセスを完了させます。

「オープンソース コンプライアンスはバージョン 1.0 で終了ではないことをしっかりと覚えておいてください。」

Ibrahim Haddad – Samsung Research America 社 R&D 担当バイスプレジテント 兼 オープンソース グループ長

製品出荷後は、ソース コードをチェックするインクリメンタル コンプライアンス プロセスを開発する必要があります。このプロセスは、追加機能やバグ修正などを含む新しいブランチに関する開発が始まったときに開始されます。

インクリメンタル コンプライアンスは、ベースライン バージョン 1.0 に製品の機能が追加されたときにコンプライアンスを維持するためのプロセスです。

Incremental Compliance

インクリメンタル コンプライアンス

インクリメンタル コンプライアンスは、ベースライン コンプライアンスの確立に必要な労力と比べると、比較的手間がかかりません。 しかし、いくつかの問題が生じる可能性があります。 バージョン 1.0 とバージョン 1.1 の間で変更されたソース コードを正確に特定し、リリース間の次のような差分についてコンプライアンスを検証する必要があります。

当然の疑問として、このような変更のすべてを追跡し続けるにはどうすればいいでしょうか?答えは簡単です。部品表比較ツール (BOM 比較ツール) の利用です。バージョン 1.1 の製品の BOM とバージョン 1.0 の製品の BOM がある場合、ツールを使用すると、差分を比較して以下を出力できます。

バージョン 1.1 で追加された新しいソフトウェア コンポーネントの名前

この情報を入手できれば、インクリメンタル コンプライアンスの実現は比較的容易な作業になります。

下の図に、インクリメンタル コンプライアンス プロセスの概要を示します。各製品リリースの BOM ファイルはビルド サーバーに保存されます。BOM 比較ツールは、それぞれが異なる製品リリースに対応する 2 つの BOM ファイルを入力として使用して、差分を比較し、前述の変更リストを作成します。

この段階でコンプライアンス オフィサーは、当該リリースのすべての新しいソフトウェア コンポーネントに対して新しいコンプライアンス チケットを作成し、変更されたソース コードについてはコンプライアンス チケットを更新し、場合によってはプロセスを再度通過させ、最後に、ソフトウェア レジストリを更新することにより、使用が中止されたソフトウェア コンポーネントを承認リストから削除します。

インクリメンタル コンプライアンス プロセスの例

オープンソース利用申請フォーム

オープンソース利用申請フォームの記入は、開発者がオープンソース ソフトウェアを企業に持ち込む際の重要なステップで、慎重に行う必要があります。

開発者は、特定のオープンソース コンポーネントを使用する承認を求めるオンライン フォームに入力します。

このフォームはいくつかの質問で構成されており、監査チームまたはオープンソース レビュー ボードは、これらの質問から得られる情報により、提案されたオープンソース コンポーネントの使用を承認するかどうかを決定することができます。

次の表に、オープンソース利用申請フォームで入力を求められる情報を示します。

通常、これらの値はプルダウン メニューから選択できるため、データを効率よく入力できます。

OSRB 利用フォームに関しては、次のようないくつかの規則があります。例えば:

セクション 6

オープンソース利用申請フォーム サンプル

オープンソース利用申請フォーム サンプルのPDFはこちら

セクション 7

結論

オープンソース コンプライアンスは、ソフトウェアの開発プロセスに不可欠のものです。製品でオープンソース ソフトウェアを使用しているにも関わらず、確立されたコンプライアンス プログラムがない場合は、ぜひこのガイドをきっかけとして行動を起こしてください。

本質的に、オープンソース コンプライアンスは、商品で使用されるオープンソースの取り込みと配布を管理する一連の活動で構成されます。コンプライアンスのデュー デリジェンス (適正評価) の結果、製品で使用されるすべてのオープンソース (コンポーネントおよびスニペット) が特定され、ライセンス義務の履行計画が策定されます。オープンソース コンプライアンスに関する詳細なガイドについては、無料の電子書籍「企業におけるオープンソース コンプライアンス」(Ibrahim Haddad 著) をダウンロードしてください。

セクション 8

アーキテクチャ概略図テンプレート

オープンソース レビュー プロセスのアーキテクチャ レビュー段階で使用されるアーキテクチャ概略図に、プラットフォーム内のさまざまなソフトウェア コンポーネント間の相互作用を示します。 以下のアーキテクチャ概略図サンプルでは、次のものが示されています。

このアーキテクチャ概略図のテンプレートは、C または C++ に依存する組み込み環境に適用されます。