RandomThoughts

RandomThoughts

【書籍】TheArtOfUnixProgramming

Contents:
  1. 序文
  2. オープンソースとUnix Culture
  3. 歴史の話がなかなか面白い
  4. 4章のModularityは読む価値を感じない
  5. 5章のTextualityは今となっては常識に感じられる
    1. Data File Metaformatsはなかなか面白い
    2. Application Protocolとかはどうでもいいな
  6. 6章、Transparency
  7. 7章、Multiprogramming
  8. 8章、Minilanguage
    1. Designing Minilanguageはなかなか良かった

The Art of Unix Programming

なんとなくUnixの哲学的な本を読みたいなぁ、と思ってデジタルで入手可能なものを探していてこの本に行き着く。

序文

古い本かと思ったが、Linuxでブラウザを立ち上げながら読んでね、的な内容で、Javaとかも出てくるっぽい。 思ったよりも新しい本だな。

トップページを見ると1999年に書きはじめて2003年に完成したものっぽい。

オープンソースとUnix Culture

What Unix Gets Right のあたりに、こんにちではApacheやMozillaなどが生まれて、Unixの伝統をさらなる高みに!みたいな事が書いてあるが、 現代だとまただいぶ状況が変わっている気がするよなぁ。

近年のクラウド業者にタダ乗りを嫌ってライセンスをclosedなものに変えていき、Amazonが対抗してforkするというのはしばしば見られる。 双方がUnixの伝統に影響をうけているのは間違いないが、以前ほど連続したCultureという感じはしないよなぁ。 この本が最初に書かれた1999年と大きく違うところやねぇ。

歴史の話がなかなか面白い

80年代後半から90年代前半にかけて、正しく時代を読んだインテルとMicrosoftに対して、 ただディスるだけでパーソナルコンピューティング市場を無視するって全然駄目じゃん…とか思ってしまうのだが、 当時は本当にこういう感じだったんだろうなぁ。

286に対してUnixの亜種を作って必要なツールを揃えたら全然違ったと思うし、 今の感覚でいけば普通にやれば出来る範囲の作業量だと思うんだが、誰もやろうともしなかった、 というのは、本当にパーソナルコンピューティングの市場の重要性を全然気づいていなかったんだろうなぁ。 ジョブズ本で見るBillGのバランス感覚と先見性と比べるとびっくりするほど時代を見ていないよなぁ。 ただ見えてない方がたぶん普通で、本当に一部の人だけが時代を見て動いていたんだろう。 でも企業がなんか解決してくれるだろう、と誰も何もしないって、今の感覚からするとびっくりだよな。 ベンチャー企業が溢れててやる事を探し続けてる今とは偉い違いだ。

90年代後半はもうちょっとオープンソース勢みたいなのは戦略を持って動いている感じがあったよな。 今から思えばオープンソースの逆襲の時期だったんだろうね。 現代はまたそこから先に進んで違う何かになってしまった気はするが。

それと意外に思う事として、いわゆるPC-Unixって1992年とかが最初というのは、随分と最近なんだなぁ、という事。 UNIXというと80年代にいろいろ発展があったものという認識だったのだが。 自分が初めてLinuxをインストールした1996年というのは、まぁまぁ黎明期だったんだな〜。 95年のApacheがキラーアプリだった、って自分が入れたのはその翌年じゃん!

自分が入ってきた時にはもうBSD裁判は終わっていて、FreeBSDは十分に良い物でLinuxとどっちを選ぶか悩むようなくらい主要なプレーヤーだったが(実際自分もノートPCにはFreeBSDを入れた)。 当時の記憶はそれなりにあるけれど、当時自分が思っていたよりもずっとまだ出来たばっかりだったんだなぁ。

次の節でRMSの話が出てくるが、RMSは80年代にちゃんと時代を見た動きをしているな。 しかもAppleとかMSよりももっと先の未来を見て動いていた感じがする。2000年代の中盤あたりに花開く感じだよなぁ。 オープンソースにRMSの影響がものすごく大きいのは疑いようが無いが、 一方で最近はGPLよりApache 2.0やMITライセンスのものの方が多いんじゃないか、という気もする。 RMSを教祖に皆が同じ宗派だという訳でも無いよなぁ。 実際自分はGPLで物を出してはいない。

そのあとの説明を読んでいても、やはり自分のルーツはBSD側だよなぁ。 今はもう使ってないが、それでも自分はFreeBSDで育った、という気がする。

4章のModularityは読む価値を感じない

関数コールのコストが高いと思って大きな関数を書きたがらない、とか完全にただの昔話で現在の問題を語っているとは思えない。 現代に至るなにかを知りたいと思って読んでいるのだが、この辺は全く現代的な視点からの価値は感じないなぁ。 というか2003年の時点でもいろいろ古すぎる気がするんだが…

