Linuxプログラミング入門

97年8月22日執筆

from DOS to Linux(1)
Linuxプログラミングの勧め


副題を見ると、「女子高生はどうした?」と思う向きもあろうだろう。大変不 本意ながら、あの企画は打ち切らせて戴く。何しろ大変エネルギーを使うこと である上に、読者欄で散々あれこれ言われては、やってるこちらとしては、割 に合わない。私は必要であると思ってやっていたのであるが、それを理解しよ うとしない人にあれこれ言うのも無駄なエネルギーである。また、それに対し て何も言わない編集部にもあいそが尽きた。自分の母校や教え子の評判を落と すのも本意ではないので、別の企画でさせて戴く。

ついでにちょっと不満を言わせて戴くなら、www.linux.or.jpでもこの連載で も、いつの間にか「お客」というスタンスで見る人が増えて来ている。しかし、 Linuxは本来「お客」という立場は存在していない。みんなで創るものである。 単なる読者欄への投稿であっても、それは「創る」という行為の一部であるこ とを忘れてはならない。

と言うわけで、「advanced」なことを期待している人が多いようだし、こっち もその方が楽なので、今までやらなかったような、ちょっと高度なところをやっ てみようと思う。と言ってもkernelがどうこうの類は面白いと思う人も少ない し、最近では役に立つこともそう多くなくなって来ているので、Linuxのソフ トを書く人が増えることを期待して、プログラミングの話をしようと思う。

LinuxにおけるC

本連載を読むようなadvancedな方々なら、Linuxのkernel自体は90%以上Cで書 かれてていることは既に知っているはずである。また、これはLinuxに限らず、 UNIX全般に言えることであり、UNIXにとってはCは母国語のようなものである ことも知っていると思う。最近のLinuxには選択に困るくらい言語の種類があ るのだが、ここはオーソドックスなところでCを基本に置くものとする。もっ とも、他の言語も色々面白い話題があるので、それはその都度説明しようと思 う。

Linuxにとっても、当然Cは母国語である。だから、普通にインストールしてお けば、Cは使えるようになっている。これがgccであることは御存知だろう。あ まり昔話をする気はないが、gccのおかげでUNIXのCはANSI Cになったし、ちゃ んと最適化をするようになったと言っても過言ではない。Linuxもその恩恵を 受けているし、そもそもgccがなくてはLinuxは存在しなかったとさえ思われる。 また、標準のccが最初からgccであったため、gccを使うことを基本としてライ ブラリが作られている。

実はこれはWSの常識からすると、ちょっと不思議なことである。たいていの商 用UNIXはpccあたりを先祖とするccを装備していて、それをベースに物事が構 築されているのである。もちろんgccを入れて使う人も少なくはないが、標準 はあくまでもccなのである。gccは高性能高機能の処理系である。これが標準 になっているというのは、それ以外が標準となっている世界とは、ちょっと趣 が違うのである。

「そんなの何の関係があるのだ?」という声もあるだろう。しかし、この辺の 違いで案外ハマってしまう人もいるので、自分でプログラムを書きたいと思わ ない人でも、ちょっとくらいは知っておいた方がいいと思う。それは難しい話 ではなく、「Linuxで標準となっているgccは普通のWSで動いているccとはちょっ とだけ違う」ということである。

ところで、Linux(UNIX)上で動く言語処理系がいろいろあるのと同じように、C の処理系も実はgccだけではない。マイナーながらもgcc以外のCの処理系は存 在している。また、その中にはインタープリタの処理系もある。「Cはgcc一色 だ」とか思わないで、他のものを見てみるのも楽しいと思う。インタープリタ であると、わりと軽い気持ちで使うことが出来るので、入門者には良いかも知 れない。

入門者と言えば、MS-DOS時代にCをやろうと思って挫折した人の中には、「何 かと言うとリセットをしなくてはならないので、それで疲れた」という人は少 なくないと思う。これは当時は職業プログラマにとっても悩みのタネであった。 Windowsも95やNTになってかなり丈夫(robust)になったようではあるが、それ でも何か事があるとリセットのお世話になることが少なくないようである。と ころがLinuxはアプリケーションの動く空間と、カーネルの動く空間は完全に 厳格に区別をされているので、プログラムが暴走したくらいではリセットをす る必要がない。逆にLinuxのシステムの内容に関する知識がなければ、リセッ トしなくてはならないようなプログラムは書くのが困難であるとさえ言える。 そのため、MS-DOSの時代で苦労したような「何か事があるとリセット」という ようなことはおよそ必要がない。これはプログラミングを入門する人にとって は嬉しいことではないだろうか。

Linuxプログラミングの勧め

最近、プログラムを自分で書く人が少なくなったように思う。プログラミング のことが書かれた雑誌は少なくなったし、実装について書かれた書籍もあまり 見かけない。また、ネット上での会話も「既存のものを動かす」ための会話が ほとんどであり、ちょっとプログラムっぽい話題も、せいぜい移植とか非互換 についての話題だったりする。あまりスクラッチからプログラムを書くような 話題は少ない。

