Wie hängen msys, msys2 und msysgit zusammen?

162

Ich habe mich umgesehen, kann aber keine ausführliche Beschreibung der Vorgänge mit diesen drei Versionen von MSYS finden. (Es ist durchaus möglich, dass ich nicht weiß, wonach ich suchen soll.) Ich verstehe, dass MSYS eine minimale Portierung von Linux-Tools zur Unterstützung der Entwicklung mit MinGW ist, aber ich bin mir nicht sicher, in welcher Beziehung die drei oder die beiden stehen Teams, die sie entwickelt / gepflegt haben.

Besondere Probleme:

  • Welche befinden sich in der aktiven Entwicklung? (Ist MSYS insbesondere tot und MSYS2 aktiv?)
  • Welche Beziehung besteht zwischen den Gruppen, die sie unterhalten? (Hat das MSYS-Team insbesondere MSYS2 erstellt?)
  • Verwendet msysgit nur einen der anderen oder haben sie einen eigenen Zweig von MSYS?
  • Sind diese miteinander kompatibel?
  • Gibt es Kompatibilitätsprobleme mit bestimmten Windows-Versionen für eine dieser Versionen?
  • Bietet einer wichtige Funktionen gegenüber dem anderen?
jpmc26
quelle
8
@JamesJohnston Bevor ich diese Frage schrieb, war (und ist) mein Verständnis, dass MSYS und MinGW als Konkurrent von Cygwin erstellt wurden, weil Cygwin (zumindest zuvor; ich bin mir nicht sicher, ob es aktuell ist) neuen Code zum Durchlaufen gezwungen hat eine eher nicht performante Kompatibilitätsschicht, anstatt Windows-APIs direkt aufzurufen. Daher habe ich MSYS und seine Verwandten immer als ein System mit geringerem Gewicht als Cygwin gesehen, daher war ich nicht an Cygwins aktuellem Status interessiert. Das könnte jedoch eine gute Folgefrage sein, wenn Sie interessiert sind; Sie können es gerne fragen, ob Sie es so formulieren können, dass es zum Thema gehört.
jpmc26
4
Ich war auch unter diesem Eindruck, bis ich gestern anfing, unter der Decke zu graben. Alle drei von Ihnen erwähnten Versionen von MSYS sind Gabeln von Cygwin, wie @Ray Donnelly betont. In diesem Sinne sind alle "Cygwin" - und bei dieser Frage geht es wirklich um Cygwin und seine Gabeln. Wie Ray betont, scheint MSYS zum Scheitern verurteilt zu sein. Ich habe den MSYS-Code selbst untersucht. Es ist hoffnungslos veraltet und es fehlt sogar eine grundlegende Synchronisation über den gemeinsam genutzten Speicher. Die Betreuer haben einfach nicht mit dem Upstream Schritt gehalten und nie die Korrekturen für den gemeinsam genutzten Speicher erhalten, die der Upstream von Cygwin erhalten hat.
James Johnston
9
@ JamesJohnston Ich denke du hast es falsch verstanden. Mein Punkt ist, dass Cygwin das Erstellen neuer Binärdateien ohne die Kompatibilitätsebene nicht unterstützt (nicht?). MSYS und Verwandte tun dies über MinGW. Daher interessiere ich mich nicht für Cygwin, obwohl ich mir bewusst bin, dass alle ihre Wurzeln in Cygwin haben. Da ich mich nicht für Cygwin interessiere, war es nicht sinnvoll, danach zu fragen. Diese Frage konzentriert sich auch in erster Linie auf die Geschichte der Gabelung selbst und die Gründe dafür sowie einige rudimentäre Konsequenzen davon. Bei dem Versuch, zwischen verschiedenen Versionen von MSYS zu wählen, ist die Geschichte von Cygwin nicht wirklich relevant.
jpmc26
1
Was ich nicht verstehe, ist, warum MSYS2-Entwickler und Cygwin-Entwickler sich nicht abfinden und aufhören können zu streiten, damit wir aufhören können, diese dummen Gabeln zu haben. Cygwin bekommt so wenig Aufmerksamkeit wie es ist, aber es gibt zumindest bezahlte Red Hat-Mitarbeiter, die daran arbeiten. Die Gabeln verstehen das nicht einmal. Ich fand auf der Cygwin-Mailingliste eine Diskussion aus dem letzten Jahr darüber, dass MSYS2 nur eine Hook-DLL für Cygwin ist, damit MSYS2 nicht die gesamte Cygwin-DLL teilen muss. anscheinend gingen diese Diskussionen nicht weit. Während MSYS2 jetzt Energie hat, sehe ich voraus, dass es wie MSYS stagniert, wenn / wenn MSYS2-Freiwillige aufhören, es zu aktualisieren
James Johnston
1
@JamesJohnston Ich denke, Sie können möglicherweise bessere Antworten auf Ihre Fragen auf dem IRC-Kanal erhalten, den Ray in seiner Antwort erwähnt. Diese Kommentarkette wird ziemlich lang und weicht vom Thema ab.
jpmc26

