In che modo msys, msys2 e msysgit sono correlati tra loro?


162

Ho cercato in giro, ma non riesco a trovare una descrizione completa di ciò che sta accadendo con queste 3 versioni di MSYS. (È del tutto possibile non so proprio cosa cercare.) Capisco che MSYS è una porta minima di strumenti Linux per supportare lo sviluppo usando MinGW, ma non sono chiaro sulla relazione tra loro tre o il team che li hanno sviluppati / mantenuti.

Questioni particolari da affrontare:

  • Quali sono in fase di sviluppo attivo? (In particolare, MSYS è morto e MSYS2 è attivo?)
  • Qual è la relazione tra i gruppi che li mantengono? (In particolare, il team MSYS ha creato MSYS2?)
  • Msysgit usa solo uno degli altri o ha il proprio ramo di MSYS?
  • Alcuni di questi sono compatibili tra loro?
  • Ci sono problemi di compatibilità con particolari versioni di Windows per una di queste?
  • Uno fornisce le principali funzionalità rispetto all'altro?

8
@JamesJohnston Prima di scrivere questa domanda, era (ed è) la mia comprensione che MSYS e MinGW sono stati creati come concorrenti di Cygwin perché Cygwin (almeno in precedenza; non sono sicuro del suo stato attuale) ha costretto qualsiasi nuovo codice a passare un livello di compatibilità piuttosto non performante invece di chiamare direttamente le API di Windows. In quanto tale, ho sempre visto MSYS e i suoi parenti come un sistema più leggero di Cygwin, quindi non ero interessato allo stato attuale di Cygwin. Questo potrebbe fare una buona domanda di follow-up, se sei interessato, però; sentiti libero di chiederlo se riesci a formularlo per essere in tema.
jpmc26,

4
Ho avuto anche quell'impressione fino a quando non ho iniziato a scavare sotto le coperte ieri. Tutte e tre le versioni di MSYS citate sono forchette di Cygwin, come sottolinea @Ray Donnelly. Quindi, in questo senso, sono tutti "Cygwin" - e questa domanda riguarda davvero Cygwin e le sue forcelle. Come sottolinea Ray, sembra che MSYS sia condannato. Ho esaminato il codice MSYS da solo; è irrimediabilmente obsoleto e manca persino la sincronizzazione di base sulla memoria condivisa. I manutentori non hanno tenuto il passo con l'upstream e non hanno mai avuto le correzioni per la memoria condivisa che ha ottenuto l'upstream Cygwin.
James Johnston,

9
@JamesJohnston Penso che tu abbia frainteso. Il mio punto è che Cygwin non supporta (non?) La costruzione di nuovi binari senza il livello di compatibilità. MSYS e parenti lo fanno, tramite MinGW. In quanto tale, non mi interessa Cygwin, nonostante sia ben consapevole che tutti hanno radici in Cygwin. Dato che non sono interessato a Cygwin, non aveva senso chiederlo. Questa domanda si concentra anche principalmente sulla storia del biforcamento stesso e le ragioni di ciò e alcune conseguenze rudimentali di esso. Quando si tenta di scegliere tra diverse versioni di MSYS, la storia di Cygwin non è davvero rilevante.
jpmc26,

1
Quello che non capisco è il motivo per cui gli sviluppatori MSYS2 e gli sviluppatori Cygwin non possono venire a patti e smettere di litigare, quindi possiamo smettere di avere queste stupide forchette. Cygwin riceve poca attenzione così com'è, ma almeno ci sono dipendenti Red Hat retribuiti che ci lavorano; le forchette non lo capiscono nemmeno. Ho trovato una discussione dello scorso anno sulla mailing list di Cygwin sull'avere MSYS2 come una DLL hook per Cygwin in modo che MSYS2 non dovesse biforcare l'intera DLL Cygwin; apparentemente quelle discussioni non sono andate lontano. Mentre MSYS2 ha energia ora, lo prevedo stagnante come MSYS se / quando i volontari MSYS2 smettono di aggiornarlo
James Johnston,

1
@JamesJohnston Penso che potresti essere in grado di ottenere risposte migliori alle tue domande sul canale IRC menzionato da Ray nella sua risposta. Questa catena di commenti sta diventando piuttosto lunga e deviata dall'argomento.
jpmc26,

Risposte:


178

Disclaimer: sono uno sviluppatore MSYS2

Mentre MSYS non è morto, direi che non sembra neanche molto salutare. È un progetto avviato dal team MinGW molti anni fa come fork di Cygwin che non ha mai tenuto il passo con Cygwin.

msysgit è un fork di una versione leggermente più vecchia di MSYS con alcune patch personalizzate, vecchie versioni di Bash e Perl e una porta nativa di Git.

