(57)【要約】  さまざまな実施形態は、ソースコードをコンパイル済みバイナリにリンクして、バイナリの起源を保証するとともに、バイナリファイルの、バイナリファイルを生成したソースコードまでのトレーサビリティを確実にすることができる、装置、方法、システム、および／または命令を提供する。例示的な方法は、デジタルアセットの登録要求を判定することと、デジタルアセットの最初のソースファイルの第１のハッシュを演算することと、最初のソースファイルのバージョンを特定することと、ブロックチェーンの１つ以上のノードを選択して、第１のハッシュを最初のソースファイルのバージョンに対応するデジタルアセットのバージョンに関連付けてブロックチェーンにコミットすることと、ソースファイルをバイナリファイルに変換することによって、デジタルアセットのバイナリバージョンをもたらすことと、バイナリファイルの第２のハッシュを演算することと、第２のハッシュをデジタルアセットのバージョンに関連付けてブロックチェーンにコミットすることとを含む。
2020532213.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のプロセッサによって実行するべき論理を含む１つ以上の有形な媒体であって、前記論理は、実行されると、ネットワーク化されたコンピューティング環境におけるデジタルアセット・トレーサビリティを容易にするように動作可能であり、当該方法は、
前記ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定することと、
前記デジタルアセットの最初のソースファイルの第１のハッシュを演算することと、
前記最初のソースファイルのバージョンを特定することと、
前記ネットワーク化されたコンピューティング環境の分散型台帳の１つ以上のノードを選択して、前記第１のハッシュを前記最初のソースファイルの前記バージョンに対応する前記デジタルアセットのバージョンに関連付けて前記分散型台帳にコミットすることと、
前記ソースファイルをバイナリファイルに変換することによって、前記デジタルアセットのバイナリバージョンをもたらすことと、
前記バイナリファイルのハッシュである第２のハッシュを演算することと、
前記第２のハッシュを前記デジタルアセットの前記バージョンに関連付けて前記分散型台帳にコミットすることとを備える、１つ以上の有形な媒体。
【請求項２】
前記第２のハッシュに関連付けられたバージョン情報および前記第１のハッシュに関連付けられたバージョン情報を用いて、前記分散型台帳内の１つ以上のバイナリファイルハッシュを、ソースファイルリポジトリ内の１つ以上のソースファイルと、前記ソースファイルが生じたワークステーションと、前記ソースファイルのデベロッパとに関連付けることをさらに含み、前記分散型台帳はブロックチェーンを含み、前記デジタルアセットはソフトウェアを含む、請求項１に記載の１つ以上の有形な記憶媒体。
【請求項３】
前記ネットワーク化されたコンピューティング環境の１つ以上のクライアントデバイスならびに関連する１人以上のそれぞれの認証および許可されたユーザに対して、前記１人以上の認証および許可されたユーザに割付けられた１つ以上の許可に従って、前記バイナリファイルを選択的に利用可能にすることをさらに含み、前記１つ以上のクライアントデバイスは、前記ネットワーク化されたコンピューティング環境において提供される１つ以上のクラウドサービスの１人以上の顧客の１つ以上のコンピュータを含む、請求項２に記載の１つ以上の有形な記憶媒体。
【請求項４】
前記１つ以上のクライアントデバイスならびに付随する１人以上のそれぞれの認証および許可されたユーザに対して前記ブロックチェーン内のデータを選択的にアクセス可能にすることによって、前記１人以上のそれぞれの認証および許可されたユーザが、前記ブロックチェーン内の前記バイナリファイルについての登録済みハッシュを、得られたバイナリファイルと比較できるようにすることをさらに含む、請求項３に記載の１つ以上の有形な記憶媒体。
【請求項５】
公開鍵インフラストラクチャ（ＰＫＩ）を用いることで、前記ブロックチェーン内のデータへのユーザアクセス許可を認証することをさらに含む、請求項４に記載の１つ以上の有形な記憶媒体。
【請求項６】
選択することはさらに、
プルーフオブステークメカニズムに従って、前記ネットワーク化されたコンピューティング環境の１つ以上のノードを選択して、前記第１のハッシュを前記ブロックチェーンにコミットすることと前記第２のハッシュを前記ブロックチェーンにコミットすることとを実現することを含み、前記プルーフオブステークメカニズムは、
前記１つ以上のノードの識別情報および関連する許可を参照して、前記１つ以上のノードが１つ以上のブロックを前記ブロックチェーンにコミットすることが許可されていることを確認することによって、一組の１つ以上の確認済みノードをもたらすステップと、
前記１つ以上の確認済みノードのうちのどのノードがソースファイルまたはバイナリファイルを最初に受信したかを判断するステップと、
前記１つ以上の確認済みノードの中から１つのノードを選択して、登録エントリを前記ブロックチェーンにコミットするための計算を行なうことによって、選択済みノードをもたらすステップと、
前記選択済みノードを用いて、前記登録エントリを、前記登録エントリをブロックとして前記ブロックチェーンにコミットする前記選択済みノードのインジケータと組合わせて前記ブロックチェーンにコミットすることによって、前記ブロックが前記インジケータを含むようにするステップとを実行する、請求項２に記載の１つ以上の有形な記憶媒体。
【請求項７】
前記バイナリファイルをプロダクションサーバにサブミットすることと、
１つ以上の品質管理メカニズムがアクセス可能なソースコードリポジトリに前記ソースファイルを格納することと、
前記バイナリファイルをバイナリコードリポジトリに格納することとをさらに含む、請求項６に記載の１つ以上の有形な記憶媒体。
【請求項８】
更新済みソースファイルと称される前記ソースファイルの新しいバージョンが前記ソースコードリポジトリ内にロードされたことを検出したことに応答して、前記ブロックチェーンを更新済みソースファイル登録情報で更新することをさらに含み、前記更新済みソースファイル登録情報は、前記更新済みソースファイルを前記最初のソースファイルにリンクする情報を含み、さらに、
前記最初のソースファイルの前記更新済みソースファイルのバージョンが新しいバイナリファイルにコンパイルされたことを検出したことに応答して、前記ブロックチェーンを更新済みバイナリ登録情報で更新することを含む、請求項７に記載の１つ以上の有形な記憶媒体。
【請求項９】
前記デジタルアセットの登録要求は、前記ソースファイルを開発したコンピュータまたは前記ソースファイルをサブミットしたコンピュータから生じ、前記第１のハッシュは、すべて前記コンピュータに関連付けられているかまたは前記コンピュータを特徴付けている、前記ソースファイルのデジタルフィンガープリント、ユーザ識別（ＩＤ）、中央処理装置（ＣＰＵ）ＩＤ、およびメディアアクセス制御（ＭＡＣ）アドレス、を入力として受信する第１のハッシュ関数を用いて演算される、請求項１に記載の１つ以上の有形な記憶媒体。
【請求項１０】
前記第１のハッシュは１つ以上のソフトウェア品質管理サーバがアクセス可能であり、
前記１つ以上の品質管理サーバを用いて、前記第１のハッシュをソースファイルバージョン情報に関連付けて前記分散型台帳に選択的に登録することをさらに含む、請求項９に記載の１つ以上の有形な記憶媒体。
【請求項１１】
ネットワーク化されたコンピューティング環境におけるデジタルアセット・トレーサビリティを容易にするための方法であって、
前記ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定する動作と、
前記デジタルアセットの最初のソースファイルの第１のハッシュを演算する動作と、
前記最初のソースファイルのバージョンを特定する動作と、
前記ネットワーク化されたコンピューティング環境の分散型台帳の１つ以上のノードを選択して、前記第１のハッシュを前記最初のソースファイルの前記バージョンに対応する前記デジタルアセットのバージョンに関連付けて前記分散型台帳にコミットする動作と、
前記ソースファイルをバイナリファイルに変換することによって、前記デジタルアセットのバイナリバージョンをもたらす動作と、
前記バイナリファイルのハッシュである第２のハッシュを演算する動作と、
前記第２のハッシュを前記デジタルアセットの前記バージョンに関連付けて前記分散型台帳にコミットする動作とを備える、方法。
【請求項１２】
前記第２のハッシュに関連付けられたバージョン情報および前記第１のハッシュに関連付けられたバージョン情報を用いて、前記分散型台帳内の１つ以上のバイナリファイルハッシュを、ソースファイルリポジトリ内の１つ以上のソースファイルと、前記ソースファイルが生じたワークステーションと、前記ソースファイルのデベロッパとに関連付けることをさらに含み、前記分散型台帳はブロックチェーンを含み、前記デジタルアセットはソフトウェアを含む、請求項１１に記載の方法。
【請求項１３】
前記ネットワーク化されたコンピューティング環境の１つ以上のクライアントデバイスならびに関連する１人以上のそれぞれの認証および許可されたユーザに対して、前記１人以上の認証および許可されたユーザに割付けられた１つ以上の許可に従って、前記バイナリファイルを選択的に利用可能にすることをさらに含み、前記１つ以上のクライアントデバイスは、前記ネットワーク化されたコンピューティング環境において提供される１つ以上のクラウドサービスの１人以上の顧客の１つ以上のコンピュータを含む、請求項１２に記載の方法。
【請求項１４】
前記１つ以上のクライアントデバイスならびに付随する１人以上のそれぞれの認証および許可されたユーザに対して前記ブロックチェーン内のデータを選択的にアクセス可能にすることによって、前記１人以上のそれぞれの認証および許可されたユーザが、前記ブロックチェーン内の前記バイナリファイルについての登録済みハッシュを、得られたバイナリファイルと比較できるようにすることをさらに含む、請求項１３に記載の方法。
【請求項１５】
公開鍵インフラストラクチャ（ＰＫＩ）を用いることで、前記ブロックチェーン内のデータへのユーザアクセス許可を認証することをさらに含む、請求項１４に記載の方法。
【請求項１６】
選択することはさらに、
プルーフオブステークメカニズムに従って、前記ネットワーク化されたコンピューティング環境の１つ以上のノードを選択して、前記第１のハッシュを前記ブロックチェーンにコミットすることと前記第２のハッシュを前記ブロックチェーンにコミットすることとを実現することを含み、前記プルーフオブステークメカニズムは、
前記１つ以上のノードの識別情報および関連する許可を参照して、前記１つ以上のノードが１つ以上のブロックを前記ブロックチェーンにコミットすることが許可されていることを確認することによって、一組の１つ以上の確認済みノードをもたらすステップと、
前記１つ以上の確認済みノードのうちのどのノードがソースファイルまたはバイナリファイルを最初に受信したかを判断するステップと、
前記１つ以上の確認済みノードの中から１つのノードを選択して、登録エントリを前記ブロックチェーンにコミットするための計算を行なうことによって、選択済みノードをもたらすステップと、
前記選択済みノードを用いて、前記登録エントリを、前記登録エントリをブロックとして前記ブロックチェーンにコミットする前記選択済みノードのインジケータと組合わせて前記ブロックチェーンにコミットすることによって、前記ブロックが前記インジケータを含むようにするステップとを実行する、請求項１２に記載の方法。
【請求項１７】
前記バイナリファイルをプロダクションサーバにサブミットすることと、
１つ以上の品質管理メカニズムがアクセス可能なソースコードリポジトリに前記ソースファイルを格納することと、
前記バイナリファイルをバイナリコードリポジトリに格納することとをさらに含む、請求項１６に記載の方法。
【請求項１８】
更新済みソースファイルと称される前記ソースファイルの新しいバージョンが前記ソースコードリポジトリ内にロードされたことを検出したことに応答して、前記ブロックチェーンを更新済みソースファイル登録情報で更新することをさらに含み、前記更新済みソースファイル登録情報は、前記更新済みソースファイルを前記最初のソースファイルにリンクする情報を含み、さらに、
前記最初のソースファイルの前記更新済みソースファイルのバージョンが新しいバイナリファイルにコンパイルされたことを検出したことに応答して、前記ブロックチェーンを更新済みバイナリ登録情報で更新することを含む、請求項１７に記載の方法。
【請求項１９】
前記デジタルアセットの登録要求は、前記ソースファイルを開発したコンピュータまたは前記ソースファイルをサブミットしたコンピュータから生じ、前記第１のハッシュは、すべて前記コンピュータに関連付けられているかまたは前記コンピュータを特徴付けている、前記ソースファイルのデジタルフィンガープリント、ユーザ識別（ＩＤ）、中央処理装置（ＣＰＵ）ＩＤ、およびメディアアクセス制御（ＭＡＣ）アドレス、を入力として受信するハッシュ関数によって実現され、前記第１のハッシュは１つ以上のソフトウェア品質管理サーバがアクセス可能であり、前記方法はさらに、
前記１つ以上の品質管理サーバを用いて、前記第１のハッシュをソースファイルバージョン情報に関連付けて前記分散型台帳に選択的に登録することを含む、請求項１１に記載の方法。
【請求項２０】
装置であって、
１つ以上のプロセッサと、
論理とを含み、前記論理は、前記１つ以上のプロセッサによって実行するべき１つ以上の有形な媒体において符号化され、前記論理は、実行されると、
ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定し、
前記デジタルアセットの最初のソースファイルの第１のハッシュを演算し、
前記最初のソースファイルのバージョンを特定し、
前記ネットワーク化されたコンピューティング環境の分散型台帳の１つ以上のノードを選択して、前記第１のハッシュを前記最初のソースファイルの前記バージョンに対応する前記デジタルアセットのバージョンに関連付けて前記分散型台帳にコミットし、
前記ソースファイルをバイナリファイルに変換することによって、前記デジタルアセットのバイナリバージョンをもたらし、
前記バイナリファイルのハッシュである第２のハッシュを演算し、
前記第２のハッシュを前記デジタルアセットの前記バージョンに関連付けて前記分散型台帳にコミットする
ように動作可能である、装置。
【発明の詳細な説明】
【発明の概要】
【０００１】
関連出願の相互参照
本願は、２０１７年８月２４日に出願された、「分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証（DIGITAL ASSET TRACEABILITY AND ASSURANCE USING A DISTRIBUTED LEDGER）」と題された米国仮特許出願連続番号第６２／５４９，８９３号と、２０１８年１月８日に出願された、「分散型台帳を用いるデジタルアセット・トレーサビリティおよび保証（DIGITAL ASSET TRACEABILITY AND ASSURANCE USING A DISTRIBUTED LEDGER）」と題された米国特許出願連続番号第１５／８６４，９７０号との利益を主張するものであって、上記出願は、あらゆる目的で本願中に十分に記載されるように、引用によってここに援用されている。
【０００２】
本願は、「分散型台帳を用いて公共のソフトウェアコンポーネント・エコシステムを管理するためのシステムおよび方法（SYSTEM AND METHOD FOR MANAGING A PUBLIC SOFTWARE COMPONENT ECOSYSTEM USING A DISTRIBUTED LEDGER）」と題された、２０１７年１２月１日に出願された米国特許出願連続番号第１５／８２９，６８４号（弁理士事件番号：ＯＲＡＣＰ０２００／顧客事件番号：ＯＲＡ１８０００１−ＵＳ−ＮＰ）に関するものであって、上記出願は、あらゆる目的で本願中に十分に記載されるように、引用によってここに援用されている。
【０００３】
背景
本願は、コンピューティングに関し、より特定的には、ネットワーク化されたコンピューティング環境においてデジタルアセットをトレースするとともに品質管理を実現するためのソフトウェアおよび付随する方法に関する。
【０００４】
デジタルアセットをトレースするためのシステムおよび方法は、悪意のあるサイバー攻撃（たとえばランサムウェア攻撃）を防止および／または軽減する、ソフトウェア知的財産（ＩＰ）権を行使してソフトウェア所有者を特定する、ソフトウェア更新を容易にする、などのために、著作権のある音楽、映像、ソフトウェアアプリケーション、ファイルなどをトレースすることを含む、要求の厳しいさまざまなアプリケーションにおいて使用されている。そのようなアプリケーションは、デジタルアセット起源を追跡およびトレースするための効率的なメカニズムを必要とすることが多い。
【０００５】
セキュリティに対する意識が高い組織および業界（たとえば、諜報機関、医療、金融など）は、デジタルアセットをトレースまたは追跡するための効率的な、正確な、かつ実質的に耐タンパー性のメカニズムを必要とすることが多い。そのような効率的なメカニズムは、組織が（たとえばマルウェア攻撃の）責任を突き止め、それによって関連する負債を軽減することを可能にし得る。デジタルアセット・トレーサビリティは、たとえばソフトウェア著作権などの知的財産権を保護および行使するためにも重要であり得る。しかしながら、ロバストで効率的なデジタルアセット・トレーサビリティ、ならびに他の予防的なセキュリティおよびトレーサビリティメカニズムは依然として達成できていない。
【０００６】
従来より、デジタルアセットを追跡およびトレースするために、たとえば企業、政府、大学などの組織は、特定のコンピューティング環境を管理する集中制御システム（たとえばアプリストア）を調整することに依拠している。このため、たとえば、マルウェアから防御するために、そのような集中制御システムには、たとえばマルウェア対策ソフトウェアなどの付加的なセキュリティ機能が搭載されている場合がある。
【０００７】
しかし、そのようなセキュリティ対策は往々にして、セキュリティ侵害が既に起こった後で、たとえばゼロデイマルウェア攻撃の後で、初めて実現される。概して、そのような集中システムを用いる組織は、顧客の信頼に依拠しなければならないことが多い。したがって、マルウェア攻撃に応じてなどの信託違反は、顧客にとってだけでなく、顧客を失う可能性がある組織にとっても特に問題となり得る。
【０００８】
概要
例示的な実施形態は、ソースコードおよび関連するコンパイル済みバイナリファイル（たとえばブロックチェーンなどの分散型台帳に、当該ファイルの暗号ハッシュを用いて登録されている（または登録される予定））のためのリポジトリを部分的に用いることによって、ネットワーク化されたコンピューティング環境におけるソフトウェア品質管理およびトレースを容易にするためのシステムおよび方法を開示する。分散型台帳の履歴記録（すなわち、台帳に既にコミットされているエントリ）は更新および読出しが可能であるが、所与のパーティシパンントシステムが容易に変更することはできない。ブロックチェーン記録、すなわちブロックは、ソースコードハッシュおよびバイナリハッシュをソフトウェアバージョンおよび／またはタイムスタンプに関連付けて格納する。
【０００９】
したがって、所与のバイナリファイルを、ブロックチェーンにログされた、そのバージョン、および／またはタイムスタンプによって、そのソースコードまでトレースできる。さらに、ソースコード登録および関連するハッシュは、ソースコードのフィンガープリント（たとえば、チェックサム、ＭＤ−５ハッシュ、または他のメカニズム）を、ワークステーション識別子（たとえば、ソースコードを開発した（もしくはソースコードをソースコードリポジトリにディスパッチした）ワークステーションの中央処理装置（ＣＰＵ）ＩＤ、メディアアクセス制御（ＭＡＣ）アドレス、および／またはユーザＩＤなど）と組合わせて用いて演算される。
【００１０】
（ソースコードおよび対応するバイナリの両方について）格納されたハッシュを用いることで、ソースコードファイルおよび／またはバイナリ画像が変更されていないことを検証することができるとともに、関連するソフトウェアバージョンに対応する著者およびワークステーションを判定および／または検証することができる。
【００１１】
さらに、この明細書中に記載されるブロックチェーンとノードの付随する機能とを用いることによって、さまざまな付加的な能力が容易に生じる。たとえば、デジタルアセットバージョン管理、トレース、監視、および通知；コードリリース・シーケンシング；ＩＰ保護；ソフトウェア・バグトレース、通知、および軽減；マルウェア攻撃検出、トレース、および軽減；品質保証ソースコードフィルタリング；バイナリファイル破損または変更の顧客検出；コンポーネント・ネスティング追跡；未登録コードのプロダクションサーバのフラグ立て、などを容易にするためのメカニズムはすべて、この明細書中に記載されるブロックチェーンならびに付随するシステムおよび方法を用いて容易に実現可能である。
【００１２】
さらに、クライアントシステム（たとえばコンシューマシステム）および関連する顧客はこれによって、たとえば、ダウンロード済みバイナリファイルのハッシュを、ブロックチェーンに登録された対応するハッシュと比較することによって、ソフトウェアをインストールするための準備として、当該ダウンロード済みバイナリファイルの保全性を容易に検証することができる。代替的には、または付加的には、クラウドサービスプロバイダは、たとえば、（プロダクションサーバに送信すべき）バイナリのハッシュを、ブロックチェーンに登録されたバイナリファイルについての関連するハッシュと比較することによって、当該プロダクションサーバに送信すべき１つの（または複数の）バイナリファイルが変更されていないことを容易に検証してもよい。
【００１３】
ネットワーク化されたコンピューティング環境におけるデジタルアセット・トレーサビリティを容易にするための別の例示的な方法は、ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定することと、デジタルアセットの最初のソースファイルの第１のハッシュを演算することと、最初のソースファイルのバージョンを特定することと、ネットワーク化されたコンピューティング環境の分散型台帳の１つ以上のノードを選択して、第１のハッシュを最初のソースファイルのバージョンに対応するデジタルアセットのバージョンに関連付けて分散型台帳にコミットすることと、ソースファイルをバイナリファイルに変換することによって、デジタルアセットのバイナリバージョンをもたらすことと、バイナリファイルのハッシュである第２のハッシュを演算することと、第２のハッシュをデジタルアセットのバージョンに関連付けて分散型台帳にコミットすることとを含む。
【００１４】
別の例示的な方法は、ソースコードファイルを生成することと、ソースコードファイルをリポジトリに格納することと、ソースコードファイルのハッシュをブロックチェーンに格納することと、ソースコードファイルをコンパイルしてバイナリファイル（この明細書中においては単に「バイナリ」とも称される）を生成することと、バイナリファイルのハッシュをブロックチェーンのブロックに格納することと、パーティシパントが分散型台帳を用いることで、バイナリファイルをコンパイルする際に用いられるソースコードファイルの起源を識別することができるように、バイナリファイルを分散させることとを含む。
【００１５】
したがって、この明細書中に記載される分散型台帳技術（たとえばブロックチェーン技術）または他の好適な信頼できるデータベースを用いて、ブロックチェーンを介したソースファイルからバイナリまでのコンピュータコードのトレーサビリティを確実にすることによって、デジタルアセットバージョン管理；コードリリース・シーケンシング；ＩＰ保護；ソフトウェア・バグトレースおよび軽減；マルウェア攻撃防止、トレース、軽減、などを可能にするための関連する効率的な方法が容易に生じる。
【００１６】
したがって、さまざまな実施形態は、ソースコードをコンパイル済みバイナリにリンクして、当該バイナリの起源を保証するとともに、当該バイナリの、当該バイナリを生成したソースコードまでのトレーサビリティを確実にすることができる、装置、方法、システム、または方法のための命令を提供する。
【００１７】
この明細書中に開示される特定の実施形態の性質および利点のさらなる理解は、明細書の残りの部分および添付の図面を参照することよって認識されるだろう。
【図面の簡単な説明】
【００１８】
【図１】分散型台帳を用いて、ソフトウェアアプリケーションまたはコンポーネントのソースコードを、コンパイル済みバージョン（この明細書中においてはバイナリと称される）にだけでなく、当該ソースコードおよびバイナリが関連付けられているワークステーションおよびデベロッパにもリンクすることを容易にするように実装された、第１の例示的なシステムおよび付随するコンピューティング環境を示す図である。
【図２−１】たとえば図１のコンピューティング環境などの例示的なコンピューティング環境のさまざまなモジュール間で発生し得る例示的なメッセージングを示す、例示的なメッセージシーケンス図である。
【図２−２】図２−１の続きの図である。
【図３】デジタルアセット・トレーサビリティなどを容易にするための、図１−２のコンピューティング環境によって実現可能な第１の例示的な方法のフロー図である。
【図４】ユーザ（コンシューマ）が図１−２の分散型台帳（ブロックチェーン）を用いて、実行すべき（走らせるべき）１つ以上のバイナリファイルが改ざんされていないことまたは破損していないことを確認できるようにするための、図１〜図３の実施形態によって実現可能な第２の例示的な方法のフロー図である。
【図５】図１〜図４の実施形態を実現するために使用可能なシステムおよび付随するコンピューティング環境の概略ブロック図である。
【図６】図１〜図５の実施形態を実現するために使用可能なコンピューティングデバイスの概略ブロック図である。
【発明を実施するための形態】
【００１９】
実施形態の詳細な説明
多くのアプリケーションにおいて、コンピュータソースコード、実行可能コード、データオブジェクトなどのデジタルアセットの起源およびその後の修正についての詳細を知っていることが望ましく、不可欠でさえある。しかし、異なる場所にいてお互いを知らない可能性がある異なるユーザまたは顧客間でこれらのアセットがやり取りおよび修正された場合、アセットを認証してトレースすることは困難である。企業は、集中型バージョン管理システムに専念することによってこの問題の解決に努めてきた。しかしこの場合、ユーザが中央当局を信頼することが必要である。
【００２０】
中央当局の必要性を減らすかまたはなくすための１つの方法は、分散型台帳アプローチを用いることである。分散型台帳の例は、今日知られているさまざまなブロックチェーン実現例において見つけることができる。ブロックチェーン特徴の１つ以上は、この明細書中に記載されるデジタルアセットとともに使用されるように適合され得る。具体的な特徴が説明され得るが、すべての特徴が各実施形態において実現される必要があるとは限らない。いくつかの実施形態においては、オープンソースコードを含む第三者コードを用いて機能の一部またはすべてを実現してもよい。
【００２１】
バージョン管理システムの特徴を、この明細書中に記載される分散型台帳システムの特徴と組合わせることができる。概して、バージョン管理システムまたは同様のデジタルアセット開発支援の多数のおよび多くのタイプの特徴を分散型台帳機能と組合わせて、所望のトレースならびにアセットの組織化された修正および分散を提供することができる。オープンソースのHyperledgerプロジェクトが提供するHyper-Fabricアーキテクチャコンポーネントなどの、既存のコンポーネントを用いてもよい。特徴は、安全な開発サービスの一部として商品化されて販売されてもよい。既存の営利会社、およびフリーまたはオープンソースソフトウェアプロジェクトは、自身のバージョン管理または連続的な展開製品に統合されたかまたは関連付けられた、記載される特徴を用いることができる。
【００２２】
説明の便宜上、ソフトウェア・エコシステムは、分散型コンピューティングリソース（たとえば、カタログインスタンス、付随する分散型ブロックチェーンなど）への／からのソフトウェアコンポーネントのアップロードおよび／またはダウンロードを可能にするように構成された、ネットワーク化された分散型コンピューティングリソースの集合を含むものであれば如何なるコンピューティング環境であってもよい。ネットワーク化されたコンピューティング環境は、相互通信コンピュータ、すなわち、コンピュータネットワーク、たとえば、ローカルエリアネットワーク（local area network：ＬＡＮ）、ワイドエリアネットワーク（wide area network：ＷＡＮ（たとえば、インターネット））、クラウドインフラストラクチャおよびサービスなど、を含むものであれば如何なるコンピューティング環境であってもよい。同様に、ネットワーク化されたソフトウェアアプリケーションは、ネットワークを介して１つ以上のコンピューティングリソース（たとえば、サーバ）と通信することまたはそれらを用いることを容易にするように適合されたコンピュータコードであってもよい。
【００２３】
なお、コンピューティングリソース（たとえば、エコシステムのネットワークを介して相互に通信し得るコンピュータシステム）の集合がこの明細書中においてノードと称されていることに留意されたい。所与のノード（たとえば、ソフトウェアコンポーネントカタログのインスタンス（この明細書中においてはカタログインスタンスと称される））は、他のノードと相互に通信するとともに選択的にデータ（たとえば、エコシステムについての登録情報を含むブロックチェーンのレプリカ）を共有するためのソフトウェアと、（たとえば、さまざまな登録の完了を案内するためのユーザインターフェイスソフトウェアによる）トランザクションの生成を容易にするためのソフトウェアと、エコシステムのルールへの準拠を確実にすることによりピア・ツー・ピア・エコシステムの実現を可能にするためのソフトウェアとを含んでいてもよい。
【００２４】
説明の便宜上、ピア・ツー・ピア・ネットワークまたはエコシステムは、コンピュータネットワークにわたって分散されるとともに、プロセスワークロードの共有を容易にするために相互に通信し得るコンピューティングリソース（たとえば、コンピュータシステムおよび／またはソフトウェアアプリケーション）、すなわちノード、の任意の集合であってもよい。
【００２５】
なお、従来から、ピア・ツー・ピア・ネットワークのピアまたはノードは、ネットワークによって提供されるデータおよび機能にアクセスする同様の特権を有していることに留意されたい。しかしながら、ピア・ツー・ピア・ネットワークのピアまたはノードは、その用語がこの明細書中において用いられている場合、同様に特権が付与される必要はない。たとえば、フルノードと称されるいくつかのノードには最大限に特権が与えられており、すなわち、エコシステムブロックチェーンからの読出しおよびエコシステムブロックチェーンへの書込みを行う特権を維持している。さほど特権が与えられていないノードは、エコシステムブロックチェーンにアクセスするためのプロキシとしてフルノードを使用する必要があるかもしれない。なお、「ピア・ツー・ピア・ネットワーク」および「ピア・ツー・ピア・エコシステム」という語はこの明細書中では同義で用いられる可能性があることに留意されたい。
【００２６】
説明の便宜上、ソフトウェア機能は、コンピュータコード（すなわち、ソフトウェア）を介して提供される如何なる機能、能力または特徴（たとえば、格納されたデータまたは配置されたデータ）であってもよい。概して、ソフトウェア機能はユーザインターフェイスおよび付随するユーザインターフェイス制御および特徴を用いることによってアクセス可能になり得る。ソフトウェア機能は以下の動作を含み得る。たとえば、コンピューティングオブジェクト（たとえば、トランザクションに関連付けられたビジネスオブジェクト）に関するデータを検索する動作、企業の人員を昇進させたり、採用したり解雇したりするなどの企業関連のタスクを実行する動作、注文する動作、分析を計算する動作、特定のダイアログボックスを開始する動作、検索を実行する動作、などである。
【００２７】
ブロックチェーンは、ブロックと称される、リンクされた記録の順番付けされたリストであってもよく、この場合、ブロックチェーンは、新しいブロックをブロックチェーンの終端に加えることによって発展させることができるが、より前のブロックの挿入は、より後のブロックが最初にブロックチェーンから展開されないかまたは削除されない限り、禁止される。ブロックチェーンのうちさまざまなブロックには、ブロックチェーンへの組込み時にタイムスタンプが付されることが多い。ブロックチェーンは、たとえば、所与のコンピューティング環境またはエコシステムのノードにインストールされ得る分散型ソフトウェアプリケーションまたはネットワーク化されたソフトウェアアプリケーションを用いて実現されてもよい。ブロック間のリンクは、新しいブロックに適用される１つ以上のハッシュを実現することによって実現されてもよい。この場合、１つ以上のハッシュは、１つ以上の前のブロックからの情報を活用または使用する。ブロックチェーンを用いることでトランザクションの分散型台帳を実現することができる。
【００２８】
説明の便宜上、分散型台帳は、ネットワークの複数のノード間で共有される共有デジタルデータの集合であってもよく、そのコピーが複数のノード間で複製されて格納され得る。分散型台帳によって維持されるデータはノード間で同期されてもよい。
【００２９】
したがって、分散型台帳は、一種の分散型データベース（すなわち、複数のエンティティのネットワークに連結されたさまざまなエンティティ間でデータを格納するためのメカニズム）として機能し得る。ノードは、ネットワークに連結される如何なるコンピュータシステムおよび／またはソフトウェアアプリケーションおよび／またはソフトウェアシステムまたはこれらのグループであってもよい。ここに記載されるノードは一般に「カタログインスタンス」と称される。というのも、これらノードは、付随するコンピューティング・エコシステムの他のノードおよび／またはパーティシパントがカタログに格納されたデータにアクセスするのを容易にするからである。
【００３０】
トランザクションは、エコシステムの１つ以上の局面を記述しているイベント、状態、プロパティまたは他の情報を記載する情報の任意の集合であり得る。この場合、１つ以上の局面は、参加しているデベロッパエンティティ、ソフトウェアコンポーネントコンシューマエンティティ、コントリビュータエンティティ、プロキシ化されたエコシステムパーティシパントおよびシステム、ソフトウェアコンポーネント相互関係、ソフトウェアコンポーネントのダウンロードおよび／またはアップロードのインスタンス、ソフトウェアコンポーネントのサポート状態、コンポーネントプロヴェナンス（provenance）情報などを含み得る。トランザクションは、この用語が用いられている文脈に応じて、エコシステムにおける活動（たとえば、デベロッパエンティティ登録、ネームスペース登録、コントリビュータ登録など）を記述するデータの集合を指すこともある。または、代替的には、トランザクションは、実際の活動（たとえば、コンポーネントをダウンロードすること）を指すこともある。
【００３１】
活動またはタスクを表しているトランザクションは十分に自動化されてもよく、またはマニュアルでの承認または他の検証活動などの人のワークフロータスクを含んでいてもよい。したがって、トランザクションはブロックチェーンにおける単一のもの（たとえば、情報の集合）として表わされる可能性もあるが、トランザクションのいくつかの形態は、実際には、ワークフローが処理されるのに応じて台帳中に記録することができる別個のサブトランザクションに分解されてもよい。したがって、「トランザクション」という語はまた、その語が用いられている文脈に応じて、情報（たとえばコンピューティングオブジェクト）の集合を伝達する動作を指している可能性もあり、情報（たとえばコンピューティングオブジェクト）の実際の集合を指している可能性もある。
【００３２】
たとえば、個々のソフトウェアデベロッパ（たとえば、コンポーネントコントリビュータ）がコンポーネントエコシステムに登録する場合、この明細書中に記載されているように、コントリビュータ登録プロセスに関する（たとえば、これを文書化する）情報は、エコシステムのブロックチェーンに組込むための準備として、カタログインスタンスのうち１つ以上の未検証の待ち行列に伝搬されてもよい。情報の収集および／または転送はトランザクションと称されてもよく、収集された情報を維持するコンピューティングオブジェクトはまた、トランザクション（たとえば、デベロッパ登録トランザクション）と称されてもよい。
【００３３】
所与のノードには、所与のコンピューティング環境またはエコシステムにおいて異なる特権が割付けられてもよい。同様の特権を持つノードは、それが１つ以上の特定のタスクの実現に関係しているので、タスクを完了させるためのピアと称されている。説明の便宜上、ピア・ツー・ピア・エコシステムは、少なくとも部分的に、エコシステムの別々のノードまたはピアを介して実現される１つ以上の分散型またはネットワーク化ソフトウェアアプリケーションによって実現される如何なるエコシステムまたはコンピューティング環境であってもよい。
【００３４】
この明細書中に記載されるさまざまな例示的な実施形態は、ソフトウェアコンポーネントカタログインスタンスのノードを含むピア・ツー・ピア・ソフトウェア・エコシステムによって実現される。以下により十分に記載される例示的なソフトウェアコンポーネントカタログインスタンスはさまざまなソフトウェアアプリケーションを実行し得る。これらさまざまなソフトウェアアプリケーションは、（ソフトウェアコンポーネントのデータベースを含み得る）ローカルデータストアを維持および管理するためのソフトウェア、セキュリティおよび許可機能を実現するためのソフトウェア、さまざまなタイプの登録（それらの例が以下においてより十分に記載されている）を可能にするためのユーザインターフェイス（ＵＩ）ディスプレイスクリーンを生成するためのソフトウェア、エコシステムのための未検証のトランザクション待ち行列を管理するためのソフトウェア、他のカタログインスタンスと通信するためのソフトウェア、エコシステムブロックチェーンのレプリカを維持するためのソフトウェア、エコシステムのブロックチェーンのための新しいブロックをコンピューティングする（すなわち、検証するかまたは確認する）ためのソフトウェア、エコシステムの１つ以上のカタログインスタンスによる検証（およびブロックチェーンブロックへの包含）のためのトランザクションをサブミットするためのソフトウェア、１つ以上のブロックをブロックチェーンに追加するのに必要な演算を実行するためにカタログインスタンスを選択するための任意のアルゴリズムを実現するためのソフトウェア、ブロックをブロックチェーンに追加するのに必要なハッシュを演算するためのソフトウェア、などを含み得る。
【００３５】
概して、デベロッパおよび／またはビジネスのコミュニティは、ソフトウェア・エコシステムを用いて、情報、リソースおよびコンポーネントのやり取りを可能にするかまたは容易にする共通の技術的プラットフォームを用いてソフトウェアおよびサービスのための共有の市場と協働的に対話してもよい。
【００３６】
ソフトウェア・エコシステムは、デベロッパ、ベンダーおよび顧客によって使用される再使用可能なソフトウェアコンポーネントのオープンなエコシステムとして実現され得る。このようなエコシステムは、ネットワーク化されたインフラストラクチャまたは「クラウド」インフラストラクチャならびに付随するプロセスおよびサービスのまわりに構築されてもよい。しかしながら、本発明の特定の実施形態は特定の処理プラットフォーム、技術およびインフラストラクチャに関して記載され得るが、他の変形例も可能であり、異なるシステムに適合されてもよい。
【００３７】
従来より、ソフトウェアデベロッパは、ソフトウェアアプリケーションの開発および関連するファイルの格納を容易にするために特定のクラウドサービスをサブスクライブし得る。ソフトウェアアプリケーションまたはプロセスフロー開発のために構成されるクラウドサービスは、ここではプロセスクラウドサービス（Process Cloud Service：ＰＣＳ）と称される。
【００３８】
プロセスクラウドサービスは、開発されている所与のソフトウェアプログラムによって用いられるファイルおよび他のオブジェクトを格納するためにネットワーク化されたデータベースを使用する可能性がある。サーバ側開発環境は、デベロッパがブラウザを介してアクセス可能であってもよい。開発環境は、開発されたソフトウェアアプリケーションファイルがＰＣＳデータベースに格納されるように、ＰＣＳにバックアップされていてもよい。
【００３９】
説明の便宜上、コンピューティング環境は、コンピュータ処理を伴う１つ以上のタスクを実行するために用いられるコンピューティングリソースの如何なる集合であってもよい。コンピュータはメモリと通信する如何なるプロセッサであってもよい。コンピューティングリソースは、コンピューティング環境の如何なるコンポーネント、メカニズムまたは能力もしくはその量であってもよく、プロセッサ、メモリ、ソフトウェアアプリケーション、ユーザ入力デバイスおよび出力デバイス、サーバなどを含むがこれらに限定されない。コンピューティングリソースの例は、１つ以上のウェブサービス、アプリケーションプログラミングインターフェイス（Application Programming Interface：ＡＰＩ）などによって提供されるデータおよび／またはソフトウェア機能を含む。
【００４０】
エンタープライズコンピューティング環境はビジネスまたは組織のために用いられる如何なるコンピューティング環境であってもよい。一例としてのエンタープライズコンピューティング環境は、ネットワークにわたって分散されたさまざまなコンピューティングリソースを含み、さらに、イントラネットウェブサーバ、データベース、ローカルのハードディスクまたはファイルサーバ上のファイル、電子メールシステム、ドキュメント管理システム、ポータルなどの上にあるプライベートの共有コンテンツを含み得る。
【００４１】
所与のソフトウェアアプリケーションは、構成するソフトウェアアプリケーションまたはモジュール（たとえば、サービス、機能、手順、コンピューティングオブジェクト、など）含み得る（が、必ずしも含むものではない）。したがって、「ソフトウェアアプリケーション」という語は、ネットワーク化されたソフトウェアアプリケーションまたはそれらが一体化されたグループを含んでいてもよい。
【００４２】
この明細書中に記載される特定の実施形態は、プロセスベースのソフトウェアアプリケーションの開発、展開および実現に特に有用である。プロセスベースのソフトウェアアプリケーションは、プロセス要素またはソフトウェア活動とも称されるステップの１つ以上のシーケンスによって定義可能な如何なるソフトウェアアプリケーションであってもよい。「プロセス要素」、「フロー要素」、「ソフトウェア要素」および「ソフトウェアプロセス要素」という語はこの明細書中では同義で用いられ、たとえば、イベント、活動、ゲートウエイ、サブプロセスなどの任意のステップを指していることもある。プロセスベースのソフトウェアアプリケーションのステップのシーケンスはプロセスフローと称されることもある。プロセスフローは、ユーザインターフェイス（ＵＩ）ディスプレイスクリーンにおけるスイムレーンを介してモデル化されて例示されることが多い。プロセスベースのアプリケーションは、さまざまなプロセスステップのためのさまざまなウェブサービスおよび関連するソフトウェアコンポーネントを利用し得る複合アプリケーションによって実現されることが多い。
【００４３】
明瞭にするために、いくつかの周知のコンポーネント、たとえば、ハードドライブ、プロセッサ、オペレーティングシステム、電源、ルータ、インターネット・サービス・プロバイダ（Internet Service Provider：ＩＳＰ）、ワークフロー・オーケストレータ、プロセススケジューラ、プロセスクラウド、ビジネスプロセスマネジメントシステム、エコシステムデベロッパエンティティ、エコシステムコントリビュータエンティティ、統合開発環境、プロキシシステム、アイデンティティ管理システム（たとえば、アイデンティティドメイン）、認証機関（Certificate Authority：ＣＡ）などは、図中に必ずしも明確にコールアウトされているわけではない。しかしながら、この教示を利用できる当業者であれば、所与の実現例についてのニーズを満たすためにいずれのコンポーネントを実装するべきかと、それらコンポーネントを如何に実装するべきかとについて認識するだろう。
【００４４】
図１は、分散型台帳１８を用いて、ソフトウェアアプリケーションまたはコンポーネントのソースコードを、コンパイル済みバージョン（この明細書中においてはバイナリと称される）にだけでなく、当該ソースコードおよびバイナリが関連付けられているワークステーション１２およびデベロッパにもリンクすることを容易にするように実装された、第１の例示的なシステム１０および付随するコンピューティング環境を示す。システム１０全体がソフトウェア・エコシステムとして機能し、これによって、ワークステーション１２を使用するデベロッパは、たとえばソースコードリポジトリ４６およびバイナリリポジトリ４８にソフトウェアを提供することができ、当該ソフトウェアは、以下により十分に記載されるように、顧客システム２０および／またはプロダクションサーバ１６に対して選択的に利用可能にされ得る。
【００４５】
例示的なシステム１０は、インターネットなどのネットワークを介して分散型サーバ１４（たとえばクラウド）と通信する１つ以上のワークステーション（たとえば、それぞれのソフトウェアデベロッパによって操作されるコンピュータ）１２を含む。例示的なワークステーション１２は、ソフトウェアアプリケーションを開発するためのクライアント側ソフトウェア２４を含む。クライアント側ソフトウェア２４は、ソースコードファイル２６を開発するためのクライアント側デベロッパツールと、分散型サーバ１４によって提供される機能にアクセスするためのブラウザとを含んでいてもよい。
【００４６】
しかし、実施形態はクライアント側ソフトウェア開発環境に限定されず、サーバ側開発環境、およびブラウザがアクセス可能なウェブベースのまたはクラウドベースのソフトウェア開発機能を含み得る他の統合開発環境（Integrated Development Environment：ＩＤＥ）をさらに含んでいてもよいことに留意されたい。さらに、ワークステーション１２は、単にサーバ側コンパイラ３６に依拠するのみではなく、コンパイラをさらに含んでいてもよい。
【００４７】
クライアント側ソフトウェア２４は、ソフトウェア開発機能にアクセスするための、かつ分散型サーバ１４を介したソースコード、バイナリなどのブロックチェーン１８への登録を開始するための、ユーザオプションおよび制御を含む、さまざまなユーザインターフェイス（ＵＩ）ディスプレイスクリーン２２を表示することを容易にする。当該ユーザオプションおよび制御は、分散型サーバ１４のサーバがブロックチェーンノードとして働くこと可能にする機能を含む。
【００４８】
説明の便宜上、ＵＩディスプレイスクリーンは、ディスプレイ上に提示される如何なるソフトウェア生成描写であってもよい。描写の例は、ウィンドウ、ダイアログボックス、表示されたテーブル、および他のグラフィカルユーザインターフェイス特徴、たとえば、ブラウザなどのソフトウェアを介してユーザに提示されるユーザインターフェイス制御などを含む。単一の境界内に含まれているユーザインターフェイスディスプレイスクリーンはビューまたはウィンドウと称される。ビューまたはウィンドウは、サブビューまたはサブウィンドウ、ダイアログボックス、グラフ、テーブルなどのセクションを含み得る。いくつかの場合には、ユーザインターフェイスディスプレイスクリーンは、ディスプレイ上にその時点で表示されているすべてのアプリケーションウィンドウを指していることもある。
【００４９】
ＵＩ制御は、ユーザがデータを入力および閲覧すること、および／またはユーザインターフェイスと対話すること、を可能にするように適合されたユーザインターフェイスディスプレイスクリーンのうち表示された任意の要素またはコンポーネントであってもよい。ユーザインターフェイス制御の追加の例は、ボタン、ドロップダウンメニュー、メニューアイテム、タップアンドホールド機能などを含む。同様に、ユーザインターフェイス制御信号は、ソフトウェアのための入力として提供される如何なる信号であってもよい。この場合、入力は、ソフトウェアに関連付けられたユーザインターフェイスディスプレイスクリーンおよび／または付随するソフトウェアアプリケーションに影響を及ぼす。
【００５０】
なお、一般的に、システム１０のさまざまなモジュールのグループ分けは例示的なものであって、さまざまに異なっていてもよく、たとえば、この教示の範囲から逸脱することなく、特定のモジュールが他のモジュールと組合わされてもよく、もしくは他のモジュール内に実装されてもよく、または、それ以外の場合には、モジュールが、ネットワーク間で、もしくは１つ以上のコンピューティングデバイスもしくは仮想マシン内において（図示されるのとは）異なる態様で分散されていてもよいことに留意されたい。
【００５１】
たとえば、図１では、たとえばブロックチェーンなどの分散型台帳１８はワークステーション１２および分散型サーバ１４とは別個のエンティティとして現われているが、実際には、ブロックチェーン１８は、分散型サーバ１４のまわりに分散され得る、分散された一組の複製済みデータおよび機能（たとえばブロックチェーンレプリカ）として実現される。
【００５２】
さらに、図１では、ソースコードハッシュ関数（単にソースハッシュ関数とも称される）の実現例は分散型サーバ１４（たとえば分散型ソフトウェア品質管理サーバ）の１つ以上によって実現されるものとして示されているが、代わりに、そのようなハッシュ関数はワークステーション１２上で実現され得ることに留意されたい。さらに、分散型サーバ１４はブロックチェーンインターフェイス機能４４を含むものとして示されているが、特定の実施形態においては、そのような機能はワークステーション１２にも含まれていてもよいことに留意されたい。さらに、ワークステーション１２には、この教示の範囲から逸脱することなく、たとえばワークステーション１２が分散型サーバ１４のうちのサーバの１つとして働き得るように、さらに付加的な機能が搭載されていてもよい。
【００５３】
分散型サーバ１４は、以下により十分に記載されるように、ソフトウェア・バグトレース、マルウェア検出、ソフトウェアリリース・シーケンシング、ソフトウェアＩＰ保護および行使メカニズム、などを容易にするためのコードおよび機能を組込んでいるため、この明細書中においては「品質管理サーバ」と称される。そのような機能は、エコシステム１０によってコンシューマシステム２２および／またはプロダクションサーバ１６に提供されるソフトウェアの品質を保証するのに役立つ。
【００５４】
この例示的な実施形態においては、分散型サーバ１４はコントローラ２８を含む。コントローラ２８は、さまざまなモジュール３０〜４８のインターフェイス化、ならびにさまざまなモジュール３０〜４８間の相互通信およびルーティングの制御を容易にするミドルウェアを組込んでいる。コントローラ２８はまた、ワークステーション１２との通信を処理してルーティングし、さらに、ワークステーションＵＩ制御およびオプション２２についてのＵＩレンダリング命令を容易にするための命令または機能を含んでいてもよい。
【００５５】
例示的なサーバ側モジュールおよび機能３０〜４８は、ソースコード（この明細書中においては単に「ソース」とも称される）フィンガープリンティングモジュール３０と、ソースハッシュ関数３２と、バイナリハッシュ関数３４と、コンパイラ３６と、ソフトウェアバージョンコントローラ３６と、ソフトウェアリリース・シーケンシングモジュール３８と、品質保証（Quality Assurance：ＱＡ）モジュール４０と、ソフトウェアプロヴェナンスアナライザ４２と、ブロックチェーンインターフェイス機能４４とを含む。コントローラ２８は、以下により十分に記載されるように、ソースコードリポジトリ４６およびバイナリコードリポジトリ４８のゲートキーパーとしても機能し、プロダクションサーバ１６と通信を行ない、任意にコンシューマシステム２０と通信を行なう。
【００５６】
例示的なシナリオにおいては、（クレデンシャル（たとえばユーザＩＤ）をたとえばサブミットすることによって）分散型サーバ１４にソースコードを供給することが許可されている、ワークステーション１２を使用するデベロッパが、デベロッパツール２４を用いて１つ以上のソースコードファイル２６を作成する。１つ以上のソースコードファイル２６は、１つ以上のソフトウェアプログラムおよび／またはコンポーネントを規定するプログラミング言語命令を含むソースコードを表わしている。
【００５７】
次いで、ワークステーション１２を使用するデベロッパは、ソースコードを分散型サーバ１４に登録するオプションを（たとえばＵＩ制御およびオプション２２の中から）選択する。次いで、ソースコードファイル２６は、ワークステーション識別情報（たとえば、ＣＰＵ  ＩＤ、ＭＡＣアドレス、およびユーザＩＤ）とともに、分散型サーバ１４の１つ以上のコントローラ２８に送られる。なお、いくつかの実施形態においては、ワークステーション１２および関連するデベロッパを識別するのに好適な、他の数または組合わせの１つ以上の数または識別コードを代わりに用いてもよいことに留意されたい。
【００５８】
次いで、コントローラ２８は、フィンガープリンティングモジュール３０によって実現されるフィンガープリンティングアルゴリズムに従って（１つまたは複数の）ソースコードファイルのフィンガープリントを得るために、（１つまたは複数の）ソースコードファイルをソースフィンガープリンティングモジュール３０に入力する。フィンガープリンティングアルゴリズムについての正確な詳細は実現例特有のものであって、所与の実現例についてのニーズに応じて異なり得る。この例示的な実施形態においては、ソースフィンガープリンティングモジュール３０は、ＭＤ−５ハッシュアルゴリズム、または他の好適なチェックサムもしくはハッシュ関数を用いる。ソースフィンガープリンティングモジュール３０の出力は、（１つまたは複数の）入力ソースファイルを識別するのに使用可能な数（または、たとえばメッセージダイジェストなどのコード）を表わしている。理論的には、所与のソースファイルの少しでも変更されたバージョンを含む異なるソースファイルは、ソースフィンガープリンティングモジュール３０から出力される異なるソースコードフィンガープリントを（衝突がなければ）もたらす。
【００５９】
次いで、結果として生じるソースコードフィンガープリントがコントローラ１４によってソースハッシュ関数３２にルーティングされ、ソースファイル２６とともに（ワークステーション１２から）コントローラ２８に供給されたＣＰＵ  ＩＤ、ＭＡＣアドレス、およびユーザＩＤと組合されて、ソースハッシュ関数３２への入力としてサブミットされる。次いで、ソースハッシュ関数３２は（１つまたは複数の）ソースファイル２６、ＣＰＵ  ＩＤ、ＭＡＣアドレス、およびユーザＩＤを入力としてハッシュアルゴリズムを実行して、ソースハッシュ（この明細書中においてはソースコードハッシュとも称される）を出力として生成する。
【００６０】
したがって、ソースハッシュ関数３２によって戻されるソースハッシュは、（たとえばＣＰＵ  ＩＤおよびＭＡＣアドレスによる）ワークステーション１２についての情報、（たとえばユーザＩＤによる）ユーザについての情報、およびソースファイル２６についての情報を含む。次いで、結果として生じるソースハッシュおよび関連するソースコードファイル２６は、ソースコードおよびハッシュリポジトリ４６に格納されるためにコントローラ２８によってルーティングされる。
【００６１】
なお、コントローラ２８は、この教示の範囲を逸脱することなく、ソースコードファイル２６をソースコードおよびハッシュリポジトリ４６にまず格納してからソースコードファイル２６をソースフィンガープリンティングモジュール３０にルーティングしてもよいことに留意されたい。さらに、受信したＣＰＵ  ＩＤ、ユーザＩＤ、およびＭＡＣアドレスは、分散型サーバ１４のローカルキャッシュ内に維持されてもよく、ならびに／または、ソースコードおよびハッシュリポジトリ４６に一時的に格納されてもよいことに留意されたい。
【００６２】
次いで、コントローラ２８はブロックチェーンインターフェイシングコード４４を用いて、ブロックチェーン１８によって登録するための（ソースハッシュを含む）対応するトランザクションを生成する。ソースハッシュを含むブロックチェーン１８のブロックがブロックチェーン１８の１つ以上のノード（この場合、ノードは分散型サーバ１４に対応する）によって検証されてブロックチェーン１８にコミットされると、ソースハッシュはブロックチェーン１８に登録されたかまたはブロックチェーン１８にコミットされたと言われる。
【００６３】
ブロックチェーンインターフェイシングモジュール４４は、ブロックを検証してブロックチェーン１８にコミットする機能だけでなく、他のノード１４のそれぞれのブロックチェーンインターフェイシングモジュール４４を介して他のノード１４と通信する機能、および、ノード１４のうちのどのノードがトランザクションならびにブロック検証およびコミット機能を実行して特定のブロックをブロックチェーン１８にコミットするかを判断するための任意のコンセンサスアルゴリズムに準拠する機能も含む。ブロックチェーンインターフェイシングモジュール４４はさらに、更新済みローカルブロックチェーンレプリカを維持する命令、および、（ブロックチェーン１８の１つ以上のブロックにコミットされる予定の）受信したトランザクションの表示を他のパーティシパントノード１４に伝搬する命令を含む。
【００６４】
この例示的な実施形態においては、ノード１４の中の１つのノードが、プルーフオブワーク（proof-of-work）メカニズムではなく、プルーフオブステーク（proof-of-stake）コンセンサスメカニズムに従って選択される。説明の便宜上、プルーフオブステークメカニズムは、ブロックをブロックチェーンにコミットする処理（ブロックを演算するレース（すなわち、プルーフオブワークメカニズム）を含まない）を実行するために１つ以上のノードを選択する如何なるノード選択アルゴリズムであってもよい。使用する正確なプルーフオブステーク法は、所与の実現例についてのニーズに応じて異なり得る。
【００６５】
この例示的な実施形態においては、特定のブロックをブロックチェーン１８にコミットするために選択されるノードは、ワークステーション１２からソースファイル２６を最初に受信したノードである。代替的には、または付加的には、ノードはさらに、ノード１４の各々の許可、利用可能なコンピューティングリソース、または他の基準に基づいて、スクリーニングされて選択され得る。１つ以上のアイデンティティドメインが、エコシステム１０の認証済みノード１４およびワークステーション１２および他のユーザ（たとえば、コンシューマシステム２０を使用するコンシューマ）間で許可を管理して割付けてもよい。これによって、より計算的に高価なプルーフオブワークメカニズムの必要性を減らすかまたはなくすことができる。
【００６６】
しかしながら、この実施形態においては、特定のノード１４がブロックをブロックチェーン１８にコミットすると、ノード１４は識別インディシアを当該ブロックに追加し、これによって、ノード１４はブロックの起源を確認することができる。なお、ワークステーション１２がブロックチェーン１８のノードとして機能する代替の実現例においては、必要な識別インディシアはソースハッシュに既に含まれていてもよいことに留意されたい。これは、ブロックをコミットするために選択されるワークステーション１２が登録すべきソースコードファイル２６のプロバイダでもある場合に起こり得る。
【００６７】
なお、ブロックチェーン１８は（ハッシュポインタによって前のブロックにリンクされる）リンク済みブロックのチェーンとして示されているが、実際には、ブロックチェーン１８のノード１４はいわゆる未検証の待ち行列も維持することに留意されたい。未検証の待ち行列は、ノード１４間でも複製される。未検証の待ち行列は、ブロックチェーン１８のブロックにコミットされるための準備として集められている１つ以上のトランザクションを含む。未検証の待ち行列内にある間、たとえば、ブロックチェーン１８へのコミット前に未検証の待ち行列内のトランザクションデータの妥当性および保全性を確認することを容易にするために、さまざまな試験が行なわれ得る。そのような未検証の待ち行列の使用法は、「分散型台帳を用いて公共のソフトウェアコンポーネント・エコシステムを管理するためのシステムおよび方法（SYSTEM AND METHOD FOR MANAGING A PUBLIC SOFTWARE COMPONENT ECOSYSTEM USING A DISTRIBUTED LEDGER）」と題された、２０１７年１２月１日に出願された上記の関連の米国特許出願連続番号第１５／８２９，６８４号（弁理士事件番号：ＯＲＡＣＰ０２００／顧客事件番号：ＯＲＡ１８０００１−ＵＳ−ＮＰ）においてより十分に記載されており、上記出願は引用によってここに援用されている。
【００６８】
この例示的な実施形態においては、ソースハッシュがブロックチェーン１８に登録される前に、さまざまなタイプの品質管理処理および試験が行なわれる。たとえば、バージョンコントローラ３６は、ソフトウェアアプリケーションまたはそれによって規定されるコンポーネントのバージョンに対応する、ソースファイル２６のバージョンを判定する。バージョンコントローラ３６はまた、ＱＡモジュール４０によって処理されたソースファイル２６のみが、たとえばコンパイラ３６によるコンパイルなどのさらなる処理のためにリリースされることを確実にする外部論理をソースファイル２６と結合して追加してもよい。これによって、高品質のコードがコンパイルおよびさらなる試験のためにリリースされ得るため、低品質のコードまたは感染コードがリリースされることに関連するコストを削減することができる。
【００６９】
この例示的な実施形態においては、ＱＡモジュール４０は複数の分析段階を含んでおり、これによって、コードが１つの処理段階を通らない場合は、さらなる処理が不要となり得る。ＱＡモジュール４０によって実行可能な試験の例は、ソフトウェアバグ（たとえば、「ゼロ除算」の可能性などの論理エラー）および／またはマルウェアを検出およびトレースすること、発見されたバグまたはマルウェアのインスタンスをデベロッパに通知すること、それによってソフトウェアのバグまたは他の問題となる特徴を軽減するのに役立つこと、を含む。
【００７０】
なお、いくつかの実現例においては、ソースファイルのバージョンはタイトルを有する必要はなく、代わりにタイムスタンプ（たとえばファイル完成日）および／またはソースファイル２６とともに含まれている他のメタデータであってもよいことに留意されたい。付加的には、または代替的には、ソースファイル２６についてデベロッパが選択した名前の代わりとして、または当該名前と組合されて、付加的なタイムスタンプが用いられてもよい。ソースコードファイル２６を受信すると付加的なタイムスタンプがサーバ１４によって適用されてもよい。さらに別のタイムスタンプが、ソースハッシュが登録されるブロックチェーン１８のブロックに適用される。
【００７１】
そのようなタイミング情報はプロヴェナンスアナライザ４２によって用いられることで、本来のデベロッパ以外の誰かによって受信された所与の一組のソースファイル２６が、開発されたソフトウェアに対する本来のデベロッパのＩＰ権を侵害していないことを確実にするのに役立ち得る。プロヴェナンスアナライザ４２は、ＩＰ考慮に適用されるそのようなプロヴェナンス判定を容易にするために、デベロッパによってサブミットされたソースコードファイル２６に適用され得る。さらに、プロヴェナンスアナライザ４２は、たとえばバイナリコードおよびハッシュリポジトリ４８内に維持されるなど、コンパイル済みバイナリにも適用され得ることに留意されたい。デベロッパ間でＩＰコンフリクトが発生した場合、プロヴェナンスアナライザ４２は、どのデベロッパが最初にソースコードファイルをサーバ１４にサブミットしたかを立証するのに役立ち得る。
【００７２】
さらに、この実施形態においては、プロダクションサーバ１６もコンシューマシステム２０も、ソースコードおよびハッシュリポジトリ４６内に維持されているソースコードファイル２６にアクセスする必要がないことに留意されたい。これは、コンシューマシステム２０のオペレータの１人が他のデベロッパのソースコードファイルまたはそのセクションを、本来のデベロッパからのライセンスを用いて自身のコードに容易に組込む可能性を低くするのにさらに役立つ。
【００７３】
なお、プロヴェナンスアナライザ４２はコード開発および改訂のタイムラインを生成する機能も含むことに留意されたい。次いで、タイムライン、バージョンシーケンス、および／またはソフトウェアパッチシーケンスがソフトウェアリリース・シーケンシングモジュール３８によって用いられることで、そのコードが適切な順序でリリースされることが確実になる。なお、ソフトウェアリリース・シーケンシングモジュール３８およびプロヴェナンスアナライザ４２は両方とも、特定のソフトウェアアプリケーションについての登録データ（たとえば、ソースハッシュおよび／またはバイナリハッシュ）を使用できることに留意されたい。登録データはタイムスタンプ情報も含み、ハッシュを用いることで、特定のソースファイルおよび／またはバイナリファイルが登録済みバージョンから変更されていないことまたは変えられていないことを確認できる。
【００７４】
ソースハッシュ関数３２から出力された（かつ、対応するソースコードに関連付けてソースコードおよびハッシュリポジトリ４６内に維持された）ソースハッシュがブロックチェーン１８に登録された後、かつ、たとえば、ＱＡモジュール４０、ソフトウェアプロヴェナンスアナライザ４２、およびソフトウェアリリース・シーケンシングモジュール３８などのさまざまなモジュールによる処理の後、ソースファイル２６はコンパイル、すなわちバイナリ（１つ以上のバイナリファイル）への変換に進み得る。（コンパイラ３６による）バイナリへの変換の後、コンパイラ３６から出力されたバイナリを用いて、対応するバイナリハッシュがバイナリハッシュ関数３４によって演算される。
【００７５】
コンパイラ３６からバイナリを得るために、コントローラ２８はソースコードファイル２６をコンパイラ３６に入力し、コンパイラ３６はバイナリを戻す。次いで、結果として生じるバイナリは、プロヴェナンスアナライザ４２によって判定された、ソースコードファイル２６と同じバージョン情報であり得るバージョン情報に関連付けて、バイナリコードおよびハッシュリポジトリ４８に格納され得る。なお、バイナリコードおよびハッシュリポジトリ４８内のバイナリファイルのバージョンを、ソースコードおよびハッシュリポジトリ４６内のソースコードの対応するバージョンと一致させることで、たとえば、ソースコードファイルの対応するバージョンと一致するバイナリコードのバージョンを見つけることができることに留意されたい。これは、たとえば、ＩＰの行使、バグの（本来のデベロッパまでの）トレースおよび通知、マルウェア検出およびトレースなどのために、プロヴェナンスアナライザ４２およびＱＡモジュール４０がトレース動作を完了するのに役立つ。
【００７６】
なお、バイナリハッシュ関数およびソースハッシュ関数３２についての正確な詳細は実現例特有のものであって、所与の実現例についてのニーズに応じて異なり得ることに留意されたい。この教示を利用できる当業者であれば、過度の実験なしに、所与の実現例についてのニーズを満たすために好適なハッシュ関数を容易に選択および／または開発するだろう。
【００７７】
連続的な展開シナリオにおいて、ソフトウェアリリース・シーケンシングモジュール３８は、（バイナリ画像５０に対応する）バイナリ出力を生成するためにソースコードをコンパイラ３６にリリースし、当該バイナリ出力は、ソフトウェアリリース・シーケンシングモジュール３８によって決定されたシーケンスでプロダクションサーバ１６によって実行されるためにプロダクションサーバ１６に送られる。
【００７８】
代替的には、または付加的には、ソフトウェアリリース・シーケンシングモジュール３８は、バイナリコードおよびハッシュリポジトリ４８内に存在する既にコンパイルされたバイナリを用いてもよい。この場合は、バイナリコードおよびハッシュリポジトリ４８内の（格納された特定のソフトウェアアプリケーションについての）バイナリファイルが、バイナリ画像５０として実行されるために、コントローラ２８を介してプロダクションサーバ１６に順次リリースされる。
【００７９】
クライアント側インストールシナリオにおいては、コンシューマ（たとえば、自身のコンシューマシステム２０にバイナリをダウンロードおよびインストールすることを望んでいる分散型サーバ１４をホストするクラウドのクラウドサービスの顧客）が、ブロックチェーン１８への読出しアクセスを可能にするブロックチェーンクライアントを自身のシステム２０にインストールしてもよい。コンシューマシステム２０が、たとえばバイナリコードおよびハッシュリポジトリ４８から、インストールおよび実行するための一組の１つ以上のバイナリファイルを得ると、ダウンロード済みバイナリに対応する１つ以上のブロックチェーンエントリが用いられることで、ダウンロード済みバイナリが、ブロックチェーン１８内の１つまたは複数の対応するハッシュエントリに鑑みて予期されるものと一致するハッシュを示すことが確認され得る。したがって、コンシューマはこうして、特定のダウンロード済みバイナリファイルが改ざんされていないこと、または破損していないこともしくは変更されていないことを容易に判定または確認できる。
【００８０】
図１では、コンシューマシステム２０は、バイナリコードおよびハッシュリポジトリ４８と直接通信を行なうものとして示されている。しかし、コンシューマシステム２０はこれに代えて（またはこれに加えて）、コントローラ２８介してバイナリコードおよびハッシュリポジトリ４８からのバイナリに選択的にアクセスしてもよい。代替的には、コンシューマシステム２０は、コントローラ２８介して、コンパイラ３６から出力されたバイナリを得てもよい。
【００８１】
この例示的な実施形態においては、コンシューマシステム２０は、認証されて適切に許可された後、ブロックチェーン１８への読出しアクセス、バイナリコードおよびハッシュリポジトリ４８へのアクセス、および／または分散型サーバ１４へのアクセス、のみが与えられている。コンシューマシステム２０とシステム１０全体の他のモジュールとの間の対話の一部として、公開鍵インフラストラクチャ（Public Key Infrastructure：ＰＫＩ）を用いてもよい。この場合、コンシューマシステム２０の特定のコンシューマに与えられた許可に応じて、コンシューマには、システム１０の他のモジュールにアクセスする際に用いる１つ以上公開鍵および１つ以上の秘密鍵が発行されてもよい。
【００８２】
なお、公開鍵で暗号化されるメッセージ（たとえば、コンシューマシステム２０のうちの１つへのクライアント側インストールのために暗号化されたバイナリファイルを含むメッセージ）には、（メッセージ本体と秘密鍵との組合わせを表わす）デジタル署名が添付され得ることに留意されたい。メッセージの受信者は公開鍵を用いて、デジタル署名が有効である（すなわち、有効な秘密鍵で行なわれた）ことを確かめてもよい。しかし、有効な秘密鍵は、公開鍵で符号化されたメッセージ全体を復号すること、およびそれによってダウンロード済みバイナリのインストールを可能にすることが必要とされる。
【００８３】
なお、この教示の範囲から逸脱することなく、（公開鍵暗号化以外の）他のタイプの非対称暗号化を用いて実施形態を実現してもよいことに留意されたい。さらに、この明細書中に記載される実施形態の原理は、例示的なエコシステム１０と同様に、既に信頼されているコンピューティング環境に限定される必要はないことに留意されたい。例示的なエコシステム１０は、すべてのパーティシパンントがエコシステム１０に参加することが既に認証および許可されているため、既に信頼されていると言われる。
【００８４】
なお、図１を参照して記載された実施形態においてはソースコードハッシュおよびバイナリハッシュの登録が記載されているが、実際には、エコシステム１０において発生する（たとえば、分散させるソフトウェアアプリケーションを作成するプロセスの最中に発生する）実質的にすべての対話をブロックチェーン１８または他の信頼できるデータベースメカニズムに安全にログできることに留意されたい。したがって、ブロックチェーン１８は、所与のソフトウェアアーティファクトの作成に寄与する実質的にすべてのコード変更、ビルド、使用するコードライブラリ、およびパッケージ化イベントを記録し得る詳細なオーディットトレイルを維持し得る。（たとえば、１つのアプリケーションまたはコンポーネントが別のアプリケーションまたはコンポーネントの一部として用いられるようにする）ソフトウェアコンポーネントおよび／またはアプリケーション試験のインスタンスでさえも容易に追跡およびトレースできる。ブロックチェーン１８を用いると、たとえば、ブロックチェーン１８が公衆に見える（が公衆によって変更不可能である）ために、コンシューマおよび潜在的なコンシューマが、エコシステム１０において利用可能となるコードのプロヴェナンスを確認および信頼することができるとともに、場合によっては所与のソフトウェアアプリケーションに対して作業した人物を特定できる、代替の実施形態を容易にすることができる。
【００８５】
なお、この明細書中に記載されるシステム１０の使用およびブロックチェーン技術の付随する使用によって、プロダクションサーバ内の任意のバイナリファイルまたは実行可能画像を特定の一組の１つ以上のソースファイルまでトレースできることに留意されたい。これはセキュリティを高めるのに役立つ。この明細書中に記載される実施形態は、たとえば金融機関などのさまざまな組織の収益に直接影響を及ぼす運用リスク指数を低下させることが期待される。
【００８６】
品質管理組織またはシステムはこうして、適切なリリース順序をブロックチェーン１８に追加することによって、コンパイルのためにコードをリリースするメカニズムを有する。品質管理組織またはシステムによって承認されたコードのみにコンパイルおよび試験が許可されるように、（たとえば、チェーンコードまたは外部論理の形態の）論理が追加され得る。これによって、高品質のコードがコンパイルおよび試験のためにリリースされるため、不適切なコードまたは低品質のコードが試験のためにリリースされることに起因するコストを削減することができる。
【００８７】
ソフトウェア試験はこうして、どの１つのファイルまたは複数のファイルが訂正が必要であるかを正確に特定することによって、どのコードファイルがどのバイナリ画像をもたらすかを特定することができるため、試験過程は開発を支援することができる。
【００８８】
したがって、要約すると、実施形態の基本的なステップおよび／または特徴は以下の１つ以上を含む。
【００８９】
１−  コードのハッシュ（たとえばＭＤ５など）とともにワークステーションのメディアアクセス制御（ＭＡＣ）アドレス、ＣＰＵ  ＩＤおよびユーザＩＤから生成されたハッシュは、任意の特定のワークステーションにおいて生成されたソースコードファイルに起因する。
【００９０】
２−  ソースファイルはリポジトリ（たとえばソースコードおよびハッシュリポジトリ４６）にチェックインされ、ファイルのハッシュはブロックとしてブロックチェーン１８に格納される。
【００９１】
３−  ファイルが変更されて新しいバージョンが既存のバージョン管理システムにおいて確かめられると、コードの進化を証明するために、かつファイルバージョンをそれらのデベロッパおよびエディタまでトレースするために、ステップ１と同じハッシュ論理を用いる新しいブロックがブロックチェーン１８に追加される。
【００９２】
４−  品質管理
４．１−  品質管理組織はこうして、適切なリリース順序をブロックチェーン１８に追加することによって、コンパイルのためにコードをリリースするメカニズムを有する。
【００９３】
４．２−  （たとえばサーバ１４によって表わされる）品質管理組織またはシステムによって承認されたコードのみにコンパイルおよび試験が許可されるように、（チェーンコードまたは外部論理の形態の）論理が追加され得る。これによって、高品質のコードがコンパイルおよび試験のためにリリースされるため、不適切なコードまたは低品質のコードが試験のためにリリースされることに起因するコストを削減することができる。
【００９４】
５−  ソースコードがコンパイルされると、結果として生じるバイナリのハッシュが、コンパイルされたコードバージョンを示す新しいブロックとしてブロックチェーン１８上に追加される。次いで、生成済みバイナリのハッシュは、生成されている任意のバイナリを、特定のデベロッパによって特定のワークステーションに書込まれた特定のコードまでトレースすることを可能にする。
【００９５】
６−  試験
６．１−  ソフトウェア試験はこうして、どのコードファイルがどのバイナリ画像をもたらすかを特定することができる。これによって、試験過程は、どの１つのファイルまたは複数のファイルが訂正が必要であるかを正確に特定することによって、開発を支援することができる。
【００９６】
６．２−  品質管理ステップと同様に、適切なリリース順序をブロックチェーン１８に追加することによって、承認されたコードがパッケージ化および製造のためにリリースされる。
【００９７】
７−  ブロックチェーン１８全体、またはその一部が、データベース内のデータの保全性を保証するサーバのネットワークにおいて公開されて分散され得る。システムを監査することで、監査人が本来のソースファイルにアクセスしなくても、本来のソースファイルを識別することができる。
【００９８】
任意のパーティシパント（たとえば、ワークステーション１２の任意のオペレータおよびコンシューマシステム２０の任意のオペレータ）がブロックを生成してブロックチェーン１８にコミットできる実施形態においては、ブロックチェーン１８への包含が信頼されているブロックはコンセンサスモデルによって決定される。「ビットコイン」などのいくつかのブロックチェーン実現例における当該コンセンサスモデルは、「プルーフオブワーク」モデルを用いる。プルーフオブワークモデルでは、パーティシパントのコンピュータが、高度に特別にフォーマット化されたハッシュコードの計算を競うハッシュ化ノードとして用いられる。しかし、このコンセンサスモデルは非常に高価であり、既にある程度の信頼および／または認証があるビジネス環境などのいくつかの実現例についてはエネルギ的に非効率であり得る。プルーフオブワークの代わりに、上記により十分に記載したプルーフオブステークに基づくモデルを用いることができる。
【００９９】
したがって、より制御された環境をとる実施形態においては、ブロックは計算集約的なハッシュ解決によって「マイニング」される必要はない。むしろ、ブロックの起源は、ブロックチェーンネットワークのピアノードによって確認されるデジタル署名および認証を用いることによって確認することができる。署名認証は、上述のHyperledgerアーキテクチャにおけるコンポーネントなどの既存のコンポーネントによって提供され得る。
【０１００】
しかしながら、実施形態はプルーフオブステークの使用に限定されず、いくつかの実現例、特に潜在的に信頼できないノードを含む実現例においては、プルーフオブワークがやはり用いられてもよい。
【０１０１】
図２−１は、たとえば図１のコンピューティング環境１０などの例示的なコンピューティング環境のさまざまなモジュール１２、４６、１８、３６、４８、４０、２０、１６の間で発生し得る例示的なメッセージングを示す、例示的なメッセージシーケンス図である。なお、メッセージシーケンス６０全体は図２−１から図２−２にわたっており、たとえば、ＱＡ制御シーケンス６８、（ソースコードファイルがコンシューマによる使用のためにリリースされると発生する）コンパイラリリースシーケンス８０、（図２−２に示される）コンシューマソフトウェア・インストールシーケンス９０、（これも図２−２に示される）連続的な展開シーケンス９６など、さまざまなグループのメッセージシーケンスを含むことに留意されたい。
【０１０２】
さらに、図２−１および図２−２に示されるシナリオの一部は図１を参照して記載されたものとは異なることに留意されたい。したがって、図１の例示的なエコシステム１０は、図２のメッセージシーケンシング６０を実現するシステムの代替の実施形態を表わしている可能性もあり、その逆も同様である。
【０１０３】
たとえば、図１とは異なり、図２−１および図２−２のシーケンス６０は、ソースコードハッシュがワークステーション１２上で演算されてから、ワークステーション１２上で実行されるソフトウェアによってブロックチェーン１８に登録されていることを示唆している。このため、ワークステーション１２は、（図１のワークステーション１２上には存在するものとして示されていない）ブロックチェーンインターフェイシングコードをさらに含み得る。
【０１０４】
さらに、図２−１および図２−２では、バイナリハッシュは、図１のサーバ１４の１つ以上の上で実行される（図１の）別個のバイナリハッシュ関数モジュール３４によってではなく、コンパイラ３６の１つ以上のモジュールによって演算される。なお、図１では、ハッシュ演算は、分散型台帳、すなわちブロックチェーン１８を形成するブロックチェーンレプリカをホストするノードとして機能する１つ以上の分散型品質管理サーバ１４にオフロードされることに留意されたい。
【０１０５】
さらに、図２−１および図２−２では、たとえば要求メッセージの送受信を伴うメッセージングなど、他のタイプの一般的なメッセージングは明瞭にするために省略されていることに留意されたい。しかし、この教示を利用できる当業者であれば、過度の実験なしに、所与の実現例についてのニーズを満たすために適切な要求メッセージングおよび他のタイプのメッセージングを容易に実現するだろう。
【０１０６】
メッセージシーケンス６０全体は、ワークステーション１２からソースコードリポジトリ４６に送信されるソースコードを含む第１のメッセージ６２を含む。第２のメッセージ６４は、ソースコードハッシュおよびワークステーション識別情報を登録のためにブロックチェーン１８に送信する。第３のメッセージ６６において、前のメッセージ６４を介してブロックチェーン１８に登録されたコードハッシュが、（１つ以上のソースコードファイルに含まれ得る）対応するソースコードに関連付けて格納されるためにソースコードリポジトリ４６に転送される。
【０１０７】
次に、ＱＡ制御シーケンス６８が示されている。ＱＡ制御シーケンス６８は、ソースコードリポジトリ４６からコンパイラ３６に第４のメッセージ７０を送信することを含む。第４のメッセージ７０は、ソースコードリポジトリ４６に以前に格納されたソースコードファイルと、ブロックチェーン１８に登録されているそのハッシュとを含む。
【０１０８】
次いで、コンパイラ３６はソースコードファイルをバイナリファイルに変換し、当該バイナリファイルは第５のメッセージ７２としてコンパイラ３６からバイナリリポジトリ４８に送信される。次いで、バイナリリポジトリ４８は、第６のメッセージ７４を介して、バイナリファイルを分析のためにＱＡモジュールまたはサービス４０にリリースする。バイナリファイルのバイナリハッシュがブロックチェーン１８に既に登録されている場合は、ＱＡモジュール４０は第７のメッセージ７６を介してブロックチェーン１８からバイナリハッシュを取出す。
【０１０９】
ＱＡモジュール４０がバイナリファイルの試験を完了した後、試験結果が、バイナリファイルに関連付けてブロックチェーン１８に登録されるために転送される。試験結果が合格結果である場合は、コンパイラリリースシーケンス８０が行なわれる。
【０１１０】
コンパイラリリースシーケンス８０は、ソースコードリポジトリ４６からコンパイラ３６に送信される第９のメッセージ８２を含む。第９のメッセージ８２は、ＱＡモジュール４０によって試験されたバイナリに対応するソースコードを含む。次いで、コンパイラ３６は、第１０のメッセージ８４を介して、以前に登録されたソースコードハッシュをブロックチェーン１８から取出す。
【０１１１】
次いで、コンパイラ３６は取出したソースコードファイルおよびソースコードハッシュを用いて、コンパイラ３６によって実現されるバイナリハッシュ関数に従ってバイナリハッシュを演算する。次いで、演算されたバイナリハッシュは、第１１のメッセージ８６を介して、登録されるためにブロックチェーン１８に送信される。（なお、このシナリオは、バイナリハッシュがコンパイラ３６とは別個に演算されるものとして示されている図１とは異なることに留意されたい。）次いで、バイナリファイルは、第１２のメッセージ８８を介して、コンパイラ３６によってバイナリリポジトリ４８に送信される。
【０１１２】
図２−２は図２−１の続きである。バイナリファイルが図２−１の第１２のメッセージ８８を介してバイナリリポジトリ４８に格納された後、任意のコンシューマソフトウェア・インストールシーケンス９０が行なわれる。
【０１１３】
コンシューマソフトウェア・インストールシーケンス９０は、第１３のメッセージ９２を介して、バイナリおよび関連するバイナリハッシュファイルをクライアントまたは顧客（この明細書中においてはコンシューマと称される）システム２０にリリースすることを含む。次いで、コンシューマシステム２０は、第１４のメッセージ９４を介して、ブロックチェーン１８に登録されたバイナリハッシュを取出す。次いで、コンシューマシステム２０は、バイナリリポジトリ４８から得られたハッシュファイルを登録済みハッシュファイルと比較して、ダウンロード済みバイナリが破損していないことまたは変更されていないこと、すなわちバイナリハッシュ同士が一致することを確実にする。
【０１１４】
次に、代替の連続的な展開シーケンス９６が発生する。連続的な展開シーケンス９６は、コンパイラ３６が、第１５のメッセージ９８を介して、ソースコードおよび対応するソースコードハッシュファイルをソースコードリポジトリ４６から取出すことを含む。コンパイラ３６は取出したソースコードを用いてバイナリファイルを生成するとともに、当該バイナリファイルのハッシュを演算する。
【０１１５】
この例示的な実施形態においては、結果として生じるバイナリハッシュは、第１６のメッセージ１００を介して、ソースコードリポジトリ４６に格納されている対応するソースコードに関連付けて格納されるためにソースコードリポジトリ４６に転送されるものとして示されている。しかし、バイナリハッシュは、代替的には、または付加的には、（たとえば、バイナリリポジトリ４８にまだ格納されていない場合は）バイナリリポジトリ４８に格納されるために転送されてもよいことに留意されたい。
【０１１６】
次に、コンパイラ３６は、たとえば、ソフトウェアアプリケーションをウェブアプリケーションとしてホストするための準備として、バイナリを（たとえば実行可能な画像として）プロダクションサーバ１６に転送する。
【０１１７】
図３は、デジタルアセット・トレーサビリティなどを容易にするための、図１−２のコンピューティング環境によって実現可能な第１の例示的な方法１１０のフロー図である。例示的な方法１１０は、ソースおよびバイナリファイルを各々に適用されるバージョン化によってリンクし、また、ネットワーク化されたコンピューティング環境におけるデジタルアセットの登録要求を判定または受信することを伴う第１のステップ１１２を含む。
【０１１８】
図１および図３を参照して、当該要求は、１つ以上のネットワーク化されたサーバ１４、すなわちブロックチェーンノードを介してブロックチェーン１８と通信を行ない得るワークステーション１２によって発行されてもよい。
【０１１９】
第２のステップ１１４は、デジタルアセットの最初のソースファイルの第１のハッシュを演算することを含む。図１および図３を参照して、第１のハッシュの演算はソースハッシュ関数３２によって実現されてもよく、ソースファイルはソースコードファイル２６に対応する。
【０１２０】
第３のステップ１１６は、最初のソースファイルのバージョンを特定することを含む。図１および図３を参照して、第１のソースファイルのバージョンは、バージョンコントローラ３６および／またはプロヴェナンスアナライザ４２によって、たとえば、特定のソースコードバージョンに関するタイムスタンプデータ、コードの名前、などを含み得るブロックチェーン１８内のソースコード登録情報を参照することによって、判定され得る。なお、バージョン情報は、場合によっては、図１の最初のソースコードファイル２６とともに送信されるソースファイルメタデータの分析によって抽出することもできることに留意されたい。
【０１２１】
第４のステップ１１８は、ネットワーク化されたコンピューティング環境の分散型台帳の１つ以上のノードを選択して、第１のハッシュを最初のソースファイルのバージョンに対応するデジタルアセットのバージョンに関連付けて分散型台帳にコミットすることを含む。図１および図３を参照して、１つ以上のノードは分散型サーバ１４に対応してもよく、分散型台帳はブロックチェーン１８に対応する。コミット処理は、たとえば、上述のようにプルーフオブステークなどのコンセンサス法に従って、ブロックチェーンインターフェイシングモジュール４４の１つ以上によって実現されてもよい。
【０１２２】
第５のステップ１２０は、ソースファイルをバイナリファイルに変換することによって、デジタルアセットのバイナリバージョンをもたらすことを含む。図１および図３を参照して、ソースファイルのバイナリファイルへの変換は、コンパイラ３６などのコンパイラによって行なわれる。
【０１２３】
第６のステップ１２２は、バイナリファイルのハッシュである第２のハッシュを演算することを含む。図１および図３を参照して、バイナリファイルの第２のハッシュの演算はバイナリハッシュ関数３４によって行なわれ得る。
【０１２４】
第７のステップ１２４は、第２のハッシュをデジタルアセットのバージョンに関連付けて分散型台帳にコミットすることを含む。図１および図３を参照して、コミット処理は、第２のハッシュおよびバージョン情報を含むトランザクションを検証してブロックチェーン１８に登録することを伴う。
【０１２５】
なお、第１の例示的な方法１１０はこの教示の範囲から逸脱することなく変更され得ることに留意されたい。たとえば、方法１１０は、第２のハッシュに関連付けられたバージョン情報および第１のハッシュに関連付けられたバージョン情報を用いて、分散型台帳内の１つ以上のバイナリファイルハッシュを、ソースファイルリポジトリ内の１つ以上のソースファイルと、ソースファイルが生じたワークステーションと、ソースファイルのデベロッパとに関連付けるステップをさらに規定するように拡張されてもよい。第１の例示的な方法１１０はさらに、分散型台帳がブロックチェーンを含み、デジタルアセットがソフトウェアを含むことを規定してもよい。
【０１２６】
第１の例示的な方法１１０はさらに、ネットワーク化されたコンピューティング環境の（たとえば、図１のコンシューマシステム２０に対応する）１つ以上のクライアントデバイスならびに関連する１人以上のそれぞれの認証および許可されたユーザ（たとえば、コンシューマシステム２０を使用するコンシューマ）に対して、当該１人以上の認証および許可されたユーザに割付けられた１つ以上の許可に従って、バイナリファイルを選択的に利用可能にすることを含み得る。１つ以上のクライアントデバイスは、ネットワーク化されたコンピューティング環境において提供される１つ以上のクラウドサービスの１人以上の顧客の１つ以上のコンピュータを含む。
【０１２７】
第１の例示的な方法１１０の別の任意のステップは、１つ以上のクライアントデバイスならびに付随する１人以上のそれぞれの認証および許可されたユーザに対してブロックチェーン内のデータを選択的にアクセス可能にすることによって、１人以上のそれぞれの認証および許可されたユーザが、ブロックチェーン内のバイナリファイルについての登録済みハッシュを、得られたバイナリファイルと比較できるようにすることを含む。公開鍵インフラストラクチャ（ＰＫＩ）および付随する公開鍵暗号法を用いることで、ブロックチェーン内のデータへのユーザアクセス許可を認証してもよい。
【０１２８】
第４のステップ１１８はさらに、プルーフオブステークメカニズムに従って、ネットワーク化されたコンピューティング環境の１つ以上のノード選択して、第１のハッシュをブロックチェーンにコミットすることと第２のハッシュをブロックチェーンにコミットすることとを実現することを含み得る。特定の実現例においては、プルーフオブステークメカニズムは、１つ以上のノードの識別情報および関連する許可を参照して、１つ以上のノードが１つ以上のブロックをブロックチェーンにコミットすることが許可されていることを確認することによって、一組の１つ以上の確認済みノードをもたらすステップと、１つ以上の確認済みノードのうちのどのノードがソースファイルまたはバイナリファイルを最初に受信したかを判断するステップと、１つ以上の確認済みノードの中から１つのノードを選択して、登録エントリをブロックチェーンにコミットするための計算を行なうことによって、選択済みノードをもたらすステップと、選択済みノードを用いて、登録エントリを、登録エントリをブロックとしてブロックチェーンにコミットする選択済みノードのインジケータと組合わせてブロックチェーンにコミットすることによって、ブロックがインジケータを含むようにするステップとを実現する。
【０１２９】
第１の例示的な方法１１０はさらに、バイナリファイルをプロダクションサーバにサブミットするステップと、１つ以上の品質管理メカニズムがアクセス可能なソースコードリポジトリにソースコードを格納するステップと、バイナリファイルをバイナリコードリポジトリに格納するステップとを規定してもよい。
【０１３０】
第１の例示的な方法１１０はさらに、ソースコードの新しいバージョンがソースコードリポジトリ内にロードされたことを検出したことに応答して、ブロックチェーンを更新済みソースコード登録情報で更新することを含んでもよく、更新済みソースコード登録情報は、更新済みソースコードを本来のソースコードにリンクする情報を含み、方法１１０はさらに、ソースコードの新しいバージョンが新しいバイナリファイルにコンパイルされたことを検出したことに応答して、ブロックチェーンを更新済みバイナリ登録情報で更新することを含んでもよい。
【０１３１】
デジタルアセットの登録要求は、ソースコードを開発したコンピュータまたはソースコードをサブミットしたコンピュータ（たとえば、図１のワークステーション１２）から生じてもよい。第１のハッシュは、すべてコンピュータに関連付けられているかまたはコンピュータを特徴付けている、ソースコードのデジタルフィンガープリント、ユーザ識別（ＩＤ）、中央処理装置（ＣＰＵ）ＩＤ、およびメディアアクセス制御（ＭＡＣ）アドレス、を入力として受信するハッシュ関数によって実現されてもよい。
【０１３２】
第１のハッシュ関数は、第１のハッシュに対応するとともに、１つ以上のソフトウェア品質管理サーバ（たとえば図１のサーバ１４）がアクセス可能な出力ハッシュ（たとえば図１の第１のハッシュ関数３２からの出力）を提供する。１つ以上の品質管理サーバは、第１のハッシュをソースファイルバージョン情報に関連付けて分散型台帳（たとえば図１のブロックチェーン１８）に選択的に登録する機能を含む。
【０１３３】
図４は、エコシステムパーティシパント（たとえば、コンシューマ、デベロッパ、プロダクションサーバの所有者など）が図１〜図２の分散型台帳（ブロックチェーン）を用いて、実行すべき（走らせるべき）１つ以上のバイナリファイルが改ざんされていないことまたは破損していないことを確認できるようにするための、図１〜図３の実施形態によって実現可能な第２の例示的な方法１３０のフロー図である。
【０１３４】
第２の例示的な方法は、たとえば図１のデベロッパツール２４を用いてソースコードファイルを生成することを伴う、最初のソースコード生成ステップ１３２を含む。
【０１３５】
次に、ソースコード格納ステップ１３６は、たとえば図１のソースコードおよびハッシュリポジトリ４６などのリポジトリにソースコードファイルを格納することを含む。
【０１３６】
続いて、第１のハッシュ格納ステップ１３８は、たとえば図１のブロックチェーン１８などのブロックチェーンにソースコードファイルのハッシュを格納することを含む。
【０１３７】
次に、ソースコードコンパイルステップ１４０は、ソースコードファイルを（たとえば図１のコンパイラ３６によって）コンパイルすることによって、生成済みバイナリファイルをもたらすことを含む。
【０１３８】
次に、第２のハッシュ格納ステップ１４２は、バイナリファイルのハッシュ（すなわち、バイナリハッシュ）をブロックチェーンのブロックに格納することを含む。
【０１３９】
最後に、分散ステップ１４４は、エコシステムパーティシパントが分散型台帳を用いることで、バイナリファイルをコンパイルする際に用いられるソースコードファイルの起源を識別することができるように、バイナリファイルを分散させることを含む。
【０１４０】
なお、第２の方法１３０はこの教示の範囲から逸脱することなく変更され得ることに留意されたい。たとえば、第２の例示的な方法１３０はさらに、たとえば、（たとえば登録機能を含む）ブロックチェーンメカニズムを提供して、登録済みバイナリファイルのハッシュを、ユーザ入力に応じて取出されたバイナリファイルのハッシュと比較できるようにすることによって、バイナリファイルをソースコードファイル（この明細書中においては単にソースファイルとも称される）に関連付けることと、次いで、バイナリファイルをインストールおよび実行のために１つ以上のコンピューティングデバイス（たとえば図１のコンシューマシステム２０および／またはプロダクションサーバ１６）に送信することとを規定してもよい。
【０１４１】
したがって、特定のバイナリファイルおよびソースファイルについてのブロックチェーン内の登録エントリは、当該ソースファイルおよびバイナリファイルのバージョンを示すバージョン情報を含み、これらを用いることでバイナリファイルをそのソースファイルまでトレースできる。登録済みソースコードハッシュをさらに用いることで、たとえば、ユーザＩＤおよび（ＣＰＵ  ＩＤ、ＭＡＣアドレスなどの）ワークステーション識別情報を含む、図１の第１のハッシュ関数３２への入力によって、関連するソースファイルを本来のデベロッパおよびワークステーションまでトレースできる。
【０１４２】
この明細書中に記載されているように、バイナリファイルを対応するソースコードファイルにリンクすることを可能にするトレーサビリティによって、デジタルアセットバージョン管理、コードリリース・シーケンシング、ＩＰ保護、ソフトウェア・バグトレース、マルウェア攻撃トレースおよびマルウェア作成者の識別、などを容易にすることを含む、当該技術における長年にわたるニーズに対するさまざまな追加の効率的な解決策が可能になる。
【０１４３】
なお、この明細書中に記載される特定の実施形態においては、ブロックチェーン１８の履歴記録は、図１のワークステーション１２およびコンシューマシステム２０の１人以上のユーザによって実質的に変えることができないことに留意されたい。
【０１４４】
ネットワーク化されたコンピューティング環境におけるデジタルアセット・トレーサビリティを容易にするとともにソフトウェア品質管理を容易にするための代替の方法は、受信したソースファイルを送信したワークステーションのソースコードファイルおよびＩＤを受信することと、ソースコードファイルのフィンガープリントを演算することと、ソースコードファイルのフィンガープリントおよびＩＤを用いて第１のハッシュを計算することと、ソースコードファイルを選択的にコンパイルすることによってバイナリファイルを生成することと、バイナリファイルを用いて第２のハッシュを計算することと、第１のハッシュおよび第２のハッシュを共通のソフトウェアバージョンに関連付けて分散型台帳に登録することによって、第１の登録および第２の登録をもたらすことと、第１の登録および第２の登録を用いて、ネットワーク化されたコンピューティング環境におけるソフトウェア品質管理を容易にすることとを含む。
【０１４５】
図５は、図１〜図４の実施形態を実現するのに使用可能なシステム９００および付随するコンピューティング環境を示す概略ブロック図である。例示的なシステム９００は、本発明の実施形態に従った分散型ソフトウェア・エコシステムを実現することができる。実施形態は、（たとえば、ユーザデバイスに常駐している）スタンドアロンのアプリケーションとして、または、クライアント側およびサーバ側のコードの組合わせを用いて実現されるウェブベースのアプリケーションとして、実現され得る。
【０１４６】
汎用システム９００は、デスクトップコンピュータ９６０、ノートブックコンピュータ９７０、スマートフォン９８０、携帯電話９８５およびタブレット９９０を含むユーザデバイス９６０〜９９０を含む。汎用のシステム９００は、ウェブページまたは他のタイプの電子文書およびＵＩならびに／または実行アプリケーションを表示およびナビゲートすることができるシンクライアントコンピュータ、インターネット接続可能な携帯電話、モバイルインターネットアクセスデバイス、タブレット、電子ブック、または携帯情報端末などの如何なるタイプのユーザデバイスともインターフェイスを取ることができる。システム９００は５つのユーザデバイスとともに示されてるが、ユーザデバイスはいくつでもサポートされ得る。
【０１４７】
ウェブサーバ９１０は、ウェブページ、電子文書、企業データまたは他のコンテンツ、およびユーザコンピュータからの他のデータについての、ウェブブラウザおよびスタンドアロンのアプリケーションからの要求を処理するために用いられる。ウェブサーバ９１０はまた、企業活動に関するデータの、ＲＳＳフィードなどのプッシュデータまたはシンジケート化コンテンツを提供してもよい。
【０１４８】
アプリケーションサーバ９２０は１つ以上のアプリケーションを操作する。アプリケーションは、任意のプログラミング言語、たとえば、Java（登録商標）、Ｃ、Ｃ＋＋、Ｃ＃など、または任意のスクリプト言語、たとえば、JavaScript（登録商標）もしくはＥＣＭＡＳｃｒｉｐｔ（European Computer Manufacturers Association Script（欧州コンピュータ製造者協会スクリプト））、Perl、PHP（Hypertext Preprocessor:ハイパーテキストプリプロセッサ）、Python、RubyまたはTCL（Tool Command Language：ツールコマンド言語）などで書込まれた１つ以上のスクリプトまたはプログラムとして実現することができる。アプリケーションは、Rails、Enterprise JavaBeans、または、.NETなどのライブラリまたはアプリケーションフレームワークを用いて構築することができる。ウェブコンテンツは、ＨＴＭＬ（HyperText Markup Language：ハイパーテキスト・マークアップ言語）、ＣＳＳ（Cascading Style Sheets：カスケーディング・スタイル・シート）、ならびに、テンプレート言語およびパーサーを含む他のウェブ技術を用いて作成され得る。
【０１４９】
アプリケーションサーバ９２０上で実行されるデータアプリケーションは、入力データおよびユーザコンピュータ要求を処理するように適合されており、データストレージデバイスまたはデータベース９３０からのデータを格納するかまたは検索することができる。データベース９３０は、データアプリケーションによって作成されて用いられるデータを格納している。一実施形態においては、データベース９３０は、ＳＱＬフォーマットコマンドまたは他のデータベースクエリ言語に応答して、データを格納、更新および検索するように適合されたリレーショナルデータベースを含む。他の実施形態は、非構造的なデータストレージアーキテクチャおよびＮｏＳＱＬ（Not Only SQL）データベースを用いてもよい。
【０１５０】
一実施形態においては、アプリケーションサーバ９２０は、プログラムまたはスクリプトを実行することができる１つ以上の汎用コンピュータを含む。一実施形態においては、ウェブサーバ９１０は、１つ以上の汎用コンピュータ上で実行されるアプリケーションとして実現される。ウェブサーバ９１０およびアプリケーションサーバ９２０は同じコンピュータ上で組合わされて実行されてもよい。
【０１５１】
電子通信ネットワーク９４０〜９５０は、ユーザコンピュータ９６０〜９９０と、ウェブサーバ９１０と、アプリケーションサーバ９２０と、データベース９３０との間の通信を可能にする。一実施形態においては、ネットワーク９４０〜９５０はさらに、有線ネットワーク９４０および無線ネットワーク９５０を含む電気通信デバイスまたは光通信デバイスのいずれかの形態を含み得る。ネットワーク９４０〜９５０はまた、イーサネット（登録商標）ネットワークなどの１つ以上のローカルエリアネットワーク、インターネットなどのワイドエリアネットワーク；セルラーキャリアデータネットワーク；および、仮想プライベートネットワークなどの仮想ネットワークを組込んでいてもよい。
【０１５２】
当該システムは、本発明の一実施形態に従ってアプリケーションを実行するための一例である。別の実施形態においては、アプリケーションサーバ９１０、ウェブサーバ９２０および任意にはデータベース９３０は、単一のサーバコンピュータアプリケーションおよびシステムと組合わせることができる。さらに別の実施形態においては、アプリケーションサーバ９１０、ウェブサーバ９２０およびデータベース９３０の１つ以上を実現するために、仮想化および仮想マシンアプリケーションが用いられてもよい。
【０１５３】
さらに別の実施形態においては、ウェブおよびアプリケーションサービング機能のすべてまたは一部は、ユーザコンピュータの各々の上で実行されるアプリケーションに一体化されていてもよい。たとえば、ユーザコンピュータ上のJavaScriptアプリケーションは、アプリケーションのデータ部分および表示部分を検索するかまたは分析するために用いられてもよい。
【０１５４】
一例として、図１および図５を参照して、図５のウェブサーバ９１０、アプリケーションサーバ９２０およびデータストレージデバイス／データベース９３０は、ブラウザを介して個々のコンピュータシステムにさらにアクセス可能である分散型サーバ１４に対応するサーバ側アプリケーションをホストすることによって、図１の分散型台帳１８を実現するために用いられてもよい。図１のワークステーション１２およびコンシューマシステム２０は、図５のデスクトップコンピュータ９６０、タブレット９００、スマートフォン９８０、携帯電話９８５、またはノートブックコンピュータ９７０の１つ以上によって実現されてもよい。図１のソースコードおよびハッシュリポジトリ４６ならびにバイナリコードおよびハッシュリポジトリ４８は、図５のデータストレージデバイス／データベース９３０によって実現されてもよい。
【０１５５】
代替的には、または付加的には、個々のコンピューティングデバイス９５０、９８５、９７０、９８０、９９０は、有線ネットワーク９４０および／または無線ネットワーク９５０を用いて、当該デバイスをピア・ツー・ピア・ソフトウェア・エコシステムにネットワーク化して実施形態を実現するために用いられる（図１のサーバ１４内に示される）ブロックチェーンノードソフトウェアおよび付随する機能を実行してもよい。
【０１５６】
図６は、図１〜図５の実施形態を実現するために使用可能なコンピューティングデバイスを示す概略ブロック図である。図６のシステム５００は、この明細書中における特定の実現例に記載されているステップを実行することを容易にするものとして記載されている一方で、記載されたステップを実行するために、システム５００の任意の好適なコンポーネントもしくはコンポーネントの組合わせ、または、システム５００に関連付けられた任意の好適な１つのプロセッサもしくは複数のプロセッサが用いられてもよい。
【０１５７】
図６は、この明細書中に記載される実現例のために用いられ得る例示的なコンピューティングシステム５００のブロック図を示す。たとえば、コンピューティングシステム５００は、図５のサーバデバイス９１０および９２０を実現するとともに、この明細書中に記載される方法の実現例を実行するために用いられてもよい。いくつかの実現例においては、コンピューティングシステム５００は、プロセッサ５０２、オペレーティングシステム５０４、メモリ５０６、および入出力（input/output：Ｉ／Ｏ）インターフェイス５０８を含んでいてもよい。さまざまな実現例においては、プロセッサ５０２は、この明細書中に記載されるさまざまな機能および特徴を実現するとともに、この明細書中に記載される方法の実現例を実行するために用いられてもよい。プロセッサ５０２がこの明細書中に記載される実現例を実行するものとして記載されているが、システム５００の任意の好適なコンポーネントもしくはコンポーネントの組合わせ、または、システム５００に関連付けられた任意の好適な１つのプロセッサまたは複数のプロセッサ、または、任意の好適なシステムが、記載されるステップを実行してもよい。この明細書中に記載される実現例は、ユーザデバイス上で、サーバ上で、またはこれら両方の組合わせに対して実行されてもよい。
【０１５８】
コンピューティングデバイス５００はまた、メモリ５０６上に格納され得るか、または、他の好適な任意の記憶位置もしくはコンピュータ読取可能媒体上に格納され得るソフトウェアアプリケーション５１０を含む。ソフトウェアアプリケーション５１０は、プロセッサ５０２がこの明細書中に記載される機能および他の機能を実行することを可能にする命令を提供する。コンピューティングシステム５００のコンポーネントは、１つ以上のプロセッサによって、または、ハードウェアデバイスの任意の組合わせによって、さらには、ハードウェア、ソフトウェア、ファームウェアなどの任意の組合わせによって、実現されてもよい。
【０１５９】
例示を容易にするために、図６は、プロセッサ５０２、オペレーティングシステム５０４、メモリ５０６、Ｉ／Ｏインターフェイス５０８およびソフトウェアアプリケーション５１０の各々ごとに１つのブロックを示す。これらのブロック５０２、５０４、５０６、５０８および５１０は、複数のプロセッサ、オペレーティングシステム、メモリ、Ｉ／Ｏインターフェイス、およびソフトウェアアプリケーションを表わし得る。さまざまな実現例においては、コンピューティングシステム５００は図示されるコンポーネントをすべて有していなくてもよく、および／または、この明細書中に示される以外の他のタイプのコンポーネント、もしくはこの明細書中に記載されるものに加えて他のタイプのコンポーネントを含む他の要素を有していてもよい。
【０１６０】
一例として、図１および図６を参照して、図６のコンピューティングデバイス５００は、図１のワークステーション１２およびコンシューマシステム２０を実現するために用いられてもよい。コンピューティングデバイス５００はまた、図１のサーバ１４の各々を実現するために用いられてもよい。
【０１６１】
特定の実施形態に関して説明がなされてきたが、これらの特定の実施形態は単に例示的なものに過ぎず、限定的なものではない。たとえば、この明細書中に記載される特定の実施形態では、ソフトウェアファイル（たとえば、ソフトウェアアプリケーションについてのソースまたはバイナリファイル）に関する登録情報を維持するためにブロックチェーンを用いているが、実施形態はこれに限定されない。たとえば、この教示の範囲から逸脱することなく、特定の実施形態において別のタイプのデータベースが用いられてもよい。
【０１６２】
さらに、実施形態は、ソフトウェアバイナリおよびソースファイルをリンクしてトレースする際の使用に必ずしも限定されるわけではない。たとえば、この明細書中に記載される実施形態のバージョンは、（たとえば書かれた音楽を含む）楽譜または文書を、当該音楽の対応するデジタル化実現例（たとえばＭＰ３ファイル）に選択的にリンクするために用いられ得る。これによって、上述のようにソフトウェアについて用いられる態様と同様の態様で著作権行使が容易になり得る。
【０１６３】
如何なる好適なプログラミング言語を用いても、Ｃ、Ｃ＋＋、Ｊａｖａ、アセンブリ言語などを含む特定の実施形態のルーチンを実現することができる。手続き指向型またはオブジェクト指向型などのさまざまなプログラミング技術を用いることができる。ルーチンは単一の処理装置または複数のプロセッサ上で実行することができる。ステップ、動作または演算は特定の順序で表わされ得るが、この順序はさまざまな特定の実施形態において変更されてもよい。いくつかの特定の実施形態においては、この明細書中で連続的なものとして示されている複数のステップは同時に実行することができる。
【０１６４】
特定の実施形態は、命令実行システム、装置、システムもしくはデバイスによって、またはそれらに関連付けて用いられるようにコンピュータ読取可能記憶媒体において実現されてもよい。特定の実施形態は、ソフトウェアもしくはハードウェアまたはそれらの組合わせで制御論理の形態で実現することができる。制御論理は、１つ以上のプロセッサによって実行されると、特定の実施形態において記載されているものを実行するように動作可能であり得る。
【０１６５】
特定の実施形態は、特定用途向け集積回路、プログラマブルロジックデバイス、フィールドプログラマブルゲートアレイ、光学的、化学的、生物学的、量子的またはナノ設計型のシステム、コンポーネントおよびメカニズムを用いることによる、プログラムド汎用デジタルコンピュータを用いることによって実現されてもよい。一般に、特定の実施形態の機能は当該技術において公知である如何なる手段によっても達成することができる。分散型のネットワーク化システム、コンポーネントおよび／または回路を用いることができる。データの通信または転送は有線、無線または他のいずれかの手段によってなされてもよい。
【０１６６】
添付の図面／図に示される要素のうちの１つ以上が、特定用途に応じて有用となるように、さらに分離された態様もしくは一体化された態様で、または場合によっては削除されるかもしくは動作不能にされた態様で実現可能であることも認識されるだろう。コンピュータが上述の方法のうちのいずれかを実行することを可能にするために機械読取り可能媒体に記憶することができるプログラムまたはコードを実現することも精神および範囲内にある。
【０１６７】
「プロセッサ」は、データ、信号または他の情報を処理する任意の好適なハードウェアおよび／もしくはソフトウェアシステム、メカニズムまたはコンポーネントを含む。プロセッサは、汎用の中央処理装置、複数の処理装置、機能を達成するための専用回路部を有するシステム、または他のシステムを含み得る。処理は地理的な場所に限定される必要はなく、時間的な限定を有する必要もない。たとえば、プロセッサはその機能を「リアルタイム」で、「オフライン」で、「バッチモード」で、などで実行することができる。処理の一部は、異なる（または同じ）処理システムによって異なる時間に異なる場所で実行され得る。処理システムの例は、サーバ、クライアント、エンドユーザデバイス、ルータ、スイッチ、ネットワーク化されたストレージ、などを含み得る。コンピュータはメモリと通信する如何なるプロセッサであってもよい。当該メモリは、ランダムアクセスメモリ（ＲＡＭ）、読出専用メモリ（ＲＯＭ）、磁気もしくは光学ディスク、またはプロセッサによって実行するべき命令を格納するのに好適な他の有形な媒体などの、如何なる好適なプロセッサ読取可能記憶媒体であってもよい。
【０１６８】
この明細書中で、かつ添付の特許請求の範囲全体にわたって用いられる「ａ」、「ａｎ」および「ｔｈｅ」という語は、文脈に別段明確な指示がない限り、複数の指示対象を含んでいる。また、この明細書中で、かつ添付の特許請求の範囲全体にわたって用いられる「ｉｎ」の意味は、文脈に別段明確な指示がない限り、「において（ｉｎ）」および「の上に（ｏｎ）」の意味を含んでいる。
【０１６９】
このように、特定の実施形態をこの明細書中に記載してきたが、上述の開示において変更、さまざまな変形および置換えの許容範囲が意図されており、場合によっては、特定の実施形態のいくつかの特徴が、上述の範囲および精神から逸脱することなく他の特徴を対応させて使用することなく採用され得ることが認識されるだろう。したがって、特定の状況または材料を本質的な範囲および精神に適合させるために多くの変更がなされてもよい。
【図１】
2020532213.tif 000003
【図２−１】
2020532213.tif 000004
【図２−２】
2020532213.tif 000005
【図３】
2020532213.tif 000006
【図４】
2020532213.tif 000007
【図５】
2020532213.tif 000008
【図６】
2020532213.tif 000009
【国際調査報告】
2020532213.tif 000010
2020532213.tif 000011