Antworten:

178

Haftungsausschluss: Ich bin ein MSYS2-Entwickler

Obwohl MSYS nicht tot ist, würde ich sagen, dass es auch nicht sehr gesund aussieht. Es ist ein Projekt, das das MinGW-Team vor vielen Jahren als Gabelung von Cygwin gestartet hat und das nie mit Cygwin Schritt gehalten hat.

msysgit ist eine Abzweigung einer etwas älteren Version von MSYS mit einigen benutzerdefinierten Patches, alten Versionen von Bash und Perl und einem nativen Port von Git.

MSYS2 ist ein Projekt, das von Alexey Pavlov vom Mingw-Builds-Team (die die offiziellen Packager für MinGW-w64-Toolchains sind) als eine neue Abzweigung von Cygwin gestartet wurde, die den neuesten Cygwin genau verfolgt, damit er nicht veraltet ist. Alexey hat die alten MSYS-Patches portiert und einige seiner eigenen hinzugefügt.

Wir haben nicht nur die erforderlichen Unix-Tools zum Kompilieren nativer Software bereitgestellt - das erklärte Ziel von MSYS -, sondern auch den Pacman- Paketmanager von Arch Linux portiert . Bei Pacman geht es nicht nur um die Verwaltung von Binärpaketen (obwohl dies sehr gut funktioniert). Es verfügt über eine Software-Build-Infrastruktur namens makepkg, mit der Rezepte (PKGBUILD und Patch-Dateien) zum Erstellen von Software erstellt werden können.

Meiner Meinung nach ändert die Einführung von Pacman die Dinge für die Open Source-Entwicklung unter Windows erheblich. Anstatt dass jeder seine eigenen, maßgeschneiderten Shell-Skripte hackt, um Software auf eine inkompatible Weise zu erstellen, können Pakete jetzt von anderen Paketen abhängen, und PKGBUILD-Dateien und zugehörige Patches können als Referenz für die Erstellung neuer PKGBUILDs verwendet werden. Es kommt einem Linux-System so nahe, wie es ein (natives) Windows nur kann (insbesondere Arch Linux) und ermöglicht die einfache Aktualisierung aller installierten Pakete.

Wir zielen mindestens auf Windows XP SP3 ab und unterstützen sowohl 32-Bit- als auch 64-Bit-Windows. Wir bitten Sie, MSYS2 niemals mit msys oder msysgit zu mischen. Pacman wird verwendet, um das gesamte System zu verwalten. Daher verursachen Dateien von den anderen Systemen Konflikte.

Wir versuchen auch, unsere Patches auf die von uns erstellten Projekte zu übertragen und aktiv Beiträge von anderen Open Source-Projekten einzuholen. Wir hoffen, dass es anderen leicht fällt, mit uns zu arbeiten.

Unsere Hauptwebsite befindet sich auf SourceForge und enthält Links zu unseren PKGBUILD-Repositories. Wir haben auch eine benutzerfreundlichere Installationsseite auf GitHub .

