Linux(リナックス、他の読みは#「Linux」の読み方で後述)とは、狭義にはUnix系オペレーティングシステムカーネルであるLinuxカーネルを指し、広義にはそれをカーネルとして周辺を整備したシステム全体のことをいう(GNU/Linuxも参照)。
概要
Linuxは、狭義にはLinuxカーネル、広義にはそれをカーネルとして用いたオペレーティングシステムを指す。LinuxはUnix系(英:
Unix like、Unixライク)オペレーティングシステム (OS) の1つとされる。カタカナでは「リナックス」と表記されることが多い(「Linux」の読み方を参照)。Linuxは、スーパーコンピュータ、メインフレーム、サーバ、パーソナルコンピュータ、スマートフォン、組み込みシステム(携帯電話やテレビなど)など、幅広い種類のハードウェアで使用されている。Linuxカーネルは、最初PC/AT互換機で多く用いられていたIA-32向けに開発されたが、その後史上最も多くのハードウェアプラットフォーム向けにリリースされたOSとなった。カーネルについての詳細はLinuxカーネルの記事を参照。現在では特にサーバ、メインフレーム、スーパーコンピュータ用のOSとして首位を走っている。また、携帯電話、ネットワークルータ、テレビ、ハードディスクレコーダ、カーナビゲーションシステム、ゲーム機といった組み込みシステムでもよく使われている。スマートフォンやタブレット端末用プラットフォームAndroidはLinuxカーネルの上に構築されている。Linuxの開発は、フリーかつオープンソースなソフトウェアの共同開発として最も傑出した例のひとつである。Linuxカーネルのソースコードは無償で入手でき、GNU一般公衆利用許諾書のもとにおいて、非営利・営利に関わらず誰でも自由に使用・修正・頒布できる。Linuxは、世界中の開発者の知識を取り入れるという方法によって、あらゆる方面に利用できる幅広い機能と柔軟性を獲得し、数多くのユーザの協力によって問題を修正していくことで高い信頼性を獲得した。デスクトップやサーバ用のLinuxは、Linuxディストリビューションという形でパッケージ化されて配布されている。有名なLinuxディストリビューションとしては、Debian(とその派生であるUbuntu、Linux Mint)、Red Hat Linux(とその派生であるFedora、Red Hat Enterprise Linux、CentOS)、Mandriva Linux/Mageia、openSUSE、Arch Linuxなどがある。各Linuxディストリビューションは、Linuxカーネル、システムソフトウェア、ライブラリ等、巨大なコンパイル済のアプリケーション群を含んでいる。Linuxシステムは、スマートフォンのAndroid OS、家電製品、ゲーム機などの組み込みOSなどとして多用されており、消費者の身の回りの環境を支える存在になっている。デスクトップOSとしてLinuxを使用することは、かつては技術者や上級ユーザだけが行うことというイメージが強かった。しかし最近では、一般ユーザでも容易に使用できるデスクトップ環境が充実したり、非常に簡単にインストールできるディストリビューションが登場したり、各種ハードウェアへの対応や自動設定機能が大幅に向上するなどした結果、それまで縁遠いものとされてきた一般ユーザーの一部にも普及した。デスクトップ環境での使用を念頭に置いているディストリビューションは、典型的には X Window System を含んでおり、それに加えてGNOMEやKDEといったデスクトップ環境が付属している。非力なコンピュータでの使用を考えて、LXDEやXfceといった省リソースなデスクトップ環境を含んだディストリビューションもある。サーバでの利用を想定したディストリビューションなどでは、標準インストールからグラフィカルインタフェースをすべて排除しているものもある。更には、ユーザー自身がソースコードをビルドしてシステムを構成するLinux from Scratchというディストリビューションも存在する。また、Linuxは自由に再頒布できるので、独自のディストリビューションを作ることも自由である。ユーザ空間のシステムツールやライブラリの多くは、リチャード・ストールマンが1983年に立ち上げたGNUプロジェクトによって作られたものであるため、フリーソフトウェア財団 (FSF) はGNU/Linuxという名前を使うことを推奨している。今日ではLinuxの普及に伴い国際規格が策定されている。Linuxカーネルを使用し、Linux Standard Base (LSB) Core Specification (ISO/IEC 23360シリーズ) に準拠したOSが、OSとしてのLinuxであるとされている。2017年のLinux Foundationによる報告書は、99%のスーパーコンピュータ、90%のパブリッククラウド、82%のスマートフォン、62%の組み込み機器がLinuxで動作していると主張している 。
設計
Linuxベースのシステムは、モジュール式のUnix系オペレーティングシステムである。これは、Unixにおいて1970年代から80年代にかけて確立した原則による基本設計から生まれたものである。Linuxカーネルはモノリシックカーネルであり、カーネルは、プロセス管理、メモリ管理、デバイス管理、ネットワーク、ファイルシステムの提供などを行なっている。デバイスドライバは、システムの動作中にモジュールとしてロードするか、カーネルに直接組み込むことができる。カーネルとは別のプロジェクト群がカーネルと対話しており、システムの高水準な機能のほとんどはこれらによって提供されている。GNUが提供するユーザ空間のソフトウェア群は、Linuxシステムの重要な部分である。これらは、標準Cライブラリの最も一般的な実装(GNU Cライブラリ)、Unixシェル、Unixツールの多くを提供しており、オペレーティングシステムの基本的なタスクを実行している。ほとんどのグラフィカルユーザインタフェース (GUI) は、X Window Systemの上に構築されている。インストール済Linuxシステムの構成要素としては以下のようなものが挙げられる:ブートローダ - GRUBなど。コンピュータの電源を入れたときに実行され、Linuxカーネルをメモリ上にロードする。Linuxカーネル - オペレーティングシステムの中核。環境に合わせて、必要なカーネルモジュールも適宜ロードされる。
Init
プログラム - Linuxカーネルによって起動されるプロセスであり、プロセスツリーの根となる。言い換えれば、すべてのプロセスの祖先は
init
である。
init
は、システムサービスやログインプロンプトを起動する。ソフトウェアライブラリ - 他のプロセスによって共有して使われるコード。実行可能形式としてELFフォーマットを使用しているLinuxシステムでは、動的リンカ
ld-linux.so
が共有ライブラリの利用を管理する。プログラム - システムソフトウェア、コマンドシェルやウインドウ環境などのユーザインタフェースプログラム、その他のアプリケーションプログラムなど。
ユーザインタフェース
Linuxシステムのユーザインタフェース(シェルとも呼ばれる)は、コマンドラインインタフェース (CLI) とグラフィカルユーザインタフェース (GUI) のどちらか、またはハードウェアに搭載されているコントロール(これは組み込みシステムでよくみられる)である。デスクトップシステムではGUIが一般的だが、GUI環境でも端末エミュレータウインドウや仮想コンソールを通してCLIインタフェースを利用できる。Unixの標準的ツールを含むLinuxの低水準な構成要素のほとんどはCLIだけで使用できる。CLIは、自動化や繰り返し作業に適しており、非常にシンプルなプロセス間通信(パイプ)によるコマンドの連携もサポートしている。沢山のユーザインタフェースが存在するが、デスクトップシステムにおいて最も名の知られたユーザインタフェースとしては、デスクトップ環境のGNOME、KDE、Unity、Xfceが挙げられる。ほとんどのユーザインタフェースはX Window Systemの上に構築されている。他のGUIは Xウィンドウマネージャに分類されることがあり、その例としてFVWM、Enlightenment、Window Makerなどがある。これらは最小主義的なデスクトップ環境を提供する。ウンドウマネージャはウインドウの配置や外観をコントロールする手段を提供するとともに、X Window Systemとのやりとりを行う。GNOMEやKDEなどのデスクトップ環境はウインドウマネージャを標準で含んでいるが(例えば、GNOMEはMutter、KDEはKWin、XfceはXfwm)、他のウインドウマネージャも選択できる。
グラフィックス
Linuxのグラフィクスは、アプリケーションとディスプレイサーバ・カーネルモジュールが連携して描画を実現している。グラフィクスのアーキテクチャは幾度かの構成更新を重ねて、直接的・間接的な2D・3Dレンダリングをサポートしている。初期のLinuxのグラフィクスでは、アプリケーションはX11の基礎的な機能をXlibを通して利用していた。アプリケーションはXlib・Device-Independent X(DIX)・Device-Dependent X(DDM)・グラフィクスハードウェアの各ライブラリを経由して、間接的にグラフィクスハードウェアにアクセスする。Xlibはユーザースペースのライブラリ、DIXはX11のDDMラッパーライブラリ、DDMはX11のグラフィクスドライバとして振る舞う。Xlib・DIX・DDMを経由した構成ではハードウェアアクセラレーションは利用出来なかった。XFree86はルート権限でX Window Systemを実行することで、X WindowアプリケーションがXlibで2Dレンダリングを利用する際にハードウェアアクセラレーションを利用出来る機構を採用した。X Window Systemをルート権限で実行してハードウェアアクセラレーションを利用する機構は、その後のグラフィクスフレームワークで広く採用されることになった。また、XFree86はGLX APIを実装した
Utah GLXを取り込み、OpenGLアプリケーションがOpenGLライブラリで3Dレンダリングを利用する際にハードウェアアクセラレーションを利用出来る機構を採用した。2D・3Dレンダリングは全く異なるプログラミング技法であるため、XlibとOpenGLはそれぞれ分離した2D・3DグラフィクスドライバとしてXFree86に組み込まれた。同時期にLinuxカーネルは、カーネルレベルでグラフィクスハードウェアに直接アクセスするフレームバッファドライバを採用した。フレームバッファドライバはXFree86のXlib・OpenGLと同様に2D・3Dグラフィクスドライバとして利用可能である。ただし、Xlib・OpenGLとフレームバッファは互いに競合するレイヤーにあり、X Windowアプリケーションとフレームバッファアプリケーションはいずれか一方のみを排他的に利用する必要があった。また、XFree86の提供する機構はユーザースペースのライブラリが直接グラフィクスハードウェアにアクセスするため、セキュリティの観点で問題があった。Linuxカーネルはユーザースペースのライブラリが直接グラフィクスハードウェアにアクセスを不要にするため、
Direct Rendering Manager(DRM)を採用した。最初にOpenGLがDRMを経由するDirect Rendering Infrastructure(DRI)ドライバに切り替え、続いてXlib・フレームバッファがDRMを経由したレンダリングに切り替えた。これにより、従来のX Windowアプリケーションとフレームバッファアプリケーションの競合、XFree86ライブラのセキュリティ問題を解決している。ディスプレイサーバはX11 APIを実装したXFree86・X.Org Server、UbuntuのUnity用に開発されたMir、Android用のSurfaceFlingerなどがある。
-
-
-
-
相互運用性
Linuxベースのディストリビューションは、他のオペレーティングシステムやコンピューティング標準との相互運用性を念頭に置いて開発されている。Linuxカーネルを用いて構築されたOS環境は、一般にはUnix互換OSに分類される。ただし厳密にはUnixとして扱うのは適切ではない。Linuxシステムは、可能な限りPOSIX、SUS、国際標準化機構、米国国家規格協会などの標準を順守しようとしているが、現在までにPOSIX.1の認証を受けたディストリビューションは Linux-FT ただ一つである。POSIXの認定には少なくない時間と予算が必要であり、また認定はバージョン単位となるため、ほとんどのディストリビューションではこれらの制約によって見送らざるを得ない。しかし、LinuxをOSプラットホームとして普及させるためには、ディストリビューションに依存しない一定の基準が必要である。そこで、Linux Foundationを活動母体として、LinuxのOSプラットホームとしての仕様をLinux Standard Base (LSB) として制定した。Linux Standard Baseは、2006年には、ISO/IEC 23360シリーズとして国際規格として認定された。現在、主要な商用ディストリビューションは、The Open Groupにより、Linux Standard Baseに準拠していることが認証されている。なお、非商用ディストリビューションについては、Linux Standard Baseに準拠していても、時間や予算的な制約などによって、認証を受けていないものが多い。開発
他の有名な現代的OSとの主要な違いとして、Linuxカーネルおよびその他の構成要素がフリーかつオープンソースであることが挙げられる。そのようなOSはLinuxだけではないが、Linuxはその中でも突出して広く使われている。フリーかつオープンソースなライセンスの一部は、コピーレフトという原理に基づいている。コピーレフトはある種の相互関係と捉えられる。コピーレフトなライセンスで公開されているソフトウェアのソースコード片は自由に利用できるが、それを利用して作ったソフトウェアを一般に頒布する場合はそれ自身もコピーレフトなライセンスでソースコードを公開しなければならない。最も一般的なフリーソフトウェアライセンスのひとつである「GNU 一般公衆利用許諾書」(GNU GPL) はコピーレフトの一形態であり、LinuxカーネルやGNUプロジェクトの多くのコンポーネントのライセンスとして採用されている。Linuxディストリビューション(俗にディストロ (distro) と呼ばれる)は、システムソフトウェアおよびアプリケーションソフトウェアのパッケージ群およびそれらの構成を管理するプロジェクトである。Linuxディストリビューションは、ソフトウェアパッケージの集合(リポジトリと呼ばれる)をインターネット上で提供しており、ユーザはそれをネットワークを通じてダウンロードし、インストールできる。Linuxディストリビューション
Linuxのカーネル本体はソースコードとして単独で公開されており、他のプログラムによってバイナリへとコンパイルする必要がある。また、サーバやアプリケーション、ウィンドウシステムなどのアプリケーションプログラムを動作させるためには各種のライブラリが必要である。しかし、このような環境をゼロから構築して運用する作業は難解かつ非常に煩雑であり、Linuxを実用したいユーザーが逐一実行することは現実的でない。このため、Linuxディストリビューションがいくつも作られている。Linuxディストリビューションは、Linuxカーネル、ライブラリ、システムソフトウェア、アプリケーションソフトウェアなどをパッケージとしてまとめて、それをインターネットなどで頒布している(多くの場合、パッケージはコンパイル済のバイナリが収められている)。Linuxディストリビューションは、カーネルのデフォルト設定、システムセキュリティ、雑多なソフトウェアパッケージ群が協調して動作するようにするための調整、デフォルト設定ファイルの用意などもユーザに代って行なっている。これによりユーザは、システムの構築・運用に頭を悩ませることなく、手軽にLinuxシステムを使用できる。多くのLinuxディストリビューションでは、カーネル、ライブラリ、システムツール、コマンドラインシェル、コンパイラ、テキストエディタ、X Window System、ウィンドウマネージャ、デスクトップ環境、科学技術計算ツール、オフィスアプリケーション、画像処理ソフトウェアなど、何万ものアプリケーションパッケージを提供している。ユーザはその中から必要なパッケージをダウンロードすることで、自分の用途に合ったシステムを構築できる。ディストリビューションは通常、パッケージマネージャと呼ばれるソフトウェアを提供しており、アプリケーションやシステムソフトウェアのインストール・更新・削除をひとつのツール上で簡単に行えるようにしている。各ディストリビューションは、個人や、緩く結束した集団や、ボランティア団体や、営利企業によって管理されている。Linuxディストリビューションに含まれるソフトウェアパッケージの多くはフリーソフトウェアライセンスを採用している。フリーソフトウェアライセンスは、商業利用を明示的に許諾しており、さらにはそれを推奨している。多くのLinuxディストリビューションは無償で入手できるが、いくつかの大企業は商用版ディストリビューションを販売することで利益を得ている。これらのディストリビューションでは、(特にビジネスユーザ向けの)サポートサービスが提供されており、さらに、プロプライエタリなサポートパッケージや、大量のインストールを行ったり管理作業を簡略化するための管理者向けツールなどが含まれている。コミュニティ
各Linuxディストリビューションは、開発者およびユーザコミュニティによって駆動している。一部のベンダーは、ディストリビューションの開発と資金供給をボランティアベースで行っており、この有名な例としてはDebianがある。商業ディストリビューションのコミュニティ版を公開しているベンダーもある。この例としては、レッドハットのFedoraやノベルのopenSUSEがある。多くの都市や地域には、Linuxユーザー・グループ (LUG) として知られる地域団体がある。彼らはミーティングを開いて、講習会やデモンストレーション、技術サポート、新規ユーザへのOSのインストールなどを行なっている。多くのインターネットコミュニティも、Linuxユーザや開発者のサポートを提供している。ほとんどのディストリビューションがIRCのチャットルームやニュースグループを持っている。その他のサポート手段としてはインターネットフォーラムがある。Linux全般を扱うフォーラムもあるし、ディストリビューションが自身のフォーラムを運用していることもある。Linuxに焦点を当てた技術系ウェブサイトもいくつか存在する。Linuxの雑誌は、しばしば付録ディスクとしてソフトウェアやLinuxディストリビューションを含めている。商用版ディストリビューションを販売している企業などは、Linuxシステムのコンポーネント開発やフリーソフトウェアの開発にも貢献している。とあるLinuxカーネルの解析が示すところによると、2008年12月から2010年1月までに書かれたコードのうち75%は企業によって開発されたものであり、残りの18%がボランティア、7%が未分類となっている。これらの企業としては、デル、IBM、ヒューレット・パッカード、オラクル、サン・マイクロシステムズ、ノベル、ノキア、レッドハットなどがある。したがって、Linuxディストリビューション全体と個々のベンダのあいだには共生関係があると考えられるかもしれない。プログラミング
ほとんどのLinuxディストリビューションは、何十ものプログラミング言語をサポートしている。Linuxアプリケーションおよびオペレーティングシステムを開発するのに使われているツール群の多くはGNUツールチェーンというものの中にみられる。これには、GNUコンパイラコレクション (GCC) や GNU build system が含まれている。GCCは、C言語、C++、Ada、Java、Fortranのコンパイラを提供している。今後GCCを置きかえる可能性がある候補として、2003年に初公開されたLLVMプロジェクトがある。LLVMプロジェクトは、LLVM基盤のひとつの利用例として、C言語/C++/Objective-Cに対応した近代的なオープンソースコンパイラであるClangを提供している。プロプライエタリなLinux用コンパイラとしては、Intel C++ Compiler、Sun Studio、IBM XL C/C++ Compilerなどがある。ほとんどのディストリビューションは、Perl、Python、Ruby、PHPといった動的プログラミング言語もサポートしている。また、C# (Mono) 、Vala、Schemeといった言語もサポートしている。各種のJava仮想マシンやJava開発キットもLinuxで動作する。これにはオリジナルのJVM、IBMのJ2SE RE、その他のオープンソース実装が含まれる。GNOMEやKDEは良く知られたデスクトップ環境であり、アプリケーション開発のためのフレームワークを提供している。この2つのプロジェクトはそれぞれGObject/GTKとQtに基づいており、両者ともC言語/C++だけでなく、様々な言語用のバインディングが提供されている。Linuxでは、いくつもの統合開発環境 (IDE) も利用することができ、例えば、Anjuta、Eclipse、Geany、ActiveState Komodo、KDevelop、Lazarus、MonoDevelop、NetBeans、Qt Creator、Omni Studioなどがある。しかしながら、IDEを使わずに、テキストエディタやその他の個別のツールを組み合わせて開発を行う者も多い。利用状況
Linuxは非常に幅広く移植されているOSカーネルであり、Linuxカーネルは非常に多様な環境において多様な用途で使われている。コンピュータアーキテクチャの観点ではARMベースのiPAQからメインフレームのIBM System z10まで対応し、デバイスの観点では携帯電話からスーパーコンピュータまで対応する。デスクトップやサーバでの汎用に使われることを想定したディストリビューションだけでなく、特定の目的に特化したディストリビューションも存在する。それらの目的は例えば、特定のコンピュータ・アーキテクチャのサポート、組み込みシステム用、安定性の重視、セキュリティの重視、特定のユーザグループを想定、リアルタイム処理のサポートなどである。加えて、あえてフリーソフトウェアのみで構成したディストリビューションもある。300を越えるディストリビューションがプロジェクトを継続しているが、汎用のディストリビューションとして広く名が知られているものは十数個程度である。サーバ・メインフレーム・スーパーコンピュータ
Linuxディストリビューションは、サーバ用のオペレーティングシステムとして長年使われており、その領域においてすでに傑出している。2006年にNetcraftは、10社の最も信頼できるインターネットホスティング企業のうち8社がLinuxディストリビューションを使っていると報告した。2008年6月では、Linuxが5社、FreeBSDが3社、マイクロソフト社製品が2社だった。2010年では、Linuxが6社、FreeBSDが2社、マイクロソフト社製品が1社だった。Linuxディストリビューションは、俗にLAMPと呼ばれるサーバソフトウェアの組み合わせの基盤となっている。LAMPは、開発者のあいだで人気を博し、ウェブサイトのホスティングにおいて一般的な方法のひとつとなった。Linuxディストリビューションは、メインフレームの世界でも人気を増している。2009年にはIBMが、メインフレームベースの企業向けLinuxサーバを主に販売していくと報告した。Linuxディストリビューションはスーパーコンピュータ用のOSとしても一般的に使われている。2010年にはスーパーコンピュータの性能ランキングであるTOP500のリストのうち459システム (91.8%) がLinuxを使用していた。その後もLinuxディストリビューションを採用するシステムの割合は伸び続け、2017年11月のTOP500ではすべてのスーパーコンピュータで利用された。2008年には東京証券取引所の基幹システムのひとつ「派生売買システム」でLinuxが使われるようになった。 以降、東証ではシステムのLinux化が進められている。デスクトップ
ほとんどのLinuxディストリビューションはグラフィカルインタフェースを含んでおり、例えばGNOME (シェルとしてはGNOME Shell、Unity、Cinnamonなど) や KDE(Plasma) がある。デスクトップにおけるLinuxのパフォーマンスは論争を呼ぶ話題であった。2007年にはCon Kolivasが、サーバでのパフォーマンスばかりに注力するLinuxコミュニティを批判した。彼はデスクトップへの関心のなさに苛立ち、Linuxカーネルの開発をやめた。その後、Linuxのデスクトップ環境を改善するための大量の開発が開始された。多くの有名なアプリケーションは幅広いOSで動作する。例えば、Mozilla Firefox、LibreOffice、BlenderなどはLinuxを含む主要なOSで動作する。加えて、Linux用のアプリケーションとして最初に開発され、それが人気を得たために他のOS(WindowsやmacOSなど)に移植されたものもある。この例としてはGIMPやPidginなどが挙げられる。さらにLinuxをサポートするプロプライエタリなソフトウェアも増えてきている。ゲームをLinuxに移植した企業もある。有名なゲーム配信プラットフォームSteamもLinuxに対応した。アニメーションや視覚効果のスタジオではLinuxがよく使われているため、Maya、SoftimageShake、といったソフトウェアはLinux版が用意されている。フリーソフトウェア開発の共同作業の性質によって、世界中に分散したボランティアチームがソフトウェアの翻訳を行うことが可能になっている。このため、Linuxシステムは、費用対効果の問題で営利企業がOSをローカライズできないようなマイナーな言語にも対応していることがある。例えば、シンハラ語版のKnoppixは、Windows XPがシンハラ語に対応するかなり前から利用可能だった。ソフトウェアのインストールや削除は、典型的にはSynapticやPackageKit、YUMなどのパッケージマネージャを通して行う。多くのディストリビューションは何万ものソフトウェアパッケージを抱えているが、オフィシャルのリポジトリからソフトウェアを見つけられない場合は、非公式のリポジトリやコンパイル済パッケージを使ってソフトウェアをインストールすることもできる。もちろんソースコードを自分でコンパイルすることもできるが、これは概して初心者にとっては挑戦的な課題である。とはいえ、現代的なディストリビューションにおいて、ソースコードを自分でコンパイルしなければならない状況になることは少ない。1枚のCD-ROMメディアやUSBメモリからLinuxを起動できるLive CDやLive USBというものもある。Live CD/USBは、ハードディスクにシステムをインストールすることなしにOSを起動できるように作られている。一部のディストリビューションのインストール用メディアはLive CD/USBとしても動作するようになっており、ハードディスクにインストールする前にデスクトップ環境を試すことができる。特定の用途に特化した単機能のLinux Live CD/USBも存在する。例えば、ハードディスクのパーティションを編集するソフトウェアを搭載したGParted Live CD/USBがある。