The best interface is no interface

Some light and some shadow
自分の頭の中身をそのまま書き出されたような気分。私は最近の X で走る desktop environment の発展は、仕方ないかとは思いつつも冷やかな気分で見守っている。何故なら Unix 系本来の柔軟性と versatility が失われて、Mac を通り越して Windows に近付く一方だからだ。一般的な Windows user には基本的に「application を組み合わせる」という発想がそもそも存在しない。一つの app では予め決められた事だけができて、application 同士の data の交換は同じ会社が発売してる売り物じゃないと基本的にできなくて、それ以外はまあコピペできたら万々歳だよね、なんて考えを持ってる (と断定できる) 人を私は少なからず知っている (∋両親)。コピペする data が 100 個ぐらいになったり、他の application で前処理させたければ…むしろそこまで行く前に、目の前で走ってる M$ Word でできなければ「不可能」と決めつけて諦める事が多い。*1 一言で言えば、software を自由度の低い、束縛的な道具のように考えているらしい。Desktop environment の開発者はその本来の力の失われた computer 像に迎合する事しか考えていないかのようだ。
数日前 Java course で使わされてる開発環境について keybinding を中心にぶちぶちと文句を垂れたけど、一番決定的な問題は組合せが効かない事だ。BlueJ という環境なんだけど、これの terminal *2はどうもよくわからん。単純に腐ってるだけだと思うんだけど、積極的に調べたくないので何とも言えない。だからといってそこでせめて Windows 標準 terminal と繋げて test run するようにしたいと思っても、そのためには "start→run program→cmd" とやって、"cd \some\obscure\directory\in\a\rediculously\deep\hierarchy" して "java foo.class" するしか無いような模様である *3。そうすると例外が投げられたときに source の該当行に飛んでくれるという BlueJ の機能が使えない。
XUL も、as it is ではいい idea だと思えない。Mozilla 系が閉じた*4世界を形成するだけで、Windows の proprietary な閉塞と大して変わらない。その閉じた世界の中ですら解れを無くすのは無理だろう。例えば私が使ったことがある mouse gesture はどれも mouse を grab しないので、focus が外れると button を離しているのに gesture が続くという状態になる。これ一つを解決するのは難しくないかもしれないけど、こうした解れを全て無くすことは果たして可能だろうか。
Unix の text processing が強力な理由は、grep でも正規表現でも TeX でも PerlPython など山ほどある scripting 言語ですらもない。Pipe のような combinator が柔軟だからだ。一つ一つの program がそれぞれ貧弱でも、使用者の imagination 一つで何でもできる。使いかたが作った人の発想力によって限定されない。一度思いついた組合せ方を shell script として置いておけるのはおいしいけど、本質ではない。
MVC の内 V, C をできるだけ一つの program か program 群 (shell/DE) に押しつけて、各 application は部品になる事に徹した方がずっといい方向に進めると思う。当然それが簡単だというつもりは無いけど、今盛んになりつつあるような、「誰でも使える interface *5を目指せ」なんて非現実的な目標よりは望みがありそうだ。例えば、GTK が「誰でも使える interface のために」Windows みたいな keybinding を標準にして旧来の user の神経を逆撫でした。一方、(これは誰かの意識的な判断だったわけではないけど) unix commandline shell はこれでもかという程の variant が生み出され、同じ環境を操るのに色々な interface が用意された。User はその中から自分が好きなものを選んで使っている。今流行ってるのは、まるでこれを「bash を改良して他の shell は駆逐するようなものを作ろう」と言ってるのと同じような気がする。
最初に link した blog の締めくくりにもあるように、これ以上 emacs は要らない。Emacs になるのは shell だけで十分—必要十分—だ。
…はあ。しかしこういうのを考えるにつけて自分のできること、やってることって小さいなあとつくづく。

*1:私は実際それが unwarranted だとも思わない。少なくとも多くの場合、ちょっと込み入ったことを現行の GUI 中心にやるのは reasonable effort では無理だ。

*2:標準 stream が繋がるだけのところ。Shell なんて上等なもんは無いし、signal も飛ばせない。

*3:ひょっとしたら BlueJ で terminal を変更する option があるのかも知れない。でもそれを発見する手順は brute force eyeball search 以外にあるのだろうか。

*4:ここでいう「閉じた」というのは、数学で言う演算の closure みたいな意味合い。

*5:今のところこれは「Windows しか知らない computer 音痴の健常者」という意味のようだけど、随分 hypocritical な話だと個人的には思う。