序章:UNIXとLinuxを振り返る

第0回 序章:UNIXとLinuxを振り返る

気が付くと「世の中はLinux」のようです。以前からUNIXを使っていた人なら大喜びなのですが、初めて触ったPCにはWindows 95がインストールされていた、という人にはハードルが高いことでしょう。そこで、今月から半年ほどかけて、MS-DOSプロンプトを使ったことがあるというレベルの人を対象にしたLinuxの入門記事をお届けすることになりました。インストールして終わりではなく、Linuxにおける常識というものを紹介できたらと思っています。

Linuxとは何か

ここがポイント
・OSとは?
・カーネルって?
・POSIXとUNIX

 常套手段ですが、まずはLinuxとは何か、という点からスタートしましょう。正確を期せば、LinuxとはPOSIXに準拠したカーネル部分の名称ということになります。とはいえ、大多数の人にとって、これでは何のことかさっぱり分からないはず。これで理解できる人なら、そもそもこの記事を読む必要はありません。

 では、順を追って説明しましょう。キーワードはPOSIXとカーネルですが、まずはカーネルから。カーネルをイメージするには、その前にOSの概要を知っておく必要があるでしょう。

 OSとは、Operating Systemの頭文字を取ったものです。コンピュータは、すべて数字で動いています。文字など理解できませんし、キーボードやディスプレイなども知ったことではありません。何をするにも、一からソフトウェアを作る必要があります。もちろん、キーボードを読むプログラム、画面に表示するプログラム、HDを読み書きするプログラムもです。これでは普通の人間に使えるわけがありません。そこで、キーボードからの入力や画面への表示、プリンタへの印刷、HDの扱いといった部分を標準化します。難しくいうと、リソースの管理というやつです。このあたりの面倒を見てくれるソフトウェアをOSと呼びます。場合によっては、基本的なツールとしてのソフトウェアを加えてOSということもあります。

 そして、カーネルというのはOSの中核部分です。どこまでが中核部分なのか、という線引きはとても難しいことです。OSの設計思想によっても違ってきます。Linuxでいうと、ファイルやプロセスの管理、入出力といった処理を行う部分がカーネルです。従って、カーネルだけでは実用にならないということになります。ファイルの一覧を出すのも、HDをフォーマットするのも、メールを読み書きするのも、それはツールとしてのソフトウェアやアプリケーションプログラムの仕事になるからです。

 Linuxの開発当初はマニア向けの代物だったので、カーネルしか配布されていませんでした。カーネルを入手したユーザーは、自力でさまざまなプログラムを追加していたのです。それが楽しくてたまらない人もいるわけですが、やはり世の中の大多数はそんな苦労をしたくありません。そこでカーネルに加えて、さまざまなプログラムをまとめたものが配布されるようになりました。これをディストリビューションといっています。どんなソフトウェアを入れるかはディストリビューションの作者が判断するわけですから、同じLinuxといってもいろいろなバリエーションができてくるわけです。現在流通しているディストリビューションとしては、

あたりが日本でメジャーなところでしょうか。もちろん、これ以外にもさまざまなものがあります。どのディストリビューションが良いのかは永遠の命題ですが、インターネットを使うとユーザーの生の声が収集できるので判断の一助になります。とはいえ、最終的には自分が使いやすければいいのですから、幾つか使ってみてもいいでしょう。

 もう1つのキーワードであるPOSIXですが、これはまあUNIXと同義語だと思ってください。UNIXもOSの1つで、AT&Tのベル研究所に勤める研究者が、ゲームやりたさに古ぼけたミニコンに実装したのが始まりだといわれています。しかしそこは腐ってもコンピュータ科学者が設計したものなので、直前に参加したプロジェクトの反省を踏まえてシンプルかつ発展性の高い設計だったようです。思うに、「何でもかんでもファイル」「ファイルは全部バイトデータのストリーム」という単純化が画期的な部分ではないでしょうか。これとパイプやリダイクトといった機能を組み合わせるのが醍醐味なのですが、このあたりの詳しい話は後日にします。

 また、当時はコンピュータが高価で、複数のユーザーで共同利用するのが当たり前でした。そのため、UNIXはマルチユーザー、マルチプロセスを実現しています。そして研究者仲間で使うという前提だったためか、ユーザー全員が平等にコンピュータを使えるようになっています。もっと大きなコンピュータ(汎用機などと呼ばれます)だと、1秒いくらという使用料金を取られるので、たくさんお金を払う人が一番使えるようになっていました。ある意味これは正しいことなのですが、お金のない研究者にとっては腹立たしいことだったでしょう。いまは当時の汎用機並みのスペックを持ったコンピュータを占有できるので、ピンときませんが。

 さて、ベル研究所で産声を上げたUNIXですが、当時は独禁法のおかげでAT&Tはコンピュータ事業に参入できませんでした。そのため、手間賃程度の価格で教育機関に配布されました。しかも、ソースコード付きです。マルチユーザー、マルチプロセスの実用になるOSがそのまま生きた教材になるわけですから、あっという間に広まりました。そしてあちらこちらで改造されていき、それがさまざまにフィードバックされました。これには速やかに改良が進むという利点と、バリエーションが増えて互換性が低くなるという欠点がありました。これを何とかしようとしたのがPOSIXです。OSの実装面ではなく、APIを規定することで互換性を確保しようとしたのです。現代のUNIXは、みなPOSIXに準拠しているといっていいでしょう。

