Ist es möglich, OS X-Versionen von Unix-Tools auf modernen Linux-Distributionen (wie Ubuntu oder RedHat) zu erhalten?

Ist es möglich, OS X-Versionen von Unix-Tools auf modernen Linux-Distributionen (wie Ubuntu oder RedHat) zu erhalten?

Ich habe beobachtet, dass es oft subtile und oft ärgerliche Unterschiede zwischen den Standardversionen bestimmter Befehlszeilentools wie pasteund sedauf modernen Linux-Distributionen gegenüber gibt OSX. Dies führt zuAntwortendie nicht funktionieren, OS Xobwohl sie auf fast jeder Linux-Distribution funktionieren.

Daher frage ich mich, ob es eine Standardmethode gibt, um den vollständigen Satz an OS XVersionen der Standard-Unix-Tools auf moderne Linux-Distributionen zu bekommen, sodass wir Lösungen auf OSX auf korrekte Funktionalität testen können, ohne eine Kopie zu haben?

Antwort1

Wie in einem Kommentar erwähnt, macht Apple dieQuellcodeseiner Versionen dieser Tools verfügbar. Viele allgemeine Befehle sind in derPaket "shell_cmds", während Paste und Sed in "Textbefehle". Sie können den Quellcode erhalten und kompilieren.

Fast alle davon funktionieren auf Linux-Systemen einwandfrei, obwohl Sie oft in die Quelle springen und explizit FreeBSD-spezifische Tests entfernen müssen, insbesondere die __FBSDID("...");Zeile, die in fast jeder Datei enthalten ist. Ich kenne keine Distribution, die diese bündelt. Viele Distributionen bündeln BSD-Versionen einiger gängiger Tools, die den OS X-Versionen sehr ähnlich (oft identisch) sind, obwohl sie normalerweise keine Dinge wie Paste und Sed enthalten. Debian enthält beispielsweiseacht Pakete namensbsdX(keine davon hat einen dieser Befehle). Insbesondere für die Apple-Versionen oder für die vielen Tools, die darin nicht enthalten sind, ist es nicht schwer, sie selbst zu erstellen, wenn Sie sie anhand der obigen Anweisungen benötigen.

Abgesehen davon ist die gemeinsame Untermenge der GNU- und BSD-Tools diePOSIX-Spezifikation, wo alle grundlegenden Befehle definiert sind. Sie können dieBefehl „Einfügen“odersedund sehen Sie, welche Argumente es garantiert überall akzeptiert. Dies ist die „moralisch korrekte“ Art, portablen Code zu schreiben: Sowohl GNU-Tools als auch BSD-Tools haben Erweiterungen, aber wenn Sie innerhalb von POSIX bleiben, wird Ihr Code auf beiden funktionieren. AlsoÜberprüfen Sie, dass Sie immer nur POSIX-Argumente verwendenund dann sollte das, was Sie sagen, unter OS X und anderen Systemen gleichermaßen funktionieren.

Antwort2

Während die meistenUnixy-Tools von OSX sind Open-Source, der Quellcode vieler Tools basiert auf Bibliotheks- und Kernelfunktionen, die unter Linux nicht vorhanden sind (und die nicht Open Source sind und die ohne zusätzlichen Aufwand und möglicherweise Lizenzverletzungen nicht auf Nicht-Apple-Hardware ausgeführt werden können). Ich bezweifle, dass Sie sie ohne erheblichen Aufwand unter Linux ausführen könnten.

Die Unix-Schicht von OSX wird portiert vonFreeBSDund viele Programme sind denen in der FreeBSD-Version sehr ähnlich, die zum Zeitpunkt der OSX-Version aktuell war. Sie können FreeBSD in einer virtuellen Maschine ausführen und dort Dinge testen. Sie können auch ausführenOpenBSD; OpenBSD ist auf Sicherheit ausgerichtet und bei der Einführung neuer Funktionen weitaus konservativer als FreeBSD. Wenn Sie Skripte auf Portabilität testen möchten, können Sie auchOffenIndiana, ein Open-Source-Fork vonSolarisbasiert auf der mittlerweile eingestellten OpenSolaris-Edition. Da SolarisSystem V-basiert, Solaris plus OpenBSD bietet Ihnen einen recht umfassenden Überblick über die Unix-Portabilität.

Sie können die Dokumentation vieler Unix-Varianten auch online einsehen:

verwandte Informationen