MSYS2 è un progetto avviato da Alexey Pavlov del team mingw-builds (che sono i packager ufficiali per le toolchain MinGW-w64) come un fork recente di Cygwin che segue da vicino le ultime Cygwin in modo che non finisca. Alexey eseguì il porting delle vecchie patch MSYS e ne aggiunse alcune sue.

Oltre a fornire gli strumenti Unix necessari con cui compilare il software nativo - l'obiettivo dichiarato di MSYS - abbiamo portato il gestore di pacchetti Pacman da Arch Linux . Pacman è molto più di una semplice gestione dei pacchetti binari (anche se lo fa molto bene). Ha un'infrastruttura di creazione software chiamata makepkg che consente la creazione di ricette (PKGBUILD e file patch) per la creazione di software.

IMHO, l'adozione di Pacman cambia in modo significativo le cose per lo sviluppo open source su Windows. Invece di hackerare tutti i propri script shell personalizzati per creare software in modo incompatibile, i pacchetti possono ora dipendere da altri pacchetti e file PKGBUILD e le patch associate possono essere utilizzate come riferimento per la costruzione di nuovi PKGBUILD. È più vicino a un sistema Linux come un Windows (nativo) può ottenere (Arch Linux in particolare) e consente un semplice aggiornamento di tutti i pacchetti installati.

Abbiamo come target almeno Windows XP SP3 e supportiamo sia Windows a 32-bit che a 64-bit. Ti chiediamo di non mescolare mai MSYS2 con msys o msysgit. Pacman viene utilizzato per gestire l'intero sistema e, come tale, i file degli altri sistemi causeranno conflitti.

Cerchiamo anche di upstream le nostre patch ai progetti che costruiamo e sollecitare attivamente contributi da altri progetti open source. Speriamo che altri trovino facile lavorare con noi.

Il nostro sito Web principale è su SourceForge e contiene collegamenti ai nostri repository PKGBUILD. Abbiamo anche un sito di installazione più user friendly su GitHub .

