LinuxとBSDの両方に、ls
とcat
とecho
とkill
のような共通のプログラムがあります。
それらは同じソースコードからのものですか、それともLinuxとBSDの両方がこれらのプログラム用に独自の独自のソースコードを所有していますか?
Linuxはカーネルです。そもそもアプリケーションプログラムのコードはありません。
Linuxベースのオペレーティングシステムは、互いに同じソースコードを使用する必要さえありません、ましてやBSDと同じコード。いくつかのかなり基本的なプログラムの有名な複数の実装があります。
これらには以下が含まれますが、これらに限定されません。
ifconfig
には2つの実装があり、1つは GNU inetutils にあり、もう1つは NET-3 net-tools にあります。現在は3つあり、3つ目は私のものです。 ( https://unix.stackexchange.com/a/504084/5132 を参照してください。)su
には2つの実装があり、1つは til-linux にあり、もう1つは shadow にあります。 Debianは2018年に一方から他方に切り替わり、このWWWサイトのいくつかの古い質問と回答が間違っていました。 ( https://unix.stackexchange.com/a/460769/5132 を参照してください。=例として、「 su vs su-(Debian)):なぜPATHが同じですか? "。)mailx
コマンドを取得できる場所は、一見ありそうにない場所(実際にはDebian/Ubuntuでは4つ)です:GNU Mailutils、BSD mailx、NMH、およびs-nail。( https://unix.stackexchange.com/a/489510/5132 を参照してください。)BSDはオペレーティングシステムです。BSDdoには、これらのプログラムのコードが含まれています。ただし、単一のBSDオペレーティングシステムはなく、そのようなプログラムのコードは、NetBSD、FreeBSD、OpenBSD、およびDragonFly BSD間で異なる場合があります。さらに、いくつかのLinuxベースのオペレーティングシステムで使用されるコードとは明らかに異なります。
有名なことに、Apple/NeXTはMacOS/NeXTSTEPでBSDアプリケーションソフトウェアを使用していましたが、(他の)BSDとは異なる方法でACLをサポートするようにいくつかのプログラムを拡張しました。たとえば、chmod
コマンドを使用してアクセス制御を設定します。そのため、これらのコマンドのDarwinバージョンはまた異なります。
追加された3つのねじれがあります。
kill
やecho
のようなプログラムは通常シェルの組み込みです。したがって、これらのコマンドのコードは、シェルによって異なりますどのオペレーティングシステムではなく、使用しています。
次に、BusyBoxとToyBoxがあり、LinuxベースのオペレーティングシステムとBSDの両方で利用でき、manyコマンド。
次に、OpenSolarisがあり、そこからIllumosやSchillixが登場し、これらすべてのツールのSolaris実装が追加されています。
ここには、BSDとAT&T Unixの間の最初の分割を含む完全な歴史があります。1980年代後半と1990年代に多くのUnixプログラムを「PD」クローン化する努力を通じて、その後30年間のあちこちでシャッフル、全体のオープンソースリリースSolarisのコード、およびOpenBSDのいくつかの再実装。誤解される可能性のあるツールの歴史でさえ、cron
などの実装が1つあります(多くの人々は、これを元のUnixツールと誤って考えるか、少なくとも1つのフレーバーを「PD cron
"1987年にPaul Vixieによって、または他の人によって何年も後に書かれた同様の置換が実現されていることに気づかない)は自明ではありません。
LinuxとBSDのこれらのプログラムは同じですか?
短い答えは次のとおりです:必ずしもそうではありません。
ls
、cat
、echo
、kill
などの一般的なプログラムのソースコードは、 serland によって異なりますから来る。つまり、システムが使用するユーザーランドです。 Linuxカーネルで使用される最も一般的なユーザーランドはGNU-したがって、GNU/Linuxという名前です。ただし、他のユーザーランドはLinuxカーネルに統合されています。
BSDには通常、GNUのような他のものとは別に開発された独自のユーザーランドがあります。 BSD自体もコードベースが異なります。たとえば、FreeBSDとOpenBSDの両方に「BSDユーザーランド」がありますが、コードベースは異なります。それらのmanページ(たとえば、ps
)を見ると、使用できる引数が異なります。
[〜#〜] posix [〜#〜] が開発された理由の1つは、複数のコードベースの問題に対処することでした。ユーザーランドで提供される共通のユーティリティがPOSIXに準拠している場合は、GNU、FreeBSD、OpenBSD、AIX、またはその他のUNIXベースのシステムからのものであっても、ほぼ同じように機能することを保証できます。
おそらくご存じのとおり、上記のユーザーランド(AIXを除く)はオープンソースです。それらのコードリポジトリを自由に覗いてみてください。それらが完全に同じではないことがすぐにわかります。
注:GNU/Linuxが最も一般的ですが、過去にFreeBSD/NetBSDカーネルでGNUユーザーランドを使用する試みがありました。それらの詳細については、ウィキペディアで読むことができます ここ 。
まず、Linuxは、オペレーティングシステムであるGNU/Linuxを意味するものとして理解しています。Linuxは単なるカーネルです。
今、ソースコードは同じではありません。 GNUチームは、既存のUNIXツールに触発されたユーティリティを作成し、それらの一部を拡張しました。
GNU kill
とecho
はBashのシェル組み込みであり、ほとんどのGNUシステムのデフォルトシェルなので、bash
のようにシェルに付属しています。
ls
とcat
は、それぞれUNIXのls
とcat
に触発された、異なる個別のプログラムです。
NIXグラフの履歴 があります。これは、ご覧のように、直接の祖先なしでポップアップしたGNU/Linuxの起源を説明しています。
UNIXタイムシェアリングシステムに関連するUNIXフレーバーのうち、これらのコマンドはすべてそれからのものですが、複数回書き換えられている可能性があります。
FreeBSD cat ソースコードとGNU cat ソースコードを比較できます。
なぜGNU/Linuxを直接参照しないのですか?水は濁っており、BSDや他のUNIXシステムにGNUツールをインストールできます。まあ、Windowsにインストールすることもできます。
Debianは、Debian GNU/Linux栄光のうち、UbuntuとMintがベースにしている(ほんの2つの例)、GNU FreeBSDカーネルのディストリビューション: GNU/kFreeBSD を提供しています)
はい、グラフは古くなっています...
上記の正解に加えて、(ほとんど?)すべてのLinuxディストリビューションのデフォルトのシェルはbashですが、少なくともOpenBSDとFreeBSDのデフォルトのシェルはbashではありません。おそらくcshまたはkshですが、BSDバリアントを使用してから2年になるため、確実ではありません。とにかく、bashの機能はありませんでした。前のコマンドを繰り返すことができる方法でさえ、紛らわしく異なっていました。シェルの違いにより、より単純なコマンドのどれがシェル組み込みであり、どれがフリースタンディングプログラムであるかが変わる場合があります。
いくつかのディストリビューションがxBSDカーネルでGNUユーザーランドを提供しており、その逆の可能性もあるため、この質問に対する絶対的な決定的な答えはありません。システムは、パッケージマネージャーを使用してソースをダウンロードして検査するか、またはディストリビューションに参照可能なソースがある場合はオンラインで検査しますが、適用されるライセンスを確認するとかなり良い目安になります。