Gibt es Optionen, um GNU-Coreutils unter Linux zu ersetzen?

20

Ich habe darüber nachgedacht, die Verwendung von GNU Coreutils auf meinen Linux-Systemen einzustellen, aber um ehrlich zu sein, kann ich mir im Gegensatz zu vielen anderen GNU-Komponenten keine Alternativen vorstellen (unter Linux) . Welche Alternativen gibt es zu GNU Coreutils? Benötige ich mehr als ein Paket? Links zum Projekt sind ein Muss, Bonuspunkte für die Benennung von Distributionspaketen.

Schlagen Sie außerdem nur dann Dinge vor, wenn Sie wissen, dass sie unter Linux funktionieren, und wenn Sie Anweisungen nachschlagen können. Ich bezweifle, dass ich bald den Kernel wechseln werde, und ich bin viel zu faul für alles, was weit über eine einfache Sache hinausgeht ./configure; make; make install. Ich werde C sicher nicht dafür hacken.

Warnung: Wenn Ihre Distribution Coreutils verwendet, können diese die Funktionsweise Ihrer Distribution beeinträchtigen. Wenn Sie sie jedoch nicht an erster Stelle haben, $PATHsollten Sie die Dinge nicht kaputt machen, da die meisten Skripte absolute Pfade verwenden sollten.

Xenoterracid
quelle
10
Neugierig, warum suchst du nach Alternativen?
Tshepang
2
@xeno "Robuster"? Denken Sie auch daran, dass Ihr System (einschließlich Kernel) größtenteils mit GCC erstellt wurde und von GLibC abhängt :)
tshepang
3
@xeno Debian verwendet derzeit EGLIBC , eine Art Fork von GLibC. Aber es folgt genau GLibC, also ist der Unterschied nicht so groß.
Tshepang
2
Sowohl Clang als auch tcc konnten (auf jeden Fall) den Linux-Kernel kompilieren.
Shawn J. Goff
2
Es gibt Leute, die an einem GNU-Userland auf einem BSD-Kernel arbeiten , aber ich habe noch nichts davon gehört. Es wäre einfacher, den Kernel zu wechseln. Sie können es zuerst in einer VM versuchen, wenn Sie schüchtern sind.
Gilles 'SO - hör auf böse zu sein'

Antworten:

15

busybox der Favorit von Embedded Linux-Systemen.

BusyBox kombiniert winzige Versionen vieler gängiger UNIX-Dienstprogramme in einer einzigen kleinen ausführbaren Datei. Es bietet Ersatz für die meisten Hilfsprogramme, die Sie normalerweise in GNU fileutils, shellutils usw. finden. Die Hilfsprogramme in BusyBox haben im Allgemeinen weniger Optionen als ihre voll ausgestatteten GNU-Verwandten. Die enthaltenen Optionen bieten jedoch die erwartete Funktionalität und verhalten sich sehr ähnlich wie ihre GNU-Gegenstücke. BusyBox bietet eine ziemlich vollständige Umgebung für jedes kleine oder eingebettete System.
BusyBox wurde mit Blick auf Größenoptimierung und begrenzte Ressourcen entwickelt. Es ist außerdem äußerst modular aufgebaut, sodass Sie beim Kompilieren problemlos Befehle (oder Features) ein- oder ausschließen können. Dies macht es einfach, Ihre eingebetteten Systeme anzupassen. Um ein funktionierendes System zu erstellen, fügen Sie einfach einige Geräteknoten in / dev, einige Konfigurationsdateien in / etc und einen Linux-Kernel hinzu.

Sie können so ziemlich jeden coreutil-Namen als Link zur busybox-Binärdatei definieren, und es wird funktionieren. Sie können auch laufen busybox <command>und es wird funktionieren. Beispiel: Wenn Sie auf Gentoo sind und Ihr vinoch nicht installiert haben, können Sie ausführen busybox vi filenameund Sie werden in vi sein. Es ist

