Linux
読み:リヌクス
外語:Linux

 フィンランドのリヌース・トーヴァルト(Linus Benedict Torvalds)を開発リーダーとして作られているUNIX互換オペレーティングシステム(OS)の一つ。フリーソフトウェアとして作られたPC UNIX中で、最も成功したOSである。
目次

情報

概要

由来
 当時フィンランドのヘルシンキ大学に在籍していたリヌースにより、MINIX風のフリーなオープンソースOSとして作られた。
 MINIXというのは、かつてアンドリュー・タネンバウム(Andrew Stuart Tanenbaum)が学生の教材用として作ったOSで、これはPC/AT互換で動作する16ビットOSである。LinusはMINIXを参考に、386マシンで動作する本格的な32ビットOSを作ることを思い立ったのである。
 この由来により、元々Linuxはパソコン用のOSであり、移植性なども全く考慮されていなかった。多くの尽力により改良が進み、旧DECのAlphaやSun MicrosystemsのSPARCなどのワークステーション機、更にはApple ComputerのPower MacやシャープのZaurus、ソニーのPlayStation2などなど、様々な環境に移植されている。
 Linuxの開発開始は1991(平成3)年4月で、最初のバージョン0.01(linux-0.01.tar.Z)は1991(平成3)年9月に公開された。
 Linuxの初のアナウンスは、1991(平成3)年10月5日にcomp.os.minixにて行なわれたもので、この呼びかけに多くのプログラマーが応え、現在のような優れたOSが作り上げられてゆくことになる。

名前
 「Linux」の名の由来は三説あり、はっきりしない。
 そもそもLinus自身が付けた名前ではなく、勝手に付けられた名前LinuxをLinusが承認したことから、このようなことになった。
 読みづらいスペルのため色々に読まれている点も特徴の一つ。日本ではもっぱら「リナックス」と呼ばれ、「リヌクス派」との衝突が絶えないのも特徴。なお、作者リヌースは「リヌクス」と発音しているらしい。

フルスクラッチ
 AT&TのUNIXなど、既存のUNIXのソースコードは一切使わず、全て0から、フルスクラッチで書き起こされた完全にオリジナルのUNIX互換カーネルである。
 POSIX規格に準拠するように作られているため、他のUNIXとの互換性などは、特に問題とならないレベルになっている。ただし、LinuxカーネルとしてはPOSIXは取得されていない。一部のディストリビューションがPOSIXを取得しているに過ぎない。また同様に、The Open GroupからUNIXとしての商標も取得していない。このためLinuxは、UNIX互換OS、あるいはUNIX風OS、といった曖昧な表現をされる。
 このLinuxは現在GPLで配布されており、GNUの悲願だったUNIX風のフリーOSは、まずLinuxにより達成されたのである。

特徴

カーネル
 Linuxとは本来、OSの「カーネル」のことで、これを「Linuxカーネル」という。しかし、これのみでは動作しない。カーネル以外にも、必要なソフトウェアはたくさんある。
 そこでその他の必要なソフトウェアを添付したものがSlackware、Red Hat、MkLinux、Kondaraなどといった名称で配布されているパッケージであり、これをLinuxディストリビューションと呼ぶ。
 また、現在のカーネル設計モデルのトレンドはMach等に代表されるマイクロカーネルであるが、Linuxはモノリシックカーネルである点も特徴である。この点でLinuxは設計が古い、と批評されることもしばしばある。
 作者Linusはこの点について、マイクロカーネルは多少良い点はあるが遅くて書くのも大変、モノリシックカーネルは一つのプログラムが全機能を果たすので書きやすくなる、としている。

バイナリの互換性

原則非互換
 Linuxには様々なディストリビューションが存在する。あるディストリビューションで作った実行形式ファイルを、違うディストリビューションに持って行ったとしても、動作するとは限らない。
 現在のLinuxは実行ファイルの形式にELFを採用しておりこれは既存全Linux共通であるが、非互換の問題の多くはライブラリの相違によって生じている。
 ライブラリを静的リンク(スタティックリンク)すれば問題の発生率は下がると見込まれるが、巨大なライブラリを静的リンクした巨大な実行形式は明らかに非効率であり、非現実的である。
 基本的にUNIXおよびUNIX風OSの互換性は「ソース互換」であり、ソースプログラムで互換性が維持されればよいという考え方がある。そのためバイナリレベルでの互換性までは考慮されておらず、このように市販ソフトウェアの普及を阻害するような状況が放置されている。

互換性確保方法
 それでもLinuxでバイナリ互換を維持するには、次のような条件を満たす必要がある。
 Cなら可能性はなきにしもあらずだが、C++でこれを実現することはほぼ不可能だろう。
 Windowsの場合は互換性を大切にする保守的思想があり、構造体仕様変更などがある場合はAPI名を変更し(xxxに対してxxxExなど)新旧両方に対応する。
 しかしLinuxは設計思想が明らかにおかしく、カーネルごとの互換性は全く考慮されていない。あるカーネルバージョンから突如構造体の仕様が変わることも珍しくない。従って、システムコールを自分で呼ぶ場合、カーネルバージョンはあるバージョン限定とならざるを得ないのである。
 こういったごく基本的な問題の解決が無い限り、LinuxにWindows並の(ゲームを含めた)市販ソフトウェアが揃うことは無く、もってLinuxそのものが普及することも無いであろう。

再検索