Re オープンソースソフトウェアのコードの進化とリリースに関する考察

オープンソースソフトウェア(クローズドでももちろんそうでしょうが)を書いているとよくわかるのだが、コードというものは常に進化し続ける。関数の引数が変わったり、内部動作が微妙に変わったり。そう言った変更自体はバグの修正やそれまで想定していなかったユースケースをカバーするという命題においては常に推奨されるべき事ではある。そして、その進化し続けるコードに古いバージョンとの互換性を100%求めるのは現実的ではない。

ただしそれを踏まえた上で、我々オープンソースプログラマーは最大限自分がリリースしているソフトウェアに依存しているソフトウェアへの突然の変更を強いる事を避けなくてはいけない。これが私の主張。

http://mt.endeworks.jp/d-6/2008/02/post-1230.html

たぶんこの手の話題については、バイナリ互換性が問題になる人たちの方が先を行っていると思う。

マイクロソフトAPI命名 (〜Ex て関数が多いw) とか、引数の struct を拡張可能にするとか、Side by Side DLL の考え方だとか、いろいろ参考になるんじゃないかな。

参考: Google: DLL hell

引数の渡し方については、Perl モジュール作者は「引数は必ずハッシュ渡し」にするだけで、だいぶ後方互換性確保のコストが下がると思う。引数の「順序」に依存するのが危険なのは、面倒なので繰り返さないけれど。