したがって、GNU / Linuxは、Linux kenel、gcc、gnu-binutils、Gnomeデスクトップなど、少なくとも複数のプログラムで構成されるオペレーティングシステムです。
LinuxディストリビューションGNUを作成するのはなぜですか?カーネルをコンパイルするためのツールですか?ディストリビューションに付属のツールですか?
Linuxベースですが、GNUではないすべての機能を備えたデスクトップオペレーティングシステムはありますか?
答え1
これフリーソフトウェア財団は次のように信じています。ほとんどのLinuxディストリビューションは、実際にはLinuxカーネルを使用するGNUシステムです。彼らは、Linuxが登場する前に、GNUがフリーオペレーティングシステムを開発するための長期プロジェクトであったという事実に基づいて、これらの主張をしています。カーネルは最後の行方不明の部分にすぎません。。ほとんどすべてのLinuxベースのデスクトップとサーバーのディストリビューションは、少なくともいくつかのGNUコンポーネントを使用し、おそらく最も重要なことは正しいです。GNU Cライブラリ(グリBC)、GNUコアユーティリティ(coreutils)と吹くシェル。さらに、Linuxカーネルの開発は本質的にGCCに関連しています。GCC拡張の活用。
一部の組み込みシステム、特にGoogleのAndroidは、GNUコンポーネントやライブラリを使用していません。たとえば、Androidでは、GNU CライブラリがGoogleの独自のBSDベースのBionic Cライブラリに置き換えられました。 FSFは、以下のシステムに言及することに同意します。「GNUシステム」または「GNU/Linux」しかし、一方で、彼らはこれらのシステムが単に「Linux」システムと呼ばれることを望んでいません。少なくとも、私たちはカーネルを構築するためにGNUツールを使用することに合意があるようだと結論付けることができます。いいえシステムを「GNUシステム」にします。
答え2
GNU/Linuxという用語は1990年代初頭にさかのぼります。
1991年、Linus Torvaldsはヘルシンキの彼の寝室でLinuxカーネルプロジェクトを始めました。しばらくして、Linuxカーネルはインターネットの発展に支えられ、かなりの関心を集め始めました。
Richard StallmanのGNUプロジェクトは、まだHURDマイクロカーネルを計画されたGNUオペレーティングシステムのカーネルとして使用する予定でした。しかし、新しいLinuxカーネルプロジェクトを中心に、Linuxディストリビューション(Linuxカーネルに基づく無料のUnix系オペレーティングシステム)が形成され始め、Stallmanは興味を持っています。 1993年、Ian Murdockの指導の下でDebianプロジェクトが始まったとき、FSFはこの若いプロジェクトに財政支援を提供しました。しかし、Debian の開発者は、一部の技術的な問題のため、すぐに Stallman と FSF と別れました。たとえば、1つの問題は、Stallmanがプログラムでデバッグシンボルを維持しようとする一方、Debianはそれを削除しようとしていることです。
DebianとFSFが分かれた後、StallmanはDebianをGNU / Linuxと呼ぶように依頼しました。 Murdochが彼にリーダーシップを引き渡したので、Bruce Perranceに要求がありました。組織が互いに友好的に別れ、共通の目標を共有したので、Debian開発者は要求されたとおりにしました。もちろん、Stallmanはこれらの名前を独立して宣伝しましたが、実際のLinuxベースのオペレーティングシステムが自分の言及に協力することは、これらの名前の使用を促進するために重要でした。
Stallmanが提示した理由は次のとおりです。(a)Linuxカーネルを除くシステムの中心は主にGNUツールです。 (b)Linuxカーネルは、ある意味でGNUプロジェクトの頂点/完成です。ジョブを取得するにはカーネルが存在しているかどうかはかなりなので、人々にGNUプロジェクトの異常を認め、思い出させる方法としてこの名前を使用する必要があります。理由(a)は、Linuxベースのオペレーティングシステムの明らかに重要な部分がbash、gcc、binutils、gdbなどのGNUツールに依存しているという事実にもかかわらず、当時はまったく真実ではありませんでしたが、今ははるかに少ないですが、より頻繁に言及される傾向があります。 、libcなど。場合によっては、他のツールに置き換えることができます。したがって、そのような主張は少なくとも議論の余地があり、実際に多くの議論を引き起こしました。
私が知っている限り、Debianとその(いくつかの)派生(親に従う)だけが自分自身をGNU / Linuxと呼びます。しかし、Fedora、GentooなどのいわゆるLinuxディストリビューションは、本質的にDebianと変わりません。ほとんど同じソフトウェアです。したがって、人々がGNU / Linuxと呼ぶのにはその理由があります。
GNUユーザースペースなしでLinuxカーネルを使用するシステムはあまりありません。両方のシステムは主に一緒に開発され、さまざまな方法で絡み合っているためです。 (例えば、Linuxカーネルはgcc(GNU)の拡張機能を使用してCで書かれており、標準Cコンパイラを使用して構築されていません。) Googleは、将来のマージ/調和についての話があるにもかかわらず、AndroidカーネルをLinuxと呼ぶのが正しいかどうか疑問です。
ちなみに、残念ながら、StallmanとFSFは、GNU / Linux用語の使用にかなり厳しいようです。例えば、ジョナサン・コベット(Jonathan Corbett)LWNコメントに書きましたFSFは、彼がGNU / Linuxという用語を使用しない限り、彼との会話を拒否しました。 JonはLWNの創設者であるだけでなく、非常に尊敬されるシニアカーネル開発者でもあります。コメントの専門は次のとおりです。
明確に言えば、私たちは、FSFが私たちが話す内容や使用する用語についての事前の約束なしに私たちとの会話を拒否したので、数年前にFSFに助言を求めることをやめました。私たちはそのような約束をしたくありません。そのような問題についてFSFの方針が変わるかどうか教えていただければ幸いです。
これは明らかにGNU / Linux用語などに固執することへの言及です。
上記の記録は、Glyn MoodyのRebel Code 6章(「ブート後ルート」)で詳しく説明されています。
答え3
オペレーティングシステムはカーネルとユーザースペースの組み合わせです。デフォルトでは、カーネルはハードウェアを管理し、ユーザー領域はユーザーに包括的なインターフェースを提供します。
一般的なGNU/LinuxディストリビューションではLinuxコアを提供すると同時にGNUプロジェクトユーザーレイヤーツールをインポートします。 GNUはLinuxの前にリリースされ、完全なオペレーティングシステムを構築するための多数のユーティリティを提供しています。
しかし、コアはありません。彼らはハードカーネル、準備時間が長すぎます。それからLinuxが来る膨大な情熱に支えられ、ハードよりも急速に成長しています。
これで、2つの異なるプロジェクトのユーザースペースとカーネルができました。オペレーティングシステムを整えるには誰もが必須なので、協会に名前を付けるのはどうですか?GNU/Linuxでは、プロジェクトごとに独自のクレジットが付与されますか?
BSDユーティリティなどの他のユーザー領域があるか、忙しい箱。ただし、GNUユーティリティと比較して多少完璧であり、一部のソフトウェアはGNUユーザースペースでのみ実行できます。たとえば、ほとんどのBSDオペレーティングシステムはGCCをコンパイラとして使用します。LLVMそれはすぐに変わります。
汎用オペレーティングシステムとして、以下を実行できます。FreeBSDカーネルとGNUユーザー領域を備えたDebian。
答え4
LinuxディストリビューションGNUを作成するのはなぜですか?カーネルをコンパイルするためのツールですか?ディストリビューションに付属のツールですか?
はいはい。カーネルは完全に独立した実行可能ファイルです。すべてその他は「ユーザーエリア」。一般に、ユーザースペースアプリケーションは標準Cライブラリである1つ以上のシステムライブラリを使用します。 1さまざまなユーティリティ機能に加えて 、システム(カーネルなど)が次のタスクを実行するように要求するシステムコールへのアクセスも提供します。ファイル操作などの非常に基本的な操作にも必要です。 Linuxで使用されるCライブラリの実装は、GNU Cライブラリglibcです。
Linuxカーネル自体はCで書かれており、機能するにはCライブラリも必要です。ただし、この場合、必要な部分は外部ではなく内部でコンパイルされます。この目的で一般的に使用されるコンパイラはGCC(「GNU Compiler Collection」)であり、Cライブラリはglibcです。
ほとんどすべてのユーザースペースはglibc用にコンパイルされているため、システム内のカーネルの次に最も重要なものの1つです。もう一つの重要なコンポーネントは、実行可能ファイルを外部ライブラリにリンクするリンカです。それもGNU製品です。
これを説明するために、ライブラリを含むさまざまな実行可能ファイルを使用できますldd
(実行可能ですが、スタンドアロンではありません)。マニュアルページに示すように、 "lddは各プログラムに必要な共有ライブラリまたはコマンドラインで指定された共有ライブラリを印刷します。"たとえば、
> ldd /bin/bash
linux-vdso.so.1 => (0x00007fff7348e000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fdbdae7f000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fdbdac7b000)
libc.so.6 => /lib64/libc.so.6 (0x00007fdbda8c3000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdbdb0c8000)
「libc.so.6」を参照してください。これはglibcです(Linux用のもう1つの基本的なGNU製品ですが、glibcほど基本的ではないglibと混同しないでください)。上記の他のすべての項目(下記の最初の項目を除く)を見ると、すべてlibc自体にリンクされていることがわかります。 libc.so.6自体を見てみましょう。
> ldd /lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2 (0x00007f9cefa04000)
linux-vdso.so.1 => (0x00007fffb21ff000)
"ld-linux-x86-64.so.2"は上記のリンカーです(通常はld
マニュアルページがあります)。私はlddを実行することはできませんが、file
libc(循環のように聞こえますが、そうではありません)とlinux-vdsoに動的に接続されていることがわかります。最後のものは少し面白いです=>
。これは実際にカーネルの一部であるからです。
Cライブラリ、AFAIK、はいただシステムの共有オブジェクトはCライブラリにリンクされていません。センター全体がめちゃくちゃです。他のコンパイル言語のデフォルトライブラリもlibcを使用します。たとえば、次のようになります。
> ldd libstdc++.so.6.0.17
linux-gate.so.1 => (0xf77b8000)
libm.so.6 => /lib/libm.so.6 (0xf7684000)
libc.so.6 => /lib/libc.so.6 (0xf74d2000)
/lib/ld-linux.so.2 (0xf77b9000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf74b5000)
ライブラリとリンカには、シンボリックリンクを介して実装されたさまざまな仮名があります(例:/lib64/ld-linux-x86-64.so.2は実際には/lib64/ld-2.15.soです)。
また、gcc
「ネイティブ」コンパイラ(カーネルとCライブラリをコンパイルするため)はシステムにある必要はありませんが、libcとldは必要です。それ以外の場合は何も機能しません。
これがGNUが提供する唯一の機能ではありません。彼らはまた、bash
システムを* nixに似ていて(ほとんど)POSIXと互換性があるようにするシェルや他のコアツールとユーティリティを担当しています。 GNOMEは、最初のLinux DEの1つであり、最も広く使用されているLinux DEの1つです。 GNOMEや他のDEなどをサポートする多くの高度な機能を提供する前述のglibもあります。 GNOMEはもともとGIMP用に開発されたGTKに基づいて構築されました。 GTKはさまざまなDEの基礎でもあり、GIMPもGNU製品です。彼らは多くのことをします。
1どのライブラリにもリンクされていないユーザースペースアプリケーションがあります。変化のない実行可能ファイル。これは、本質的にカーネルと同様に、そのライブラリの一部がコンパイルされていることを意味します。