C言語の話も現代に通じるものになりそこなっている気がする。 Cのライバルと比べてCがどう良かったのか、という説明が一般的に正しかったから、と言いすぎていて、現代の読者がその後のSwiftとかKotlinとかRustと比較してどう見えるか、 というのを考える余地が無い。

ブラウザの話もお前絶対ブラウザ実装した事無いだろ、というようなレンダリングエンジン周辺の書き方で、 余計な事言わずにUnixの話をすればいいのに…と思ってしまう。

現代のクラウド周りのUnixの隆盛の根底にあるものを学びたいと思って読んでいるのだが、どうも考察が薄っぺらい気がするよなぁ、この本。 単にその時点で成功したものは正しかったからだ、と言ってしまっているので、そのあとに出てきたものとの違いを考える材料を提供出来ていない。 もっとUnixの特殊さを知りたいのに、一般的な正しさを誤って強調してしまっているので、 よりその正しさを備えている現代的なその他のものとの比較が出来なくなってしまっている。

5章のTextualityは今となっては常識に感じられる

効率の為に小さなデータをバイナリフォーマットにするな、テキストにしとけ、 という主張は、全くもって正しいと思う。 ただデータの量的にテキストじゃ厳しいケースも現代のプログラムでは良くあって、 本書で書かれているほど特殊なケースでも無くなっているよなぁ。

ただなるべくテキストに出来るものはテキストにしておけ、パスワードファイルとかを全部テキストファイルにしていたのはUnixのセンスの良さだ、というのは全くそのとおりに思う。 全部テキストにしたのでテキスト関連のツールが発展した、ってのはそのとおりだよなぁ。 自分たちが率先して使うって大切だよね。

Data File Metaformatsはなかなか面白い

良く使われるテキストのフォーマットについての紹介とかの話だが、なかなか趣深い。 既存のパーサーを使わずに構造をどうにかするとか今から見るとうんざりではあるが、 なるべくローテクでどうにかしよう、というのはUnixの哲学ではあるよな。

一方でjsonみたいなのがあってちゃんと使えるパーサーがあれば片付く問題を複雑にしているという側面もあり、 protoみたいなのが流行るのもこうした考えの限界から来ていたように思うので、 今だとそうした事の長所短所を見て考えようという感じになってしまうよな。

Application Protocolとかはどうでもいいな

だらだらとweb関連のRFCとかが紹介されているが、何も学ぶ所が無い。 ここはスキップで良かったなぁ。

6章、Transparency

PNGをテキストに変換するSNGの例とか、gccの途中を全部テキストで吐くとかは、Unix的かどうかはおいといてこういうのは重要よね。 c-lessonでもそういう話を書いた記憶がある。 GUI的な話がUnix的というのは全く説得されなかった(少なくとも自分がXで使ってたアプリは全体的にそういう傾向は無かった)が。

Unix的であるかどうかはおいといて、transparencyは大切だ、というのは良いメッセージに思う。

7章、Multiprogramming

IPCの話とかがだらだらと述べられるだけで、あまり中身が無い。 サーバーとクライアントに分けるのが良いんだよってもはやUnixと関係無いじゃん…という内容だし。

パイプの良さとか小さないプログラムに分割する良さとかはUnixらしさも感じるのだが、 それ以外の内容がほとんどUnixと関係無い上に洞察が薄っぺらいので現代に通じなさすぎる。 Threadの話とかRPCの話とか全く役に立たないよなぁ、これ。

たまに良い話もあるんだが、そういうのだけ集めて1/10くらいに出来る気がする本だ。

8章、Minilanguage

正規表現とかがだらだらと解説されているのは何がやりたいのか?という気がしてしまうな。

picの例が読みやすくて良い例として挙げられてるが、こんなの読めないよ… Unix的な行指向のアプローチが構造を読みづらくする例になってしまっている気がする。

そしてawkにめっちゃ辛辣だが、その前に説明してたpicやm4とかよりはよっぽど今でも使われてると思うんだが… perlとかに取って代わられてもう存在してない、と言っているが、現状とは結構違う気がする。 それなりにStackoverflowではawkの例は出てくるしねぇ。

Designing Minilanguageはなかなか良かった

前半のcase studyが冴えないので期待してなかったが、終盤のDesigning Minilanguageはなかなか良かった。 新しいなにかが得られる感じではなかったが、現代でも普通に通じるアドバイスも多い。 昨今ではembedな言語の選択肢も多く、雑に作ったら複雑な言語になってしまった、ということは昔ほどは無いのだろうな、と思うけれど。

emacs lispの経験を語れるのはこの分野を語るにふさわしい人間だよなぁ。