it-swarm.com.de

Kommen die gängigen Programme (zum Beispiel: "ls", "cat") unter Linux und BSD aus demselben Quellcode?

Sowohl Linux als auch BSD haben gemeinsame Programme wie ls und cat und echo und kill.

Kommen sie aus demselben Quellcode oder besitzen beide und Linux und BSD ihren eigenen eindeutigen Quellcode für diese Programme?

26
user341875

Linux ist ein Kernel. Es enthält überhaupt nicht den Code für Anwendungsprogramme.

Linux - basierte Betriebssysteme verwenden nicht unbedingt denselben Quellcode wie einander, geschweige denn denselben Code wie bei den BSDs. Es gibt bekanntermaßen mehrere Implementierungen mehrerer ziemlich grundlegender Programme.

Dazu gehören, ohne darauf beschränkt zu sein:

Die BSDs sind Betriebssysteme. Sie do enthalten den Code für diese Programme. Es gibt jedoch kein einzelnes BSD-Betriebssystem, und der Code für solche Programme variiert manchmal zwischen NetBSD, FreeBSD, OpenBSD und DragonFly BSD. Darüber hinaus unterscheidet es sich definitiv von dem Code, der für die verschiedenen Linux-basierten Betriebssysteme verwendet wird.

Bekanntlich verwendete Apple/NeXT BSD-Anwendungssoftware in MacOS/NeXTSTEP, verbesserte jedoch mehrere Programme, um ACLs auf andere Weise als die (anderen) BSDs zu unterstützen. Die Zugriffssteuerung wird beispielsweise mit dem Befehl chmod festgelegt. Die Darwin-Versionen dieser Befehle sind also wieder anders.

Es gibt drei zusätzliche Wendungen.

Programme wie kill und echo sind normalerweise Shell-integrierte Funktionen. Der Code für diese Befehle hängt also von der Shell ab verwenden, anstatt welches Betriebssystem.

Dann gibt es BusyBox und ToyBox, die sowohl für Linux-basierte Betriebssysteme als auch für BSDs verfügbar sind und sogar als primäre Implementierungen solcher Befehle für einige der ersteren verwendet werden, die ihre eigenen Implementierungen von many Haben = Befehle.

Dann gibt es OpenSolaris, von dem Illumos und Schillix stammen, mit den Solaris-Implementierungen all dieser Tools, die sich noch einmal unterscheiden.

Hier gibt es ganze Geschichten, die die ursprüngliche Trennung zwischen BSD und AT & T Unix umfassen, durch die Bemühungen, viele Unix-Programme in den späten 1980er und 1990er Jahren zu "PD" zu klonen, danach etwa drei Jahrzehnte lang die gesamte Open-Source-Veröffentlichung von den Code für Solaris und die Neuimplementierung verschiedener Dinge durch OpenBSD. Sogar die Geschichte von Werkzeugen, die man in die Irre führen könnte, hat eine Implementierung wie cron (die viele Leute fälschlicherweise für das ursprüngliche Unix-Werkzeug halten oder fälschlicherweise für mindestens eine einzige Variante halten, die als "PD" geschrieben ist cron "von Paul Vixie im Jahr 1987, oder nicht erkennen, dass arbeitsähnliche Ersetzungen von anderen Menschen in den Jahren seitdem geschrieben wurden) sind nicht trivial.

41
JdeBP

Sind diese Programme unter Linux und BSD gleich?

Die kurze Antwort lautet: Nicht unbedingt.

Der Quellcode gängiger Programme wie ls, cat, echo, kill usw. hängt davon ab, was serland sie sind komme aus. Mit anderen Worten, das Benutzerland, das Ihr System verwendet. Das am häufigsten mit dem Linux-Kernel verwendete Userland ist GNU - daher der Name GNU/Linux. Andere Userlands wurden jedoch in den Linux-Kernel integriert.

Die BSDs haben normalerweise ein eigenes Userland, das separat von anderen wie GNU entwickelt wird. Sogar die BSDs selbst haben unterschiedliche Codebasen. Beispielsweise haben sowohl FreeBSD als auch OpenBSD ein "BSD-Benutzerland", aber ihre Codebasis ist unterschiedlich. Wenn Sie sich ihre Manpages ansehen (z. B. ps), haben sie verschiedene Argumente, die verwendet werden können.

Ein Grund, warum POSIX entwickelt wurde, war die Lösung des Problems mehrerer Codebasen. Wenn die mit einem Userland gelieferten allgemeinen Dienstprogramme POSIX-kompatibel sind, können Sie sicherstellen, dass sie (fast) gleich funktionieren, unabhängig davon, ob sie von GNU-, FreeBSD-, OpenBSD-, AIX- oder anderen UNIX-basierten Systemen stammen.

Wie Sie wahrscheinlich wissen, sind die oben aufgeführten Userlands (außer AIX) Open Source. Stöbern Sie in den Code-Repositorys und Sie werden schnell feststellen, dass sie nicht genau gleich sind.

Hinweis: Obwohl GNU/Linux am beliebtesten ist, gab es in der Vergangenheit Versuche, ein GNU Userland mit FreeBSD/NetBSD-Kerneln zu verwenden. Weitere Informationen hierzu finden Sie auf Wikipedia hier .

13
Peschke
5
Fedor Dikarev

Erstens verstehe ich unter Linux GNU/Linux, das Betriebssystem, Linux ist lediglich der Kernel.

Jetzt ist der Quellcode NICHT der gleiche. Das Team GNU] erstellte die Dienstprogramme, die von den vorhandenen UNIX-Tools inspiriert waren, und erweiterte einige davon.

