patch違い

diffの次はpatch。patchを作ったのはPerlのLarry Wallさんであることは有名だ。Wikipediaから引用してみる。

1985年にはラリー・ウォールが、このdiff出力を入力として受け取ってファイルを変更するというアイデアを一般化、拡張して、別コマンドとしてpatchを作成した。

Plan9にはUNIXでいうところのpatchコマンドは存在しない。patchは、ソースリポジトリに対するパッチ管理システム(コマンド群)のことを指す。ちなみにこれらのコマンドはrcスクリプトになっている*1。

話は変わって、patchはてっきりGNUソフトウェアとして開発されているのだと思っていたけど、(もちろん間違いじゃないけど)OpenBSDでは2.0.12u8*2からブランチして、BSDライセンスで開発が進められているようだ。コミットログには「patch(1) is now free, thanks Larry!」とあり、READMEには次のように書かれている。

this version modified to fit in with the 386bsd release.
this isn't gnu software, so we're not obligated to give
you the original sources -- if you want them, get them
from prep.ai.mit.edu:pub/gnu/patch-2.0.12u8.tar.z

-- cgd

FreeBSDとかNetBSDはどうなんでしょ?
(追記:2008-08-12)id:yyamanoさんのコメントによると、OpenBSDのpatchはNetBSD由来っぽいです。FreeBSD、Mac OS XはGNU patchになってます。FreeBSDは/src/usr.bin/patchに残骸が残っているので、どこかのタイミングで乗り換えたのでしょうか。

*1:中を読めばわかるが、patch/applyスクリプトでdiff3コマンドを使っている。そして、diff3は子プロセスとしてdiffをexecする。実はこのdiff、diff3はAPE環境でビルドされたGNU diffのものだったりする。なんと。

*2:ちなみに、MacOS X 10.4のpatchのバージョンは2.5.8。