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

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

概要

  • 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...

まだe17を待ってるよ。ubuntuがgentooよりもずっと便利なものを手に入れるまで、ずっとe16を使ってた。背景にはアパッチのヘリコプターがあって、プレビュー付きの仮想デスクトップを使ってた。MacOSではだけど。今でも一つの画面を使ってて、仮想デスクトップは同じように並べてる。

今はe27まで来てるよ、Waylandもサポートしてる。

これはほとんど忘れられた過去からのフラッシュバックだね。まだエンライトenmentを使ってる人がいて、さらに改善してるのが嬉しい。90年代後半から2000年代初頭にかけてエンライトenmentを使ってたけど、最初は単体で、その後Gnomeバーと一緒に使ってた。ある時からGnomeがパワーユーザーに対して敵対的になって、KDEに切り替えたんだ。それに伴ってエンライトenmentも手放して、デスクトップのカスタマイズもやめた。その頃、themes.orgも混乱してたし、初期のLinux(と*BSD)デスクトップでのデザインやテーマの実験の時代が終わった気がする。

同じく、特にコンピズ時代は、良いドライバーと加速合成が普及してからはすごかったよね。

Enlightenmentって、スクリーンショットでは良さそうに見えるだけだったんじゃない?(Win XPやそれ以前と比べて)。見た目がいいデスクトップ環境が好きだし、効果やアニメーションも好きだけど、ちゃんとできてるやつね(KDE/Plasmaはその点で本当にいい仕事してると思う)。でもEnlightenmentは? スクリーンショットにワクワクして、数時間試してみても、結局KDEやGnomeに戻っちゃった。今で言う「ライシング」ってやつ? いいスクリーンショット(今ならスクリーンキャスト)を撮るために必要で、それを投稿して、ログオフして他のもの(スマホ、ゲーム機、Windows、KDE/Gnomeなど)を使うって感じ。

残念ながら、ハングは決定論的だったね。「ああ、誰かが狩りのスリルを楽しんでるのか」と思ったよ。

残念に思うこともあるけど、幸運なことにハングは決定論的だった。

面白いことに、E16はi486や初期のPentium時代にはかなり見た目重視で重たいWM/環境だと思われてたけど、今では軽量だと見なされてるんだよね!

面白いのは、ウィンドウマネージャーのすべてをGPUでレンダリングしようとする大きな推進があったこと。だって、ウィンドウにドロップシャドウやジオメトリ変換が必要だと思ってたから…今考えると、ウィンドウマネージャーでやってることは、ソフトウェアでリアルタイムに簡単にできるし、ただCPUコアに振り分ければいいだけなんだよね。

それに、Emacsの批判者たちは「Eight Megabytes And Constant Swapping」の略だと言ってた。つまり、当時は巨大だった8MBのRAMを持つマシンでも、Emacsはメモリを全部使い切ってしまうってこと。今では、Visual Studio Codeみたいなものと比べると、ほんとに小さなプログラムだよね。

物事は変わるよね。今このコメントセクションを見るためにBraveで開いてるタブ、なんと95MBも使ってる!

オープンソースのOSのすごく評価されてない利点の一つは、好きなソフトウェアがあれば、数十年使い続けられる可能性が高いってことだよね。ウィンドウマネージャーみたいな基本的なソフトでもそう。AppleやMicrosoftの気まぐれに合わせなきゃいけないのが嫌になった。そうしないと新機能にアクセスできなくなるから。

まあ、GNOMEを使うことにしたら、ユーザーが何を望んでいるかを知っていると思ってる人たちに rugpulled されちゃうけどね。フィードバックを無視するし。

作者の安定性に関する実用的な見解が好きだった。確かに、最先端を走ることには、供給チェーン攻撃がますます一般的になってきている今、攻撃面が広がるという影響があるよね。最近の過去からの素敵で誠実な抜粋… > XZのバックドアが導入されたとき、私はDebian Sidのノートパソコンでニュースをスクロールしながら、バックグラウンドでコードをコンパイルしてたんだ。XZ Utilsにバックドアがあって、それがv5.6.0で国家の関与によって導入された可能性があることを知った。自分が最先端のディストリビューションを使っていて、頻繁にアップデートしていることを思い出して、すぐに「apt list --upgradable | grep xz-utils」を実行したよ。やっぱり、鼻からコーヒーを吹き出したせいでノートパソコンにできたシミは、かなり厄介だった。

「残念ながら、ハングは決定論的だった」いやいや、喜ぶべきだよ、決定論的なバグは一番いいバグだから。だって、テストケースがあって、いつ修正されたかが分かる方法があるからね。悲しいバグは、テストケースが見つからないやつだよ。作者がそれを軽量環境と考えているのを見て、ちょっと切ない笑いが出た。間違ってはいないけど、e、究極のブリンブリンデスクトップ環境が軽量だと見なされるまで落ちぶれたことを考えるとね。

だって、テストケースがあって、いつ修正されたかが分かる方法があるからね。それに、そこに楽しさはあるの?再現しようとする夜はどこに行った?「本当に修正できたのか、それともまだ残っているのか?」という疑念はどこに行った?つまらないよ。

作者は21歳(これ、めっちゃすごいと思う)で、彼らが赤ちゃんのときに書かれたDEを使ってるんだ。それに関しては軽量だよね。XaoSの知識が「本物のソフトウェア」プログラミングの文脈で役立つっていうのも好きだな!