###序章

一般的な使用法では、「Linux」は、Linuxカーネルを中心に構築されたオペレーティングシステムディストリビューションのグループを指すことがよくあります。 ただし、厳密な意味では、Linuxはカーネル自体の存在のみを指します。 完全なオペレーティングシステムを構築するために、Linuxディストリビューションには、GNUプロジェクトやその他のソースからのツールやライブラリが含まれていることがよくあります。 最近、より多くの開発者がLinuxを使用してモバイルアプリケーションを構築および実行しています。 また、カーネル上でオペレーティングシステムを実行するChromebookなどの手頃な価格のデバイスの開発においても重要な役割を果たしてきました。 一般的なクラウドコンピューティングおよびサーバー環境では、いくつかの実用的な理由からLinuxが一般的な選択肢です。

  • そのディストリビューションは最新のままであり、他の開発者のコミュニティによってサポートされています。
  • さまざまなハードウェアで実行でき、既存のシステムと一緒にインストールできます(ローカル開発環境で役立つ特性)。
  • 既存のリポジトリからの一元化されたソフトウェアのインストールをサポートします。
  • そのリソース要件は低いです。
  • 開発者がサーバー用のアプリケーションエコシステムとツールを構築しているとき、それはしばしば頭に浮かぶことであり、高レベルの互換性につながります。
  • オペレーティングシステムの動作に必要な変更を加えます。

Linuxはまた、その起源をフリーでオープンソースのソフトウェアの動きにまでさかのぼります。その結果、一部の開発者は倫理的理由と実践的理由の組み合わせでLinuxを選択します。

  • 一部の開発者にとって、Linuxの使用は、アクセシビリティと表現の自由への取り組みを表しています。
  • Linuxコミュニティは、一部の開発者にとっても魅力的です。質問がある場合は、このコミュニティによって作成されたリソースを参照するか、多くのアクティブなメンテナの1人に直接連絡することができます。

開発者コミュニティ内(およびそれ以降)でのLinuxの役割を理解するために、この記事では、UnixによるLinuxの簡単な歴史の概要を説明し、いくつかの一般的なLinuxディストリビューションについて説明します。

Unixのルーツ

Linuxのルーツは、堅牢なマルチユーザーオペレーティングシステムを開発するという目標を共有する2つのプロジェクトであるUnixとMulticsにあります。

Unixの始まり

Unixは、ベル研究所のコンピュータサイエンス研究センターでのMulticsプロジェクトの反復から開発されました。 Bell LabsなどでMulticsに取り組んでいる開発者は、シングルレベルストレージの動的リンク(実行中のプロセスが別のセグメントをアドレス空間に追加して実行できるようにすることを要求できる)を備えたマルチユーザーオペレーティングシステムの構築に関心を持っていました。そのセグメントのコード)、および階層ファイルシステム。

Bell Labsは1969年にMulticsプロジェクトへの資金提供を停止しましたが、KenThompsonやDennisRitchieを含む研究者グループは、プロジェクトのコア原則に取り組み続けました。 1972-3年に、彼らはシステムをCで書き直すことを決定しました。これにより、Unixは独自の移植性を備えました。他の最新のオペレーティングシステムとは異なり、ハードウェアからの移行とハードウェアの寿命の両方が可能です。

Bell Labs(後のAT&T)での研究開発は継続され、Unix System Laboratoriesは、Sun Microsystemsと協力して、商用Unixベンダーに広く採用されるバージョンのUnixを開発しました。 その間、研究は学界、特にカリフォルニア大学バークレー校のコンピュータシステム研究グループで続けられました。 このグループはBerkeleySoftwareDistribution(BSD)を作成しました。これは、さまざまなオペレーティングシステムに影響を与え、その多くは現在も使用されています。 歴史的に注目されている2つのBSDディストリビューションは、macOSなどの製品の基盤となったNeXTによって開発されたオペレーティングシステムであるNeXTStepと、Linuxの開発時にLinusTorvaldsの比較基盤を形成した教育用オペレーティングシステムであるMINIXです。

Unixの主な機能

Unixは、明快さ、移植性、および同時性の原則に重点を置いています。

  • 明確さ:Unixのモジュラー設計により、機能を制限された定義済みの方法で実行できます。 そのファイルシステムは統合され、階層化されているため、データの操作が簡単になります。 その前身のいくつかとは異なり、Unixは数百(数千ではなく)のシステムコールを実装しており、それぞれのシステムコールは単純で明確な目標を持つように設計されています。
  • 移植性:UnixをCで作成することにより、ベル研究所のグループは、Unixを大規模な使用と採用に向けて位置付けました。 Cは、メモリへの低レベルのアクセス、最小限の実行時サポート、および言語とマシン命令間の効率的な関係を持つように設計されました。 Cの基礎は、Unixが適応可能であり、さまざまなハードウェアで簡単に実行できることを意味します。
  • 同時性:Unixカーネルは、複数のユーザーとワークフローを維持するという目標(Multicsプロジェクトで共有)に合わせて調整されています。 カーネルスペースは、複数のアプリケーションを同時に実行できるUnixのユーザースペースとは異なります。

Linuxの進化

