2018-05-13

"UNIX という考え方" Mike Gancarz 著

「オペレーティングシステムは生きている、息をしているソフトウェアの生命体だ。コンピュータシステムの魂であり、神経系であり、電子とシリコンを生き物に変える。オペレーティングシステムは、コンピュータシステムに生命を吹き込む。オペレーティングシステムは、その性質上、創造者の哲学を身にまとって現れる...」

原題には、"The UNIX Philosophy." とある...
OS の参考書というものは、たいてい大量のツールの使い方について解説されるもので、なぜ UNIX なのか?と素朴な疑問を投げかけるやつはあまり見かけない。OS の選択では、周りの影響を受けやすく、慣習とも強く結びつき、宗教的ですらある。宗教ってやつは、その根源にある思想を理解せずに、信じる者は救われるの原理に働きかける。現在では、ユーザに OS の存在を意識させるべきではない!という論調も強くあり、これも世の趨勢というものか...
スマホの世界ともなると、無意識に「愛の電話」教に入信していたり、知らず知らずに「人造人間」に仕立てられていたり。実際、OS と他のソフトウェアとの境界はますます曖昧になり、カーネル自体も巨大化し、どこまでをカーネルと呼ぶべきかも議論が分かれる。
それでも、だ。たとえ境界面が曖昧になっても、やはり区別しておいた方がいい。ノイマン型の思想哲学を体現する場として... それを語る場として... そしてなにより、文芸的に楽しめる場として...

ノイマン型コンピュータを現実世界にしたのはメインフレームということになろうが、思想哲学を植え付けたのは UNIX ということになろう。MS-DOS は文句なしにパソコンの革命児であったし、MacOS にしたって視覚に訴えるユーザインターフェースで魅了した。
しかし、その思想哲学となると UNIX に負うところが大きい。デスクトップ環境のシェアでは、これだけ Windows や Mac で占められながらも、UNIX 信者は根強く生き残っており、使い勝手の良し悪しや技術的な優位性だけでは説明のつかない、実に人間社会学的な多様性を示している。
おいらの周りにもメイン環境が UNIX となると少数派になるが、サブ環境で UNIX ライクな環境を確保していない人となると皆無。Xen, KVM, VMWare などで仮想マシンを構築したり、Cygwin のようなソフトウェアで Windows 上に仮想環境を構築したり。
エンジニアが、UNIXライクな環境を手放せない理由の一つに柔軟性があろう。柔軟性が高いということは、自由度が高いということ。自由度が高いということは、それだけ知識を要するということ。おいらのような面倒臭がり屋には、ちと高級過ぎる感もある。実は能力のない人間にとって、自由ほど不自由なものはないのである。
ユーザに分かりやすく、間違いをしたくないというなら、これしかできない!ってやればいい。対して、お好きなように!ってやるのが UNIX 流。自由への道は険しい。「UNIX グル」なんて呼び名には、他とは違う!という思いが込められている。ソフトウェア魔術に憑かれた人々はギークな香りを漂わせ、憧れもする。
そして、この領域に一度踏み込むと、待ち受ける学習曲線から降りられなくなる。まるで麻薬だ!酔いどれ天の邪鬼は、このジレンマにずっと悩まされつつも、コマンドライン環境を絶対に手放せないネアンデルタール人なのである...

ところで、MS教(= SM狂)の十字架バージョンの WUuu... (Windows Update の略)にこれだけ悩まされて来たというのに、いまだにデスクトップ環境のメインが、Windows とはどういうわけだ?本書は、その答えを一言で片付けやがる。群集心理!と...
実に頭の痛い御指摘。これだけシェアが高ければ、この選択で間違うはずがないという思いがどこかにある。しかも、人間ってやつは、自分だけが不幸になることは絶対に許せないもので、みんなで不幸になる分には安心できるという奇妙な意識を持っている。
いつの時代でも、良いものが勝つとは限らない。いや、やや劣るぐらいの方が勝つケースが多い。実際、苦労して整えた環境ほど親しみがわく。出来の悪い子ほど可愛いと言うが、出来が悪過ぎれば見放される。Windows とは、そういう人間心理をうまくついた絶妙な出来栄えということは言えるのやもしれん...

