枯れた技術ってほんとに枯れてますか?保守できますか?

「枯れた技術」と言われたとき、それが安定していて、保守しやすいものであるという認識が多いように観測されます(観測範囲問題かもしれない)。

この記事でいう技術は「ソフトウェア技術」に特化した内容です。ソフトウェア技術はまだこの世に生まれでてから100年も経過してないような若すぎる産業であり、脆弱性など、ソフトウェア技術に固有の事情があります。

でもそれってほんとですか?事実ですか?正しくそのことを検証しましたか?

あなたが枯れてないと認識している技術よりも保守しやすいと思っているのは、ただの思いこみではないですか

昨日軽い気持ちで書いた僕のフロントエンド技術に対するスタンスという記事のようにフロントエンド系のバズる記事を書くとだいたい「保守とか考えてるの?」みたいなコメントがつくことがありますが、では、バックエンド、組み込み、機械学習、インフラを見て、枯れた技術ってほんとに枯れてるの?保守しやすいの?という問題提起をします。

(ちなみに記事を書くための工数、手間で言えば、他の記事の方が遥かにかかっていて、モブプロのやり方なんかは、昨日の記事よりは遥かに工数も手間もかかってたりします…。まぁnoteだと階層がフラットになるため、そもそもがnoteに向いてないタイプの記事だなーと思ったので現在Qiitaにリライト中です。)

枯れた技術とは

さて、この「枯れた技術」でぐぐって最初の方にヒットするこの記事の定義を参照してみましょう。 

ソフトウェアやハードウェアが発売・公開されてから長期間が経過し、多くの人の手によって不具合などが検証・修正され、利用に当たっての注意点などの情報が大量に蓄積されている状態のこと。安定した導入・運用ができるという良い意味で使われる
以前から存在している技術で、「古臭い」としか言いようがない。しかし、長年磨き上げられた安定性も捨てがたく、それなりのスキルも発揮する。さらには、いまさらそれを上回るだけの新製品を開発するコストをかけるより、なじんだ腕で“枯れた技術”を駆使した方がましだ、ともいえる。

・ 長期間の検証や修正が行われている
・ ナレッジが蓄積されている
・ 安定した導入・運用ができる

という3点に集約すると考えられます。

それぞれ本当なのか見ていきましょう。

長期間の検証や修正が行われている

検証や修正が行われると何が嬉しいのでしょうか?「検証や修正されている」ということそのものには価値がありません

技術の利用者にとっては「長期間の検証や修正が行われている」こと自体は求めるものではなく、その先にあるものが求めているものです。

検証や修正の結果として、問題が生じない、対処できるようになっている、ナレッジが蓄積されているエビデンスが溜まってるという事実があるから交渉事の材料にできるなどがあるはずです。

ジャパニーズトラディッショナルカンパニーでは、一番最後の「エビデンスが溜まってるという事実があるから交渉事の材料にできる」ことを重視していることがあるかもしれませんが、この記事では取り扱う範疇ではありません。

この記事の目的は、枯れた技術は本当に保守しやすいか?が焦点ですから。

なので、本当に重要なことは、「ナレッジの蓄積」と「安定した運用と導入」に帰結するはずですが、ここでは「長期間の検証や修正」についてもう少し掘り下げてみましょう。

実際は、筆者も判断基準として長期間というのはある程度のバロメータとして使うことがあります。ただしそれは決して無条件で採用できる判断基準にはならないと考えています。

長期間メンテされ続けているけど、脆弱性が指摘されるソフトウェアもあります。jQueryという枯れたライブラリの脆弱性により、先日AngularJS(AngularJS1.x系)の最新版1.8がリリースされました。

知らない方に向けていうとバージョン2.0以後は設計などに更新が入り、別のライフステージを持ったAngularという、ほぼ同名だけど別のプロダクトになりました。

AngularJSの利用者は未だに多く、2.0以後に移行してないプロダクトはまだまだ残っています。2014年〜2015年頃に作られたプロダクトで採用されている技術です。jQueryという枯れた技術を屋台骨に取り込んだフレームワークです。

2.0以後であるAngularに移行できない理由はこの記事の趣旨とは異なるため省略しますが、1.x系、つまりAngularJSはもう保守運用のみされていて、その保守も2021年6月で終わることが確定しています。

他にも事例はいくつもあります。Java/PHPで使われているあなたもよくご存知の枯れたフレームワークの脆弱性が指摘される事例も恒例行事です。

つまり、メンテナンスされている期間が長くても脆弱性が生じることは、普通にありえます。

OSSの場合は、ソースコードを読むことで検証・利用している人も多いでしょう。そのため脆弱性は減る傾向にあるはずですが、利用者が多くとても有名で枯れたOSS技術の、新たな脆弱性が見つかることは珍しくないということは、前述のとおりです。