Unixは開発者に重要な質問を投げかけましたが、初期のイテレーションでもプロプライエタリのままでした。 したがって、その歴史の次の章は、開発者が無料でオープンソースの代替案を作成するためにその中でどのように取り組んだかという話です。

オープンソース実験

リチャード・ストールマンは、Unixの非独占的な代替案を作成するように促された開発者の中心人物でした。 MITの人工知能研究所で働いている間、彼はGNUプロジェクト(「GNUはUnixではない!」の再帰的)の作業を開始し、最終的に1984年に研究所を去り、GNUコンポーネントを自由ソフトウェアとして配布できるようになりました。 GNU HURDとして知られるGNUカーネルは、1985年に設立され、現在ストールマンが率いるフリーソフトウェアファウンデーション(FSF)の焦点となりました。

その間、別の開発者がUnixの無料の代替手段であるフィンランドの学部生LinusTorvaldsに取り組んでいました。 Torvaldsは、MINIXのライセンスに不満を感じた後、1991年8月25日にMINIXユーザーグループに、MINIXに似た独自のオペレーティングシステムを開発していることを発表しました。 Linuxカーネルは当初GNUCコンパイラを使用してMINIXで開発されましたが、1994年にTorvaldsでカーネルのバージョン1.0をリリースした開発者のコアを持つユニークなプロジェクトになりました。

Torvaldsは、GNU Cコンパイラを含むGNUコードを彼のカーネルで使用しており、多くのLinuxディストリビューションがGNUコンポーネントを利用していることは事実です。 Stallmanは、「Linux」という用語を「GNU / Linux」に拡張するよう働きかけました。これは、Linuxの開発におけるGNUプロジェクトの役割と、GNUプロジェクトとLinuxカーネルを育んだ根本的な理想の両方を捉えると主張しています。 今日、「Linux」は、LinuxカーネルとGNU要素の両方の存在を示すためによく使用されます。 同時に、多くのハンドヘルドデバイスやスマートフォンの組み込みシステムは、GNUコンポーネントがほとんどまたはまったくないLinuxカーネルを使用することがよくあります。

Linuxの主な機能

LinuxカーネルはUnixから多くの目標とプロパティを継承していますが、以前のシステムとは次の点で異なります。

  • そのコアコンポーネントはカーネルであり、他のオペレーティングシステムコンポーネントから独立して開発されています。 これは、Linuxがさまざまなソース(GNUなど)から要素を借用して、オペレーティングシステム全体を構成することを意味します。
  • これは無料でオープンソースです。 開発者のコミュニティによって維持されているカーネルは、 GNU General Public License (GNUプロジェクトでのFSFの作業の派生物)の下でライセンスされており、ダウンロードおよび変更できます。 GPLは、二次的著作物は元のソフトウェアのライセンス条項を維持しなければならないと規定しています。
  • Unixに似たモノリシックカーネルを備えていますが、必要に応じてカーネルコードを動的にロードおよびアンロードできます。
  • 従来のUnix実装とは異なり、対称型マルチプロセッサ(SMP)をサポートしています。 これは、単一のオペレーティングシステムが、メインメモリを共有し、すべてのI/Oデバイスにアクセスする複数のプロセッサにアクセスできることを意味します。
  • そのカーネルはプリエンプティブであり、Unixとのもう1つの違いです。 これは、スケジューラーが実行中にドライバーまたはカーネルの別の部分でコンテキストスイッチを強制できることを意味します。
  • そのカーネルは、スレッドと通常のプロセスを区別しません。
  • コマンドラインインターフェイス(CLI)が含まれ、グラフィックユーザーインターフェイス(GUI)を含めることもできます。

開発者は今日、多くの人気のあるLinuxディストリビューションを維持しています。 最も長い歴史を持つのはDebianで、これは50,000のソフトウェアパッケージを持つ無料のオープンソースディストリビューションです。 Debianは、CanonicalLtdが資金提供するもう1つの人気のあるディストリビューションUbuntuに影響を与えました。 UbuntuはDebianのdebパッケージ形式とパッケージ管理ツールを使用しており、Ubuntuの開発者は変更をDebianにプッシュバックします。

Red Hat、 Fedora 、およびCentOSの間にも同様の関係があります。 Red Hatは1993年にLinuxディストリビューションを作成し、10年後、その取り組みをRed Hat Enterprise LinuxとFedoraに分割しました。これは、LinuxカーネルとGNUプロジェクトの要素を利用するコミュニティベースのオペレーティングシステムです。 Red Hatは、Webサーバー用のもう1つの人気のあるLinuxディストリビューションであるCentOSプロジェクトとも関係があります。 ただし、この関係には有料のメンテナンスは含まれていません。 Debianと同様に、CentOSは開発者のコミュニティによって維持されています。

結論

この記事では、UnixにおけるLinuxのルーツとその定義機能のいくつかについて説明しました。 LinuxとUnixのバリエーション(FreeBSDを含む)の歴史についてもっと知りたい場合は、FreeBSDシリーズが良いステップかもしれません。 もう1つのオプションは、Linuxの使用を開始するための入門シリーズを検討することです。 Linux のファイルシステムレイアウトのこの紹介、Linux VPS でファイルを検索するための検索と検索の使用方法に関するこのディスカッション、またはこの紹介も確認できます。コマンドラインの正規表現に変換します。