文科系コンピュータ屋がこれまで迷い込んだ迷宮のお話。
UNIX はジョークに満ちている。
UNIX は Multics という,豪華すぎるがゆえに失敗に終ったマルチユーザ・マルチタスキングのオペレーティング・システムの名を捩って命名された。MULTI に対して UNI。「単細胞」という自虐めいたものかと思う。一方で,そこには「統合」のプライドもあるはずである。
もう三十年以上変りない UNIX のログインプロンプトはこうである。
login: isao Password: s0r3h@h1m|tu ...
どうして "login: " の先頭は小文字なのに,"Password: " は大文字なのか。システムの入り口からなんかヘンという気持を起こさせる。
一説によると,これは UNIX 開発当初の誤りであるが,いったんリリースしてしまった以上,このプロンプトを期待してプログラムを作ってしまったユーザへの影響を考え,頑なに仕様変更を拒み続けてきたとのこと。
UNIX は伝統を重んじるのだと。
ウソだろ。
ユーザ資産を無視した仕様変更を UNIX ベンダが行ったためしがないなどと誰が言い切れるのか。(ここでナンですが,UNIX は The Open Group の商標です)
政府から遠く離れたカリフォルニアの若者のひねりのきいた暗い知性を感じるのは私だけだろうか。
反体制のにおいがする。
なんとなく。
ソフトウェア技術者の "地" はアンダーグラウンドなのだと思う。
バークレイ発のフリーウェアには,皮肉なしかけがあるんじゃないか,すごいトラップドアがあるんじゃないかと思ってわくわくする。sendmail, bind, tcl, perl, etc., etc...(実際はそんな不埓なプログラムではないが)
UNIX 互換フリーソフトウェア・プロジェクト団体 GNU のフリーソフトウェアのライセンスは copyleft と呼ばれる。コピーライトを認めないからコピーレフト。
GNU は「GNU IS NOT UNIX」の略で,その定義のなかにすでに "GNU" が入れ子になっている。GNU は「グヌー」あるいは「グニュー」と読むが,なかにいる GNU は「ニュー」と発音されるウシ君である。
UNIX において,普段は待機しているがあるイベントでムクムクと起き上がって仕事をする常駐プログラムを,「デーモン(daemon)」という。"〜mon" なる命名をよくする。Oracle にも "qmon" という要求待ち行列(キュー)を監視するデーモンがいたり,実世界には M & A の機を窺う "horiemon" などもある。
ギリシア神話のダイモン・守護神に由来するそうだが,一方で悪魔(damon)をも示唆しているに違いない。
親プロセスが後始末をしないで終了した子プロセスを「ゾンビ」という。計算機資源をムダ使いする一因である。
放っておけないね。
おもしろいことに,親プロセスが子プロセスを続けて二回生み(fork())し,一回目の子が死ぬ(終了する)と,二回目の子(つまり一回目に fork() されてできた「子」のなかでさらに fork() された,すなわち「孫」。「孫」はまた自分のなかで「子」を fork() しようとする…… まさに,鏡の中の鏡)は,親プロセスのさらなる大親分(init)が親の地位について孫の後始末をするため,ゾンビにならずにすむという。
いったいどういう神話に基づいた仕様なのか。
親が子の面倒を見るのは現実世界と同じだが,死を看取る必要まであるのかは如何。
私が職についてはじめて触れた計算機は時価数十億円の大型汎用機システムであった。八十年代後半の当時は普通のこと。
システムの標準入力装置はキーボードではなくカードリーダ,標準出力装置はディスプレイではなくラインプリンタであった。一枚のカードに二進数のパターンで孔を空けて一行のブログラム・コードを記述した。パンチ操作を間違えたらまたやり直し。千行のプログラムなら千枚のカードをきちんとした順番でカードリーダにセットしなければならなかった。このときに手が滑ってカードを地べたに散らかしてしまうと,一大事である。だからカードにシーケンス番号を振っておく。シーケンス番号は 0000100,0000200,… のごとく,のちのち 0000110 てな具合に挿入・追加できるように振っておくのが基本であった。カードリーダも,ラインプリンタも,マシンガンのような雄叫びをあげる機械であった。コンピュータというものがハコ,モニター,キーボード,マウスで構成されている,と思い込んでいる人は,最近の便利な世界しか知らない幸福者(つまり素人)である。
ジョブ制御言語(プログラムの実行指示書のようなもの)を一行あたり一枚のカードにパンチし,カードの並びを確認してリーダにセットし,システムに読込ませる...と,プログラムが起動し,オープンリール磁気テープ装置がガガガガガと勢いよく回り出す。
いまだに私には「計算機」というほうがピンとくる。マシン室はオフィースというより工事現場に近い。ここで一点の誤りも許さない計算機の寡黙なリゴリズムと納期への恐怖とに虐げられて,生身のSEは何日も徹夜するはめになる。「電脳」などという魔法お伽噺も,「コンピュータ」というカタカナ語の放つデジタル・ナルシスもありはしない。
いま,大型汎用機用オペレーティング・システム VOS3 最新のバージョンを組込む。
そのために,SOS(スタータ・オペレーティング・システム)つまり一世代前のオペレーティング・システムを組込み,これを使って最新システムを生成するのである... この作業をシステム・ゼネレーションと言う。なんで OS を入れる準備として,わざわざその親 OS を入れなければならないのか。SOS の力を借りて,アセンブラ言語で書いた周辺装置などのユーザ独自の設定情報をアセンブルし,新バージョンの OS とリンケージする(合体させる)のだ。
まるで王位継承の儀式のようなことをやっていた時代があったのだ。(いまも執り行っている計算機ユーザは当然います)
大型汎用機でもっぱらアセンブラ言語(計算機言語の世界の古典ギリシア語)でシステムを記述していた時代には,プログラマは OS という専制君主のもとにデモクラティックに振舞わねばならなかった。たくさんのユーザがシステムを共同利用していることを意識して,ある決りを守ったものである。
プログラムの開始時には,OS のタスク切替え(たくさんのユーザへのサービスの切替え)のために,計算機に十数個しかない共用のレジスタ内容(それはよそ様の途中の計算内容)を己のメモリ領域に保存し,かつ特定のレジスタでその番地をポイントした上で,やっと自らの課題解決に向けて飛び立つ,というマナーを守らねばならなかった。そして終了時には,この保存領域からレジスタの値を回復してはじめて OS にさよならを言う。そうすることで OS によって,タスク切替え時点において別のプログラムのためにレジスタが横流しされても,再び自分の番が回ってきた際,今度は別のプログラムが保存しておいてくれた己のレジスタ内容で復元されて,何事もなかったように自分の仕事が再開できるわけである。あたかも共用のレジスタ資源をひとり占めしているかのような自由を手にすることができるのだ。
DEMOCRAT START * STARTING PROGRAMME DEMOCRAT * * DEFINE REGISTERS MACROS GR0 EQU 0 * SYSTEM USE GR1 EQU 1 * PARAMETER LIST ADDRESS GR2 EQU 2 * WORK GR3 EQU 3 * WORK GR4 EQU 4 * WORK GR5 EQU 5 * WORK GR6 EQU 6 * WORK GR7 EQU 7 * WORK GR8 EQU 8 * WORK GR9 EQU 9 * WORK GR10 EQU 10 * BASE REGISTER 1 GR11 EQU 11 * BASE REGISTER 2 GR12 EQU 12 * LOCAL RETURN ADDRESS GR13 EQU 13 * SAVE AREA POINTER GR14 EQU 14 * RETURN ADDRESS GR15 EQU 15 * ENTRY ADDRESS * DEMOCRAT CSECT * CONTROL SECTION USING *,GR15 B SAVEREG CNOP 0,4 SAVEAREA DC 20F'0' * AREA FOR SAVING REGISTERS SAVEREG STM GR14,GR12,12(GR13) * SAVE REGISTERS: 14-12 LR GR10,GR15 * SET BASE ADDRESS 1 TO GR10 LR GR11,GR15 AH GR11,*+8 * SET BASE ADDRESS 2 TO GR11 B *+6 DC H'4096' DROP GR15 * BASE ADDRESS = DEMOCRAT USING DEMOCRAT,GR10,GR11 * BASE REGISTER = GR10,GR11 LR GR12,GR13 ST GR13,SAVEAREA+4 * SAVE REGISTERS: 13 LA GR13,SAVEAREA * POINT TO SAVE AREA ST GR13,8(GR12) * SAVE GR13 * MAIN ・・・・儀式は終り。さあ仕事,仕事・・・・ * GOODBYE L GR13,4(GR13) * RECOVERY OF REGISTERS: 13, RETURN (14,12),RC=0 * 14,15,0,1..12 & NORMAL END *
このサンプル,MAIN 行以外はすべて段取り,後片付けである。ネット上では,大型汎用機 OS 向けのアセンブラ・プログラムコードは死海文書くらいの価値があるのではないか?
こうした時候の挨拶,儀式のような定型処理をはじめ,プログラムをいかに効率よく,簡潔に,スタイリッシュに書くかということを当時のプログラマは競い合った。レジスタの扱いやデータ領域の持ち方など,その書法で仲間うちの誰が書いたのかさえ分かるくらいであった。まるで詩文学サークルである。「なんだ汚ねえコード」,「なにを頭っからちんたら探すのか,バイナリサーチをなぜ使わない,バカかおめえ」なんて私も批評されたものである。天から授かった貴重な,貴重な記憶域,限られた実行ステップをギリギリまで削った — 1989 年は X'89' で十分だ,西暦 2000 年には不都合があるだろうけど,その頃にはこんなに貧しくはないすばらしい時代がやってくるはずだ。見た目は二の次でもよいから目的にそぐわない余計な計算は断じてしない,飾り立てずとも計算結果こそがダイヤモンドのように映えるはずであった。昔のプログラムの出力は,数学の回答のような色気のないものが多かった。
CPU 能力が飛躍的に高まるとともに主記憶容量も莫大になり,C/C++ や Java など高級言語で書くのが当たり前となった現在では,これに類した前振り,後始末は言語プロセッサが自動的にやってくれ,誰も気にしなくなった。計算機の大衆化とともに,いまや散文の,いやおしゃべりの時代がやってきた。分かりやすく書くことがプログラマの最も重要な課題である。原稿料を稼ぐため用紙を書き散らすのとまさに同じように,ふんだんにコードを書いて工数をいただく。
オヤジじみているが,次に言いたいのはだいたいお分かりかと思う。現在はプログラミングのデモクラティックなマナー,様式感覚などない。同じ計算機を皆で効率よく使う,なんて考えないばかりかウィルスをばら捲いてよそ様の計算機資源まで喰い潰そうとするものもある。それが技術だと思っているフシさえ窺えないこともない。「自動化」のもたらす頽廃か。
こんな計算機パワーの豊かな時代,HTML の作法にはうるさい方々が増えているらしい。「かなづかひ」なんかにうるさい些末な文科系コンピュータ使いに多い。しかるべき規格に則ってどのブラウザでもきちんと表示できるよう心がけなければならない,外観要素の実現はスタイルシートで指示しなければならない,テーブルの多用は表示性能・ソースの可読性の点でやるべきではない,etc.,etc。まさに正論である。私の HTML はお行儀が悪い。誰もご覧にはならないだろうけど。
でもな。「正しい HTML」,「HTML の思想」,「HTML の資格」? 文科系が理科系に嗤われるのが至極当然に思われる。HTML は「手段」でしかないのにそこに「思想」を込めたがるのは,ペットに話しかける以上の何かである。HTML の「作法」? そのようなサイト管理者は,原稿用紙の使い方にばかり固執する物書きのようなものである。
計算機はソフトウェアを使うためというより,むしろ,ソフトウェアを作るためにある。ワープロ,スプレッドシートなんかより,コンパイラ,デバッガのほうが遥かに重要である。
大型汎用機においては,もしプログラムに誤りがあり異常終了(アベンド,ABEND - ABnormal END と言う。Guten な Abend はここでは通用しない)すると,システムはダンプを出力する。いまなら一般にはコアダンプと言うだろう。ジョブ制御言語の指定によっては,プログラムが落ちるといきなりラインプリンタにダンプ内容が出力されはじめる。ちょっとした業務アプリケーションだと 3,000 頁くらいは出る。センターオペレータは「おい,まだ終わんねえのかよー」とプリンタの前でブツブツ。
やっと出た! 重さ 10kg くらいあるダンプリストは直ちにプログラマの手元に届けられる。ダンプリストには機械命令,レジスタ内容,データ領域内容からなるプログラム・バイナリ・コードそのものが十六進数だけでダラダラ書かれている。プログラマはやおら PSW(プログラム・ステータス・ワード)という,計算機が次に実行しようとしていたアドレスと,16 個の汎用レジスタ値の出力部分とだけ — だいたい 1/3 頁分 — を確認する。レジスタ内容などから十六進数電卓を叩いてエラーの起きたプログラム部位のアドレスを計算し,ダンプリストのその部分を探し出す。このようにして障害原因が特定される。
なにが言いたいかって? たった 1 頁分くらいの情報量のために 3,000 頁を印刷させる時代だったわけである。当時思ったものである。情報化技術というものはいつもペーパーレスという概念と結びつくけれども,実際は自動出力されるデータの印字でもって,何ヘクタールもの森林を壊していると。もちろんいまは端末のモニタ上で,シンボリックデバッガを使って,ダンプデータを解析できるんだけど。
大型汎用機の機械命令に NOP 命令というものがある。「何もしない」という命令である。
TeX には \relax というプリミティブがある。「何もしない」という命令である。
最高のデジタル・ジョークか。計算機プログラムにおいても,沈黙は時に雄弁に勝ることがある。
「アセンブラもまたアセンブラで書かれています」— 昔首っ引きで読んだアセンブラのマニュアルの概説にこう書かれていた。鏡の中の鏡。
そのアセンブラもやっぱりアセンブラで書かれているのだ。
昔,UNIX のあるメールソフトをインストールしようと,アーカイブの README(ソフトウェアの最初に読むべき説明書)に目を通した。「うまくインストールされない場合や正しく動作しない場合は,下記アドレスまでメールしてください」とあった。これからメールを使いたいからインストールしようとしているのに,うまくいかないときはメールしろ,とはどういうことや? 作者はメールが使える環境にある人をこのメールソフト導入の前提としていることになる。ここはアリスの不思議の国かとうれしくなった。
「無限ループ」
この世界には無限があったのか。
否。現実世界でも,どこかの国とその隣国との間ではあるみたい。
/* ianfu.c コンピュータ無限ループの例: 慰安婦システム */ #include <stdio.h> #include <unistd.h> int goui(void); /* agreement process */ int main(void) { while (1) { printf("K国:謝罪して賠償せよ!\n"); printf("J国:軍の関与を認め,謝罪する。\n"); sleep(5*365*24*60*60); /* about 5 years */ printf("… 5年経過 …\n"); if (goui()) return 0; else printf("K国:J国には誠実さがない!\n"); } } int goui(void) { int j_seijitsu_flag = 0; if (j_seijitsu_flag) return 1; /* agreeable */ else return 0; /* unagreeable */ }
この C プログラム ianfu.c は while (1) で,goui 関数から 1 が返されない限り,あるいは,予期せずシグナルを受信しない限り,永遠にループ内のコードを実行し続ける。goui 関数は j_
「a = a - 1;」
a から 1 を引いても a だ?
オレの財布から一万円使っても,もとの財布だといいんだけど。
「本ソフトウェアはオペレーティングシステムからのエラー報告を受けるとまず最初に回線を再度接続しようと試みます。retrytimes 値の再試行ののち,再接続が不可能な場合は,exitfunc に従って後処理を実行しようとします。」
ソフトウェアは生き物か?
ソフトウェアのマニュアルは,書いても読まれないもののひとつである。
「再帰的関数呼び出し(recursive call)」
関数が自分のなかで同じ自分を呼出す。呼出された同じ関数はやっぱり同じところで同じ自分を呼出す。その「やっぱり同じところで同じ自分を呼出」された同じ関数は「やっぱり同じところで同じ自分を呼出」す...。鏡の中の鏡の例を以下に示す。
/* 二項分布確率計算 Binomial distribution */ /* p値1/6のサイコロを50回振り同じ目がk回出る確率を計算する */ #include <stdio.h> #include <math.h> double nCr(double, double); int main(void) { double p = 1.0/6.0, n = 50.0; /* p値1/6のサイコロを50回振る */ double y, k; printf("** n: %3.0f; p: %5.4f; mu: %5.4f; s^2: %5.4f;\n", n, p, n * p, n * p * (1.0-p)); for (k = 0; k <= n; k++) { y = nCr(n, k) * pow(p, k) * pow(1.0-p, n-k); if ((y >= 0.000000001) || (k >= n) || (k <= 1.0)) printf("%3.0f\t%12.8f\n", k, y); } return 0; } /* 組合せ計算 */ double nCr(double n, double r) { if (r < 1.0) return 1.0; else return n * nCr(n-1, r-1) / r; }
マリアから愛を告白された,下記の優柔不断なコンピュータ・ヨセフ君は,それでも 4,082 年と,12 月と,24 日の後に「僕もだよ」と応えるだろう。32 bit 計算機,だいたいの時間だけど。いまや 64 bit の時代。いつヨセフ君がマリアの愛に応えるのかは,もう計算する気にもならない。
#include <stdio.h> #include <limits.h> #include <unistd.h> int main(void) { long thinking = LONG_MAX; printf("Maria :\n\tI love you. Do you love me?\n\n"); printf("Joseph :\n"); while (thinking--) { printf("\t...\n"); sleep(1); } printf("\t!\n\tYes, I love you, too.\n"); return 0; }
プログラミング言語で詩を書く人がいる。私にはまだ,米国人のジョークの一変化球としかとらえられないけれど,これは思うに日本人にはマネできない。成績優秀の理科の君にはわかるかな。ところでこのプログラムを実行しても黙して語らず。M. Proust の『失われた時...』だよ,君。
for (long => time) {$early && $self->went($bed);} rand time && do { while ($candle--) { (time => $eyes->shut()) < (time => print "Falling asleep!") } };
銀行預金残高を書き換えるコンピュータ犯罪の犯人はすぐ捕まる。
彼はその高度なテクニックを言い触らさずにはおれないからだ。
官庁のホームページを改竄した犯罪グループはなかなか捕まらない。
あまりにレベルが低くて誰にでもできるからだ。
というか愛国無罪か。
銀行預金残高を書き換えるコンピュータ犯罪の犯人はすぐ捕まる。実際にあった話である。古典的なハッカー(ここではわかりやすいコトバを使っている。本来「ハッカー」とは計算機を知り尽くし超絶技巧を発揮する優秀なプログラマの謂いである。悪意をもってシステム侵入を為すような輩のことは「クラッカー」と称するのが正しい)愛国無罪などという愚劣な理由を掲げたりしない。とはいっても,彼らは承認欲求の極めて高い人のタイプに属する,と私には思われる。
昔,銀行のシステムに侵入し,利息計算プログラムをハッキングして,巨額の富を築いた米国人ハッカーがいた。利息計算において四捨五入で切り落とされる小数点以下の数値を集積して,己の口座に振込み処理をするようにプログラムを改竄した。これで誰にも迷惑を掛けずに,誰にも知られることなく,自動的に大金を得る仕組みを作り上げたのだった。
でも,その犯罪はほどなく明るみに出て,彼はFBIに逮捕された。誰にも知られなかった犯罪なのにどうしてかって? それは本人がこの犯罪の凄さを人に教えたくて堪らなくなり,自ら公言してしまったからであった。「俺はこんなに頭がいいのだ」と認めてもらいたかったのである。
日本の政府関係機関や軍事関係企業のサイトが,中国,ロシア,北朝鮮,— そして日本のセキュリティ政府機関やマスコミは伏せているけれども,おそらくアメリカ — からのクラッキングを受けて,陰陽かなりの被害が出ている。専門家に言わせりゃ,防御することに専念する日本の自衛隊と同様,攻撃方法を研究しない者には有効な防御方法も見出せないそうである。
ロシアや米国の優れたアンチウィルスソフト,セキュリティソフトの開発者はたいてい,かつては攻撃をやっていた技術者ばかりであること。これは,攻撃と防御をともに実践することこそがセキュリティ強化にとって必要なことを示す一端である。
ま,もとより日本人は情報戦に極めて弱い。情報に基づく交渉力も極めて低い。外務省をみればたちどころに納得できるだろ? わが自衛隊は実際のところどうなのだろうか。
最近とあるジョーク集を読んだ。こんなのがあった。
問い:2004年,アルバニア軍のコンピュータ系統が一斉にダウン。どうして? 答え:西暦2000年問題。
身につまされて,あんまり笑えない。
西暦 2000 年問題が大騒ぎになったころ,2000 年なんていずれ来るのがわかっているのになんでこんなバカな設計にしたんだろう,まったく呆れる,のようなことを他人事のようにホザくバカな輩(そう,テレビコメンテーターのような無責任な評論家)がゴマンといた。当時問題になったのはコンピュータ黎明期から少しずつ改修されながら大規模化したシステムだからこそであった。共同体への影響がじつに大きい官庁システムがまさにこれにあたるからだった。
考えてみよう。コンピュータ機器の進化には,3 年で性能が 2 倍になるという「ムーアの法則」と呼ばれる経験則がある。2000 年ころから逆算して 1970 年代あたりに舞い戻ると,かつての計算機が現在と比べていかに貧相なものだったかが想像できるだろう。3 年ごとに性能が倍になっていくとなると,30 年昔の計算機の性能はいまの 2 の 10 乗(1,024)分の 1。逆にいうと,同じもののお値段はいまの 2 の 10 乗倍。いま食べられてるご飯の価値が,30 年前は 2 の 10 乗倍だったとすれば,翻って考えれば,当時のご飯の量はいま食べられる量の 2 の 10 乗分の 1 だった。とすれば,爪に火を点すようにケチケチするほうが常識的だったのである。米粒ひとつひとつが大事だった昔のころを皆忘れている。
もう今は昔,まだ Windows 3.1 が全盛であったころ,とある官庁外郭団体の検索サービスシステム開発において,サーバに接続して有料サービスを受けるための Windows クライアントソフトウェアを開発した。さらに稼働後は,ユーザサポートの仕事をさせられたことがある。そのころはシステム設計・開発だけでなく,顧客の手に負えない仕事はなんでもしてさしあげなければならなかったのだ。そのサービスのユーザは事務方ばかりで,私はエンドユーザの事務所に出向いて PC の設定までした。況やまだ PC の利用もネットワークも特殊技術に属していたわけで,ISDN-PPP による TCP/IP 連動に関わるユーザ電話サポートはただごとではなかった。
顧客: あのー,プログラムが動かないんだけど。画面がうんともすんともいわないのよー。 私 : 一度電源をお切りになって,これから申し上げる操作をしてみていだだけますか? 顧客: 電源を切った。…で,スイッチ入れたよ。 私 :(しばらく待って)立ち上がりましたか? 顧客: え?…分かった,はい。 私 : プログラムマネージャというボックスに XXXX という OOOO の絵があります。それをダブルクリックしてみてください。 顧客: まだ砂時計しか出てこないよー。いや,でも,なんで立たないといけないのかな? 私 :(……)す,すみません,お立ちになる必要はありません,お座りください。ところでプログラムマネージャは...
こんなのもあった。
顧客: 検索プログラムが動かないんだけど。 私 : いま画面になにが出ていますか? 顧客: 虫眼鏡の絵(検索プログラムのアイコン)が見えるんだけど矢印がそこにいかないんだよ。 私 : マウスを移動させても矢印が動きませんか? 顧客: 動く動く。 私 : ではマウスを滑らせて矢印を虫眼鏡の絵に合わせてダブルクリックしてみてください。 顧客: それがどうしてもいかないから困っているんじゃないか。 私 : マウスに応じて矢印は動くんですよね。 顧客: 動くよ。でも机の端にきてしまってマウスをそれ以上動かせないんだってば。
情報リテラシーを少しなりとも身につけた人なら,ドキュメント整形システム LaTeX の表記を見てことさら違和感を覚えたりしない。「ラテフ」とか,「ラテック」とか,「レイテック」とか読むことも知っているはずである。
しかし白状するが,私は最初に "LaTeX" の表記に出逢ったときは UNIX 一流の冗談かと思った。これはラテックス・コンドームの捩りだと。だから私は,あまり計算機のものごとを知らない人には,決して LaTeX については「書かない」ことにしている。
D. クヌース教授著『文芸的プログラミング』の訳者「あとがき」だったと思う。LaTeX のことを「ラテックス」と表記していた。この訳者も私と同じ部類に属する方かもしれない。
Windows も Mac OS も優れた OS だが,そんなこんなで UNIX はなにか度し難い,ブラックな奥行きを秘めている。実はこれが私の,UNIX を使い続ける本当の理由である。
ユーザがシステムに惹かれるのはなにも品質ばかりではない。Windows はバグだらけとの話はよく聞く。それは夥しいユーザ数の証であって,ジョークのネタとしてもこと欠かないわけだが,ゆえに Windows が好きという人がいればおもしろい。Mac はお洒落という陳腐きわまりない称賛よりよっぽど。ところで私も Mac を使っているけれど,ノーマルな操作で固まること度々であり,可愛いだけで頭の悪い女に抱く苛立ちを,時折り覚える。
ルーマニアの IT ジョークにこんなのがある。
ビル・ゲイツ率いるマイクロソフトが,新しく自動車業界に進出することになった。 しかし,できあがった車は以下のようなものだった。 1. 特に理由がなくても二日に一度は突然動かなくなる。 2. 高速道路ではそれが特に顕著である。 3. こうした場合,最悪のケースとしてはエンジンを総取り替えしなければならない。 4. ユーザは新しい道ができるとそのたびに,新しい車に買い替えなければならない。
その安定性を持ち上げる UNIX の信者がいるけれども,UNIX だってバグは多い。私は FreeBSD を使っているんだけど。(ここでナンですが,FreeBSD は UNIX ではなく UNIX クローンの OS です)