System VとBSD

ここがポイント
・UNIXとは?
・System V
・BSD
・LinuxはSysetm V? BSD?

 前述のように、UNIXにはさまざまなバリエーションがあります。正確にいうと、UNIXを名乗るためにはある試験をパスしないといけないのですが、もちろんこれにはお金がかかります。なので、UNIXは名乗れないがUNIXとほぼ同じ、というOSがたくさんあります。さらにUNIXの中でも、System VBSDという二大潮流があります。

 System Vは正統なベル研究所の流れをくむUNIXです。AT&Tの分割に伴って商用化されたUNIXと考えればいいでしょう。堅実な設計といち早いマルチプロセッサへの対応が特徴です。商用ソフトウェアなので、お金を払えばしっかりしたサポートも受けられます。その代わり、初期リリースでは細かなチューニングが追い付かず、速度の点ではいまひとつ、ともいわれました。

 対するBSDはBerkeley Software Distributionのことで、カリフォルニア大学バークレイ校で改良されたUNIXです。大学で開発されただけあって、比較的先進的な機能を組み込み、チューニングによる速度向上もまめに行われていました。弱点はサポートで、技術力のあるユーザーなら自力で何とかできるのですが、商用に使うにはためらわれたものです。

 当初はSystem VとBSDの優劣が論じられましたが、スーパーミニコンピュータの時代からワークステーションへと時代が進むと、互いの長所を取り入れてさほど差はなくなります。有名なところでは、SunワークステーションのOSが、当初のBSDベースからSystem Vベースに切り替わっています。マルチプロセッサへの対応をにらんでのことではないかと思われます。切り替え当初はパフォーマンスの点でユーザーから不満が噴出し、BSDベースのOSもしばらくの間は並行してメンテナンスされていました。が、いまではすべてSystem Vベースになっています。結局のところ、商用システムのベースとして使うなら細かいメンテナンスを任せやすいSystem V、OSそのものを扱う研究機関ではBSDといったすみ分けに落ち着いたようです。

 さて、ここで問題です。Linuxは、System V系列なのでしょうか、それともBSD系列なのでしょうか?

 答えは「どちらでもない」です。

 Linuxを開発したLinus氏は、何もないところからPOSIXのAPIを満足するようにプログラムを書き上げたのですから。ユーザーに分かりやすいところでは、rcスクリプトを見ると面白いです。現在主流のディストリビューションはSystem V風ですが、Slackware 3.xなどではBSD風でした。

Windows vs. Linux

