サーバに戻る

Linux

0件の登録があります。

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などがある。