Wurden alle Unix-Befehle unter Linux neu geschrieben?

Antworten:

93

Es scheint, dass Sie zwei sehr unterschiedliche Teile des Betriebssystems verwechseln. Es ist verständlich, weil sie oft synonym verwendet werden, aber technisch nicht korrekt sind, sodass Ihre Frage auf einer fehlerhaften Prämisse basiert. Um die Frage, die Sie wahrscheinlich stellen möchten, vollständig zu erforschen und hoffentlich zu beantworten, ist eine kurze Geschichtsstunde erforderlich.

Zunächst gab es UNIX. Im Grunde bedeutete UNIX damals das AT & T UNIX-System , das an erster Stelle stand. Aber AT & T UNIX wurde nicht mehr kostenlos, und so startete Richard Stallman das GNU-Projekt, um ein Unix-System zu schreiben, das kostenlos war . Daher lautet der Name Gnu Not Unix , abgekürzt GNU. Pläne für GNU wurden 1983 veröffentlicht und die Entwicklung begann 1984 .

In den frühen neunziger Jahren hatte GNU die meisten UNIX-Dienstprogramme von Grund auf neu implementiert. Wikipedia listet einige Komponenten des Gesamtsystems auf, die nicht umgeschrieben wurden (TeX, das X Window System und der Mach-Mikrokernel werden als Beispiele für Komponenten genannt, die nicht umgeschrieben wurden) Ziel ist es, die Wiederverwendung von AT & T-Code (bzw. nicht freiem Code) zu vermeiden und deren Funktionen durch Hinzufügen von Befehlszeilenoptionen zu erweitern. Infolgedessen waren die GNU-Dienstprogramme regelmäßig leistungsfähiger als die Werkzeuge, von denen sie ihre ursprüngliche Inspiration bezogen haben.

Zu diesem Zeitpunkt fehlte GNU noch eine wichtige Komponente: ein Betriebssystemkern , mit dem alles auf einem Computer zusammenarbeiten konnte, auf dem kein anderes Betriebssystem ausgeführt wurde. 1991 begann Linus Torvalds mit der Arbeit an einem Spielzeugprojekt, das später unter dem Namen Linux bekannt wurde. Es war im Grunde ein Schulprojekt, um etwas über die damals neue 32-Bit- Intel 80386-CPU zu lernen , und begann äußerst einfach, verwandelte sich aber schließlich in einen tatsächlich verwendbaren Betriebssystemkern. Aber es gab keine Userland-Software. Linux allein bietet keine Shell, keine Systemstartfunktionen, die über die Kernel-Initialisierung hinausgehen, keinen Texteditor, keine grafische Oberfläche, nichts. Der Kernel ist wie ein Automotor; Unverzichtbar, um ein nützliches Auto zu bauen, aber für sich allein nutzlos (für ein nützliches Auto benötigen Sie Dinge wie Räder, Getriebe, Lenkung, einen Platz für den Fahrer, einen Kraftstofftank oder einen anderen Energiespeicher usw.). Der Linux-Kernel wurde schließlich unter der GNU General Public License verteilt, genau wie die GNU-Software .

Also begannen die Leute, die beiden zu paaren. Sie würden ein Unix-ähnliches Userland erhalten, zusammen mit einem Kernel, der auf Ideen von Unix basiert (einschließlich einer großen Ähnlichkeit mit POSIX ), komplett mit Quellcode, den Sie so oft hacken können, wie Sie möchten, und es hat nichts gekostet . Vor allem bevor Linux-Distributionen verbreitet wurden, dauerte es ein bisschen, bis die Dinge zum Laufen kamen, aber es war fertig genug, um für diejenigen, die bereit waren, etwas Zeit damit zu verbringen, einigermaßen brauchbar zu sein.

In diesen Tagen stellt GNU einen eigenen Kernel zur Verfügung. Sie haben wahrscheinlich noch nichts davon gehört, aber es heißt GNU Hurd . Aber Hurd gab es nicht in den frühen 1990er Jahren, als Linux unter Hobbyisten und Bastlern zunehmend an Bedeutung gewann. Daher fand die Kombination aus Linux-Kernel und einem hauptsächlich aus GNU bestehenden Benutzerland die größte Beachtung bei den Entwicklern.