ここがポイント
・シングルユーザーとマルチユーザー
・ユーザーインターフェイス
・Linuxの多様性は吉か凶か

 ざっとLinuxのバックグラウンドをさらったところで、Windowsと比較してみましょう。最大の違いは、Windowsがシングルユーザーなのに対して、Linuxはマルチユーザーということです。Windowsでも複数のユーザー名を使い分けることはできますが、一度に使えるユーザーは原則として1人だけです。また、ユーザー名で使用環境を変更するにしてもぎこちなさが付きまといます。

 Linuxでは、1つのコンピュータを複数のユーザーが同時に使えます。1人で占有するパーソナルコンピュータではあまり違いを感じられませんが、複数のターミナルエミュレータを実行したり、仮想端末を使ったりすると多少実感できます。また、最初からマルチユーザー前提なので、各ユーザーの環境は独立しています。あるユーザーが操作をしくじっても、ほかのユーザーにはほとんど影響を与えません。このあたりが、OSとしてはWindowsよりもLinuxの方が頑丈だといわれる根拠になっています。WindowsもNT系列の製品はだいぶ頑丈なのですが、やはり1人で占有するという前提の設計だと感じます。

 もう1つの特徴として、Windowsはオールインワンなのに対してLinuxはコンポーネント指向です。どういうことかというと、Windowsはバージョンを指定すると、基本的にユーザーインターフェイスも決まります。例外としてWindows 95にInternet Explorer 4.xを組み込むと大幅にユーザーインターフェイスが変わりますが、現在のWindows MeとWindows 2000はよく似ています。

 しかし、Linuxではディストリビューションを決めてもユーザーインターフェイスが決まりません。基本となるキャラクタベースでさえ、シェルと呼ばれるユーザーインターフェイスプログラムが複数用意されています。グラフィックを表示するにはX Window Systemが標準となっていますが、これはかなりプリミティブな部分しか提供してくれません。ユーザーインターフェイスを左右する部分はウィンドウマネージャと呼ばれ、これも複数あります。これは長所にも短所にもなります。

 長所としてとらえるなら、ユーザーの好みや必要性に応じて自由に機能を選択できることになります。例えば私の場合、自宅で使っているLinuxはサーバ用途なのでGUIを入れていません。その分HDの空き容量が増えますし、グラフィックスカードは5000円の代物で十分です。メールを読み書きするのはFreeBSDのマシンですが、これもTera Term Proを使ってキャラクタベースで作業しているのでGUIは不要です。このマシンはインターネットに常時接続していますから、職場からでも自由に読み書きできます。GUIベースだと、なかなかこうはいきません。

 短所としては、標準的な操作環境が存在しないことが挙げられます。単純に「ここはこうすればOK」という話ができなくなるのです。Windowsですら使っているInternet Explorerのバージョンによって話が違ったりするのですから、推して知るべしです。また、初心者にとっては必要なコンポーネントなど見当がつきませんから、構築が難しくなります。ただ、最近はKDEやGNOMEといった統合環境が普及しつつあるので、ある程度はユーザーインターフェイスの統一が図れそうです。やっていることが高度なだけにWindows並みにリソースを要求しますが、いまどきのマシンなら何の問題もありません。

Linuxの優位性