Xenoterracid
quelle
zögern sie nicht,
Außerdem ist dies ein Favorit bei Embedded. Obwohl eine Alternative wahrscheinlich nicht ausreicht, um GNU für meine Desktop- / Server-Umgebung zu ersetzen
Xenoterracide
Dies ist die einzige praktikable Lösung, wenn Sie C nicht hacken wollen. Und Busybox-Versionen sollten ziemlich standardkonform sein.
Maxschlepzig
5

Dies ist ein älteres Thema, das ist mir klar. Diese Lösung wurde jedoch nie erwähnt und taucht bei Google für "Linux with bsd userland" relativ häufig auf.

Es gibt eine andere Lösung: Erbstück. Ich weiß, dass es auf Arch funktioniert und in der AUR gepackt ist (siehe zum Beispiel gnu2sysv). Dadurch wird das Coreutils-Paket von Arch ersetzt und das Gegenstück zum Erbstück bereitgestellt. Sie können über das Ganze im Wiki von arch lesen: https://wiki.archlinux.org/index.php/Base2heirloom

bbenne10
quelle
2

Schauen Sie sich Uutils an .

Dies ist eine plattformübergreifende Implementierung der in Rust geschriebenen GNU-Coreutils. Es ist MIT-lizenziert. Zum Zeitpunkt des Schreibens dieser Antwort ist sie noch nicht vollständig (einige wichtige wie lsund fehlen cp), aber viele andere sind bereits erledigt.

Russ
quelle
0

Ich vermute, es würde Ihnen schwer fallen, GNU Coreutils loszuwerden. Es gibt jedoch immer die entsprechenden BSD-Tools, obwohl es sich nicht um Ersatz für die GNU-Tools handelt.

jsbillings
quelle
Wie würde ich BSD-Tools auf einer Linux-Distribution installieren? wo würde ich sie bekommen?
Xenoterracide
Das gesamte Betriebssystem von FreeBSD ist über CVS freebsd.org/cgi/cvsweb.cgi/src verfügbar. Es wäre jedoch ziemlich schwierig, das BSD-Userland unter einem Linux-Kernel zu kompilieren. Das GNU-Userland ist wahrscheinlich portabler als BSD, da das GNU-Userland (zumindest zu Beginn) so gebaut wurde, dass es zwischen mehreren Kerneln portabel ist.
Jsbillings
das klingt wie ein PITA, sicher, wenn es vernünftigerweise möglich ist, dass irgendwo jemand es mindestens einmal für Linux gepackt hat.
Xenoterracide
Solaris (ab 140 ist auch etwas verfügbar) wäre ebenfalls eine Option. Wenn Sie eine Distribution verwenden, sind Sie verrückt. Hör jetzt auf. Wenn Sie LFS verwenden , rocken Sie weiter! Habe Spaß! Wenn Sie eine Distribution machen, begrüße ich Ihren tapferen Herrn.
Bahamat
Ja, ich bin mir nicht sicher, ob es überhaupt möglich ist. Es wäre wahrscheinlich einfacher, FreeBSD zu installieren und die Linux-Kompatibilität zu aktivieren. Sie können die GNU-Coreutils problemlos unter FreeBSD zum Laufen bringen, aber nicht umgekehrt.
Jsbillings
0

Wenn jemand von etwas Abstand nehmen möchte, das auf vielen Plattformen häufig verwendet, getestet und verifiziert wird, ist dies in der Regel ein äußerer Ausdruck eines zugrunde liegenden Problems, das als "Codegeruch" bezeichnet wird, und der unkontrollierten Anhäufung von "technischer Verschuldung" oder "Code" Schuld". Das GNU-Archiv hatte im Laufe der Jahre eine ziemlich große Menge an Code-Schulden aufgebaut, und wenn eine Codebasis nicht richtig gepflegt wird, kann sie einen Bruchpunkt erreichen (Legacy-Code und sogar krankhafter Legacy-Code).