Heutzutage installieren viele Unix-Systeme Teile des GNU-Benutzerlandes oder erlauben es dem Administrator, diese einfach zu installieren. Sie können Dinge wie GNU bash, die GNU Compiler Collection, die GNU C-Bibliothek (Vanille oder gepatcht) usw. auf einem anderen Nicht-GNU-System sehen.

Um die Sache noch schlimmer zu machen, verwenden einige Systeme den Linux-Kernel, aber überhaupt kein GNU-Userland. Als häufig verwendetes Beispiel wird Android als Betriebssystem betrachtet , bei dem es sich im Grunde um den Linux-Kernel handelt, der mit einem benutzerdefinierten Benutzerland gekoppelt ist.

Dies ist wichtig, da es die Grenze zwischen GNU, Linux und den verschiedenen Unixen erheblich verwischt ( es gibt nur einen UNIX , aber es gibt viele Unixe und noch mehr Unix-ähnliche Betriebssysteme ). Wenn Sie nach Linux fragen, fragen Sie wirklich sehr oft nach dem GNU / Linux-System. Aber denken Sie an Debian GNU / kFreeBSD , das ein GNU-Userland auf dem FreeBSD-Kernel ausführt und überhaupt kein Linux verwendet. Oder zum Beispiel Solaris, auf dem Sie leicht verschiedene GNU-Pakete installieren können, einschließlich zB coreutils . Ich denke, Mac OS X wird auch mit Teilen des GNU-Userlands ausgeliefert. Oder betrachten Sie das oben erwähnte Android.

Am Ende könnte ein verwendbares GNU-System Nicht-GNU-Code ausführen, und ein Nicht-GNU-System könnte GNU-Code ausführen, aber die GNU-Dienstprogramme enthalten keinen Nicht-GNU-Code.

ein CVn
quelle
1
Als ich FreeBSD das letzte Mal (vor Jahren) verwendete, verwendete es nicht viele GNU-Tools, sondern ein eigenes Set - zB BSD make anstelle von GNU make.
Reinierpost
5
@reinierpost OSX ist sehr ähnlich - eine einfache Installation enthält hauptsächlich BSD-Versionen von Dingen, aber GNU-Coreutils und dergleichen sind über MacPorts und andere leicht verfügbar . XCode nutzt LLVM, aber auch gcc. Es ist kompliziert :)
MattDMo
1
@reinierpost make ist gar nicht so schlecht zu ersetzen. Der C-Compiler ist etwas komplizierter. Mindestens FreeBSD 8.0 verwendet GCC als Standard-Compiler . speziell Version 4.2.1. Die "Lizenzprobleme", die sich auf die Verhinderung der Integration neuerer Versionen in das Basissystem beziehen, betreffen wahrscheinlich die Umstellung von GPL2 + auf GPL3 +, aber ich habe nicht nach Sicherheit gesucht.
ein Lebenslauf vom
3
@ hunter2 Anscheinend wurde es nicht benötigt, basierend auf den bisherigen Stimmenzahlen. ;) Ich wollte auch keine vollständige Geschichte schreiben. Minix spielte eine wichtige Rolle als Linux-Entwicklungs- und Bootstrap-System, bevor Linux sich selbst hostete, hatte jedoch nur geringen Einfluss auf z. B. die Beziehung zwischen Linux, GNU und dem ursprünglichen UNIX.
ein CVn
3
@ hunter2 Wenn wir diesen Weg gehen, dann ist es absolut richtig, dass UNIX sicherlich auch nicht an erster Stelle stand. Für die Beantwortung der Frage schien dies jedoch eine hinreichende Annäherung zu sein. Die Antwort mit einem Satz hätte ungefähr so ​​ausgesehen: "Im Grunde wurde alles, was UNIX außer TeX und X auf einem Linux-System bietet, als Teil von GNU umgeschrieben", aber ich denke, der zusätzliche Kontext bietet einen Mehrwert, selbst wenn die Antwort dadurch erheblich länger als absolut war notwendig - und die Antwort reicht noch lange nicht für jedes Detail.
ein Lebenslauf vom