それでは、プロプラなら安全でしょうか?

それは明確にNoであり、OSSもプロプラも、変わらずにアタックを受け続けて、WindowsやMacの危険度の高いゼロデイアタックが出ることも珍しい話ではありません

WindowsやMacを開発しているエンジニアは間違いなく世界でもトップクラスのエンジニアです。世界最高峰であるGAMFAのエンジニアですら、見逃すような脆弱性は日々発見され続けています。古い枯れたプロダクトの脆弱性が見つかることも珍しくありません

どんなに検証者の質が良くても、問題点は決してすべてあぶり出されるわけではありません。

これらを総合すると脆弱性の観点でいうなら、どんなにすごい人達が長期間検証や修正しても、生じる脆弱性があります

このため、ライブラリ・フレームワーク・ミドルウェア・OSなどのアップデートはとても重要です。なぜMicrosoft社はWindows7を捨てたのか?Windows10はしつこいくらいにアップデートしろと告知してくるのか?それらは脆弱性対策の問題です。

世界最高峰の頭脳で、長期間検証・修正しても脆弱性は生じる
脆弱性への対策は、アップデートしかない

ナレッジが蓄積されている

枯れた技術のナレッジは本当に蓄積されているでしょうか?筆者は部分的にしかそれは事実ではないと考えています。

ある技術が当時検討・検証したことについては十分なナレッジが蓄積されているかもしれませんが、現代にそれは果たして有効なのでしょうか?様々な技術・政治的理由や組み合わせにより、現代では無効になっている事例もあります。

あなたの使っているフレームワークやライブラリで、最新プロトコルに対応できますか?脆弱性が理由で古いプロトコルが「利用終了」「禁止」になったとき、新しいプロトコルに対応していなければ、その時点で、その枯れたライブラリはゴミになります。

自分が使っているライブラリは、プロトコルの変更と無縁だという場合でおも、そのライブラリが依存する別のソフトウェアでは、プロトコル変更の影響を受けているかもしれません。設計の変更が必要かもしれません。それらの情報は果たして、今入手可能でしょうか?

また、枯れた技術のナレッジは、今でも有効だとして、到達可能性はどうでしょうか?たとえばGoogle検索から、昔参照した情報に到達できますか?サーバー上から消えていませんか?Google検索では別の情報がヒットしてしまって、本来探していたものに到達できないなんてことも珍しくはありません。

当時のナレッジは、現代でも有効とは限らない
当時のナレッジに、今でも到達可能とは限らない

これが、枯れていない技術であれば、現在進行系でナレッジが増え続けているため、到達可能性の問題は少なくなります。

とても皮肉なことに枯れた技術の方が情報に到達できないということもあるということです

安定した導入・運用ができる

安定した導入・運用のためには、ナレッジや保守が必須です。前述の通り、枯れた技術のナレッジが十分ではない可能性があります。

今導入可能なバージョンのOS・ミドルウェアその他と組み合わせたときのナレッジはありますか?

今導入して、そのライブラリなどは全部、脆弱性も含めた保守は適切にされ続けていますか?

あとは忘れてはいけないこととして、導入・運用するためには人が必要です。その枯れた技術を扱える人材は、転職市場などから継続的に入ってきますか?

COBOLは世界でも有名な枯れた技術です。市場もとても大きく、採用企業も大きい技術です。でも常に人材不足とされています。

また、枯れた技術で、ビジネスシーンの変化に対応できますか?リーマンショックを超える経済の地殻変動に対応するために必要な要件に、すぐさま応じることはできますか?

現在導入可能なナレッジが残っているか?
それに必要な依存性を含めすべてのライブラリなどは、今でも正しく保守運用されていますか?
それを扱える人材は確保できますか?
ビジネスシーンの変化に対応可能ですか?

まとめ

あなたが枯れたと思っているその技術は、保守運用が適切に可能ですか?現代に通用するナレッジに到達可能ですか?人員を確保できますか?

もちろん、個々の事例によって変わるでしょう。今回述べた視点で合格の技術もあれば、不合格な技術もあるでしょう。

筆者としては枯れた技術だからといってナレッジもあり問題なく保守・運用できるとは限らないという主張をしました。

もちろん新しい技術だからといって、ナレッジが十分揃ってなくて、保守運用に問題があるケースもあるでしょうが、枯れているからと言ってそれができるとは限りません

新しい技術でも枯れた技術でも、今のビジネス状況にマッチしてるか?問題なく保守・運用できるか?は、組み合わせを含めて多角的に検討しなければいけないことに違いありません

思考停止やめませんか?

この記事が気に入ったらサポートをしてみませんか?