Wenn Sie weitere Informationen wünschen, können Sie sich gerne im IRC (oftc # msys2) anmelden.

Ray Donnelly
quelle
6
Kann msys2 verwendet werden, um git zu erstellen und auszuführen (dh msysgit zu ersetzen).
eckes
10
MSYS2 hat ein Git-Paket. Es ist eine MSYS2-Version im Gegensatz zu einer nativen Version. So installieren Sie git: pacman -S git .. Wir haben auch einen Work-in-Progress-Port von msysgit in unserem MINGW-Paket-Repository.
Ray Donnelly
16
Nein, unser MSYS2-Git ist vollständig und hackfrei. Wir verwenden es ausgiebig bei der Entwicklung anderer Pakete. Es besteht die Sorge, dass MSYS2 (da es sich um eine Abzweigung von Cygwin handelt) den Dateivorgängen viel Overhead hinzufügt und dass ein natives Git schneller ist, da git dateibetriebsintensiv ist. Der Weg, dies zu beweisen oder zu widerlegen, besteht darin, beide zu haben und sie zu vergleichen. Das werden wir also tun. Ich sollte mit den Begriffen hier vorsichtig sein, da meine Verweise auf msysgit zwei verschiedene Dinge betreffen, die msys-Gabel mit nativem Windows-Git und auch nativem Windows-Git. Hier beziehe ich mich auf Letzteres!
Ray Donnelly
7
@eckes Ich möchte nur sagen, dass ich MSYS2 seit einigen Monaten für Git verwende. MSYS2 hat ein paar schwierige Bereiche (welche Software nicht?), Aber ich war sehr zufrieden damit. Keiner von ihnen war mit Git selbst verwandt.
jpmc26
7
Das Versprechen von msys2 erfüllt meine Erwartungen. Mach weiter so, @RayDonnelly
bvj
72

Git 2.8 (März 2016) enthält ein sehr detailliertes Commit, das die Bedeutung von msys2 für das neue git-for-windows erklärt, das msysgit Anfang 2015 ersetzt hat .

Siehe Commit df5218b (13. Januar 2016) von Johannes Schindelin ( dscho) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 116a866 , 29. Januar 2016)

Git für Windows blieb lange Zeit hinter den 2.x-Versionen von Git zurück, da die Entwickler von Git für Windows diesen großen Sprung mit einem dringend benötigten Sprung von MSys zu MSys2 zusammenfallen lassen wollten.

Um zu verstehen, warum dies ein so großes Problem ist, muss beachtet werden, dass viele Teile von Git nicht in portablem C geschrieben sind, sondern dass Git auf eine POSIX-Shell und Perl angewiesen ist, um verfügbar zu sein .

Um die Skripte zu unterstützen, muss Git für Windows eine minimale POSIX-Emulationsebene mit Bash und Perl liefern. Als die Git für Windows-Bemühungen im August 2007 begannen, entschied sich dieser Entwickler für MSys, eine abgespeckte Version von Cygwin .
Folglich war der ursprüngliche Name des Projekts "msysGit" (was leider viel Verwirrung stiftete, da nur wenige Windows-Benutzer über MSys Bescheid wissen und noch weniger darauf achten).

Zum Kompilieren des C-Codes von Git für Windows wurde auch MSys verwendet: Es enthält zwei Versionen des GNU C-Compilers:

  • eine, die implizit mit der POSIX-Emulationsschicht verknüpft ist,
  • und eine andere, die auf die einfache Win32-API abzielt (mit ein paar praktischen Funktionen).

Die ausführbaren Dateien von Git für Windows werden mit letzteren erstellt und sind daher eigentlich nur Win32-Programme. Um ausführbare Dateien, für die die POSIX-Emulationsschicht erforderlich ist, von solchen zu unterscheiden, die dies nicht tun, werden letztere als MinGW (Minimal GNU für Windows) bezeichnet, während erstere als ausführbare MSys-Dateien bezeichnet werden .

Dieses Vertrauen in MSys brachte jedoch auch Herausforderungen mit sich:

  • Einige unserer Änderungen an der MSys-Laufzeit, die zur besseren Unterstützung von Git für Windows erforderlich sind, wurden im Upstream nicht akzeptiert, sodass wir unsere eigene Gabel warten mussten.
  • Außerdem wurde die MSys-Laufzeit nicht weiterentwickelt, um beispielsweise UTF-8 oder 64-Bit zu unterstützen, und abgesehen davon, dass bis viel später (als sie mingw-geteingeführt wurde) kein Paketverwaltungssystem vorhanden war, blieben viele vom MSys / MinGW-Projekt bereitgestellte Pakete hinter den jeweiligen zurück Quellcode-Versionen, insbesondere Bash und OpenSSL.

Für eine Weile versuchte das Git für Windows-Projekt, Abhilfe zu schaffen, indem es versuchte, neuere Versionen dieser Pakete zu erstellen. Die Situation wurde jedoch schnell unhaltbar, insbesondere bei Problemen wie dem Heartbleed-Fehler, der schnelle Maßnahmen erfordert, die nichts mit der Entwicklung von Git zu tun haben Windows weiter.