ここがポイント
・WindowsもLinuxもできることは同じ
・OSの堅牢性
・CUIはLinuxの圧勝
・遠隔地からでも操作できる
・システム管理も楽になる

 ここでLinuxにしかできないことを列挙できるとよいのですが、実はそんなものは存在しません。メールサーバもWebサーバもProxyサーバも、Windowsでちゃんと動きます。ただし、Linuxの方が得意なこと、楽なことはあります。

 一番大きいのは、OSそのものの頑丈さです。Windows 98やWindows Meは、もともとMS-DOSをベースに発展してきました。そのため、過去のシングルユーザー、シングルタスクシステムを引きずった部分があります。そのせいか1つのプログラムが暴走すると、ほかのプログラムを道連れにしてOS自体まで止まってしまうこともままあります。この点では最初からシングルユーザー、マルチタスクOSとして設計されたWindows NT系列はだいぶ改善されています。それでもときどき画面が凍り付いて、リセットボタンを押すハメになります。

 これがLinuxになると、ユーザープログラムが暴走することはあっても、OSまで止まってしまうことはほとんどありません。キーボードからの入力を受け付けなくなっても、仮想コンソールを切り替えると大丈夫だったり、ネットワーク経由では操作できたりします。そこで問題のプログラムを止めてしまえば、たいていは無事に復帰できます。サービスを止められない、対外的なサーバの場合は大きな利点になります。

 関連した事項ですが、キャラクタベースのユーザーインターフェイスを使うのならLinuxの方が圧倒的に楽です。WindowsでもMS-DOSプロンプトやコマンドプロンプトがありますが、とても低機能で使いにくいものです。一度tcshやbashといったLinuxのシェルを使ってしまうと、二度と使う気になれません。Windowsでこうしたシェルを動かす方法もあるのですが、そこまで苦労するくらいならLinuxを使った方が楽です。

 キャラクタベースのインターフェイスは慣れないと使いにくいものですが、逆に慣れるとネットワーク経由でどこからでも操作できるという恩恵にあずかれます。サーバルームに置いたマシンを操作するのに、いちいちそこまで行かなくてもよいのです。サーバルームが近ければまだいいのですが、全国に散らばった支社のシステムをメンテナンスするなどということになったら、出張費だけでも大変です。最近ではWindowsで動くリモコンソフトもありますが、ネットワーク越しにGUIを使うと非常にまどろっこしい思いをします。転送する情報量が多いからでしょう。100Mbpsの光ファイバが普及すれば問題は解決するかもしれませんが、バックボーンにかかる負担を考えるとぞっとします。

 GUIを使わなければ、高価なグラフィックスカードや高速なCPUも必要ありません。複雑な計算を行うのであれば高速なCPUが必要ですが、大規模な科学技術計算やレイトレーシングでもやらない限り、まずCeleronの500MHzもあれば十分なはずです。これ以上速いCPUを用意したところで、HDを読み書きする時間の方が多くなるばかりです。実際にどこがボトルネックになっているかはケース・バイ・ケースで断言できませんが、経験的にはまずメモリを増やし、次にHDを高速なものにした方が、体感的な速度は向上します。最近ではメモリも安いですから、ちょっと古くて現役で使うにはつらいコンピュータにメモリを追加すれば、十分Linuxが使えます。

 パーソナルユースでは問題になりませんが、会社で使う場合はマルチユーザーシステムを作りやすいという利点もあります。Windowsはユーザーごとに専用のマシンを用意するという前提で発展してきました。そのマシンを使っている限りは自由度が高くていいのですが、裏を返せば他人のマシンは使えないということになります。しかし、ちょっと別の人の席で作業するということはよくあることです。

 また、システム管理の面から見ると個々のマシンの管理が大変です。利用しているユーザーはコンピュータに詳しい人ばかりではありませんから、どうしてもシステム管理部門を頼ることになります。このとき、どのマシンも同じような構成ならメンテナンスコストが低くて済みます。ユーザーが実際に操作するコンピュータと、ログインするコンピュータ、そしてファイルを保存するコンピュータを別々にすることも簡単です。こうしておくと、どのコンピュータを使っても普段自分が操作している環境で作業できます。コンピュータが故障しても、同じ構成のものと交換するだけで済みます。Solarisなどは、最初からこうした構成で利用することを考えている節があります。WindowsもNTの系列ではユーザープロファイルやWindows Terminalという仕掛けを用意して対処していますが、ベースがシングルユーザーだけにどうもすっきりしないようです。

Linuxをマスターするには

ここがポイント
・1つのHDに複数のOSを
・リムーバブルHDでHDを入れ換える
・Linuxプリインストールマシンは楽
・インターネットに接続する前に勉強を

 Linuxに限った話ではありませんが、やはり本を読むだけではダメで、実際に自分でいろいろと触って試してみないといけません。そのためには、やはり専用のコンピュータを用意した方がいいでしょう。

 もちろん、1つのHDに複数のOSをインストールして使い分ける方法(ゼロ円でできるデュアルブート続ゼロ円でできるデュアルブート参照)もあります。が、そんなところで苦労するよりは5万円でショップブランドの一番安いコンピュータを買った方がいいと思います。最近の安価なコンピュータはi815を使ったオールインワンマザーボードを使っているものがほとんどですから、最新のディストリビューションならX Window Systemも含めてまず動作すると思います。もっとも購入前にはいろいろと情報を調べて、そのハードウェアがちゃんとLinuxで使えるかどうかを確認するに越したことはありません。Linuxに詳しい店員のいる販売店なら理想的です。

 リムーバブルHDケースを使うというのも1つの手です。これは実際に私が使っている方法でもあります。いまは10GbytesのHDが1万円で買えますから、OSごとにHDを用意するわけです。頻繁にOSを切り替えるには不向きですが、実験用なら面倒なマルチブートの構築をしなくて済むので重宝しています。おまけにどんなに操作を間違えても、仕事に使っている環境は壊れません。

 予算に余裕があるのなら、Linuxプリインストールのマシンを検討してもいいでしょう。少なくとも、そのマシンならLinuxが動くことが分かっているのですから、ハードウェアに問題があるのか、自分の操作に問題があるのかの切り分けが楽になります。

 もう1つの注意点として、サーバをインターネットに接続する際には慎重を期すことです。変な設定で接続すると他人に迷惑をかけますし、SPAMメールに利用されたり、ほかのホストへのアタックの踏み台にされたりもします。インターネットから切り離されたLANで十分勉強してからにしましょう。急いでサーバを立ち上げる必要があるなら、専門の業者に頼んだ方が結果としては安上がりかもしれません。