Sentiti libero di unirti a noi su IRC (oftc # msys2) se vuoi maggiori informazioni.


6
Msys2 può essere usato per compilare ed eseguire git (cioè sostituire msysgit).
Verifica il

10
MSYS2 ha un pacchetto git. È una versione MSYS2 anziché una versione nativa. Per installare git: pacman -S git .. abbiamo anche una porta work in progress di msysgit nel nostro repository di pacchetti MINGW.
Ray Donnelly,

16
No, il nostro git MSYS2 è completo e privo di hack. Lo usiamo ampiamente nello sviluppo di altri pacchetti. C'è il timore che MSYS2 (dato che è un fork di Cygwin) aggiunge un sacco di sovraccarico alle operazioni sui file e poiché git è pesante per le operazioni sui file, un git nativo sarebbe più veloce. Il modo per dimostrare o confutare ciò è avere entrambi e confrontarli, quindi è quello che faremo. Dovrei stare attento ai termini qui, poiché i miei riferimenti a msysgit riguardano due cose diverse, il msys-fork con git nativo di Windows e anche git nativo di Windows. Qui mi riferisco a quest'ultimo!
Ray Donnelly,

7
@eckes Voglio solo dire che sto usando MSYS2 per git da alcuni mesi ormai. MSYS2 ha un paio di aree difficili (che software no?), Ma sono stato molto contento di usarlo. Nessuno di loro era in relazione con Git stesso.
jpmc26,

7
La promessa di msys2 è all'altezza delle mie aspettative. Continuate così, @RayDonnelly
bvj

73

Git 2.8 (marzo 2016) include un commit molto dettagliato che spiega l'importanza di msys2 per il nuovo git-for-windows che ha sostituito msysgit all'inizio del 2015 .

Vedi commit df5218b (13 gennaio 2016) di Johannes Schindelin ( dscho) .
(Unito da Junio ​​C Hamano - gitster- in commit 116a866 , 29 gennaio 2016)

Per molto tempo, Git per Windows è rimasto indietro rispetto alle versioni 2.x di Git perché gli sviluppatori di Git per Windows volevano che quel grande salto coincidesse con un necessario salto da MSys a MSys2.

Per capire perché questo è un grosso problema, bisogna notare che molte parti di Git non sono scritte in C portatile, ma Git si basa su una shell POSIX e Perl per essere disponibile .

Per supportare gli script, Git per Windows deve distribuire un livello minimo di emulazione POSIX con Bash e Perl inseriti , e quando lo sforzo di Git per Windows è iniziato nell'agosto 2007, questo sviluppatore ha deciso di utilizzare MSys, una versione ridotta di Cygwin .
Di conseguenza, il nome originale del progetto era "msysGit" (che, purtroppo, ha causato molta confusione perché pochi utenti di Windows conoscono MSys e anche meno cura).

Per compilare il codice C di Git per Windows, è stato utilizzato anche MSys: sfoggia due versioni del compilatore C GNU:

  • uno che si collega implicitamente al livello di emulazione POSIX,
  • e un altro che si rivolge alla semplice API Win32 (con alcune funzioni di convenienza inserite).

Gli eseguibili di Git per Windows sono creati usando quest'ultimo, e quindi sono davvero solo programmi Win32. Per distinguere gli eseguibili che richiedono il livello di emulazione POSIX da quelli che non lo fanno, questi ultimi sono chiamati MinGW (Minimal GNU per Windows) quando i primi sono chiamati eseguibili MSys .

Anche questa dipendenza da MSys ha comportato delle difficoltà:

  • alcune delle nostre modifiche al runtime di MSys - necessarie per supportare meglio Git per Windows - non sono state accettate a monte, quindi abbiamo dovuto mantenere il nostro fork.
  • Inoltre, il runtime di MSys non è stato ulteriormente sviluppato per supportare, ad esempio, UTF-8 o 64-bit, e oltre alla mancanza di un sistema di gestione dei pacchetti fino a molto tempo dopo (quando è mingw-getstato introdotto), molti pacchetti forniti dal progetto MSys / MinGW sono in ritardo rispetto ai rispettivi versioni del codice sorgente, in particolare Bash e OpenSSL.

Per un po ', il progetto Git per Windows ha cercato di porre rimedio alla situazione cercando di creare versioni più recenti di quei pacchetti, ma la situazione è diventata rapidamente insostenibile, soprattutto con problemi come il bug Heartbleed che richiedono un'azione rapida che non ha nulla a che fare con lo sviluppo di Git per Windows ulteriormente.

Fortunatamente, nel frattempo è emerso il progetto MSys2 ( https://msys2.github.io/ ) ed è stato scelto per essere la base di Git per Windows 2.x.
Proprio come MSys, MSys2 è una versione ridotta di Cygwin, ma è attivamente aggiornata con il codice sorgente di Cygwin .
Pertanto, supporta già Unicode internamente e offre anche il supporto a 64 bit che desideravamo sin dall'inizio del progetto Git per Windows.

MSys2 ha anche portato il sistema di gestione dei pacchetti Pacman da Arch Linux e lo usa pesantemente . Questo porta la stessa comodità a cui gli utenti di Linux sono usati per da yumo apt-get, ed a cui gli utenti MacOSX sono usati per da Homebrew o MacPorts, o gli utenti BSD dal sistema delle porte, ad MSys2: una semplice pacman -Syuaggiornerà tutti i pacchetti installati per le versioni più recenti attualmente disponibile.

MSys2 è anche molto attivo, in genere fornisce aggiornamenti dei pacchetti più volte alla settimana.

Richiedeva ancora uno sforzo di due mesi per portare tutto a uno stato in cui la suite di test di Git passava, molti altri mesi fino al rilascio del primo Git ufficiale per Windows 2.xe un paio di patch attendono ancora la loro presentazione ai rispettivi progetti a monte . Tuttavia, senza MSys2, la modernizzazione di Git per Windows non sarebbe semplicemente avvenuta .

Questo impegno pone le basi per supportare build Git basate su MSys2.


Nei commenti , la domanda è stata posta a gennaio 2016:

Poiché Git per Windows è già basato su MSYS2, i binari che non dipendono dal livello di emulazione sono stati resi disponibili come pacchetto MSYS2?

Ray Donnelly rispose allora:

Non ci siamo ancora completamente uniti, no. Ci stiamo lavorando però.

Ma ... Madz sottolinea che all'inizio del 2017, tale sforzo non è andato a buon fine.
Vedere:

Il problema è che non posso apportare modifiche che si tradurranno in un nuovo runtime msys2 in modo tempestivo.
Non è un grosso problema, comunque: terrò il fork di Git per Windows in esecuzione a tempo indeterminato.

Il wiki quindi menziona ora (2018):

Git per Windows ha creato alcune patch per runtime msys2 che non sono state inviate a monte. (Questo era stato pianificato, ma era stato determinato nel numero 284 che probabilmente non sarebbe successo.)
Ciò significa che devi installare Git per Windows msys2-runtime personalizzato per avere un git completamente funzionante all'interno di MSYS2.


Si noti che, dal momento del commit aeb582a9 (Git 2.22, Q2 2019), il progetto Git per Windows ha avviato il processo di aggiornamento a una versione runtime MSYS2 basata su Cygwin v3.x.

mingw: consente la creazione con un runtime MSYS2 v3.x

Recentemente il progetto Git per Windows ha avviato il processo di aggiornamento a una versione runtime MSYS2 basata su Cygwin v3.x.

Ciò ha la notevole conseguenza che $(uname -r)non riporta più una versione che inizia con "2", ma una versione con "3".

Ciò rompe la nostra build, poiché df5218b ( config.mak.uname: supporto MSys2, 13-01-2016, Git v2.8.0-rc0) semplicemente non si aspettava che la versione segnalata uname -rdipendesse dalla versione Cygwin sottostante: si aspettava che la versione segnalata corrispondesse alla " 2 "in" MSYS2 ".

Quindi invertiamo quel caso di test per provare qualcos'altro che una versione che inizia con "1" (per MSys).
Ciò dovrebbe salvaguardarci per il futuro, anche se Cygwin finirà per rilasciare versioni come 314.272.65536.


Git 2.22 (Q2 2019) sarà un test a prova di futuro contro un aggiornamento alla serie v3.x di runtime MSYS2.

Vedi commit c871fbe (07 maggio 2019) di Johannes Schindelin ( dscho) .
(Unito da Junio ​​C Hamano - gitster- in commit b20b8fe , 19 maggio 2019)

t6500(mingw): usa il PID di Windows della shell

In Git per Windows, utilizziamo MSYS2 Bash che eredita un modello PID non standard dal livello di emulazione POSIX di Cygwin: ogni processo MSYS2 ha un PID Windows regolare e inoltre ha un PID MSYS2 (che corrisponde a un processo ombra che emula Gestione del segnale in stile Unix).

Con l'aggiornamento a MSYS2 runtime v3.x, non è più possibile accedere a questo processo shadow tramite OpenProcess(), e quindi t6500 ha ritenuto erroneamente che il processo a gc.pidcui si fa riferimento (che in realtà non è un gcprocesso reale in questo contesto, ma la shell corrente) non è più esiste.

Risolviamolo assicurandoci che il PID di Windows sia scritto in gc.pidquesto script di test in modo che git.exesia in grado di capire che quel processo esiste davvero.


1
Ciò solleva una domanda molto interessante: poiché Git per Windows è già basato su MSYS2, i binari che non dipendono dal livello di emulazione sono stati resi disponibili come pacchetto MSYS2? @RayDonnelly sopra menziona che il team MSYS2 era interessato a creare quel tipo di binari per vedere che tipo di differenza di prestazioni fa.
jpmc26,

4
Non ci siamo ancora completamente uniti, no. Ci stiamo lavorando però.
Ray Donnelly,

4
Per espandersi su questo .. Non ancora, per ora, il pacchetto git di MSYS2 si collega ancora a msys-2.0.dll, è in corso un processo per unire MSYS2 con Git per Windows e una volta completato, prevediamo di rilasciare il nostro pacchetto git per quello completamente nativo poiché esistono pacchetti collegati a msys-2.0.dll per supportare la creazione di software nativo e non rappresentano un obiettivo finale a sé stanti.
Ray Donnelly,

1
@RayDonnelly Qual è lo stato in questo momento? Se sostituisci Git per Windows con MSYS2 (gestione dei pacchetti!), Ci sono degli svantaggi?
Brecht Machiels,


18

La mia comprensione delle connessioni tra loro è

  • Cygwin offre l'emulazione POSIX sulla parte superiore di Windows
  • msys ha provato a semplificare Cygwin ma è obsoleto dal 2010
  • msysGit - ha permesso Git fino a 1.9.4 su Windows (potrebbe essere chiamato git-for-windows-1.X ), basato su una vecchia versione di msys.
  • msys2 - un Cygwin semplificato, derivato da esso, con modifiche da msys e tenuto sincronizzato con le funzionalità di Cygwin, integrato con Pacman
  • MinGW - MinGW iniziale, abbandonato dal 2010
  • MinGW-w64 : un'integrazione più rapida e migliore con Windows, senza POSIX
  • git-for-windows-2.x - offre Git da 2.X per Windows usando MinGW-64 , MinGW-32 e quando non è possibile con un fallback a msys2

Confronta Cygwin, msys, msys2, MinGW, git-per-windows, msysGit

Violino con definizione grafica completa in sirena .


1
Bella grafica. +1. Il "Git per Windows 1.0" è stato davvero fatto su una base migliore sforzo però: stackoverflow.com/a/1704687/6309 (che ho citato in stackoverflow.com/a/50555740/6309 )
VonC
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.