E16の20年越しバグ、修正したのは窓マネージャより若い開発者

1999年登場のLinuxウィンドウマネージャに20年潜んでいたバグが、2026年4月、自分より年上のコードを書き換える21歳の手で消えた。原因はニュートン法の反復上限忘れ。「新しいほど良いとは限らない」と彼女は書く。

E16の20年越しバグ、修正したのは窓マネージャより若い開発者

1999年登場のLinuxウィンドウマネージャに20年潜んでいたバグが、2026年4月、自分より年上のコードを書き換える21歳の手で消えた。原因はニュートン法の反復上限忘れ。「新しいほど良いとは限らない」と彼女は書く。


20年越しのデスクトップフリーズ

カミラ・シェフチク(Kamila Szewczyk)は、LinuxウィンドウマネージャのEnlightenment E16を日常的に使っている。軽量で、設定が効いて、キーボード中心の操作に合う。彼女のブログによれば、ピーク時のメモリ使用量は24MB。現代のデスクトップ環境が数百MBから数GBを要求するご時世に、この数字は異様に見える。

ところがある日、LaTeXで組んだ講義スライドのPDFをAtrilで開いた瞬間、デスクトップ全体が固まった。TTYからX11セッションを終わらせ、再度同じPDFを開く。また固まる。決定的に再現する。

グラフィカルシェルが決定的に固まるのは、原因を突き止められる種類の不具合だ。逆に言えば、突き止められる人間がそこにいなければ、ユーザーは「Linuxは固まるもの」という諦めに追いやられる。

主題は「タイトルが長いウィンドウ」

gdbを生きたプロセスにアタッチしたシェフチクは、フォントキャッシュの中で無限ループしている箇所を特定する。問題の関数はTextstateTextFitMB。ウィンドウの装飾領域(タイトルバー)に収まらない長いファイル名を、中央を省略記号「…」で切り詰めて表示するためのコードだった。

彼女が開いていたPDFのタイトルは81文字。実物は次の通りだ。

Kickoff.pdf — Introduction to Information Theory Session 1: kickoff & first topic(情報理論入門 セッション1:キックオフと最初のトピック)

タイトルバーの横幅は291ピクセル。ここに収まるよう中央を切り詰めようとするロジックが、永遠に答えを出せずに回り続けていた。

ニュートン法に反復上限がなかった