GNU kill und echo sind in Bash integrierte Shell, die Standard-Shell auf den meisten GNU - Systemen, daher werden sie mit Ihrer Shell geliefert, wie in bash.

ls und cat sind unterschiedliche, separate Programme, die von UNIX ls bzw. cat inspiriert sind.

Es gibt ein Verlauf des UNIX-Diagramms , das erklärt, woher die Dinge kommen. Wie Sie sehen können, ist GNU/Linux ohne direkte Abstammung aufgetaucht.

(enter image description here

Von den UNIX-Varianten, die sich auf das UNIX-Time-Sharing-System beziehen, stammen alle diese Befehle davon, sie könnten jedoch mehrfach neu geschrieben worden sein.

Sie können FreeBSD cat Quellcode mit GNU cat Quellcode vergleichen.

Warum beziehe ich mich nicht direkt auf GNU/Linux? Das Wasser ist trüb, Sie können die Tools GNU] sowohl auf den BSDs als auch auf anderen UNIX-Systemen installieren. Sie können sie sogar unter Windows installieren.

Debian von Debian GNU/Linux, auf dem Ubuntu und Mint basieren (nur zwei Beispiele), bietet eine GNU -Distribution mit einem FreeBSD-Kernel: GNU/kFreeBSD

Ja, die Grafik ist veraltet ...

3
thecarpy

Zusätzlich zu den oben genannten richtigen Antworten werden Sie feststellen, dass die Standard-Shell in (fast?) Jeder Linux-Distribution bash ist, während die Standard-Shell in mindestens OpenBSD und FreeBSD nicht bash ist. Es ist wahrscheinlich csh oder ksh, aber es ist ein paar Jahre her, seit ich eine BSD-Variante verwendet habe, daher bin ich mir nicht ganz sicher. Auf jeden Fall hatte es nie die Funktionalität von Bash, selbst die Art und Weise, wie der vorherige Befehl wiederholt werden kann, war verwirrend anders. Der Unterschied in den Shells kann sich ändern, welche der einfacheren Befehle Shell-integrierte und welche freistehende Programme sind.

Mit mehreren Distributionen, die dem Benutzerland GNU userland) einen xBSD-Kernel zur Verfügung stellen, und möglicherweise umgekehrt, gibt es keine absolut endgültige Antwort auf die Frage. Die einzige absolut narrensichere Methode, um zu wissen, was Sie haben Ihr System verwendet Ihren Paketmanager, um die Quelle herunterzuladen und zu untersuchen, oder um sie online zu prüfen, wenn Ihre Distribution über eine durchsuchbare Quelle verfügt, obwohl die Überprüfung der zutreffenden Lizenz einen ziemlich guten Hinweis liefern würde.

1
tiger99