web-dev-qa-db-ja.com

LinuxとBSDの一般的なプログラム(例: "ls"、 "cat")は、同じソースコードからのものですか?

LinuxとBSDの両方に、lscatechokillのような共通のプログラムがあります。

それらは同じソースコードからのものですか、それともLinuxとBSDの両方がこれらのプログラム用に独自の独自のソースコードを所有していますか?

26
user341875

Linuxはカーネルです。そもそもアプリケーションプログラムのコードはありません。

Linuxベースのオペレーティングシステムは、互いに同じソースコードを使用する必要さえありません、ましてやBSDと同じコード。いくつかのかなり基本的なプログラムの有名な複数の実装があります。

これらには以下が含まれますが、これらに限定されません。

BSDはオペレーティングシステムです。BSDdoには、これらのプログラムのコードが含まれています。ただし、単一のBSDオペレーティングシステムはなく、そのようなプログラムのコードは、NetBSD、FreeBSD、OpenBSD、およびDragonFly BSD間で異なる場合があります。さらに、いくつかのLinuxベースのオペレーティングシステムで使用されるコードとは明らかに異なります。

有名なことに、Apple/NeXTはMacOS/NeXTSTEPでBSDアプリケーションソフトウェアを使用していましたが、(他の)BSDとは異なる方法でACLをサポートするようにいくつかのプログラムを拡張しました。たとえば、chmodコマンドを使用してアクセス制御を設定します。そのため、これらのコマンドのDarwinバージョンはまた異なります。

追加された3つのねじれがあります。

killechoのようなプログラムは通常シェルの組み込みです。したがって、これらのコマンドのコードは、シェルによって異なりますどのオペレーティングシステムではなく、使用しています。

次に、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によって、または他の人によって何年も後に書かれた同様の置換が実現されていることに気づかない)は自明ではありません。

41
JdeBP

LinuxとBSDのこれらのプログラムは同じですか?

短い答えは次のとおりです:必ずしもそうではありません。

lscatechokillなどの一般的なプログラムのソースコードは、 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ユーザーランドを使用する試みがありました。それらの詳細については、ウィキペディアで読むことができます ここ

13
Peschke
5
Fedor Dikarev

まず、Linuxは、オペレーティングシステムであるGNU/Linuxを意味するものとして理解しています。Linuxは単なるカーネルです。

今、ソースコードは同じではありません。 GNUチームは、既存のUNIXツールに触発されたユーティリティを作成し、それらの一部を拡張しました。

GNU killechoはBashのシェル組み込みであり、ほとんどのGNUシステムのデフォルトシェルなので、bashのようにシェルに付属しています。

lscatは、それぞれUNIXのlscatに触発された、異なる個別のプログラムです。

NIXグラフの履歴 があります。これは、ご覧のように、直接の祖先なしでポップアップしたGNU/Linuxの起源を説明しています。

enter image description here

UNIXタイムシェアリングシステムに関連するUNIXフレーバーのうち、これらのコマンドはすべてそれからのものですが、複数回書き換えられている可能性があります。

FreeBSD cat ソースコードとGNU cat ソースコードを比較できます。

なぜGNU/Linuxを直接参照しないのですか?水は濁っており、BSDや他のUNIXシステムにGNUツールをインストールできます。まあ、Windowsにインストールすることもできます。

Debianは、Debian GNU/Linux栄光のうち、UbuntuとMintがベースにしている(ほんの2つの例)、GNU FreeBSDカーネルのディストリビューション: GNU/kFreeBSD を提供しています)

はい、グラフは古くなっています...

3
thecarpy

上記の正解に加えて、(ほとんど?)すべてのLinuxディストリビューションのデフォルトのシェルはbashですが、少なくともOpenBSDとFreeBSDのデフォルトのシェルはbashではありません。おそらくcshまたはkshですが、BSDバリアントを使用してから2年になるため、確実ではありません。とにかく、bashの機能はありませんでした。前のコマンドを繰り返すことができる方法でさえ、紛らわしく異なっていました。シェルの違いにより、より単純なコマンドのどれがシェル組み込みであり、どれがフリースタンディングプログラムであるかが変わる場合があります。

いくつかのディストリビューションがxBSDカーネルでGNUユーザーランドを提供しており、その逆の可能性もあるため、この質問に対する絶対的な決定的な答えはありません。システムは、パッケージマネージャーを使用してソースをダウンロードして検査するか、またはディストリビューションに参照可能なソースがある場合はオンラインで検査しますが、適用されるライセンスを確認するとかなり良い目安になります。

1
tiger99