(57)【要約】      （修正有）【課題】開発、配置、および実行にわたる様々な段階におけるプログラムコードの変換を、プログラム、コンパイラ、または実行環境の複雑さを増大させずに行う。【解決手段】リライトマネージャ５００はデジタル署名を含むコード単位１０２を受信する。最初にリライトマネージャ５００はコード単位１０２を書き換える必要があるかを決定し、必要があると判断するとリライタ５０２のグループから適切なリライタを識別し順序付ける。次にリライトマネージャ５００はコード単位１０２のデジタル署名を認証してその識別及び信頼性を確認する。信頼できる場合はリライタ５０２を実行して書き換えられたコードを生成し、新たに生成した署名とともにリライトキャッシュ４０６に格納する。【選択図】図５
2005243004.tif 000002
【特許請求の範囲】
【請求項１】
実行可能命令を有するコード単位と、
少なくとも１つのリライタを識別するリライタリストと、
前記少なくとも１つのリライタを含む、前記コード単位を書き換えることができる１つまたは複数のリライタと
を含むことを特徴とする複数のデータ構造を含む１つまたは複数のコンピュータ可読媒体。
【請求項２】
前記１つまたは複数のリライタの前記少なくとも１つのリライタにアクセスし、前記コード単位に対して前記少なくとも１つのリライタを実行して書き換えられたコード単位を生成するように構成されている実行可能命令を有するリライトマネージャをさらに含むことを特徴とする請求項１に記載の１つまたは複数のコンピュータ可読媒体。
【請求項３】
キャッシュをさらに含み、前記リライトマネージャが前記書き換えられたコード単位を前記キャッシュに格納するようにさらに構成されていることを特徴とする請求項１に記載の１つまたは複数のコンピュータ可読媒体。
【請求項４】
前記リライタリストは、
前記コード単位内の１つまたは複数のカスタム属性のリストと、
セキュリティポリシー内のリストと、
インストールツール内のリストと、
構成ファイル内のリストと、
ＸＭＬ（拡張可能なマーク付け言語）ファイル内のリストと
を含むグループから選択されることを特徴とする請求項１に記載の１つまたは複数のコンピュータ可読媒体。
【請求項５】
前記リライトマネージャは、
スタンドアロンモジュールと、
オペレーティングシステムモジュールと、
実行環境モジュールと、
ＪＩＴコンパイラモジュールと、
ソースコードコンパイラモジュールと、
前記コード単位をインストールするように構成されているインストールツールと
を含むグループから選択されるモジュールであることを特徴とする請求項２に記載の１つまたは複数のコンピュータ可読媒体。
【請求項６】
請求項１に記載の１つまたは複数のコンピュータ可読媒体を含み、
前記コード単位を作成するように構成されている開発者コンピュータと、
前記コード単位を配置するように構成されている中間コンピュータと、
前記コード単位を実行するように構成されている配置コンピュータと
を含むグループから選択されることを特徴とするコンピュータ。
【請求項７】
前記コード単位の変換を開始し、
前記変換を実施するための１つまたは複数のリライタを識別する
ように構成されている実行可能命令を含むことを特徴とするコード単位を含む１つまたは複数のコンピュータ可読媒体。
【請求項８】
前記１つまたは複数のリライタは複数のリライタであり、各リライタは前記コード単位の一意の変換を実施するように構成されており、前記コード単位は、前記一意の変換を特定の順序で実施するために前記複数のリライタを順序付けるように構成されている実行可能命令をさらに含むことを特徴とする請求項７に記載の１つまたは複数のコンピュータ可読媒体。
【請求項９】
前記コード単位は、前記コード単位内の識別された要素に対して前記変換を実施するために前記１つまたは複数のリライタを案内するように構成されている実行可能命令をさらに含むことを特徴とする請求項７に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１０】
前記開始するステップは、
前記変換を実施すべき環境を識別するステップと、
前記コード単位が前記識別された環境を経験した場合のみ前記変換を開始するステップと
を含むことを特徴とする請求項７に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１１】
環境を識別する前記ステップは、
ソースコードコンパイル環境を識別するステップと、
実行前コンパイル環境を識別するステップと、
インストール時コンパイル環境を識別するステップと、
実行環境を識別するステップと、
インストール環境を識別するステップと
を含むことを特徴とする請求項１０に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１２】
１つまたは複数のリライタを識別する前記ステップは、前記コード単位内の前記１つまたは複数のリライタを列挙するステップを含むことを特徴とする請求項７に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１３】
１つまたは複数のリライタを識別する前記ステップは、前記１つまたは複数のリライタのリストを含む前記コード単位から分離したファイルを識別するステップを含むことを特徴とする請求項７に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１４】
実行可能命令を有するコード単位を受信し、
前記コード単位を書き換えることができる少なくとも１つのリライタを決定し、
前記少なくとも１つのリライタを呼び出し、
前記少なくとも１つのリライタを前記コード単位に対して実行して書き換えられたコード単位を生成する
ように構成されているコンピュータ実行可能命令を含むことを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項１５】
前記実行の前に前記コード単位および前記少なくとも１つのリライタの信頼性を確認するように構成されているコンピュータ実行可能命令をさらに含むことを特徴とする請求項１４に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１６】
前記確認するステップはデジタル署名を認証するステップを含むことを特徴とする請求項１５に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１７】
前記書き換えられたコード単位をキャッシュに格納するよう構成されているコンピュータ実行可能命令をさらに含むことを特徴とする請求項１４に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１８】
前記コード単位を実行する命令を受信し、
前記コード単位が書き換えられたことを認識し、
前記キャッシュから前記書き換えられたコード単位をロードし、
前記書き換えられたコード単位を実行する
ように構成されているコンピュータ実行可能命令をさらに含むことを特徴とする請求項１７に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１９】
前記書き換えられたコード単位のデジタル署名を生成し、
前記デジタル署名を前記書き換えられたコード単位に関連付ける
ように構成されているコンピュータ実行可能命令をさらに含むことを特徴とする請求項１７に記載の１つまたは複数のコンピュータ可読媒体。
【請求項２０】
前記少なくとも１つのリライタは複数のリライタであり、前記１つまたは複数のコンピュータ可読媒体は、特定の書き換え順序で前記コード単位を書き換えるように前記複数のリライタを順序付けるように構成されたコンピュータ実行可能命令をさらに含むことを特徴とする請求項１４に記載の１つまたは複数のコンピュータ可読媒体。
【請求項２１】
前記順序付けるステップは、
リライタリストにアクセスするステップと、
前記リライタリストに従って前記書き換え順序を設定するステップと
を含むことを特徴とする請求項２０に記載の１つまたは複数のコンピュータ可読媒体。
【請求項２２】
前記アクセスするステップは、
前記コード単位と、
前記コード単位に関連付けられている個別のファイルと、
システムポリシーと
を含むグループから選択された前記リライタリストのある位置にアクセスするステップを含むことを特徴とする請求項２１に記載の１つまたは複数のコンピュータ可読媒体。
【請求項２３】
前記少なくとも１つのリライタを決定する前記ステップはリライトリストを読み取るステップを含むことを特徴とする請求項１４に記載の１つまたは複数のコンピュータ可読媒体。
【請求項２４】
ソースコードコンパイラと、
インストールツールと、
管理された実行環境と、
スタンドアロンリライト管理ツールと、
ＪＩＴ（ジャストインタイム）コンパイラと
を含むグループから選択されるツールに組み込まれることを特徴とする請求項１４に記載の１つまたは複数のコンピュータ可読媒体。
【請求項２５】
請求項１４に記載の１つまたは複数のコンピュータ可読媒体を含み、
前記コード単位を開発するように構成されている開発者コンピュータと、
前記コード単位をインストールするように構成されている中間コンピュータと、
前記コード単位を実行するように構成されている配置コンピュータと
を含むグループから選択されることを特徴とするコンピュータ。
【請求項２６】
コード単位と、
前記コード単位を一意のやり方で書き換えるようにそれぞれ構成されている構成可能な１組のリライタと、
前記構成可能な１組のリライタから１つまたは複数のリライタを識別し、前記識別された１つまたは複数のリライタを前記コード単位に対して実行するように構成されているリライトマネージャと、
前記識別された１つまたは複数のリライタを前記コード単位に対して実行することによって生成される書き換えられたコード単位と
を含むことを特徴とするコンピュータ。
【請求項２７】
リライトキャッシュをさらに含み、前記リライトマネージャが前記書き換えられたコード単位を前記リライトキャッシュに格納するようにさらに構成されていることを特徴とする請求項２６に記載のコンピュータ。
【請求項２８】
前記リライトマネージャが前記コード単位に対して実行する前記１つまたは複数のリライタをそこから識別するリライトリストをさらに含むことを特徴とする請求項２６に記載のコンピュータ。
【請求項２９】
前記リライトリストは、
前記コード単位内のリライタのリストと、
スタンドアロンファイル内のリライタのリストと、
セキュリティポリシー内のリライタのリストと、
インストールツール内のリライタのリストと
を含むグループから選択された構成要素であることを特徴とする請求項２８に記載のコンピュータ。
【請求項３０】
前記コード単位に関連付けられている第１のデジタル署名と、
前記構成可能な１組のリライタからの固有のリライタにそれぞれ関連付けられている第２のデジタル署名の組と
をさらに含み、前記リライトマネージャは、前記第１のデジタル署名に基づいて前記コード単位が信頼されるかどうかを決定し、前記識別された１つまたは複数のリライタからの各リライタが前記第２のデジタル署名の組からの対応する第２のデジタル署名に基づいて信頼されるかどうかを決定し、前記コード単位および前記識別された１つまたは複数のリライタからの各リライタが信頼された場合にのみ前記識別された１つまたは複数のリライタを前記コード単位に対して実行するようにさらに構成されている
ことを特徴とする請求項２６に記載のコンピュータ。
【請求項３１】
前記リライトマネージャによって前記書き換えられたコード単位に関連付けられており、前記書き換えられたコード単位が信頼されることを確認するように構成されている第３のデジタル署名をさらに含むことを特徴とする請求項３０に記載のコンピュータ。
【請求項３２】
前記リライトマネージャは、
スタンドアロンリライトモジュールと、
オペレーティングシステムの一部として構成されているリライトモジュールと、
インストールツールの一部として構成されているリライトモジュールと、
セキュリティポリシーの一部として構成されているリライトモジュールと
を含むグループから選択された構成要素であることを特徴とする請求項２６に記載のコンピュータ。
【請求項３３】
前記コード単位を開発するように構成されている開発コンピュータと、
前記コード単位をインストールするように構成されている中間コンピュータと、
前記コード単位を実行するように構成されている配置コンピュータと
を含むグループから選択されることを特徴とする請求項２６に記載のコンピュータ。
【請求項３４】
実行可能コード単位を受信するステップと、
前記コード単位を書き換える必要があると決定するステップと、
前記コード単位を書き換えるための１つまたは複数のリライタを決定するステップと、
前記１つまたは複数のリライタを前記コード単位に対して稼働させて書き換えられたコード単位を生成するステップと
を含むことを特徴とする方法。
【請求項３５】
前記稼働するステップの前に前記コード単位および前記１つまたは複数のリライタの信頼性を確認するステップをさらに含むことを特徴とする請求項３４に記載の方法。
【請求項３６】
前記確認するステップはデジタル署名を認証するステップを含むことを特徴とする請求項３５に記載の方法。
【請求項３７】
前記書き換えられたコード単位をキャッシュに格納するステップをさらに含むことを特徴とする請求項３４に記載の方法。
【請求項３８】
前記コード単位を実行する命令を受信するステップと、
前記書き換えられたコード単位を前記キャッシュに格納することを認識するステップと、
前記キャッシュから前記書き換えられたコード単位をロードするステップと、
前記書き換えられたコード単位を実行するステップと
をさらに含むことを特徴とする請求項３７に記載の方法。
【請求項３９】
前記書き換えられたコード単位のデジタル署名を生成するステップと、
前記デジタル署名を前記書き換えられたコード単位に関連付けるステップと
をさらに含むことを特徴とする請求項３７に記載の方法。
【請求項４０】
前記コード単位を特定の書き換え順序で書き換えるように前記１つまたは複数のリライタを順序付けるステップをさらに含むことを特徴とする請求項３４に記載の方法。
【請求項４１】
前記順序付けるステップは、
リライタリストにアクセスするステップと、
前記リライタリストに従って前記書き換え順序を設定するステップと
を含むことを特徴とする請求項４０に記載の方法。
【請求項４２】
前記１つまたは複数のリライタを決定するステップはリライタリストを読み取るステップを含むことを特徴とする請求項３４に記載の方法。
【請求項４３】
前記読み取るステップは、
前記実行可能コード単位と、
前記実行可能コード単位に関連付けられている個別のファイルと
を含むグループから選択されるリライタリストのある位置を読み取るステップを含むことを特徴とする請求項４２に記載の方法。
【請求項４４】
コード単位を受信するステップと、
前記コード単位をリライタによって書き換えるべきであると決定するステップと、
前記コード単位およびリライタが信頼されるかどうかを決定するステップと、
前記コード単位に対して前記リライタを稼働させて、前記コード単位および前記リライタが信頼される場合、書き換えられたコード単位を生成するステップと、
前記書き換えられたコード単位をキャッシュに格納するステップと
を含むことを特徴とする方法。
【請求項４５】
前記書き換えられたコード単位のデジタル署名を生成するステップと、
前記デジタル署名を前記書き換えられたコード単位に添付するステップと
をさらに含むことを特徴とする請求項４４に記載の方法。
【請求項４６】
前記コード単位を実行する呼び出しを受信するステップと、
前記コード単位が書き換えられたことを認識するステップと、
前記キャッシュから前記書き換えられたコード単位をロードするステップと、
前記書き換えられたコード単位に添付された前記デジタル署名を確認するステップと、
前記確認するステップが前記書き換えられたコード単位は安全であることを示す場合、前記書き換えられたコード単位を実行するステップと
をさらに含むことを特徴とする請求項４５に記載の方法。
【請求項４７】
前記リライタはアプリケーション互換リライタであり、前記コード単位を書き換えるべきであると決定するステップは、
前記コード単位をアプリケーションとして識別するステップと、
アプリケーション互換リライタデータベースを調べて、現在の実行環境との互換性のために前記アプリケーションの任意の部分を書き換える必要があるかどうかを決定するステップと
を含むことを特徴とする請求項４４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コードの書き換えに関し、より詳細には、開発から実行までのコードのライフサイクルにわたってコードを書き換えることができる構成可能な１組のリライタ（ｒｅｗｒｉｔｅｒｓ）に関する。
【背景技術】
【０００２】
プログラムの開発は一般に、ソースコードを書くこと、ソースコードを編集すること、ソースコードをコンパイルすること、次いで結果として得られたバイナリコードを実行することのサイクルをたどる。開発サイクルは、例えば個々の開発者のコンピュータから、開発者のコンピュータ、中間コンピュータ、および１つまたは複数のネットワークを介して相互接続される一企業の配置コンピュータ（ｄｅｐｌｏｙｍｅｎｔ  ｃｏｍｐｕｔｅｒ）を含む複数のコンピューティング装置のシステムにわたる様々なコンピューティング環境において行うことができる。したがってサイクルは、例えば最後の配置コンピュータにおけるプログラムのインストールおよび実行に先立つ中間コンピュータにおけるプログラムのインストールおよび実行を伴う中間段階も含み得る。
【０００３】
その開発サイクルにわたるある時点でプログラムの変換を必要とする理由には様々なものがある。例えば、プログラムの実行を監視し、それが正しく稼働しているかどうかを決定するためにコードをプログラムに導入する必要がある可能性がある。こうした「ウォッチドッグ」コードは、例えば特定の関数が呼び出された回数を数える、特定の関数の出力をファイルに送信するなどのタスクを行うことができる。プログラムの実行時に問題が発見されると、問題のソースを発見するように設計された追加のコードを含むようにプログラムをさらに変換する必要がある場合がある。
【０００４】
プログラミング言語の中には、「ウォッチドッグ」コードの導入など、いくつかの変換を可能にする機能をサポートするものもある。しかし、これらの変換の機能は一般に非常に限られている。さらに、こうした機能は、一般に言語固有のコンパイラを介して実施される。したがって、あるプログラミング言語は「ウォッチドッグ」コードの変換機能をサポートしているが、別のプログラミング言語はサポートしていない可能性がある。
【０００５】
開発中のプログラムの変換の他の理由は、プログラムが配置される様々な実行環境を含み得る。例えば、プログラムは、オペレーティングシステム、データベース、またはアプリケーションプログラムの一部として稼働し得る。セマンティクス、または定義されたシステムの挙動は、環境によって異なる可能性があり、または、オペレーティングシステムのアップグレードなど環境が変化したときに環境内で変化する可能性がある。したがってプログラムは、異なる環境および変化する環境において異なるように振る舞い得る。したがって、プログラムが異なる環境において一貫して機能することを保証するには、プログラムの変換が必要となり得る。こうした変換は、開発者が環境固有のコードをソースに導入することによって、またはこうしたコードをコンパイラを介して導入することによって達成することができる。別の選択肢は、実行環境を変えることである。こうした各選択肢には、プログラム、コンパイラ、または実行環境のいずれかの複雑さを大幅に増大させるという欠点がある。
【０００６】
【非特許文献１】Pratt, Introducing Microsoft .NET, Third Edition, Microsoft Press, 2003
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、ソースプログラム、コンパイラ、実行環境の複雑さを大幅に増大させない、プログラムの開発および配置サイクルにわたる様々な段階でコードの変換を実施する方法が必要である。
【課題を解決するための手段】
【０００８】
システムおよび方法は、拡張可能、構成可能な１組のコードリライタの使用を介してコード単位（ｃｏｄｅ  ｕｎｉｔｓ）の書き換えおよび変換を提供する。リライタは、コード単位の開発および配置にわたる様々な段階での適用、および実施が可能である。リライトマネージャ（ｒｅｗｒｉｔｅ  ｍａｎａｇｅｒ）は、コード単位自体の中に開発者によって組み込まれた情報、セキュリティまたはインストールポリシーなどのシステムポリシーなどを含めて、様々な理由でコード単位の書き換えを開始することができる。リライトマネージャは、１つまたは複数のリライタを識別し、コード単位に対してリライタを実行して、書き換えられたコード単位、または書き換えられたコード単位の一連の連続するバージョンを生成する。また、リライトマネージャは、特定の順序でコード単位に対する書き換えを行うようにリライタを順序付けることができる。コード単位に対してリライタを実行する前に、リライトマネージャは、コード単位およびリライタの両方の信頼性を確認する。コード単位を実行するためのその後の呼び出しが書き換えプロセスを繰り返さないように、書き換えられたコード単位は、キャッシュに格納される。書き換えられたコード単位は、キャッシュから直接アクセスして実行することができる。
【０００９】
同様の構成要素および特徴を参照するために図面を通じて同じ参照番号が使用されている。
【発明を実施するための最良の形態】
【００１０】
（概要）
次の説明は、コード単位の開発および配置にわたる様々な段階で実施できる拡張可能、構成可能な１組のコードリライタを介してコード単位の書き換えおよび変換を提供するシステムおよび方法を対象とする。記載したシステムおよび方法の利点は、プログラム開発者およびシステム管理者が、ソースプログラム、コンパイラ、または実行環境の複雑さを大幅に増大させない、プログラムの開発および配置にわたる様々な段階でコードの変換を実施する強力な方法を提供することを含む。
【００１１】
（環境例）
図１は、様々な開発および配置の環境で行うことができるコードを書き換える基本的なプロセス１００を示す図である。コード単位１０２を書き換えるプロセス１００は、コード単位１０２が、１つまたは複数のコードリライタをコード単位１０２に適用して書き換えられたコード単位１０６を生成する書き換え機能１０４に遭遇することを含む。コード単位１０２は、例えば、言語固有のコンパイラからＰＣ上で実行する用意ができているネイティブのコードにコンパイルされたオブジェクトモジュール、管理された（ｍａｎａｇｅｄ）コード環境での抽象および／またはマシン非依存言語などの中間言語で配置されたＤＬＬまたは実行可能ファイルの集まり、インタープリタ型言語で書かれたスクリプトプログラムなどを含み得る。
【００１２】
コード単位１０２は、開発および配置の様々な段階で書き換え機能１０４に遭遇し得る。したがって、書き換え機能１０４は、コード単位１０２の開発、配置、および実行に関わる様々なシナリオおよび様々なコンピュータで動作可能である。一般に、書き換え機能１０４は、コード単位１０２を受信し、コード単位が書き換えられるべきかどうかを決定し、コード単位を書き換えるためにどのリライタを適用すべきかを識別し、それらを順序付け、コード単位に対するリライタの実行を容易にし、その結果書き換えられたコード単位１０６をもたらす。書き換え機能１０４は一般に、リライトマネージャ、コード単位１０２を書き換えるように構成された１つまたは複数のコードリライタ、およびどのリライタをどの順序でコード単位に適用すべきかを識別するリライタリストなどの情報を包含し、かつ／または含む。
【００１３】
図２および図３は、コードの書き換えを実施するのに適した環境の例を示す。図２および図３の環境の例は、一例として示したにすぎず、限定として示したものではない。したがって、本明細書で説明するように、コードの開発および配置の様々な段階中にコードの書き換えを実施できる他の多くのコンピューティング環境が考えられることを理解されたい。
【００１４】
図２の環境例２００は、コードが開発され、比較的直接的な配布チャネルを介して配布される、コードの書き換えを実施するのに適した開発および配置のシナリオを示している。一般に、コード単位１０６は、開発者コンピュータ２０２上で開発され、配置コンピュータ２０４に配布され、インストールされ、そこで実行することができる。しかし、コンピュータ２０２上で開発されたコード単位１０６をコンピュータ２０２上にインストールし、そこで実行することもでき、また、コード書き換え機能１０４をコード単位１０２に対して実施して、書き換えられたコード単位１０６をコンピュータ２０２および２０４のいずれか、またはその両方において生成することができることを理解されたい。
【００１５】
コード単位１０２は、例えば開発者コンピュータ２０２から配置コンピュータ２０４にネットワーク２０６を介してダウンロードする、またはディスク、コンパクトフラッシュ（登録商標）カードなど様々なポータブル媒体２０８を介して開発者コンピュータ２０２から配置コンピュータ２０４に転送するなどを含めていくつかの手段によって開発者コンピュータ２０２から配置コンピュータ２０４に転送することができる。ネットワーク２０６は、特定のシステム構成に応じてローカルおよびリモートの接続を含んでいる可能性がある。したがって、ネットワーク２０６は、例えば、モデム、ケーブルモデム、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（広域ネットワーク）、イントラネット、インターネット、または他の任意の適した通信リンクのうちのいずれか、またはその組合せを含み得る。
【００１６】
図３は、コードが開発され、より複雑な配布システムを介して配置される、コードの書き換えを実施するのに適した別の環境例３００を示している。環境３００は、上記で概説したように、中間コンピュータ３０２に加えて、開発者コンピュータ２０２、および配置コンピュータ２０４を含む。配置コンピュータ２０４は、企業のファイヤウォール内で保護されている企業イントラネットなど、企業のコンピューティングシステム３０４内にある。図３の環境３００で、コード単位１０２の開発および配置は、配置コンピュータ２０４上にコード単位１０２を配置する前に、ネットワーク２０６を介して開発コンピュータ（ｄｅｖｅｌｏｐｍｅｎｔ  ｃｏｍｐｕｔｅｒ）２０２から中間コンピュータ３０２にコード単位１０２を転送することを含み得る。一般に、こうした中間コンピュータ３０２は、コード単位を段階的に実行し、それらを配置コンピュータ２０４に配布するために使用される。中間コンピュータ３０２上で行われるコードの書き換えは、開発コンピュータまたは配置コンピュータ上で行われるものとは異なり得る。例えば、中間コンピュータ３０２でのコードの書き換えは、企業３０４の配置コンピュータ２０４において実施中のあるシステムおよび／またはセキュリティ要件と互換性があるようにコードを書き換えることができる。さらに、コード単位１０２をその開発の一部として中間コンピュータ３０２に一時的にインストールし、そこで実行して、それを企業３０４内の配置コンピュータ２０４に移動する前にそのパフォーマンスを確認することができる。実施形態の例に関して後述するように、コード単位１０２は、環境３００の様々なコンピュータ２０２、２０４、および３０２におけるその開発、インストール、および実行にわたる様々な段階で１つまたは複数のリライタによって書き換えることができる。
【００１７】
図２および図３のコンピュータ２０２、２０４、および３０２は、例えば、デスクトップＰＣ、ノートブック、または他のポータブルコンピュータ、ワークステーション、サーバ、メインフレームコンピュータなどを含む従来の様々なコンピューティング装置のうちの任意のものとして実装することができる。コンピュータ２０２、２０４、および３０２は一般に、電子メール、カレンダリング、タスク編成、文書処理、Ｗｅｂブラウジングなど、一般的なコンピューティング環境を実行することができる。コンピュータ２０２、２０４、および３０２は、ワシントン州レドモンドのＭｉｃｒｏｓｏｆｔ（登録商標）社のＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムなどのオペレーティングシステムを稼働させる。開発者コンピュータ２０２、配置コンピュータ２０４、および中間コンピュータ３０２の実装例を図１４を参照して以下により詳しく説明する。
【００１８】
（実施形態の例）
図４は、図３の環境例３００内のコードの書き換えを説明するのに有用な様々な構成要素を示すコンピュータ２０２、２０４、および３０２のブロック図である。コードの書き換えは、コンピュータ２０２、２０４、および３０２のいずれか、またはすべての上で行うことができ、１つのコンピュータ上でのコードの書き換えは、他のコンピュータ上でのコードの書き換えに影響を与える可能性がある。例えば、開発コンピュータ２０２での書き換え機能１０４の実施は、書き換えられたコード単位をもたらす可能性があり、これが中間コンピュータ３０２に転送される。開発コンピュータ２０２からの書き換えられたコード単位は、中間コンピュータ３０２によって再度書き換えられ、次いで配置コンピュータ２０４に転送され、そこでさらにもう一度書き換えられる場合がある。
【００１９】
図４の開発者コンピュータ２０２は、開発者によってＣ、Ｃ＋＋、Ｃ♯、Ｊａｖａ（登録商標）、Ｍｉｃｒｏｓｏｆｔ  Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）などのプログラミング言語で書かれたソースプログラム４００を含む。図４のコンピュータ２０２、３０２、および２０４のそれぞれは、様々なコンパイラ４０２を含み得る。コンパイラ４０２は、コンピュータによって異なっていてよく、したがって開発コンピュータ２０２、中間コンピュータ３０２、および配置コンピュータ２０４上のものがそれぞれ参照番号４０２（１）、４０２（２）、および４０２（３）で示されている。コンパイラ４０２は、言語固有のコンパイラを含んでいてよく、それぞれ特定の言語のソースプログラムを１つまたは複数のコード単位１０２にコンパイルするように構成されている。コード単位１０２は、例えば、ＰＣ上で実行する用意ができているネイティブコードにコンパイルされたオブジェクトモジュール、管理されたコ―ド環境での実行に適したバイトコードまたは別の中間言語、例えば抽象および／またはマシン非依存言語などとしてコンパイルされたＤＬＬまたは実行可能ファイルの集まり、インタープリタ型言語で書かれたスクリプトプログラムなどを含み得る。したがって、コンパイラ４０２は、ソース言語を特定のプラットフォーム上で稼働するネイティブコードにコンパイルするネイティブコードコンパイラ、およびソース言語を中間言語またはバイトコードなどの管理されたコードにコンパイルする管理されたコードコンパイラ、例えばＪａｖａ（登録商標）コンパイラ、．ＮＥＴコンパイラなどを含むことができる。
【００２０】
さらに、コンパイラ４０２は、中間言語やバイトコードなど、プラットフォーム非依存コード、すなわち管理されたコードを特定のプロセッサ上で実行することができるネイティブコードに変換する実行前コンパイラ（ｐｒｅ−ｅｘｅｃｕｔｉｏｎ  ｃｏｍｐｉｌｅｒ）を含み得る。したがって、コンパイラ４０２は、実行直前にバイトコード、中間言語などの管理されたコードをネイティブコードにコンパイルするＪＩＴ（ジャストインタイム）コンパイラ、およびインストールしたときに実行の用意ができているように管理されたコードをネイティブコードに事前コンパイルするインストール時コンパイルコンパイラ（ｃｏｍｐｉｌｅ−ｏｎ−ｉｎｓｔａｌｌ  ｃｏｍｐｉｌｅｒ）も含み得る。
【００２１】
各コンピュータ２０２、３０２、および２０４は、コード単位１０２を受信し、コード単位を書き換えるべきかどうかを決定し、コード単位１０２を書き換えるために適用されるリライタを識別し、順序付け、例えばプロセッサ上で実行するためにコード単位１０２および適切なリライタをＲＡＭにロードするなどコード単位に対するリライタの実行を容易にするように構成されたコード書き換え機能１０４を含み得る。図５に示すように、コード書き換え機能１０４は、リライトマネージャ５００、コード単位１０２を書き換えるように構成された１つまたは複数のコードリライタ５０２、およびどのリライタをどの順序でコード単位に適用すべきかを識別するリライタリスト５０４などの情報を包含し、かつ／または含む。
【００２２】
各コンピュータ２０２、３０２、および２０４は、オペレーティングシステム（ＯＳ）、セキュリティポリシーなどのシステムポリシー、アプリケーションツール、実行環境など様々なシステム構成要素４０４も含む。コード書き換え機能１０４の構成要素、すなわちリライトマネージャ５００、リライタ５０２、リライタリスト５０４のうちの１つまたは複数を、様々なシステム構成要素４０４のうちの任意の１つまたは複数の中に組み込むことができる。例えば、図６は、リライトマネージャ５００、リライタ５０２、およびリライタリスト５０４を含むコード書き換え機能１０４のすべての構成要素がオペレーティングシステムの一部として組み込まれていることを示している。このシナリオは、例えばいくつかのアプリケーションがオペレーティングシステムの更新されたバージョンとの互換性がなくなるときに有用となり得る。書き換え機能１０４、すなわちリライトマネージャ５００、リライタ５０２、およびリライタリスト５０４の更新されたオペレーティングシステム内への包含は、こうしたアプリケーションを変更して更新されたオペレーティングシステムとの互換性を確実にするために使用される。
【００２３】
図７および図８は、コード書き換え機能１０４の構成要素をスタンドアロンモジュールとする、および／または様々なシステム構成要素４０４間に分散することができることを示す実装形態の例を示している。図７のリライトマネージャ５００は、配置コンピュータ２０４上で実行するシステムセキュリティポリシー４０４（３）の構成要素であり、リライタ５０２およびリライトリスト５０４はスタンドアロンモジュールである。したがって、配置コンピュータ２０４に実装されているセキュリティポリシー４０４（３）の一部として、リライトマネージャ５００は、セキュリティポリシーに適合するようにコード単位を書き換える必要があるかどうかを決定するために実行される。書き換える必要がある場合、リライトマネージャは、続いてリライトリスト５０４を使用して適切なリライタ５０２を識別し、順序付け、次いでコード単位に対して識別されたリライタを実行する。図８で、リライトマネージャ５００は、中間コンピュータ３０２上のインストールツール４０４（２）の構成要素として示されており、リライタ５０２およびリライトリスト５０４はスタンドアロンモジュールである。したがって、コード単位１０２のインストール中、インストールツール４０４（２）内のリライトマネージャ５００は、コード単位を書き換える必要があるかどうかを決定するために実行される。書き換える必要がある場合、リライトマネージャは、続いてリライトリスト５０４を使用して適切なリライタ５０２を識別し、順序付け、次いでコード単位に対して識別されたリライタを実行する。
【００２４】
図９は、コード書き換え機能１０４の構成要素の一部を開発者によってコード単位１０２自体の中にどのように含めることができるかを示している。図９に示すように、開発者は、リライタリスト５０４をコード単位１０２自体の中に含んでいる。リライトマネージャ５００は、ＪＩＴ（ジャストインタイム）コンパイラ４０２の一部として示されており、リライタ５０２はスタンドアロンモジュールである。したがって開発者は、コード単位１０２自体を、コード単位１０２を書き換える１組のリライタ５０２を構成する方法として使用することができる。例えば、開発者は、新しくコンパイルされたコード単位１０２に渡される、１つまたは複数のリライタを使用してコード単位１０２を書き換えるようリライトマネージャ５００に指示するタグ、属性、文字列などのリライト命令をソースプログラム４００内に組み込むことができる。このように、開発者は、コード単位の開発および配置にわたる様々な段階で実施することができる１組のコードリライタを構成する能力を有する。ＪＩＴコンパイラ４０２によるコード単位１０２のその後の実行前コンパイル時に、ＪＩＴコンパイラ４０２内のリライトマネージャ５００は、どのリライタ５０２をコード単位に対して実行するかをコード単位に組み込まれているリライタリスト５０４から決定する。したがって、コード単位１０２は、ＪＩＴコンパイラ４０２よるネイティブコードへのコンパイルおよびその後の実行の直前に書き換えられる。
【００２５】
このプロセスは、特定の方法でコード単位をそれぞれ変更する１組のリライタを開発者がつなぎ合わせる、または「構成する」ことができるようにする。好ましい実施形態では、コード単位は各リライタによって「構成された」リライタの組に連続的に書き換えられるため、書き換えられた各コード単位の形式は同一のままである。したがって、リライタに入力されたコード単位は、そのリライタから出力されたコード単位と同じ形式を有している。このことは、開発者が、コード単位をそれぞれ取り込み、同じ形式または表現のコード単位をそれぞれ出力する任意の１組のリライタを構成できるようにする。代替実施形態では、各リライタは、入力されたコード単位とは異なる形式でコード単位を出力することができる。しかし、この代替は、１組のリライタを構成する際に開発者が使用可能な柔軟性および恣意性の度合いを多少制限する。
【００２６】
再度図５を参照すると、図４に示すコンピュータ２０２、３０４、および２０４のいずれかまたはすべてに関して説明することができる一般のコード書き換えプロセスを示している。コード書き換えプロセスは、例えばコンピュータ２０２、３０４、および２０４においてその開発および配置にわたってコード単位に対して行われる様々な変換を考慮するのに特に適した信用モデルの実装を含む。したがって、リライトマネージャ４０４は、書き換えられる前および書き換えられた後にコード単位の識別および信頼性の確認を提供する信用モデルをサポートする。
【００２７】
一般の信用モデルでは、開発者は、デジタル署名をコード単位に添付する。次いでデジタル署名を使用して、コード単位の識別を認証するとともに、コード単位が不正変更を加えられないように、または最初に配布されたそのバージョンから変更されないようにすることを保証することができる。デジタル署名を使用するための技術およびソフトウェアは、一般に入手可能である。こうした１つの技術では、適切なソフトウェアを使用してコード単位のハッシュまたは数学的サマリ（ｍａｔｈｅｍａｔｉｃａｌ  ｓｕｍｍａｒｙ）を取得することができる。次いで、パブリック−プライベートキーの機関から取得されたプライベートキーを使用してハッシュを暗号化することができる。暗号化されたキーは、コード単位内に含めてともに送信することができるデジタル署名である。アセンブリが送信されたユーザ、すなわちコンピュータは、次いでコード単位のハッシュ、または数学的サマリを作成し、パブリックキーを使用してハッシュを解読する。ハッシュが一致すると、コード単位が認証される。したがって一般の信頼の原理は、コード単位が最初に「署名された」バージョンから変更されている場合、その署名も変更されており、コード単位はもはや信頼されないというものである。
【００２８】
現在説明したコード書き換えシステムはコード単位の書き換えを含むため、上記の一般の信用モデルは適していない。１つまたは複数のコードの書き換えを介して変更されたデジタル「署名された」コード単位は、書き換え中に加えられた変更に基づいて信用のおけるものとして確認することができない。したがって図５に示した一般のコード書き換えプロセスは、例えばコンピュータ２０２、３０４、および２０４において開発および配置にわたってコード単位に対して行われる様々な変換を考慮するのに特に適した信用モデルの実装を含む。
【００２９】
図５に示した一般の書き換えプロセスでは、コード単位１０２は、コード書き換え機能１０４のリライトマネージャ５００によって受信される。コード単位は、デジタル署名「署名＃１」を含む。リライトマネージャ５００は、最初に、コード単位１０２を書き換える必要があるかどうかを決定する。図６〜図９に関して上述したように、この決定は、様々な方法で行うことができる。例えば、リライトマネージャ５００は、コード単位１０２が開発者コンピュータ２０２上のソースプログラム４００から例えばネイティブコード、バイトコード、中間言語などにコンパイルされたとき、コード単位１０２を書き換える必要があると決定することができる。
【００３０】
次いでリライトマネージャ５００は、リライタ５０２のグループから適切なリライタを識別し、順序付ける。これは、リライトリスト５０４を調べることによって行われる。リライトリスト５０４は、リライトマネージャ５００にリライタを知らせ、識別されたリライタがコード単位１０２に対して実行される順序を提供する。次いでリライトマネージャ５００は、１つまたは複数のリライタ５０２のグループから識別されたリライタにアクセスし、それらをコード単位１０２とともにＲＡＭなどのメモリにロードする。コード単位１０２に対して識別されたリライタを実行する前に、リライトマネージャ５００は、例えばパブリックキーを使用してハッシュまたは数学的サマリを解読することによって、コード単位１０２の「署名＃１」およびリライタ５０２の「署名＃２」などのリライタおよびコード単位１０２のデジタル署名を認証して、その識別および信頼性を確認する。デジタル署名が信頼できるものである場合、リライトマネージャは、コード単位１０２に対して識別されたリライタを実行して、書き換えられたコード単位１０６を生成する。また、リライトマネージャは、書き換えられたコード単位１０６のデジタル署名、例えばプライベートキーを使用して暗号化された書き換えられたコード単位１０６のハッシュまたは数学的サマリである「署名＃３」を生成し、書き換えられたコード単位１０６を署名とともにリライトキャッシュ４０６に格納する。
【００３１】
一般に、コード単位１０２に対して実行されたコードリライタ５０２は、すでにメモリ内にない場合はディスク上のコード単位ファイルを開き、ネイティブコード、バイトコード、中間言語、メタデータなどにロードし、モジュールの論理構造、その型、メソッドなどを回復して「メモリ内」データ構造にすることができる。次いでコードリライタは、こうしたデータ構造をトラバースし、例えば「関数」としても知られるメソッドの本文を変更してコードを任意に挿入または削除する、または変更することによって型およびメソッドの表現に任意の変更を加える。コードリライタは、例えばモジュール、型、メソッド、フィールドの全体を挿入する、または削除することができる。例えば上記の図９、下記の図１０および図１１のタグ、属性、文字列などによって書き換えがコード単位自体の中から指示されている場合、加えられる変更は、コード単位の外部の、またはコード単位内に組み込まれていて、時にはコード単位内の特定の要素またはサイトに関連していることがある、追加のディレクティブ、タグ、属性、文字列など、特定のコードリライタがコード単位に加えている変更の種類を変更またはある方向に向けるものによって案内される。
【００３２】
再度図４を参照すると、説明した信用モデルは、コンピュータ２０２、３０４、および２０４において開発および配置にわたってコード単位１０２に対して行うことができる様々な変換を考慮に入れる。例えば、開発者のコンピュータ２０２上の書き換えられたコード単位１０６（１）をコード単位１０２（２）として中間コンピュータ３０２に転送することができる。コード単位１０２（２）は、開発者コンピュータ２０２上のコード単位１０２（１）のその元のバージョンから変更されており、すなわち書き換えられたコード単位１０６（１）に変更されているが、コード単位１０２（２）は一般に、コードの変更が行われた後、デジタルで署名される。したがって中間コンピュータ３０２は、それに伴うデジタル署名に基づいて依然としてコード単位１０２（２）の識別および信頼性を認証することができる。
【００３３】
リライトキャッシュ４０６は、ユニット１０２をコンパイルする、インストールする、実行するなどのためのその後の呼び出しが書き換えプロセスの繰り返しをもたらさないように、書き換えられたコード単位１０６を格納するために使用される。したがって、コード単位１０２が特定のリライタまたはリライタ５０２の組によってすでに書き換えられている場合、リライトマネージャ５００は、結果として得られた書き換えられたコード単位１０６をリライトキャッシュ４０６に格納し、特定のリライタまたはリライタ５０２の組に関して書き換えプロセスを繰り返す必要性を回避する必要があるときに、キャッシュ４０６から書き換えられたコード単位１０６にアクセスする。コード単位１０２は、いったん書き換えられ、書き換えられたコード単位１０６としてリライトキャッシュ４０６に格納されると、キャッシュ４０６から直接アクセスされ、書き換えプロセスを再度通過することなく実行することができる。
【００３４】
図１０および図１１は、コード書き換え機能１０４が管理されたコード環境においてコードに関して実施されるより具体的な例を示している。管理されたコード環境は、サポートされたいくつかの言語のうちのいずれかで書かれたプログラムの実行を管理し、プログラムが言語のうちのいずれかで書かれた共通のオブジェクト指向クラスを共有できるようにする。管理されたコード環境の例は、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓが提供する、Ｊａｖａ（登録商標）言語からコンパイルされたプログラムを稼働するＪａｖａ（登録商標）仮想マシン、およびＵＳＡワシントン州レドモンドのＭｉｃｒｏｓｏｆｔ社によって作成された．ＮＥＴ（商標）プラットフォームの一部である共通言語ランタイム（ＣＬＲ）を含む。図１０および図１１に示した例は、本明細書では、ＭｉｃｒｏｓｏｆｔのＣＬＲを参照して説明する。．ＮＥＴ（商標）Ｆｒａｍｅｗｏｒｋの基本に関する追加の情報は、非特許文献１など、いくつかの入門テキストで見つけることができる。
【００３５】
ＣＬＲは、Ｍｉｃｒｏｓｏｆｔの．ＮＥＴ（商標）Ｆｒａｍｅｗｏｒｋの核であり、すべての．ＮＥＴコードの実行環境を提供する。したがって、ＣＬＲを使用するために構築され、ＣＬＲ内で稼働するコードは、「管理されたコード」と呼ばれる。ＣＬＲは、ジャストインタイム（ＪＩＴ）コンパイル、メモリの割り振りおよび管理、型安全性の実施（ｅｎｆｏｒｃｉｎｇ  ｔｙｐｅ  ｓａｆｅｔｙ）、例外処理、スレッド管理およびセキュリティを含む、プログラムの実行に必要な様々な機能およびサービスを提供する。．ＮＥＴ（商標）ルーチンを最初に呼び出すとＣＬＲがロードされる。最高のパフォーマンスでは、管理されたコードは一般に、実行の直前にネイティブコードにコンパイルされる。
【００３６】
管理されたコードを書くとき、配置単位はアセンブリと呼ばれる。アセンブリは、一単位としてバージョン番号が付けられ、配置される１つまたは複数のファイルの集まりである。アセンブリは、．ＮＥＴ（商標）Ｆｒａｍｅｗｏｒｋアプリケーションの主な構成要素である。管理されたすべての型およびリソースは、アセンブリ内に含まれ、アセンブリ内のみでアクセス可能、または他のアセンブリ内のコードからアクセス可能なものとしてマークされる。アセンブリは、ＤＬＬまたは実行可能（ＥＸＥ）ファイルとしてパッケージされる。実行可能ファイルは、それ自体で稼働することができるが、ＤＬＬは、既存のアプリケーションでホストされなければならない。
【００３７】
説明を簡潔にするために、図１０および図１１は、図２を参照して上述した環境２００と一致する配置環境の例を示している。したがって、ソースプログラム４００は、開発者コンピュータ２０２上で開発され、例えばネットワーク２０６を介してダウンロードする、またはディスクを介して転送するなど、比較的直接的なやり方で配置コンピュータ２０４に配布される。さらに、一貫性のために、そうでなければ管理されたコード環境において「アセンブリ」と呼ばれるコードの配置単位は、図１０および図１１のコード書き換え例においてコード単位と呼ばれる。
【００３８】
図１０では、「ｈｅｌｌｏ．ｃｓ」という名のソースプログラム４００の例は、Ｃ＃プログラミング言語で書かれており、特定のコードリライタを要求する「リライトカスタム属性（ｒｅｗｒｉｔｅ  ｃｕｓｔｏｍ  ａｔｔｒｉｂｕｔｅ）」、およびコードの書き換えに固有ではない他のカスタム属性を含む。属性はすべて角括弧「［］」内に示されている。こうした形の両方のカスタム属性は、プログラムソースコード４００に組み込まれ、例えばこれらのクラスの特徴を説明するためにクラスに適用される。したがって、図１０のソースプログラム４００では、属性「［Ａｔｔｒ］」は、クラス「Ｔ」の何らかの特徴を説明するためにクラス「Ｔ」に適用されるカスタム属性である。
【００３９】
カスタム属性は、ソースプログラム４００のコンパイル４０２を通ってコード単位１０２（１）に運ばれる、開発者がソースプログラム４００に含めることができるカスタマイズ可能な注釈である。一般に、．ＮＥＴ  Ｆｒａｍｅｗｏｒｋの実施形態は、カスタム属性の組の任意の拡張性を可能にする。カスタム属性の組は固定されない。むしろ任意のコードは、ユーザ定義された新しいカスタム属性を導入することができる、またはこうしたユーザ定義された新しいカスタム属性の対象とすることができる。カスタム属性をコード単位１０２（１）、型、メソッドなどに適用することができる。その型がリライトカスタム属性型から導出されるコード単位１０２（１）に適用されるカスタム属性は、「リライトカスタム属性」と呼ばれる。リライトカスタム属性は、例えばコードリライタ５０２のグループの中の１つのコードリライタのコード単位１０２（１）に対する適用をトリガする。したがってリライトカスタム属性は、コード単位１０２（１）に適用されるリライタを指定または決定するリライトリスト５０４を構成することができる。ソースプログラム４００では、リライトカスタム属性「ＲＣＡ１」および「ＲＣＡ２」は、それぞれ「［ＲＣＡ１］」および「［ＲＣＡ２］」という括弧内で識別される。開発者は、リライトカスタム属性内で、識別されたコードリライタがコード単位１０２（１）に対していつ適用されるかを指定し、したがってコード単位１０２（１）に対して識別されたリライタを実行する順序を示すことができる。
【００４０】
図１０のコンパイラ４０２は、Ｃ＃プログラミング言語に固有のＣ＃コンパイラ（ＣＳＣ）である。ＣＳＣコンパイラ４０２は、異なる言語固有のソースプログラムを共通のプロセッサ非依存中間言語（ＩＬ）およびメタデータを含むコード単位にコンパイルする目的で開発者コンピュータ２０２上に存在し得る様々な言語固有の．ＮＥＴコンパイラのうちの１つである。第１のパスで、コンパイラ４０２は、ソースプログラム４００をコンパイルし、エラーチェックを実行し、「ｈｅｌｌｏ．ｅｘｅ」という名前のコード単位１０２（１）、つまりコード単位１０２のバージョン１を構築する。ソースプログラム４００内のリライトカスタム属性「［ＲＣＡ１］」および「［ＲＣＡ２］」を含むカスタム属性の表現は、コード単位１０２（１）のメタデータに渡される。
【００４１】
図１０および図１１の管理されたコード例のコード単位１０２は、ＩＬおよびメタデータを含む。ＩＬは、抽象的なやり方で、メソッドの本文で行われる動作を記述する。メタデータは、コード単位の構造を記述するテーブルおよびカスタム属性を含み、コード単位は、モジュールの集まりから成り、各モジュールは型定義の集まりから成り、各型定義はフィールドおよびメソッド、つまりコード、関数の集まりであり、各メソッドは、戻り値型および正式な引数の型のリストを有する。この場合、メタデータは、ソースプログラム４００から渡された２つのリライタカスタム属性ＲＣＡ１、ＲＣＡ２があること、および「Ｔ」と呼ばれる型、およびＴのメソッドを記述するテーブルがあることを示す。Ｔのメソッドのうちの１つはＭａｉｎと呼ばれる。属性「Ａｔｔｒ」など他のカスタム属性も存在し得るが、これらは、リライタカスタム属性ではなく、任意のコードの書き換えをトリガしない。
【００４２】
第２のパスで、コンパイラ４０２のリライトマネージャ構成要素５００は、第１のパスから構築されたコード単位１０２（１）を調査するように構成されている。調査時に、コンパイラ４０２のリライトマネージャ５００がコードリライタ５０２を要求する例えばＲＣＡ１、ＲＣＡ２などの任意のリライトカスタム属性を見つけると、リライトマネージャ５００は、図には示していないメモリにロードされ、次にコード単位１０２（１）に対して要求されたコードリライタ５０２を稼働させる。リライトマネージャ５００はさらに、上記で概説したように、コード単位１０２（１）に対して要求されたコードリライタ５０２を稼働させる前にそれらの識別および信頼性を確認するために、コード単位１０２（１）およびコードリライタ５０２に関連付けられているデジタル署名を認証する。
【００４３】
この例では、ＲＣＡ１およびＲＣＡ２と呼ばれる２つのリライトカスタム属性は、コード単位１０２（１）を変更するためにそれぞれアセンブリリライタＣＲ１およびＣＲ２が適用されることを要求している。しかし、カスタム属性ＲＣＡ２は、開発者がＣＲ２コードリライタを開発者コンピュータ２０２上のコード単位１０２（１）に対して稼働させたくないという指示、例えば下付き文字「Ｔ」でタグ付けされている。ソースプログラム４００は、コンパイラ４０２が第１のパスでコード単位１０２（１）まで運ぶ第２のリライトカスタム属性ＲＣＡ２の「ＤｅｐｌｏｙｍｅｎｔＴｉｍｅ＝Ｔｒｕｅ」タグを含む。したがって、第２のパスで、コンパイラ４０２のリライトマネージャ５００は、タグ付けされた属性ＲＣＡ２によって要求されたＣＲ２コードリライタが開発者コンピュータ２０２上のコード単位１０２（１）に対して稼働されないことを認識する。したがって、この例では、コードリライタＣＤ１のみが開発者２０２上のコード単位１０２（１）に対して稼働する。これは、変更されたコード単位１０２（２）、つまりコード単位１０２のバージョン２をもたらす。さらにコンパイラ４０２は、任意選択で、上記で説明したようにデジタル署名を生成し、変更されたコード単位１０２（２）に添付する。結果として得られたコード単位１０２（２）のバージョンは、配置コンピュータ２０４に配布されてインストールされ、実行される。図１０のクラスＴのメソッド「Ｍａｉｎ１」の例は、コード単位１０２（１）内のクラスＴの元のメソッド「Ｍａｉｎ０」がＣＲ１によってその元のバージョンから変更されていることを示すものであることを留意されたい。
【００４４】
例えば配置コンピュータ２０４上など、後で実施するようにタグ付けされているリライトカスタム属性、例えばＲＣＡ２Ｔなどは、変更されたコード単位１０２（２）に渡される。その要求されたコードリライタがすでに開発者コンピュータ２０２上のコード単位１０２（１）に適用されている他のリライトカスタム属性、例えばＣＲ１なども、図１０で示すように、変更されたコード単位１０２（２）に渡される。しかし、これらの属性の目的がすでに果たされているため、これは必須ではない。
【００４５】
図１１を参照すると、配置コンピュータ２０４は、例えば開発者コンピュータ２０２から配布されたコード単位１０２（２）など、任意の数のアプリケーションプログラムコード単位を含み得る。上述したように、コード単位１０２は、．ＮＥＴコンパイラ上でコンパイルされ、ＣＬＲ（共通言語ランタイム）１１００の管理された実行環境で実行されるように構成されたＩＬコードおよびメタデータを含む。さらに、コード単位１０２は、コード単位１０２が配置コンピュータ２０４にインストールされたときなど、様々なときにコード単位１０２の変更をコードリライタに要求するように構成されているＲＣＡ１およびＲＣＡ２などの様々なリライタカスタム属性を含み得る。さらに、コード単位１０２は、コード単位１０２自体およびコード単位１０２内のリライタカスタム属性によって要求される任意のコードリライタ５０２の信憑性を確認するために１つまたは複数のデジタル署名を含み得る。
【００４６】
コード単位１０２（２）が配置コンピュータ２０４上で起動されたとき、ＣＬＲ１１００内に例えばローダ１１０２として組み込まれたリライトマネージャ５００は、コード単位１０２（２）をメモリにロードし、それを調査する。調査時に、ＣＬＲ１１００のリライトマネージャ５００は、コード単位１０２（２）の信憑性および信頼性を決定する。信憑性は、コード単位１０２（２）内に見られるコード単位のデジタル署名に基づいて確認される。数学的ハッシュおよびパブリック‐プライベートキーの機関を使用したこの確認の一例を簡単に上述している。コード単位１０２（２）の信頼性は、ＣＬＲ１１００の他の何らかの追加のセキュリティポリシーに一部基づいて決定することもできる。例えば、ＣＬＲ１１００セキュリティポリシーは、いくつかのディストリビュータまたはＷｅｂサイトから来るコード単位を信頼することができ、また、他のいくつかのディストリビュータまたはＷｅｂサイトから来るコード単位を拒否することができる。一般に、セキュリティポリシーは、前もって配置コンピュータ２０４にインストールされているシステムコード単位を信頼する。
【００４７】
コード単位１０２（２）の調査時に、ＣＬＲ１１００のリライトマネージャ５００は、配置コンピュータ２０４上で実行する前にコード単位１０２（２）を変更するようコードリライタ５０２（２）に要求しているＲＣＡ２Ｔなど、任意の潜在的な待ち状態のリライトカスタム属性、すなわち実行前に配置コンピュータ２０４上で実施するようにタグ付けされたリライトカスタム属性があるかどうかを決定する。コード単位１０２（２）を変更するようリライタに要求する潜在的なリライトカスタム属性に加えて、ＣＬＲ１１００自体は、コード単位１０２（２）に対して稼働する必要があることがわかっている１つまたは複数のシステムコードを開始することができる。システムリライタの一例は、以下でより詳しく説明する「アプリケーション互換リライタ（ａｐｐｌｉｃａｔｉｏｎ  ｃｏｍｐａｔｉｂｉｌｉｔｙ  ｒｅｗｒｉｔｅｒ）」である。
【００４８】
リライタが要求されているとき、ＣＬＲ１１００のリライタマネージャ５００は、存在する１組のリライタ５０２（２）からこうした任意のリライタの第１のものをロードし、コード単位１０２（２）上で実行された同じタイプの信憑性および信頼性のチェックを開始する。したがって、図１１の例では、ＣＬＲ１１００のリライトマネージャ５００は、リライタ５０２（２）からＣＲ２をロードし、ＣＲ２の信憑性および信頼性を確認する。
【００４９】
コード単位１０２（２）およびＣＲ２などのリライタの確認の成功後、ＣＬＲ２１０のリライトマネージャ５００は、コード単位１０２（２）に対してリライタＣＲ２を稼働させて、変更されたコード単位１０２（２）が得られる。コード単位１０２（２）内の他のリライトカスタム属性が追加のリライタの使用を要求している場合、ＣＬＲ１１００のリライトマネージャ５００は、追加のリライタを同じやり方でロードし、確認し、コード単位１０２（２）に対して稼働させる。要求されたすべてのリライタがコード単位１０２（２）に適用された後、最後の変更されたコード単位１０２（３）は、配置コンピュータ２０４上のリライトキャッシュ４０６に格納される。リライトマネージャ５００は、最後に書き換えられたアセンブリだけの代わりに中間の書き換えられたアセンブリのうちの１つまたは複数をキャッシュに入れることを選択することもできる。次いでＣＬＲ１１００は、ＪＩＴ（ジャストインタイム）コンパイラを使用して変更されたコード単位１０２（３）のネイティブマシンコード１１０４へのコンパイルを管理する。次いでネイティブマシンコード１１０４は、プロセッサ１１０６上で実行される。
【００５０】
代替実施形態では、コードリライタでコード単位１０２（２）をコード単位１０２（３）に変更するプロセス、およびコード単位１０２（３）のネイティブマシンコード１１０４へのその後の変換は、インストール時に実行する用意ができているように、管理されたコードをネイティブコードに事前コンパイルするインストール時コンパイルコンパイラを使用して、コード単位１０２（２）の配置コンピュータ２０４へのインストール時に行われる。
【００５１】
最後の変更されたコード単位１０２（３）の配置コンピュータ２０４上の書き換えコード４０６への格納は、ＣＬＲ１１００のリライトマネージャ５００が、コード単位１０２（３）を実行するためのその後のすべての呼び出しについて、コード書き換えプロセスに先行できるようにする。したがって、コード単位１０２（３）が将来開始されたとき、ＣＬＲ２１０のリライトマネージャ５００は、リライトキャッシュ４０６からのコード単位１０２（３）のキャッシュされた書き換えられた最後のバージョンにアクセスし、プロセッサ１１０６上で実行できるように、コード単位１０２（３）のネイティブマシンコード１１０４への変換を管理する。
【００５２】
キャッシュ無効化アルゴリズム（ｃａｃｈｅ  ｉｎｖａｌｉｄａｔｉｏｎ  ａｌｇｏｒｉｔｈｍ）１１０８は、リライトキャッシュ４０６に保存されたコード単位が有効なままであるかどうかを決定するように構成されている。アルゴリズム１１０８は一般に、リライトキャッシュ４０６の内容の一部またはすべてを無効にする、または破棄する事前決定されたポリシーを設ける。例えば、こうしたポリシーは、コード単位が変更されたとき、または所与のコードリライタのパラメータが変更されたときにキャッシュを無効化することを含み得る。
【００５３】
図１２は、図１１に関して上述したシステムコードリライタの一例を示す。図１２は、配置コンピュータ２０４上の「アプリケーション互換リライタ」１２００を、ＡＣＲデータベース１２０２、オペレーティングシステム１２０４、リライトキャッシュ４０６、およびコード単位１０２を含めて、アプリケーション互換リライタ１２００の実装および説明を容易にする他の構成要素とともに示している。アプリケーション互換リライタ１２００の現在の説明は、管理されたコード環境およびＣＬＲとの脈絡はないが、この説明は一般に、管理されたコード環境、および管理されていないコード環境に適用されることを理解されたい。
【００５４】
一般に、アプリケーション互換リライタ１２００は、特定の既存のアプリケーションプログラムと一致しないプラットフォーム／オペレーティングシステムにおいて加えられた変更を考慮するコードリライタである。例えば、図１２のコード単位１０２は、文書処理アプリケーションであることを示し、オペレーティングシステム１２０４は、更新されたバージョンであることを示している。多くの場合、オペレーティングシステムがアップグレードされたとき、新しいオペレーティングシステム環境で引き続き適切に稼働するために、いくつかのアプリケーションプログラムをパッチし、または修正する必要がある。
【００５５】
アプリケーション互換リライタ１２００は、プラットフォーム／オペレーティングシステムの更新されたバージョンとの様々なアプリケーションプログラムの互換性を維持する。例えば、実行するためにコード単位１０２をロードする試行がなされたとき、アプリケーション互換リライタ１２００は、コード単位１０２を検査し、それがオペレーティングシステム１２０４の更新されたバージョンとの互換性があるかどうかを決定するように構成されている。アプリケーション互換リライタ１２００は、例えばある文書処理アプリケーションなどのコード単位１０２を識別し、次いでＡＣＲデータベース１２０２を調べて、更新されたオペレーティングシステム１２０４との互換性のために、コード単位１０２の任意の部分を書き換える必要があるかどうかを確かめる。書き換える必要がある場合、アプリケーション互換リライタ１２００は、適切な修正をコード単位１０２に適用する。
【００５６】
（方法例）
次に、コ―ドの書き換えを実施する方法例を、主に図１３のフロー図を参照して説明する。方法は、図１〜１２に関して上述した実施形態の例に適用される。１つまたは複数の方法がフロー図、およびフロー図のブロックに関連付けられているテキストによって開示されているが、記載した方法の要素を必ずしも示した順序で実行する必要はなく、代替の順序が同様の利点をもたらし得ることを理解されたい。さらに、方法は、排他的なものではなく、単独、または互いの組合せで実行することができる。記載した方法の要素は、例えばＡＳＩＣ上のハードウェア論理ブロック、またはコンピュータ可読媒体上で定義されたコンピュータ可読命令の実行によるなど、任意の適切な手段によって実行することができる。
【００５７】
「コンピュータ可読媒体」は、本明細書で使用する場合、プロセッサによって使用される、または実行される命令を含む、格納する、伝達する、伝搬する、または移送することができる任意の媒体とすることができる。コンピュータ可読媒体は、それだけには限定されないが、電子、磁気、光学、電磁、赤外線、または半導体のシステム、装置、デバイス、または伝搬媒体とすることができる。コンピュータ可読媒体のより具体的な例には、数ある中でも特に、１つまたは複数の配線を有する電気接続（電子）、ポータブルコンピュータディスケット（磁気）、ランダムアクセスメモリ（ＲＡＭ）（磁気）、読み取り専用メモリ（ＲＯＭ）（磁気）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）、光ファイバ（光）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）（光）、およびポータブルコンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）（光）などがある。
【００５８】
方法１３００のブロック１３０２で、コード単位が受信される。コード単位は、例えばオペレーティングシステム、セキュリティポリシー、アプリケーションツールなど、スタンドアロンモジュールまたはコンピュータシステム上で実行する構成要素内のモジュールであるリライトマネージャによって受信される。ブロック１３０４で、リライトマネージャは、コード単位を書き換える必要があると決定する。この決定は、例えば、コード単位を書き換える必要があることをリライトマネージャに伝えるコード単位自体の中のタグ、属性、文字列などのリライト命令を読み取ることによるなど、様々な方法で行うことができる。ブロック１３０６で、リライトマネージャは、コード単位を書き換える１つまたは複数のリライタを決定する。リライトマネージャは、リライタを識別するリライトリストにアクセスすることによってコード単位を書き換えるリライタを決定する。リライトリストは、コード単位自体の中の命令、またはコンピュータシステム上のスタンドアロンモジュールである、またはコンピュータシステムの別の構成要素の一部であるファイルとすることができる。あるいは、リライトリストは、ネットワーク２０６などのネットワークを介してアクセス可能なリモートコンピュータ装置上に配置されているファイルとすることができる。
【００５９】
どのリライタがコード単位を書き換えるかを決定した後、リライトマネージャは、１つまたは複数のリライタのグループから識別されたリライタにアクセスし、それらをコード単位とともにメモリ（ＲＡＭ）にロードする。一般にリライタを、それらが実行されるコンピュータ装置上に存在するものとして説明しているが、ネットワーク２０６などのネットワークを介してアクセス可能なリモートコンピュータ装置上に配置することもできる。このシナリオでは、リライトマネージャは、リモート装置上のリライタにアクセスし、それらをコード単位とともにＲＡＭにロードすることになる。次いでリライトマネージャは、ブロック１３０８に示すように、コード単位およびリライタが信用のおけるものであることを確認する。これは、コード単位およびリライタにそれぞれ関連付けられているデジタル署名を認証することによって行われる。ブロック１３１０で、リライトマネージャは、コード単位に対して実行するための特定の順序でリライタを順序付ける。コード単位に適用されるべきリライタは１つだけでもよい。この場合、リライタの順序付けは行われないことになる。複数のリライタの順序は、リライトリストに従って決定される。ブロック１３１２で、リライトマネージャは、適切な順序で一度に１回、コード単位に対して１つまたは複数のリライタを実行する。コード単位に対する各リライタの実行は、一意の方法でコード単位を変更する。１つまたは複数のリライタによる書き換えの結果が書き換えられたコード単位である。ブロック１３１４で、書き換えられたコード単位のためのデジタル署名が生成される。デジタル署名は、ブロック１３１６に示すように、書き換えられたコード単位に例えば添付されるなどして関連付けられている。ブロック１３１８で、書き換えられたコード単位、および任意選択で関連付けられたデジタル署名がリライトキャッシュに格納される。
【００６０】
ブロック１３２０で、コード単位を実行する旨の命令が受信される。ブロック１３２２で、リライトマネージャは、書き換えられたコード単位がリライトキャッシュに格納されることを認識する。したがって、書き換えプロセスを再度実施する必要はない。代わりに、書き換えられたコード単位がブロック１３２６でリライトキャッシュから直接ロードされ、１３２８で実行される。
【００６１】
１つまたは複数の方法がフロー図、およびフロー図のブロックに関連付けられているテキストによって開示されているが、ブロックを必ずしも示した順序で実行する必要はなく、代替の順序が同様の利点をもたらし得ることを理解されたい。さらに、方法は、排他的なものではなく、単独、または互いの組合せで実行することができる。
【００６２】
（コンピュータ例）
図１４は、図１〜１３を参照して上述したものなど、開発者コンピュータ２０２、中間コンピュータ３０２、および配置コンピュータ２０４を実装するのに適したコンピューティング環境の例を示している。１つの具体的な構成を図１４に示しているが、開発者コンピュータ２０２、中間コンピュータ３０２、および配置コンピュータ２０４は、他のコンピューティング構成に実装することができる。
【００６３】
コンピューティング環境１４００は、コンピュータ１４０２の形で汎用コンピューティングシステムを含む。コンピュータ１４０２の構成要素は、それだけには限定されないが、１つまたは複数のプロセッサまたは処理ユニット１４０４、システムメモリ１４０６、およびプロセッサ１４０４を含む様々なシステム構成要素をシステムメモリ１４０６に結合するシステムバス１４０８を含み得る。
【００６４】
システムバス１４０８は、様々なバスアーキテクチャのうちの任意のものを使用するメモリバスまたはメモリコントローラ、周辺バス、高速グラフィックスポート、およびプロセッサまたはローカルバスを含むいくつかのタイプのバス構造のうちの１つまたは複数を表す。システムバス１４０８の一例には、メザニンバスとしても知られている周辺部品相互接続（ＰＣＩ）バスがある。
【００６５】
コンピュータ１４０２は、様々なコンピュータ可読媒体を含む。こうした媒体は、コンピュータ１４０２からアクセスできる使用可能な任意の媒体とすることができ、揮発性および不揮発性の媒体、取り外し式および固定式の媒体を含む。システムメモリ１４０６は、ランダムアクセスメモリ（ＲＡＭ）１４１０などの揮発性メモリ、および／または読み取り専用メモリ（ＲＯＭ）１４１２などの不揮発性メモリの形でコンピュータ可読媒体を含む。基本入出力システム（ＢＩＯＳ）１４１４は、例えば起動中など、コンピュータ１４０２内の要素間での情報の転送を助ける基本ルーチンを含み、ＲＯＭ１４１２に格納されている。ＲＡＭ１４１０は、処理ユニット１４０４から直接アクセス可能な、かつ／または処理ユニット１４０４が現在処理しているデータおよび／またはプログラムモジュールを含む。
【００６６】
コンピュータ１４０２は、取り外し式／固定式、揮発性／不揮発性コンピュータ記憶媒体も含み得る。一例として、図１４は、図には示していないが固定式不揮発性磁気媒体から読み取り、あるいはそこに書き込むハードディスクドライブ１４１６、フロッピー（登録商標）ディスクなどの取り外し式不揮発性磁気ディスク１４２０から読み取り、あるいはそこに書き込む磁気ディスクドライブ１４１８、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、他の光媒体など、取り外し式不揮発性光ディスク１４２４から読み取り、あるいはそこに書き込む光ディスクドライブ１４２２を示している。ハードディスクドライブ１４１６、磁気ディスクドライブ１４１８、および光ディスクドライブ１４２２はそれぞれ、１つまたは複数のデータ媒体インターフェース１４２５によってシステムバス１４０８に接続される。あるいは、ハードディスクドライブ１４１６、磁気ディスクドライブ１４１８、および光ディスクドライブ１４２２は、図には示していないがＳＣＳＩインターフェースによってシステムバス１４０８に接続することができる。
【００６７】
ディスクドライブおよびその関連のコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピュータ１４０２の他のデータの不揮発性記憶域を提供する。例は、ハードディスク１４１６、取り外し式磁気ディスク１４２０、および取り外し式光ディスク１４２４を示しているが、磁気カセットや他の磁気記憶装置、フラッシュメモリカード、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光記憶域、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的消去可能プログラム可能読み取り専用メモリ（ＥＥＰＲＯＭ）など、コンピュータによってアクセス可能なデータを格納できる他のタイプのコンピュータ可読媒体を使用してコンピューティングシステムおよび環境の例を実装することができることを理解されたい。
【００６８】
一例としてオペレーティングシステム１４２６、１つまたは複数のアプリケーションプログラム１４２８、他のプログラムモジュール１４３０、およびプログラムデータ１４３２を含めて、いくつかのプログラムモジュールをハードディスク１４１６、磁気ディスク１４２０、光ディスク１４２４、ＲＯＭ１４１２、および／またはＲＡＭ１４１０に格納することができる。こうしたオペレーティングシステム１４２６、１つまたは複数のアプリケーションプログラム１４２８、他のプログラムモジュール１４３０、およびプログラムデータ１４３２のそれぞれ、またはそれらの組合せは、ユーザのネットワークアクセス情報のキャッシュ方式の実施形態を含み得る。
【００６９】
コンピュータ１４０２は、通信媒体として識別される様々なコンピュータ／プロセッサ読み取り可能媒体を含むことができる。通信媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを搬送波または他の移送機構などの変調されたデータ信号に組み込む。これには任意の情報配送媒体がある。「変調されたデータ信号」という用語は、信号に情報を符号化するように１つまたは複数のその特性が設定または変更された信号を意味する。通信媒体には、それだけには限定されないが一例として、有線ネットワーク、直接配線された接続などの有線媒体、および音響、ＲＦ、赤外線、その他の無線媒体などの無線媒体がある。また、上記のどんな組合せでもコンピュータ可読媒体の範囲内に含まれるものとする。
【００７０】
ユーザは、コマンドおよび情報をキーボード１４３４、および「マウス」などのポインティング装置１４３６などの入力装置を介してコンピュータ１４０２に入力することができる。具体的には図示していないが、他の入力装置１４３８には、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、シリアルポート、スキャナなどがある。これらおよび他の入力装置は、システムバス１４０８に結合されている入力／出力インターフェース１４４０を介して処理ユニット１４０４に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など他のインターフェースおよびバス構造で接続してもよい。
【００７１】
モニタ１４４２または他のタイプの表示装置も、ビデオアダプタ１４４４などのインターフェースを介してシステムバス１４０８に接続することができる。モニタ１４４２に加えて、他の出力周辺装置は、入力／出力インターフェース１４４０を介してコンピュータ１４０２に接続することができる、図示していないスピーカやプリンタ１４４６などの構成要素を含むことができる。
【００７２】
コンピュータ１４０２は、リモートコンピューティング装置１４４８など１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で動作することができる。一例として、リモートコンピューティング装置１４４８は、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピア装置、または他の一般のネットワークノードなどでよい。リモートコンピューティング装置１４４８は、コンピュータシステム１４０２に関連して本明細書に記載した要素および特徴の多くまたはすべてを含み得るポータブルコンピュータとして示されている。
【００７３】
コンピュータ１４０２とリモートコンピュータ１４４８との間の論理接続は、ローカルエリアネットワーク（ＬＡＮ）１４５０および一般の広域ネットワーク（ＷＡＮ）１４５２として示されている。こうしたネットワーキング環境は、オフィス、全社規模のコンピュータネットワーク、イントラネット、およびインターネットではごく一般的である。ＬＡＮネットワーキング環境に実装する場合、コンピュータ１４０２は、ネットワークインターフェースまたはアダプタ１４５４を介してローカルネットワーク１４５０に接続される。ＷＡＮネットワーキング環境に実装する場合、コンピュータ１４０２は、モデム１４５６、または広域ネットワーク１４５２を介して通信を確立する他の手段を含む。モデム１４５６は、コンピュータ１４０２の内蔵のものでも外付けのものでもよく、入力／出力インターフェース１４４０または他の適切な機構を介してシステムバス１４０８に接続することができる。示したネットワーク接続は例であり、コンピュータ１４０２と１４４８との間の通信リンクを確立する他の手段を使用することができることを理解されたい。
【００７４】
ネットワーク式環境では、コンピューティング環境１４００で示したものなど、コンピュータ１４０２に関連して示したプログラムモジュール、またはその一部をリモートメモリ記憶装置に格納することができる。一例として、リモートアプリケーションプログラム１４５８は、リモートコンピュータ１４４８のメモリ装置上に存在する。例示の目的で、アプリケーションプログラム、およびオペレーティングシステムなどの他の実行可能プログラム構成要素は、本明細書には個別のブロックとして示しているが、こうしたプログラムおよび構成要素は、様々な時にコンピュータシステム１４０２の異なる記憶構成要素に存在し、コンピュータのデータプロセッサによって実行されることを理解されたい。
【００７５】
（結論）
本発明は、構造の特徴および／または方法論的動作に固有の言語で説明しているが、添付の特許請求の範囲で定義した本発明は、必ずしも記載した特定の特徴または動作に限定されるわけではないことを理解されたい。むしろ特定の特徴および動作は、請求した本発明を実施する形式の例として開示されている。
【図面の簡単な説明】
【００７６】
【図１】様々な開発および配置の環境で行うことができるコードを書き換えるプロセス例を示す図である。
【図２】コードの書き換えを実施するのに適したコンピューティング環境の例を示す図である。
【図３】コードの書き換えを実施するのに適したコンピューティング環境の別の例を示す図である。
【図４】コードの書き換えを容易にする様々な構成要素を詳述する開発者コンピュータ、中間コンピュータ、および配置コンピュータを示すブロック図の例である。
【図５】図１のコードの書き換えのプロセス例を実施する構成要素を詳述するブロック図の例である。
【図６】コード書き換えプロセスを実施する構成要素をオペレーティングシステム構成要素の一部として組み込むことができることを示す図である。
【図７】コード書き換えプロセスを実施する構成要素をスタンドアロンモジュールおよび様々なシステムの構成要素の一部として示す図である。
【図８】コード書き換えプロセスを実施する構成要素をスタンドアロンモジュールおよび様々なシステムの構成要素の一部として示す図である。
【図９】コード単位自体内に含まれるコード書き換えプロセスを実施する構成要素を示す図である。
【図１０】図２に示す環境と一致するコード配置環境例を示す図である。
【図１１】図２に示す環境と一致するコード配置環境例を示す図である。
【図１２】アプリケーション互換リライタと呼ばれるシステムコードリライタの例を示す図である。
【図１３】コードの書き換えを実施する方法の例を示すブロック図である。
【図１４】図２および図３の環境例に示したものなど、開発者コンピュータ、中間コンピュータ、および配置コンピュータを実装するのに適したコンピューティング環境の例を示す図である。
【符号の説明】
【００７７】
１０２  コード単位
１０４  コード書き換え機能
１０６  書き換えられたコード単位
２０２  開発者コンピュータ
２０４  配置コンピュータ
２０６  ネットワーク
３０２  中間コンピュータ
３０４  企業
１４０４  処理ユニット
１４０６  システムメモリ
１４０８  システムバス
１４２５  データメディアインターフェース
１４２６  オペレーティングシステム
１４２８  アプリケーションプログラム
１４３０  プログラムモジュール
１４３２  プログラムデータ
１４３４  キーボード
１４３６  マウス
１４３８  他の装置
１４４０  Ｉ／Ｏインターフェース
１４４２  モニタ
１４４４  ビデオアダプタ
１４４６  プリンタ
１４４８  リモートコンピューティング装置
１４５２  インターネット
１４５４  ネットワークアダプタ
１４５６  モデム
１４５８  リモートアプリケーションプログラム
【図１】
2005243004.tif 000003
【図２】
2005243004.tif 000004
【図３】
2005243004.tif 000005
【図４】
2005243004.tif 000006
【図５】
2005243004.tif 000007
【図６】
2005243004.tif 000008
【図７】
2005243004.tif 000009
【図８】
2005243004.tif 000010
【図９】
2005243004.tif 000011
【図１０】
2005243004.tif 000012
【図１１】
2005243004.tif 000013
【図１２】
2005243004.tif 000014
【図１３】
2005243004.tif 000015
【図１４】
2005243004.tif 000016