Normalerweise würde man in regelmäßigen Abständen ein Re-Engineering und Refactoring durchführen, um dies unter Kontrolle zu halten. Die eigentliche Frage, die hier gestellt wird, ist, ob eine überarbeitete Version von coreutils entwickelt wurde. Dies beinhaltet natürlich die Möglichkeit eines direkten Ersatzes (als Sonderfall) - ähnlich wie Wayland für X aufgestellt wird ... viele seiner Entwickler kommen direkt aus dem X-Camp.

Mein Vorschlag ist, tatsächlich Coreutils zu refaktorieren. Jemand muss es tun. Und wer auch immer das Problem des Austauschs von coreutils aufwirft - Ihre Idee, Ihr Projekt.

Nutzen Sie zu diesem Zweck die Automatisierung, die Sie finden können: Refactoring-Engines wie cscout oder alles, was fortgeschrittenere Analyse- / Synthesemethoden (z. B. formale Konzeptgitter) anwendet. Die Tiefenanalyse ist jedoch noch ein relativ neues und offenes Gebiet der aktiven Forschung - und geht in die künstliche Intelligenz über. (Ein Robotersoftware-Ingenieur.)

Die meisten Dienstprogramme sollten bereits über Testsuiten verfügen, sodass die Validierung mit schrittweisen Änderungen und automatisierten Regressionstests erfolgen kann. Das kann ziemlich schnell gehen (zB 10 oder mehr Revisionsupdates / Tag). Eine Komplikation dieses Vorgangs tritt auf, wenn irgendwo in der Softwaresuite Hardware- oder Softwareabhängigkeiten auf niedriger Ebene vorhanden sind. da dies die Validierung auf mehreren Plattformen mit sich bringt. Ich weiß nicht viel darüber in coreutils; Es sollte eine gewisse Trennung von der Hardware- oder der Low-Level-Software-Schicht bestehen (z. B. die Anzahl der Stellen, an denen coreutils weiß, welcher Typ vorliegt)Das Dateisystem, auf dem es sich befindet, sollte mindestens oder besser null sein.) Für Emulatoren und virtuelle Maschinen, die zum Testen auf mehreren Plattformen verwendet werden, gelten Einschränkungen. Zum Beispiel wurde Mac OS X speziell dafür entwickelt, die Emulation oder VM-Fähigkeit zu beeinträchtigen.

Rock Brentwood
quelle
-1

Solaris (ab svn_140-something) wäre ebenfalls eine Option.

Wenn Sie eine Distribution verwenden, sind Sie verrückt. Hör jetzt auf. Suchen Sie psychiatrische Hilfe auf.

Wenn Sie LFS verwenden , rocken Sie weiter! Habe Spaß!

Wenn Sie eine Distribution machen, begrüße ich Ihren tapferen Herrn.

Bahamat
quelle
1
Hier geht es nicht darum, welche Distribution ich verwenden kann, sondern darum, Coreutils unter Linux zu ersetzen. Es sei denn, Sie beziehen sich auf OpenSolaris Coreutils? Auch ist dies weniger eine PITA als die FreeBSD-Option?
Xenoterracide
1
Der Quellcode für OpenSolaris ist nur Solaris. Der Solaris-Quellcode bis svn_14x wurde von Sun / Oracle unter CDDL veröffentlicht. Grundsätzlich gibt es drei Hauptmerkmale für das Unix-Userland. "Genetic" Unix (Solaris, AIX, True64 usw.), das aus dem AT & T-Code stammt und weitgehend geschlossen ist, aber Solaris eine Zeit lang geöffnet war, BSD (das ab 4.4-lite endlich für sich allein stand) und GNU. Aber ich denke, dass die Abkehr von GNU genauso schwierig (oder einfach) sein wird, ob Sie mit BSD oder Solaris arbeiten. Oder du kannst wirklich ehrgeizig werden und Xenocore-
Utensilien herstellen ;-)