社会保障ゾンビについて...イーロンの十代の若者たちは COBOL に馴染みがないだけでしょうか?

社会保障ゾンビについて...イーロンの十代の若者たちは COBOL に馴染みがないだけでしょうか?

社会保障ゾンビ先月、ニュースサイトを少しでも見たことがあれば、イーロン・マスクと彼の率いる10代のプログラマー軍団が連邦政府のITシステムを徹底的に調べ上げ、無駄を探し回っていることをご存知でしょう。連邦政府ほどの規模の規模システムには、必ずと言っていいほど無駄が存在するのは自明の理です。それがどれほど広範囲に及んでいるのか、どのように特定すべきか、どのように削減すべきかなどは、主に政治的な問題であり、ここでは触れません。

しかし、注目すべき点が一つあります。右の表です。これは社会保障給付を受けている人々の統計だとされていますが、これを見ると、120歳以上の何百万人もの人々が小切手をもらっているようです。これは社会保障局の無能さと受給者側の不正行為が組み合わさった結果に他なりません…そうですよね?

イーロンはこれについてツイートした

社会保障データベースによると、死亡フィールドが FALSE に設定されている各年齢層の人数は次のとおりです。

別の可能性もあります。マスク氏の天才少年たちは、これまで COBOL を扱ったことがないのです。

古き良きデータベース

連邦政府には、コンピュータ黎明期にまで遡るシステムが数多く存在します。数百万行に及ぶCOBOLコードが今も使われているという話を耳にすることがありますが、その大部分は連邦政府および州政府のシステムです。メインフレームはワシントンD.C.で健在であり、2025年にそのプラットフォームとその関連技術を用いて新たなグリーンフィールドプロジェクトを開始する人はいないでしょうが、これらのシステムは今も稼働し続けています。「壊れていなければ」という言葉は、数十年にわたるバグの除去を経て十分に理解されている複雑なITシステムにこそ当てはまります。

Y2K(大量のCOBOLコードの修正を含む)から間もなく、ISO 8601:2004がリリースされました。これは既存の慣例を体系化し、1875年5月20日を原点(エポック)としました。つまり、すべての日付は1875年から始まるのです。

エポック

1875 年 5 月 20 日は奇妙なゼロ ポイントのように見えるかもしれませんが、すべてのシステムにはゼロ ポイントがあります

  • Linux/Unix の「エポック」は 1970 年 1 月 1 日です。内部的には、この記事の執筆時点での「エポックからの秒数」(1,740,088,474)を追跡しています。
  • .NETでは西暦1年1月1日です
  • UUID バージョン 1 では、グレゴリオ暦の改革の日付である 1582 年 10 月 15 日を使用します。
  • 米国の一部の医療環境で使用されているプログラミング システムである MUMPS では、1840 年 12 月 31 日が使用されます。
  • DOS 時代のファイルシステム (FAT16、FAT32 など) では、1980 年 1 月 1 日が使用されます。

これが行われる理由は、コンピュータが日付として「1976年2月16日」という日付ではなく、特定の時点からの経過時間を表す単一の数値(整数)を保存するためです。Unixでは、これは32ビット整数(「 Y2038問題」の原因となった)として有名でしたが、現在では一般的に64ビット整数が使用され、その一部の桁は1秒未満の精度を実現するために使用されています。

コボル

COBOLには特定の日付型やフォーマットはありません。日付を数値または英数字文字列(例:YYYYMMDDの場合はPIC 9(8))として保存するための関数(USAGE DISPLAY)がいくつか用意されています。日付の操作には通常、カスタムコードまたはサードパーティ製ライブラリが必要です。これがY2K問題が大きな問題となった理由です。16KBのRAMを搭載したシステムの時代では、日付がYYMMDD形式で保存されることがよくあり、オーバーフローのリスクがありました。

Y2K問題以降、ほとんどのシステムはISO 8601規格、特に2004年版を採用しました。そして、これらのシステムの多くは、欠落した日付をゼロ点と解釈している可能性が高いです。その結果、1875年という日付と150歳の人物が出現することになります。

では、こんな状況を想像してみてください。何らかの理由で死亡フィールドがnullになっているとします(何億人もの人々の話で、その多くは紙とペンで記録されていた時代から記録されていることを忘れないでください)。誰かがデータベースにクエリを実行します。おそらくSQLではなく、メインフレームのデータセットです。何が起こっているのか理解していないため、何らかの「死亡 - 誕生 = 寿命」というロジックをプログラムしますが、死亡日がnullになっているため、エラーが発生します。もしあなたが2025年に生まれ、1875年に亡くなった場合、それは-150歳ですが、おそらくあなたのコードはそれが正の数であると想定しているのでしょう。

あるいは、何らかの理由で生年月日がnullになっていると想像してみてください。結果は同じです。

これで全てが説明できるわけではありませんが、 COBOL界隈ではこの点について議論が交わされています。25年前のY2K問題で私たちが苦労したおかげで、こうした問題は解決できたはずだと思いがちですが、技術的負債は驚くほど制御が難しい厄介な存在です。

おすすめの記事