小さなソフトウェアパッチは大きなソフトウェアをどのように修正しますか?

StackOverflow https://stackoverflow.com/questions/145236

  •  02-07-2019
  •  | 
  •  

質問

私がいつも気になっていたことの1つは、ソフトウェアパッチの仕組みです。多くのソフトウェアは、古いバージョンの上にインストールする必要がある新しいバージョンをバイナリでリリースしているようですが、一部のソフトウェア(特にWindowsなどのオペレーティングシステム)は、バグを修正したり既存の機能を追加したりする非常に小さなパッチをリリースできるようですソフトウェア。

ほとんどの場合、私が見るパッチは、アプリケーション全体、またはアプリケーション内で使用される小さなファイルでさえも置き換えることはできません。私には、実際のバイナリが変更されているようです。

これらの種類のパッチは実際にどのように実装されていますか?これがどのように機能するかを説明するリソースを誰かに教えてもらえますか?または、アプリケーションのリンクライブラリなどの小さなコンポーネントを置き換えるのと同じくらい簡単ですか?

おそらくこの方法で展開する必要はないでしょうが、どのように機能するのか知りたいです。パッチが実際にバイナリファイルの一部のみを変更できるという理解で正しい場合、これは.NETで実行できますか?それが私が最もよく知っているフレームワークであり、それがどのように機能するかを理解したいので、私はそれを学びたいです。

役に立ちましたか?

解決

これは通常、バイナリdiffアルゴリズムを使用して実装されます。最新のバージョンと新しいコードを比較します。ユーザーが最新バージョンを実行している場合は、差分を適用するだけです。コンパイルされたコードは通常、バージョン間でかなり似ているため、ソフトウェアに対して特にうまく機能します。もちろん、ユーザーが最新バージョンを実行していない場合は、とにかくすべてをダウンロードする必要があります。


一般的なバイナリdiffアルゴリズムの実装がいくつかあります: bsdiff および xdelta は、優れたオープンソース実装です。 .NETの実装は見つかりませんが、問題のアルゴリズムはプラットフォームに依存しないため、プロジェクトのように感じても移植は難しくありません。

scroll top