これはいくつか理由があると思うが、だいたい以下のようなところではないだ ろうか?

  1. 実用的なプログラムは巨大化して、純粋なアマチュアの手に負えるもので はなくなった\item OSが複雑化して、実用的なプログラムを書く前に覚え るべきことが多くなり、手に負えなくなった
  2. たいていのプログラムは定番が出来ていて、今さら新規にプログラムを書 く気がしない

これらは一々みんなもっともなことである。私は昔から職業プログラマである から、まだ自分でプログラムを書こうという気はあるのだが、今頃いきなり Windowsのプログラムを見た人なんかは、「これはとても自分の手の出せる領 域ではない」と諦めてしまうのは無理はないように思う。私とて、今さら Windowsのプログラムを進んで書きたいとは思わない。

しかし、Linuxにおいては、そうではない。まだ誰もが手の出せる部分が残っ ているのである。以下にそれを説明しよう。

プログラムの巨大化

Linuxにも確かに単体で巨大なプログラムは少なくないし、実用になるプログ ラムは大きくなる傾向にある。これはWindowsでもLinuxでも同じようなもので ある。

しかし、Linuxは後で述べるように、ちょっとしたプログラムはあまり難しく なく書けるし、バッチ的ツールに関しては、ちょっとしたものでも有効に使う ことは出来る。また、最近はちょっとしたプログラムはperlやawkのようなツー ルで処理することが少なくないが、使われ方に特化したようなプログラムはC で書いても簡単であるし、軽く作ることが出来る。だから、まだまだ小さなプ ログラムが活躍する余地はある。だから、素人が無理して手に負えないような 大きなプログラムを作らなくても、実用的なプログラムを書くことが出るし、 プログラムを作る快感を味わうことが出来る。

プラットホームの複雑化

Windowsのプログラムを書こうと思うと、多くの約束事を理解しなくてはなら ないし、それが上手に使えないとかっこいいプログラムにはならない。 Windows上でちゃんと動くプログラムは、ちゃんとしたWindowsアプリでなくて なならないため、嫌でもそのためのことをやらなくてはならない。DOSの時代 には覚えることも少なかったのであるが、Windowsでは桁違いに増えてしまっ た。そのため、「ちょっとプログラムを書いてみたい」と思っても、なかなか 手が出せなくなってしまった。「それは○○を使えばいいよ」という声もある だろうが、それは単に複雑なシステムにオブラートをかけただけで、本質的に 簡単にしてるわけではないし、バイナリはその分複雑かつ巨大になっている。

Linuxの場合、たとえX配下であっても、いわゆる「シェルプロンプト」を持つ ため、Xと無関係なプログラムをX配下で実行することが可能である。つまり、 window systemを使わない人は、window systemの知識を持つ必要はないし、そ のライブラリをリンクする必要もない。だから、使わない機能については、知 らなくても済むのである。基本的に古き良き時代のMS-DOSプログラミング+α くらいの知識でも十分プログラムを書くことが出来る。

しかも、MS-DOSの時代とは違い、メモリは無限に近く使えるようになっている し、CPUもグンと高速になってもいるので、やれることはうんと増えたし、書 きやすくもなった。資源が豊富になったのはWindows環境でも同じなのである が、Windows環境では「シェルプロンプトの範囲で、せいぜいCUI。多くはコマ ンドラインで」みたいなプログラムを拒絶しているので、資源が豊富になって 書きやすくなった分、プラットホームが要求することが複雑になってしまって いる。Linuxは無理にその複雑なプラットホームを使う必要がないので、複雑 な部分に用のない人は、資源が豊富で楽になったとゆーメリットを享受するこ とが可能なのである。

もちろん様々なライブラリの機能を使って凄いプログラムを書くということも 出来る。ウィンドウライブラリは選択に困るくらい種類があるから、好きなの を選ぶことが可能であるし、データベースでも画面制御でも、非常に便利な機 能を持ったライブラリが選択に困るくらいある。それらを上手に使うことによっ て、かなり少ない工数で素晴しいソフトを書くことは、「簡単である」とまで は言わないが、「ほとんど不可能」と言わなくてはならない程には難しいこと ではない。lsmを読むだけでワクワクするような仕様のライブラリがあったり して、「とにかく試してみたい」という気にもなったりする。それらは使いた ければ使えば良いし、そうでなければ使わなくても良いのである。

このように、Linux上でプログラムを書くことは、「敷居は低く、奥は深い」 のである。これはだんだんにステップアップして行こうと思う人にとっては嬉 しいことである。

定番プログラム

