世界を動かす技術を、日本語で。

20年前のバグを修正する「Enlightenment E16」

2026年4月15日原文(iczelia.net)

概要

  • 2004年生まれの編集長が Enlightenment E16 ウィンドウマネージャを日常的に使用
  • 2006年から存在する重大バグ の修正過程を解説
  • 問題の根本は Newton法の実装ミス に起因
  • 修正内容と パッチの詳細 を紹介
  • 古いソフトウェアのメリットと サプライチェーンリスク について考察

Enlightenment E16のバグ修正記録

  • 編集長は Enlightenment E16 を愛用、テーマ性・軽量性・カスタマイズ性・美しさを評価
  • E16は 1997年にCarsten Haitzler によって開発開始、現在も一部コアユーザーに支持される
  • コードベースは古く、 技術的負債 が蓄積
  • 講義スライド作成中、特定PDFを開くと デスクトップがフリーズ するバグに遭遇
  • gdbデバッグ でimlib2のフォントキャッシュに問題があることを特定
  • フリーズは再現性が高く、 TextstateTextFitMB関数 の無限ループが原因

問題の詳細と原因

  • TextstateTextFitMB はウィンドウタイトルの「…」省略処理を担当
  • タイトルが長すぎる場合、 Newton法的な探索アルゴリズム で省略位置を決定
  • 本来収束すべきループが、 2つの状態間で永久に振動 し続ける
  • 収束判定の許容値が厳しく、 短いタイトルでは問題が発生しない
  • Newton法の イテレーション上限が未設定 だったことが主因

修正内容とパッチ

  • イテレーション回数を32回に制限、超過時は現在の結果を受け入れる
  • nuke_countを1未満にしない、異常な文字列生成を防止
  • cw(平均文字幅)を1未満にしない、ゼロ除算を防ぐ
  • マルチバイト・ASCII両ループに 対称的な修正 を適用
  • パッチ例:
    • ループをfor (int iter = 0;; iter++)に変更
    • if (iter >= 32)で強制終了条件を追加
    • if (nuke_count < 1)if (cw < 1)の防御コード挿入

再現条件

  • WM_NAMEが長いウィンドウ で本バグが再現
  • 例:「Kickoff.pdf — Introduction to Information Theory Session 1: kickoff & first topic」など
  • タイトル幅に対して文字数が多い場合に 省略アルゴリズムが発動

古いソフトウェアとサプライチェーンリスク

  • 新しいソフトウェアは新しいバグ も多く、貢献障壁が下がることで品質低下のリスク
  • 安定版カーネルでも 不注意なパッチで致命的バグ が混入した例を紹介
  • サプライチェーン攻撃 や意図的なバックドアの危険性を指摘
  • 自分で保守する古いソフトウェアは バグが減少しやすい 利点
  • 必要な機能は自分で実装、問題の責任も自分に帰結
  • サプライチェーンを持たない安心感 と、最新機能への執着のなさを強調

まとめ

  • Newton法の実装ミス が思わぬ不具合を長期放置
  • 防御的プログラミング とイテレーション制限の重要性
  • 古いソフトウェアの自己保守 の価値と、サプライチェーンリスクへの警鐘

Hackerたちの意見

VA Linuxでのカーステン・ハイツラー(Raster)との時間は、まるで一つのシットコムみたいだったな。彼に投げつけた罵倒の量は半端なかったし、ある時は「ゼルク侮辱ジェネレーター」を作ろうかって話も出たくらい。環境はすごく好きだったけど、リソースの使い方が軽薄だって定期的に文句言ってた。とはいえ、全体的にはかなり先を行ってたよ。

RasterがVAIOを持ってた時のかっこよさ、今でも覚えてるよ。これが未来だと思った!透明なetermやセンスのいい背景があちこちにあった。

Eが今や、現代のRAMチップを悩ませるメインストリーム環境と比べて、超軽量システムになったのは、なんとも皮肉だね。

面白い投稿だね!20代の若者が自分が生まれる前のX11ウィンドウマネージャのバグを見つけて修正してるのを見ると、希望が持てるよ。ただ、編集ミスがあったみたいで、大きな(最初の)コードブロックのループヘッダーが「for (i = 0; i」となってるけど、テキストやパッチの更新版では「for (;;)」になってるのがちょっと混乱した。

そのコードの直前の記事にあったけど、ループは特に興味深いね。要約すると:

まだエンライトenmentを使ってる人がいるんだね。最後に使ったのは90年代で、アフターステップに移行する前だった。その後すぐにウィンドウメーカーに行ったけど。GNU/Linuxの使用に関しては、他の環境ではCDEだったな。エンライトenmentやTizenからは特に大きなものは出てこなかったみたい。

面白いね、私もEからウィンドウメーカーに切り替えた一人だった。あの時はNeXTStepに似てるなんて全然知らなかったけど、すごく良かった。その後、KDE 3に移行したけど、当時は大きなマイルストーンだったと思う。GNOMEはその時、技術的には優れてたけどね。で、その後すぐにLinuxのデスクトップはあまり進展がないことに気づいて、macOS(当時はOS X)に切り替えたんだ。

Enlightenmentは、かなり変わった価値提案を持ってたよね。最初は「fvwm-xpm」と初期の「E」プロトタイプがあって、グラフィック的にクレイジーで、形状のあるウィンドウに重きを置いてた。あの変なスチームパンクっぽいテーマは、今でも他にはないよね。多分、理由があるんだろうけど。その後、視覚的にはかなりおとなしくなって、スコープも creepy(独自のグラフィックライブラリなど)になった。最初は、Xにアミガに影響を受けたデザインセンスが出てくることを期待してたけど(基本的にはもっと「アートっぽい」MUI)、それは実現しなかったね。

俺もWindowMakerの大ファンだったよ。シンプルで、効果的で、邪魔にならないスタイリッシュさがあった。縦型タスクバーも使えたし、Win11にそれを奪われるまでWindowsでもずっと使ってた。だって、Macがセンスの基準だから、みんなそれを真似しなきゃいけないんだよね。

Moksha(e17のフォーク)は、Bodhi Linuxのメインデスクトップで、これは非公式のUbuntuベースのディストロだよ。: https://www.bodhilinux.com/moksha-desktop/ https://github.com/JeffHoogland/moksha

まだ毎年交互にインストールして遊んでるよ。自分のコアに忠実でいてくれてるのが本当にありがたい。今はWaylandでも動くけど、eファウンデーションライブラリを使ってるのは変わらない。1998/1999年のデスクトップのスクリーンショットがあればなぁ。Freshmeatからクールなソフトをダウンロードして、Slashdot(オタク向けのニュース...大事なこと)を見て何が起こってるかチェックしてた。あの頃IRCにハマってたらよかったけど、私はICQからAIMのチャッターだったから。あの時代が戻ってきてほしいな。

AV LinuxはEnlightenment 0.27.1を使ってるよ。そのディストリビューションのクリエイターは、他のスレッドで言及されているMoksha 0.4.2をベースにしたバージョンも提供してる。https://www.bandshed.net/ 最新バージョンリリースのお知らせ: https://www.bandshed.net/2026/03/01/av-linux-and-mx-moksha-2... 古いリリースのお知らせからの詳細も少し: 「両方のISOはMX Linux 25/Debian TrixieベースでLiquorixカーネルを使用している。」 https://www.bandshed.net/2025/11/27/av-linux-and-mx-moksha-2...

Hacker Newsで議論の続きを見る