Glücklicherweise entstand in der Zwischenzeit das MSys2-Projekt ( https://msys2.github.io/ ) und wurde als Basis für Git für Windows 2.x ausgewählt.
Genau wie MSys ist MSys2 eine abgespeckte Version von Cygwin, wird jedoch aktiv mit dem Quellcode von Cygwin auf dem neuesten Stand gehalten .
Dabei unterstützt es Unicode bereits intern und bietet auch die 64-Bit-Unterstützung, nach der wir uns seit Beginn des Git for Windows-Projekts gesehnt haben.

MSys2 portierte auch das Pacman-Paketverwaltungssystem von Arch Linux und verwendet es häufig . Dies bringt den gleichen Komfort, an den Linux-Benutzer von yumoder apt-getgewöhnt sind und an den MacOSX-Benutzer von Homebrew oder MacPorts oder BSD-Benutzer vom Ports-System an MSys2 gewöhnt sind: Ein einfaches pacman -SyuUpdate aller installierten Pakete auf die neuesten Versionen derzeit verfügbar.

MSys2 ist auch sehr aktiv und bietet in der Regel mehrmals pro Woche Paketaktualisierungen an.

Es waren noch zwei Monate erforderlich, um alles in einen Zustand zu bringen, in dem die Testsuite von Git erfolgreich war, viele weitere Monate, bis der erste offizielle Git für Windows 2.x veröffentlicht wurde, und einige Patches warten noch auf ihre Einreichung bei den jeweiligen Upstream-Projekten . Ohne MSys2 wäre die Modernisierung von Git für Windows einfach nicht möglich gewesen .

Dieses Commit bildet die Grundlage für die Unterstützung von MSys2-basierten Git-Builds.


In den Kommentaren wurde im Januar 2016 die Frage gestellt:

Wurden die Binärdateien, die nicht von der Emulationsebene abhängen, als MSYS2-Paket verfügbar gemacht, da Git für Windows bereits auf MSYS2 basiert?

Ray Donnelly antwortete damals:

Wir haben uns noch nicht vollständig zusammengeschlossen, nein. Wir arbeiten aber daran.

Aber ... madz weist darauf hin , dass diese Bemühungen Anfang 2017 nicht erfolgreich waren.
Sehen:

Das Problem ist, dass ich keine Änderungen vornehmen kann, die rechtzeitig zu einer neuen msys2-Laufzeit führen.
Kein großes Problem: Ich werde die Gabel von Git für Windows einfach unbegrenzt laufen lassen.

Das Wiki erwähnt daher jetzt (2018):

Git für Windows hat einige Patches für msys2-runtime erstellt, die nicht im Upstream gesendet wurden. (Dies war geplant, aber in Problem Nr. 284 wurde festgestellt, dass dies wahrscheinlich nicht der Fall sein würde.)
Dies bedeutet, dass Sie die für Git für Windows angepasste msys2-Laufzeit installieren müssen, um ein voll funktionsfähiges Git in MSYS2 zu haben.


Beachten Sie, dass das Git für Windows-Projekt seit dem Festschreiben von aeb582a9 (Git 2.22, Q2 2019) den Upgrade-Prozess auf eine MSYS2-Laufzeitversion auf Basis von Cygwin v3.x gestartet hat.

mingw: Erlaube das Erstellen mit einer MSYS2-Laufzeit v3.x.

Kürzlich hat das Git für Windows-Projekt den Upgrade-Prozess auf eine MSYS2-Laufzeitversion gestartet, die auf Cygwin v3.x basiert.

Dies hat die bemerkenswerte Konsequenz, dass $(uname -r)nicht mehr eine Version mit "2" gemeldet wird, sondern eine Version mit "3".

Das bricht unseren Build, da df5218b ( config.mak.uname: support MSys2, 2016-01-13, Git v2.8.0-rc0) einfach nicht erwartet hat, dass die von gemeldete Version von uname -rder zugrunde liegenden Cygwin-Version abhängt: Es wurde erwartet, dass die gemeldete Version mit der " 2 "in" MSYS2 ".

Kehren wir also diesen Testfall um, um auf etwas anderes als eine Version zu testen, die mit "1" beginnt (für MSys).
Das sollte uns für die Zukunft schützen, auch wenn Cygwin Versionen wie 314.272.65536 veröffentlicht.


Git 2.22 (Q2 2019) wird einen Test gegen ein Update der MSYS2 Runtime v3.x-Serie zukunftssicher machen.

Siehe Commit c871fbe (07. Mai 2019) von Johannes Schindelin ( dscho) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit b20b8fe , 19. Mai 2019)