Linuxにももちろん定番プログラムはある。エディタは「ふつ〜Mule」だろう し、イメージビュアは「ふつ〜XV」であるし、WWWブラウザは「ふつ〜NN」で ある。これはあくまで「ふつ〜」であるので、他のものを挙げる人もあるだろ うが、それでもある応用が言われれば、「ふつ〜○○」と言われるアプリはほ ぼきまって来る。

しかし、sunsiteの新着情報を見たり、各ftpサイトのディレクトリリストを見 るとわかるのであるが、既に定番ソフトがある分野でも、どんどん新しいプロ グラムが作られている。それも、「ぽっと出」ではなく、だんだんバージョン も上げられ、ちゃんと育てられているものが少なくない。つまり、ちゃんと新 作が作られているのである。

これにはいくつかの理由があると思う。定番の存在を知らずに作ったとか、何 となく作ってみたかったとかという理由もあるだろう。しかし、定番を無視し てどんどん増え続けるという現状を見ると、どうもこれらのような消極的な理 由ばかりではないように思われる。そこで思うのは、「freeなPC-UNIXという 世界の摸索」が続いているのではないかと思うのである。実は今まで「定番」 とされて来たソフトの多くは、元々WSやミニコンの上で動いていたものであり、 その世界では確かに定番であった。もちろんLinuxもUNIXの仲間であるから、 それらの定番が不便なはずはない。それで今、定番となっているのである。し かし、Linuxの使われ方は、WSやミニコンの使われ方とは随分と違うものでも ある。だから、まだ新しいソフトが定番の地位を持つ可能性は残されているは ずである。逆に言えば、それらWSやミニコンでの定番ソフトにあき足らない人々 が、既に定番ソフトのある世界に対しても、新たなソフトを書いているのでは ないかと思われる。

だから、「既に定番があるから」という理由で新作ソフトを作らないというの は、他のOSは別にして、Linuxに関して言えば理由にならないのである。まだ まだ新作を作る余地は残されているのである。だから、ソフトを作りたいと思っ たら、定番ソフトの存在はとりあえずそれとして置いておいて、自分の欲求に 従って書くのが良いと思う。

さて、次回からはごく初歩的な部分からLinuxプログラミングについて書いて 行く予定である。「ごく初歩」と言えば、もちろん`Hello World'である。


コラム
Linux馬鹿プロジェクト

今回はLinuxのプログラミング関係のプロジェクトの話をしよう。

JEやJFやJG程は有名ではないが、Linuxにはプログラムのためのプロジェクト も存在している。いくつかあるのだが、個人的に一番面白いと思うのは、今回 紹介する「馬鹿(JB == Japan Baka)」である。

この「馬鹿」というのは、何かのアクロニムではない。「馬鹿馬鹿しいプログ ラムを作る」ということで「馬鹿」なのである。だから、いわゆる実用ソフト を作ることは目的としてない。「くだらないプログラムを作りながら、プログ ラミングを楽しんだり、自己主張をしたりしよう」という、遊び心にあふれた プロジェクトである。MLに流れる話題が、時としてアニメネタばかりであった り、それが「重要な話題」として位置付けられていたりすることからもうかが い知れる。

このプロジェクトは元々は「Linux上で『たまごっち』のようなソフトが作れ ないか」という話が発端ではあるが、現在ではプロジェクトと言いながら、 「みんなで一つの目標に向かって行く」といった性質のものではなく、それぞ れが好きなことをやっていて、その中でのアイディア等の情報交換をするのが 主な目的となってしまっている。だから、今のところ「プロジェクトとしての 成果物」といったものは存在しない。個人としての成果物があるだけである。 JNethackのパラメータをいじって遊ぶ人もいれば、「ギャル画専用描画ソフト」 を作ったり、「たまごっち風ソフト」を作っている人もいる。

このプロジェクト絡みのソフトは、ほとんどがスクラッチから書かれている。 また、「楽しいプログラム」ということが目標なので、かなり高度なプログラ ムを書くことになっている人もいるため、「アニメネタ」のメールの陰で、 「ポアソン方程式の応用」だの、「Athena widgetのバグ」だのといった話題 も流れている。名前は「馬鹿」ではあるが、タコではないのである。むしろメ ンバの一人としては、難しそうな材料を使って馬鹿なことをやっているという ところがシャレていると思っている。

とは言え、「楽しいプログラム」「馬鹿馬鹿しいプログラム」が必ずしも高度 なプログラムである必要はないし、「楽しいプログラムを作ろう」というのが 趣旨なので、アイディアのある人は参加すると楽しいだろう。こういったささ いなことから、「プログラミングのルネッサンス」が出来れば、嬉しいように 思う。

このプロジェクトは一応「濃い」ことを期待しているので、「誰でもOK」では ない。そのため参加するにも、自動登録ではなく、私にメールを書いてもらう ようになっている。とは言え、やる気のある人は歓迎なので、こういった「馬 鹿の一人」になりたいと思う人は、遠慮なく私にメールを書いて欲しい。


もどる