3 ポイント 投稿者 GN⁺ 2023-12-29 | 1件のコメント | WhatsAppで共有

冷たい血を持つソフトウェア

  • 2004年、コンピュータサイエンス専攻だった筆者が自然史の講義を受けていたとき、教授が冷凍されたミシシッピアカミミガメの赤ちゃんを見せた。
  • このカメは、冷凍状態でも生存できる数少ない種のひとつで、低温下で代謝を調整できる冷血動物である。
  • 講義のあいだに、カメがゆっくりと動き出して命を取り戻す様子を観察し、冷血動物への理解を深めた。

ソフトウェアプロジェクトの二分法

  • ソフトウェアプロジェクトも、温血プロジェクトと冷血プロジェクトに分けられる。
  • 温血プロジェクトは継続的な活動を必要とし、活動が止まると問題が生じる。
  • 冷血プロジェクトは活動がまばらでも、再開すると以前の状態からすぐに始められる。

ブログの冷血ソフトウェア

  • 筆者のブログを動かしているソフトウェアは、冷血ソフトウェアである。
  • 12年前に始まったこのプロジェクトはシンプルで、外部サービスに依存せず、すべての依存関係がプロジェクトのリポジトリに含まれている。
  • いくつかの小さな改善を除けば修正なしで問題なく動作しており、今後12年も動き続けると期待されている。

GN⁺の見解

  • 冷血ソフトウェアという概念は、プロジェクトの持続可能性と保守性に重要な影響を与える。
  • この記事は、技術スタックの選択がプロジェクトの寿命にどう影響するかについての洞察を与える。
  • 筆者の経験は、ソフトウェア開発者にとって長期的に安定したシステムを構築する方法への教訓となる。

1件のコメント

 
GN⁺ 2023-12-29
Hacker Newsの意見
  • Node および JavaScript エコシステムには Express Web フレームワークがある。現在の主要バージョンである 4.x.x ブランチは10年以上前のもので、毎週1700万回以上ダウンロードされている。いくつか機能不足があり、性能も最高ではないが、高速で安定した開発を可能にし、API変更やセキュリティパッチ不足を心配せずに長期計画を立てられるため、多くの開発者に好まれている。Go言語は広い標準ライブラリと互換性の約束のおかげで、10年以上前のプログラムも実行できる、さらに優れた安定性を提供する。

  • ソフトウェアがアップデートなしでもうまく動作する場合、それは最初から正しく作られていたということだ。個人的に使うソフトウェアは好みが大きく変わらないため、比較的簡単である。しかし、他人が使うソフトウェアを書くときは要件が異なることがあり、予想外の問題が発生することもある。たとえば、大きなファイルの処理時にクラッシュが発生し、それを修正するためにソフトウェアの半分を書き直さなければならないかもしれない。これは、ソフトウェアが頻繁に変更されないからといって必ずしもより良いとは限らない、という主張への最大の反論である。

  • Pythonは継続的に互換性を壊す変更があるため、良い例ではない。一方で Go や Java は10年前のコードも現代のツールで問題なく動く。Perl は30年前のコードでも依然としてよく動く、さらに良い例である。

  • IBM メインフレーム(z/OS)の仕事をしている。IBM は後方互換性の維持という点で最も優れている。Microsoft(Windows)が2番目で、Linux(カーネル)の ABI が3番目である。その他の多くのシステムは、互換性維持に時間をかけたがらない OSS でよく見られる問題を抱えている。

  • 依存関係はアプリを「温血」にし得るが、Docker やコンテナ化はこうした問題をある程度解決できる。プロジェクトで使うライブラリを選ぶ際には、「冷血」なライブラリかどうかを十分に調べて選んでいる。

  • 多くのエンジニアは GitHub でライブラリを探すとき、最後のコミット時刻を確認する。最近コミットされているほど、よりよくサポートされていると考える。しかし、長期間安定して保守され、バグのないアーカイブ済みプロジェクトを見つけるのは、まるで中古店で隠れた宝石を見つけるようなものだ。

  • 自分のサイドプロジェクトを保守している。12〜13年前に始め、PHP、Laravel、Symfony で書き直してきた。プロジェクトを長期にわたって維持する方法を学ぶうえで非常に価値があった。たとえば、Vagrant から Docker へ、Vue + Axios + Webpack などから Htmx へと簡素化する機会を探してきた。最近では PHP 8.2 と Symfony 7 にアップグレードし、ChatGPT ベースの機能も統合した。

  • ここ数年のモバイルアプリが数時間のパッチ作業を必要とすることにうんざりしている。筆者は自分の静的サイトジェネレーターを「冷血」と表現しており、Python 2 で動作するが、Python 2 のインストールはますます難しくなっている。

  • 1994〜95年に書いた SDK が、2017年に会社を去るまで使われていた。ANSI C で書かれており、PHP(5)で書いたものも PHP 8.2 で問題なく動作する。しかし、こうしたものは退屈で話題性指数が低い。

  • 記事で言及されていること以外にも、本質的に安全な脅威モデルを持つことが重要だ。たとえば、Web サイト全体は攻撃者やスパムボットなどに継続的に対処しなければならないため、本質的に「温血」である。一方、Tiddlywiki のような静的ページは Web に置く必要がなく、ブラウザが非常に安定したプラットフォームであるため、はるかに良い。