1. 軍隊方式
軍隊経験のある人ならば、世の中には、「正しいやり方」「間違ったやり方」、そして「軍隊方式」があることを知っているという。正しいか間違っているかは互いに対極にあり、立ち位置も分かりやすい。だが、白とも黒ともつかないやり方では、うまくいくはずのものが、なぜか失敗したり、惨めに失敗するはずのものが、空前の成功を収めたり、まったくわけが分からん。この得体の知れない方式が、UNIX にどこか似ているというのである。
純粋主義者の言い分を信じれば、20年も前に消滅していなければならないが、評論家の厳しい非難を食べては肥え太り、寄生虫のごとく生き長らえている。滅亡しなかったからには、少なからず信者がいて、なんらかの理由があるだろう。
UNIX 方式には、「劣るほうが優れている」という逆説的な法則が染み付いているという。そして、コンピュータの設計で考慮される特性を四つ挙げている。単純さ、正しさ、一貫性、完全性の四つ。設計というものは、単純で、観察可能で、どこから見ても正しく、バグがなく、全体に一貫性があり、予想されるすべての場面に対応しているという意味で完全でなければならない。
だが、四つすべての特性を満足するのは、現実的ではなく、優先順位が重要となる。一般的に「適切な」と表現すれば、単純さを犠牲にしてでも完全性を追い求めるだろう。
しかし、UNIX 開発者は、なによりも単純さを優先するという。ここが、しばしば非難の的とされるところだ。結果的に単純さが完全性へ導くという信念であろうし、単純さを犠牲にすれば、やがて完全性も見失われていくという警鐘でもあろう...

2. UNIX 教のドグマ
UNIX 人を名乗るなら、守るべき九つの定理が提示される。

・Small is beautiful.
ヒトラーのような独裁者の思考回路は、融通のきかない巨大なオモチャがお好き。対して、自由人は小さなもので大きく動かそうとする。機動性と小回り、その積み重ねによって。これが柔軟性の根本原理と言えよう。

・一つのプログラムには一つのことをうまくやらせる。
余計な脂肪分を削り落とし、一つの仕事を確実にこなす。"Small is beautiful." とセットで考えたい。

・できるだけ早く試作。
最初から完成度の高い仕様書が書けるはずもなく、まずはプロトタイプで実験して、必要に応じて仕様をまとめていく。

・効率より移植性を優先。
スクリプト言語の持つ利点は、C言語よりも移植性が高いこと。最も効率の良い方法は、たいてい移植性に欠ける。

・数値データは ASCII フラットファイルで保存。
プログラムの移植性もさることながら、データの移植性も重要だ!いや、こちらの方を優先すべきかもしれない。データ構造で ASCII 形式を意識していれば、エディタで手軽に開ける。酔いどれネアンデルタール人にはエディタの存在しない環境なんて想像できない...

・ソフトウェアを挺子として使う。
梃子の原理... 支点をいかに自分に向けるか。これが UNIX が成功してきた理由の一つだという。優秀なプログラマが書くコードは黄金律となる。自分だけの技術だとして囲い込まず、惜しみなく披露する。オープンソース的な思想原理は、民主主義的な機構とすこぶる相性がよく、なによりも自由を重んじる。

・シェルスクリプトによって挺子の効果と移植性を高める。
スクリプト言語が流行る最大の理由は、やはりこれであろう。

・過度の対話的インターフェースを避ける。
拘束的なユーザインターフェースを避けよ!誘導尋問で導くような!拘束的なプログラムは、ユーザが人間であることを想定しているという。しかも、そこには多機能主義が忍び寄る。これだけ自動化が進めば、相手がコンピュータであることも想定すべきということ。

・すべてのプログラムをフィルタとして設計。
プログラムの本質はデータを生成することではなく、データを処理することだという。データを生成するのは人間の役割ってか。ただ、巷で騒がれる AI ともなれば、どうだろう。人間の役割を狭めているのは人間自身ということか。フィルタ機構によってパイプが機能し、標準入出力ライブラリによって、コマンドライン環境がより強力となる。
ただ、本書に登場する grep, sort, sed, awk といったコマンドは、古びた感を漂わせ、こうした機能はほとんどスクリプト言語で置き換えている。いや、ちょっとした時はいまだに使っているか。diff を重宝し、make は嫌いではないし、やはりネアンデルタール人...

これらの定理は、すべて失敗から導かれたものという見方はできるだろう。少なくともおいらは、これらを教訓にできるような失敗をすべて経験している。いや、経験させられた。組織に所属していれば、政治的な思惑で意思に反することを強いられることもしばしば。特に、モジュールの流用で痛い目に...
開発会議でまず強調されるのが、開発期間の短縮だ。思想に則っていないものを流用すれば、却ってスパゲッティ状態になる。お偉いさんの口癖は、日程を死守せよ!しかも、一旦遅れれば人海戦術を採用するのがお好きときた。そして、余計に日程をスパゲッティ状態にする。
したがって、ここに提示されるドグマは、なにも OS の開発に限ったことではないということを強調したい!
「覚えておいてほしい。ソフトウェアは、実は作るものではなく、成長していくものなのだ。成長したソフトウェアを新しいハードウェアにも移植できれば、そのソフトウェアの価値は上がる。新しいアーキテクチャは頻繁に現れる。移植性の高いソフトウェアは、すぐにその新しいアーキテクチャの長所を利用できる。そこで、試作では効率よりも移植性を優先させる。その結果、移植できるものは生き残る。」

0 コメント:

コメントを投稿