ソフトウェアのアップデートとウェブサービス運用における継続性リスクについて

Webサービスのようなプロダクトについての議論について教えて下さい - Kentaro Kuribayashi's blog で呼ばれたような気がしてたけど放置してた。でも今日、express という node.js 上で動作するメジャーなウェブアプリケーションフレームワークを作っているチームが、次世代の製品に取り組み始めたと聞いたので、メモを以下に貼ります。

------------------------------ ✂ ------------------------------

ソフトウェア技術の配布手法のトレンドは以下のように推移してきた。

ハードウェアにしても、プロプライエタリから業界標準主導なアプローチにかわってきている。

つまり、時代とともに、よりリスク回避的なアプローチになってきた。もちろん、その背景として基盤技術のコモディティ化を見逃すことはできない。

他業界の例でいうと、供給サイドに長いサプライチェーンをもつ企業では、震災以降そのリスクマネジメントに関する話題がニュースにも取り上げられるようになっている。たとえば、自動車部品の仕様共通化だったり、半導体原料の代替調達先確保だったり。これは、ソフトウェアでいうとオープンシステムの段階。

ただ、これらの業界は有体物を取引しているのであって、無体物を取引するソフトウェア産業とは異なる(取引先にリスクがあるからといって、工場を自社で抱えるのは無理)。ソフトウェアは生産(複製)コストがゼロだからオープンソースが成り立っているという点に注意すべき。

以上がOSSに関する一般論だけど、特にウェブサービス関連のミドルウェアにおいてはまだコモディティ化していない技術でも積極的にOSS化される傾向にある点が特徴的かも。この理由付けについてはKazuho's Weblog: もうひとつの知られざるオープンソース 〜 ウェブ企業のOSS戦略でも言及した。

ただ、野良犬じゃあるまいし、おいしそうなものが公開されたからって片っ端から拾い食いするのが良くないのは言うまでもない。という訳で表題の件に話は飛ぶけど、原則は、

  • より枯れた競合があるならそっちを使う
  • まだ進化中の非コモディティ製品に価値があると思うなら、その対価を払う*1
  • 必要もないのに互換性を壊すようなOSSは避ける

みたいな感じかなと思ってる。実際、Perl使ってる人たちはそういう意識が高いので、互換性を壊すような変更は嫌われる。そういう人たち以外はもうPerl使ってないのかもしれませんが。

追記: 採るべき技術的アプローチに関しては、ソフトウェアの修正コストによってかわるという議論があって、ウェブサービスの場合にはソフトウェア製品(やSI)と比べて圧倒的に修正コストが安い。ウェブサービスの場合にロケット科学的な「正しいけど大げさ」なアプローチよりも、小さく作って動かしながら修正していく手法が好まれるのにはそういう背景もあると思うけど話が長くなるのでこの辺で。

*1:サポート費用払うとか、自社プロダクトをその進化にあわせてアップデートしてくコストとか、自社でメンテナ抱えるとか