彼女がコードを読んで突き止めた核心は、教科書に載っていそうなほど古典的だった。このアルゴリズムはニュートン法(Newton's method)の一種で、「現在の表示幅と目標幅の差」から「次に何文字削るか」を推定し、それを繰り返して最適点へ収束させる設計になっている。

ただし、ニュートン法には致命的な性質がある。初期値や関数の形次第で収束しないことがある。振動し続けたり、発散したりする。

E16の実装には、その可能性に備えた反復上限が存在しなかった

振動の証拠

シェフチクがループ内の局所変数をダンプすると、きれいに2状態を行き来していた。

nuke_count = 8 nc2 = 36 wc_len = 81 len_n = 76 nuke_count = 11 nc2 = 35 wc_len = 81 len_n = 73 nuke_count = 8 nc2 = 36 wc_len = 81 len_n = 76

8文字削って測る、11文字削って測る、また8文字削って測る。許容範囲([0, 3*cw))が狭く設定されているため、どちらの試行もゴールに入らない。そしてコードは永遠にこれを続ける

3行の防御、20年の空白

パッチ自体は驚くほど地味だ。E16 1.0.30(2024年8月10日リリース)に対する彼女の修正は、マルチバイト版とASCII版の両方に対称的に、3つの変更を入れた。

第一に、反復回数を32回で打ち切る。第二に、nuke_countが負にならないよう下限を1に固定する。第三に、cw(1文字あたりの平均ピクセル幅)がゼロになってゼロ除算を起こさないようガードする。

コードの差分は合計20行に満たない。それでも、この3行がなかったがゆえに、E16は2006年前後から2026年まで、特定の長さのタイトルを持つウィンドウが開かれるたびに凍る宿命を抱えていた。

古いコードだから悪い、というのは安直すぎる。逆に、古いコードだから長く放置された、という見方のほうが近い。E16のユーザーはもともと少数派で、しかも81文字という特殊な長さのウィンドウタイトルを開く人がさらに少なかった、というだけの話だ。バグは潜伏していただけで、ずっとそこにあった。


シェフチクの立場:「新しいほど良い」の逆張り

ドイツ在住のフルタイム学生だと自身のサイトで公言する彼女は、The Registerの取材にこう答えた。

現代のデスクトップ環境やウィンドウマネージャを構成する何百万行のコードのどこかに、同種のバグが潜んでいないはずがない。

そのうえで、彼女はブログに「誰にも求められていない哲学的な余談」という節を設け、もっと踏み込んだ主張を書いている。新しいソフトウェアは「新品のバグ」を持ってくる、と。そして、大規模言語モデルの普及でコントリビュートの敷居が下がった結果、その新品バグの生産速度はむしろ上がっているのではないか、と。

「ソフトウェアは完成しうる」という失われた前提

シェフチクの言葉でもっとも印象的なのは、完成という概念への固執だ。

彼女はThe Registerに「ソフトウェアがある時点で多かれ少なかれ完成しうる、ということを、我々は認めることに及び腰になりすぎている」と語る。E16は新バージョンが出続けているが、その内容はほぼバグ修正と小さな改良に限られる。機能の山盛り追加ではない。

「完成」を認めないソフトウェアは、完成を目指して収束するのではなく、不完成を更新し続けることになる。新機能は新しいバグを連れてくる。新しいバグはまた新機能で上書きされる。ユーザーはその不完全なサイクルに永久に付き合わされる。これは単なる懐古趣味ではなく、サイクルの外に降りる、という選択の話だ。

We keep shipping instability we don't need to ship.(我々は、出荷する必要のない不安定さを、出荷し続けている)

この一文は、ブラウザやOS、クラウドサービスのアップデート通知を毎日浴びる側の人間には、妙にしみる表現だ。

2026年4月、同じ筆者が別のバグも指摘している

彼女の警鐘が単なる精神論でないことは、同時期の別の出来事が示している。

シェフチクは2026年4月3日、fgetxattr(54321, NULL, NULL, 0);という呼び出しで前日の6.6.y LTS(長期サポート)カーネルがクラッシュすることをSNSで指摘した。本来は-1を返してerrnoにEINVALをセットするだけの呼び出しだ。

原因は、あるstableメンテナが問題修正のつもりでチェック処理ごと削ってしまったコミット。そのコミットは4月8日に差し戻されたが、明白なDoS攻撃経路が一時的に混入していたにもかかわらずCVEは割り当てられなかった。

これは新機能追加ですらない。安定版への「修正」のつもりの改変が、逆に穴を開けた事例だ。XZ Utilsバックドア事件を覚えている人なら、悪意ある改変がこっそり混ざる余地の広さに、背筋が寒くなる種類の話になる。

「新しくする」コストは誰が払うのか

ここから先は元記事の外に出る話だが、シェフチクの主張が刺さる層と刺さらない層には明確な分断がある、と私は考える。

常に最新を追う圧力がかかっているのは、セキュリティパッチを気にする企業IT管理者と、機能追加で収益を出さないといけないソフトウェアベンダー、そして新しいもの好きの消費者だ。この三者の利害が合わさって、業界全体が「毎週何かが変わる」状態を正常だと思い込んでいる。

だが、ユーザー側の視点に立てば、毎週変わるUIも、毎月変わるキーボードショートカットも、ただの認知コストでしかない。シェフチクが言う「長期サポート版に留まる」という選択は、セキュリティを切り詰める妥協ではなく、不要な変化に払う時間を節約する合理的な戦略だ。

完成を許さない文化は、完成を知っている人間の生産性を削る。E16の24MBというメモリ使用量は、単に軽いという話ではなく、「ここまでで十分だ」と誰かが決めた痕跡でもある。


21歳が1999年のコードに手を入れる意味

E16の最初のコードは1999年、Enlightenmentプロジェクト自体は1997年にカーステン・ハイツラー(Carsten Haitzler)が公開した系譜を継ぐ。シェフチクの生年は2004年。彼女は自分が生まれる前に書かれたコードを、自分の手で直して日常的に使っている。

これは現代のソフトウェア業界ではかなり珍しい光景だ。多くの開発者が、5年前のコードを「レガシー」と呼んで触りたがらない。10年前のコードなら「書き直すべき」と言う。20年前のコードなら、そもそも存在を知らない。

けれど、使い続けられているコードには、使い続けられるだけの理由がある。誰かが構文の流行を追うことを諦めて、その代わりに動き続けることを選んだからだ。

シェフチクのパッチは、20年前のコードに3行足しただけだ。ただし、その3行は「ニュートン法には上限が要る」という、誰もが知っているはずの原則を実装しただけでもある。知っているはずの原則が20年抜け落ちていた事実と、それを埋められる人間がまだ残っている事実は、表裏一体で存在している。

ソフトウェアは完成しうる。2026年にこの主張が新鮮に響くこと自体、我々が何を失いかけているかの証拠なのかもしれない。


参照元

他参照

関連記事

Read more

1メガビットDRAM商用化から40年、主役は三度入れ替わった

1メガビットDRAM商用化から40年、主役は三度入れ替わった

40年前の今日、IBMが世界で初めて1メガビットDRAMを商用機に載せた。日本勢が世界シェアの75%を押さえつつあった時代、米国が「まだ先頭にいる」と示したかった一枚のチップだった。 40年前の今日、メガビット時代が開いた 1986年4月18日、IBMが世界で初めて1メガビットのDRAMチップを商用コンピューターに搭載したと報じられた。搭載先は同社のメインフレーム IBM 3090(Sierraシリーズ)。前年に発表されたばかりのフラグシップ機だ。 当時の個人向けPCに積まれていたのは 64キロビット のメモリチップが主流で、日本勢が量産していた最先端も256キロビットにすぎなかった。一気にその4倍の容量を、1.2ミクロンプロセスで実現したのがIBMの新チップだった。 チップは米バーモント州エセックス・ジャンクションの半導体工場で作られた。IBMはそこを強調した。上級副社長のジャック・D・キューラー(Jack D. Kuehler)は、これを「我々の半導体技術における先進性の証」と位置づけた。 東京の工場ではなく、我が社のバーモント工場で作られたチップ。キューラーはその一点

Microsoft Fairwater、前倒し稼働の裏で「Microslop」と呼ばれる現実

Microsoft Fairwater、前倒し稼働の裏で「Microslop」と呼ばれる現実

Microsoft(マイクロソフト)がウィスコンシン州のAIデータセンター「Fairwater」を予定前倒しで稼働させた。しかしナデラCEOのX発表は「Microslop」と揶揄する反応に埋もれ、想定外の温度の批判にさらされている。 単一クラスタに数十万基のBlackwell、前倒し稼働の中身 Fairwaterは315エーカーの敷地に3棟を構えるAI専用施設で、2024年5月に33億ドル(約5,200億円)規模の投資として発表されたプロジェクトだ。2025年9月にはMicrosoftがさらに40億ドルの追加投資を発表し、第2棟の建設計画も走っている。サティア・ナデラ(Satya Nadella)は4月16日のX投稿で「ウィスコンシンのFairwaterが予定より早く稼働する。世界で最も強力なAIデータセンターとして、数十万基のGB200を単一シームレスクラスタに統合する」と明かした。 Our Fairwater datacenter in Wisconsin is going live, ahead of schedule. As the world’s most powe