t6500(mingw): Verwenden Sie die Windows-PID der Shell

In Git für Windows verwenden wir den MSYS2-Bash, der ein nicht standardmäßiges PID-Modell von der POSIX-Emulationsschicht von Cygwin erbt: Jeder MSYS2-Prozess verfügt über eine reguläre Windows-PID und zusätzlich über eine MSYS2-PID (die einem emulierten Schattenprozess entspricht Signalbehandlung im Unix-Stil).

Mit dem Upgrade auf die MSYS2-Laufzeit v3.x kann nicht mehr über diesen Schattenprozess zugegriffen werden OpenProcess(), und daher dachte t6500 fälschlicherweise, dass der Prozess, auf den verwiesen wird gc.pid(was gcin diesem Kontext eigentlich kein realer Prozess ist, sondern die aktuelle Shell), nicht mehr vorhanden ist existiert.

Lassen Sie uns dies beheben, indem Sie sicherstellen, dass die Windows-PID gc.pidin dieses Testskript geschrieben git.exeist, damit Sie verstehen, dass dieser Prozess tatsächlich noch vorhanden ist.

VonC
quelle
1
Dies wirft eine sehr interessante Frage auf: Wurden die Binärdateien, die nicht von der Emulationsebene abhängen, als MSYS2-Paket verfügbar gemacht, da Git für Windows bereits auf MSYS2 basiert? @ RayDonnelly oben erwähnt, dass das MSYS2-Team Interesse daran hatte, diese Art von Binärdateien zu erstellen, um zu sehen, welche Art von Leistungsunterschied es macht.
jpmc26
4
Wir haben uns noch nicht vollständig zusammengeschlossen, nein. Wir arbeiten aber daran.
Ray Donnelly
4
Um das zu erweitern. Noch ist das Git-Paket von MSYS2 noch nicht mit msys-2.0.dll verknüpft. Es gibt einen laufenden Prozess zum Zusammenführen von MSYS2 mit Git für Windows. Sobald dies abgeschlossen ist, werden wir unser Git-Paket voraussichtlich einfach löschen für ihre vollständig native, da mit msys-2.0.dll verknüpfte Pakete existieren, die das Erstellen nativer Software unterstützen und kein eigenständiges Endziel darstellen.
Ray Donnelly
1
@ RayDonnelly Wie ist der Status in diesem Moment? Gibt es Nachteile, wenn Git für Windows durch MSYS2 ersetzt wird (Paketverwaltung!)?
Brecht Machiels
18

Mein Verständnis für die Verbindungen zwischen ihnen ist

  • Cygwin bietet eine POSIX-Emulation über Windows an
  • msys hat versucht, Cygwin zu vereinfachen, ist aber seit 2010 veraltet
  • msysGit - erlaubte Git bis zu 1.9.4 unter Windows (könnte als git-for-windows-1.X bezeichnet werden ), basierend auf einer alten Version von msys.
  • msys2 - ein vereinfachter Cygwin, der mit Änderungen von msys gespalten und mit den in Pacman integrierten Funktionen von Cygwin synchronisiert wurde
  • MinGW - erstes MinGW, ab 2010 aufgegeben
  • MinGW-w64 - eine schnellere und bessere Integration in Windows ohne POSIX
  • git-for-windows-2.x - bietet Git von 2.X für Windows mit MinGW-64 , MinGW-32 und wenn dies nicht möglich ist, mit einem Fallback auf msys2

Vergleichen Sie Cygwin, msys, msys2, MinGW, git-for-windows, msysGit

Geige mit vollständiger Grafikdefinition in Meerjungfrau .

Rosercostin
quelle
1
Schöne Grafik. +1. Das "Git für Windows 1.0" wurde jedoch wirklich nach besten Kräften erstellt: stackoverflow.com/a/1704687/6309 (das ich in stackoverflow.com/a/50555740/6309 erwähne )
VonC