古いコードを捨てて1から書き直したからこそ続いているソフトウェア

Joel on SoftwareにNetScapeを例に、古いプログラムを捨てて1から書き直したくなるのは戦略ミスだって書いてあるけど、あのとき書き直してなかったら続いてないんではって思ったので、1から書き直して続いてるソフトウェアを挙げてみる。

Firefox

NetScapeからMozillaに移行するときに、新バージョンのリリースがなくなって、そこで致命的にシェアを落としたというのは確かにそうだと思う。
けど、そこで書き換えていなかったら、2005年のAJAXから始まるWebアプリの高度化についていけなかったと思う。
あそこで書き換えたからこそ、いまこの記事をFirefox上で書けてるんじゃなかろうか。

Windows

Windowsは、MS DOS上で動いていた3.1に継ぎ足すような形で32bit対応してWindows 95など続いていたけど、やはり無理が出ていて、ビジネス用にWindows NTを1から作り直していました。
そして一般向けにもNTを使おうと計画してたけど開発が遅れてWindows 98をアップデートしたWindows MEが出たりして、それでもWindows XPからはNTベースになって今も続いています。

macOS

MacのOSは、古いMac OSを捨ててmacOS(当時はMac OS X)に置き換えられました。開発は遅れて、いつまでもリリースされなかったのを覚えてます。当初、次期OSとしてはCoplandの開発が進んでいましたが、いつまでもリリースされなかったのはコレ。結局Coplandはキャンセルされて、NeXTを買収し、OPENSTEPをベースにMac OS Xが開発されたのでした。(その意味では1から開発されたわけではなかったので失敗例かもしれない)
それでUNIXベースになったからこそエンジニアの支持を得ているし、またそこでアーキテクチャが整理されたからiPhoneなどへの端末展開ができたんじゃないかと思います。

はてなブログ

いまこの記事が置かれてる はてなブログも古いコードを捨てて書き直されたサービスですね。
はてなダイアリーから はてなブログへの移行期に、おそらくなんらかのビジネスチャンスを失ったとは思うけど、それでも、あのときに刷新してなかったら、gooブログなどサービス終了するブログたちに名前を連ねてたかもしれない。

失敗例

業務システムは定期的に更新されてるけど、最近は失敗が目立つようになってますね。今までも失敗はあったけど、影響がでかくなってるような。

新システムに移行したらプリンが出荷できなくなったグリコ基幹システム。
グリコ純利益43%減 24年12月期決算、基幹システム障害で「プッチンプリン」など出荷停止 - 日本経済新聞

システム更新しようとしてたら隠れ仕様がたくさん出て来て訴訟問題になってるNHK受信料システム。
IBM Japan Newsroom - お知らせ

今、JavaはCで書かれているのだけど、JavaJavaで書くというのは夢で、JavaバイトコードをネイティブコンパイルするコンパイラJavaで書こうという話がありました。 で、Cで書かれた今のC2コンパイラのメンテが難しすぎるので置き換えようということでJavaで書かれたGraalコンパイラが開発されたのだけど、C2を置き換えるには至りませんでしたね。
とはいえ消えたわけじゃなく、GraalはGraalVMでネイティブコンパイルに使われていて、また標準化の流れも来ているけど。
JEP 317: Experimental Java-Based JIT Compiler

自社開発プロダクトは、移行失敗したら静かに消えていくので目立ちにくいんだろう。なんかあった気がするけど。

まとめ

Joel on Softwareには、移行のための3年というのはインターネットの世界では非常に長いと書かれていたけど、それから20年たって動きも落ち着いて、3年はそう長くないようにも見える。
AIに関わらないプロダクトだと、3年のギャップはそこまで問題にならないんでは。逆にAIに関するプロダクトは3ヵ月の遅れが致命的になってる。

ただ、見返してみると、FirefoxWindowsmacOSも、20世紀のコードを21世紀に入って捨てたもので、それ以降は安定して書き換えるという話になってないですね。
はてなブログも、2012年くらいに稼働してると思うけど、それ以降はコードベースが古いという話になっていないです。
企業システムも、メインフレームからオープンシステム、自前サーバーからクラウドのようなアーキテクチャ変更がモチベーションにあるように思います。
インターネットの世界も落ち着いて、16bitから32bit、クラウドスマホのような実行基盤の変更も起きないように見えるので、今後は新しい実行環境で動かすために1から書き直すということは減っていきそう。
創業期につくったシステムが成長が一段落したときにユースケースが変わっているので作り変える、といったことはあるのかもしれないけど。

例えばPerlで書かれている はてなブログPerl以外で書き直すということは なさそうで、新しい機能をいれるときにマイクロサービスとして切り出して別言語で実装というふうになると思う。既存部分を置き換えるにしても、同様にマイクロサービスとして切り出して置き換えていく形になりそう。

まあ、なんらか1から書き直す必然性は残るだろうけど、それは単にコードがダサいからとかではなく、今後の発展につながる形である必要があると思う。