Bagaimana kaitan msys, msys2, dan msysgit satu sama lain?


162

Saya sudah mencari-cari, tetapi saya tidak dapat menemukan deskripsi menyeluruh tentang apa yang terjadi dengan 3 versi MSYS ini. (Sangat mungkin saya tidak tahu apa yang harus dicari.) Saya mengerti bahwa MSYS adalah port minimal alat Linux untuk mendukung pengembangan menggunakan MinGW, tapi saya tidak jelas tentang hubungan antara mereka bertiga atau tim yang mengembangkan / memelihara mereka.

Masalah khusus untuk diatasi:

  • Mana yang sedang dalam pengembangan aktif? (Secara khusus, apakah MSYS mati dan MSYS2 aktif?)
  • Apa hubungan antara kelompok yang mempertahankannya? (Secara khusus, apakah tim MSYS membuat MSYS2?)
  • Apakah msysgit hanya menggunakan salah satu yang lain, atau apakah mereka memiliki cabang MSYS sendiri?
  • Apakah semua ini kompatibel satu sama lain?
  • Apakah ada masalah kompatibilitas dengan versi Windows tertentu untuk semua ini?
  • Apakah satu menyediakan fitur utama di atas yang lain?

8
@JamesJohnston Sebelum menulis pertanyaan ini, adalah (dan) pemahaman saya bahwa MSYS dan MinGW diciptakan sebagai pesaing Cygwin karena Cygwin (setidaknya sebelumnya; saya tidak yakin dengan keadaan saat ini) memaksa kode baru untuk melalui lapisan kompatibilitas yang agak non-performant daripada memanggil langsung Windows API. Karena itu, saya selalu melihat MSYS dan kerabatnya sebagai sistem bobot yang lebih ringan daripada Cygwin, jadi saya tidak tertarik dengan status Cygwin saat ini. Itu mungkin bisa menjadi pertanyaan tindak lanjut yang baik, jika Anda tertarik; jangan ragu untuk bertanya apakah Anda bisa mengutarakannya sesuai topik.
jpmc26

4
Saya berada di bawah kesan itu juga sampai saya mulai menggali di bawah selimut kemarin. Ketiga versi MSYS yang Anda sebutkan adalah garpu Cygwin, seperti yang ditunjukkan oleh @Ray Donnelly. Jadi dalam pengertian itu, semuanya adalah "Cygwin" - dan pertanyaan ini sebenarnya tentang Cygwin dan fork-nya. Seperti yang ditunjukkan oleh Ray, sepertinya MSYS akan hancur. Saya memeriksa sendiri kode MSYS; itu sangat usang dan bahkan tidak memiliki sinkronisasi dasar atas memori bersama. Pemelihara hanya tidak mengikuti upstream, dan tidak pernah mendapatkan perbaikan untuk memori bersama yang didapat Cygwin hulu.
James Johnston

9
@ JamesJohnston, saya pikir Anda salah paham. Maksud saya adalah bahwa Cygwin tidak (tidak?) Mendukung pembuatan binari baru tanpa lapisan kompatibilitas. MSYS dan kerabat melakukannya, melalui MinGW. Karena itu, saya tidak tertarik pada Cygwin, meskipun menyadari bahwa mereka semua berakar pada Cygwin. Karena saya tidak tertarik pada Cygwin, tidak masuk akal untuk menanyakannya. Pertanyaan ini juga berfokus terutama pada sejarah percabangan itu sendiri dan alasannya serta beberapa konsekuensi mendasarnya. Ketika mencoba memilih antara versi MSYS yang berbeda, sejarah Cygwin tidak terlalu relevan.
jpmc26

1
Apa yang saya tidak mengerti adalah mengapa pengembang MSYS2 dan pengembang Cygwin tidak dapat berdamai & berhenti bertengkar sehingga kita dapat berhenti memiliki garpu bodoh ini. Cygwin mendapat sedikit perhatian seperti itu, tetapi setidaknya ada karyawan Red Hat yang dibayar untuk mengerjakannya; garpu bahkan tidak mengerti. Saya menemukan diskusi dari tahun lalu di milis Cygwin tentang memiliki MSYS2 hanya menjadi DLL kait untuk Cygwin sehingga MSYS2 tidak harus membayar seluruh Cygwin DLL; rupanya diskusi itu tidak berjalan jauh. Sementara MSYS2 memiliki energi sekarang, saya memperkirakan stagnan seperti MSYS jika / ketika sukarelawan MSYS2 berhenti memperbaruinya
James Johnston

1
@ JamesJohnston Saya pikir Anda mungkin bisa mendapatkan jawaban yang lebih baik untuk pertanyaan Anda di saluran IRC yang disebutkan Ray dalam jawabannya. Rantai komentar ini menjadi agak panjang dan menyimpang dari topik.
jpmc26

Jawaban:


178

Penafian: Saya adalah pengembang MSYS2

Meskipun MSYS tidak mati, saya akan mengatakan itu juga tidak terlihat sangat sehat. Ini adalah proyek yang dimulai oleh tim MinGW bertahun-tahun yang lalu sebagai percabangan Cygwin yang tidak pernah mengikuti Cygwin.

msysgit adalah fork dari versi MSYS yang sedikit lebih tua dengan beberapa tambalan khusus, Bash and Perl versi lama dan port asli Git.

MSYS2 adalah proyek yang dimulai oleh Alexey Pavlov dari tim mingw-builds (yang merupakan pembuat paket resmi untuk perkakas MinGW-w64) sebagai cabang baru-baru ini dari Cygwin yang melacak Cygwin terbaru secara dekat sehingga tidak ketinggalan zaman. Alexey meneruskan porting patch MSYS lama dan menambahkan beberapa miliknya.

Selain menyediakan alat Unix yang diperlukan untuk mengkompilasi perangkat lunak asli - tujuan yang dinyatakan dari MSYS - kami mengirim manajer paket Pacman dari Arch Linux . Pacman lebih dari sekedar mengelola paket biner (meskipun ia melakukannya dengan sangat baik). Ini memiliki infrastruktur pembangunan perangkat lunak yang disebut makepkg yang memungkinkan pembuatan resep (PKGBUILD dan file tambalan) untuk membangun perangkat lunak.

IMHO, adopsi Pacman mengubah banyak hal secara signifikan untuk pengembangan open source pada Windows. Alih-alih semua orang meretas skrip shell mereka sendiri untuk membangun perangkat lunak dengan cara campur aduk, tidak kompatibel, paket sekarang dapat bergantung pada paket lain dan file PKGBUILD dan tambalan terkait dapat digunakan sebagai referensi untuk membangun PKGBUILD baru. Itu sedekat dengan sistem Linux sebagai (asli) Windows dapat (terutama Linux Arch) dan memungkinkan untuk memperbarui sederhana semua paket yang diinstal.

Kami menargetkan Windows XP SP3 sebagai minimum dan mendukung Windows 32-bit dan 64-bit. Kami akan meminta Anda untuk tidak mencampur MSYS2 dengan msys atau msysgit. Pacman digunakan untuk mengelola seluruh sistem dan karena itu, file dari sistem lain akan menyebabkan konflik.

Kami juga mencoba untuk meningkatkan patch kami ke proyek-proyek yang kami bangun dan secara aktif meminta kontribusi dari proyek open source lainnya. Kami berharap orang lain merasa mudah bekerja sama dengan kami.

Situs web utama kami adalah di SourceForge , dan berisi tautan ke repositori PKGBUILD kami. Kami juga memiliki situs pemasang yang lebih ramah pengguna di GitHub .

Silakan bergabung dengan kami di IRC (oftc # msys2) jika Anda menginginkan informasi lebih lanjut.


6
Dapatkah msys2 digunakan untuk membangun dan menjalankan git (mis. Ganti msysgit).
eckes

10
MSYS2 memiliki paket git. Ini adalah versi MSYS2 yang bertentangan dengan versi asli. Untuk menginstal git: pacman -S git .. kami juga sedang mengerjakan port msysgit dalam repositori MINGW-paket kami.
Ray Donnelly

16
Tidak, git MSYS2 kami fitur lengkap dan bebas hack. Kami menggunakannya secara luas dalam pengembangan paket lain. Ada kekhawatiran bahwa MSYS2 (karena merupakan fork dari Cygwin) menambahkan banyak overhead untuk operasi file dan karena git adalah file-operasi-berat sehingga git asli akan lebih cepat. Cara untuk membuktikan atau membantah ini adalah memiliki keduanya dan membandingkannya, jadi itulah yang akan kita lakukan. Saya harus berhati-hati tentang istilah di sini karena referensi saya ke msysgit adalah dua hal yang berbeda, msys-fork dengan Windows git asli dan Windows git asli. Di sini saya mengacu pada yang terakhir!
Ray Donnelly

7
@ cek Saya hanya ingin mengatakan bahwa saya telah menggunakan MSYS2 untuk git selama beberapa bulan sekarang. MSYS2 memiliki beberapa bidang kasar (perangkat lunak apa yang tidak?), Tapi saya sangat senang menggunakannya. Tak satu pun dari mereka yang terkait dengan git itu sendiri.
jpmc26

7
Janji msys2 memenuhi harapan saya. Terus bekerja dengan baik, @RayDonnelly
bvj

73

Git 2.8 (Maret 2016) menyertakan komit yang sangat terperinci yang menjelaskan pentingnya msys2 untuk git-for-windows baru yang menggantikan msysgit pada awal 2015 .

Lihat komit df5218b (13 Jan 2016) oleh Johannes Schindelin ( dscho) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 116a866 , 29 Jan 2016)

Untuk waktu yang lama, Git untuk Windows tertinggal di belakang rilis Git 2.x karena pengembang Git untuk Windows ingin membiarkan lompatan besar itu bertepatan dengan lompatan yang diperlukan jauh dari MSys ke MSys2.

Untuk memahami mengapa ini merupakan masalah besar, perlu dicatat bahwa banyak bagian dari Git tidak ditulis dalam portable C, tetapi Git bergantung pada shell POSIX dan Perl yang akan tersedia .

Untuk mendukung skrip, Git untuk Windows harus mengirimkan lapisan emulasi POSIX minimal dengan Bash dan Perl dilemparkan , dan ketika upaya Git untuk Windows dimulai pada Agustus 2007, pengembang ini memutuskan untuk menggunakan MSys, versi Cygwin yang dipreteli .
Akibatnya, nama asli proyek itu adalah "msysGit" (yang, sayangnya, menyebabkan banyak kebingungan karena hanya sedikit pengguna Windows yang tahu tentang MSys, dan bahkan kurang peduli).

Untuk mengkompilasi kode C dari Git untuk Windows, MSys juga digunakan: ia menggunakan dua versi GNU C Compiler:

  • yang menghubungkan secara implisit ke lapisan emulasi POSIX,
  • dan satu lagi yang menargetkan API Win32 biasa (dengan beberapa fungsi kenyamanan dilemparkan ke dalam).

File executable Git untuk Windows dibuat dengan menggunakan yang terakhir, dan oleh karena itu mereka hanyalah program Win32. Untuk membedakan executable yang membutuhkan lapisan emulasi POSIX dari yang tidak, yang terakhir disebut MinGW (Minimal GNU untuk Windows) ketika yang pertama disebut MSys executable .

Ketergantungan pada MSys ini menimbulkan tantangan juga, meskipun:

  • beberapa perubahan kami pada runtime MSys - yang diperlukan untuk mendukung Git untuk Windows lebih baik - tidak diterima di hulu, jadi kami harus mempertahankan garpu kami sendiri.
  • Juga, runtime MSys tidak dikembangkan lebih lanjut untuk mendukung misalnya UTF-8 atau 64-bit, dan selain dari kekurangan sistem manajemen paket sampai jauh kemudian (ketika mingw-getdiperkenalkan), banyak paket yang disediakan oleh proyek MSys / MinGW tertinggal di belakang masing-masing versi kode sumber, khususnya Bash dan OpenSSL.

Untuk sementara, proyek Git untuk Windows mencoba untuk memperbaiki situasi dengan mencoba membangun versi yang lebih baru dari paket-paket itu, tetapi situasi dengan cepat menjadi tidak bisa dipertahankan, terutama dengan masalah seperti bug Heartbleed yang memerlukan tindakan cepat yang tidak ada hubungannya dengan pengembangan Git untuk Windows lebih jauh.

Untungnya, sementara itu proyek MSys2 ( https://msys2.github.io/ ) muncul, dan terpilih sebagai basis Git untuk Windows 2.x.
Sama seperti MSys, MSys2 adalah versi Cygwin yang dilucuti, tetapi secara aktif terus diperbarui dengan kode sumber Cygwin .
Dengan demikian, sudah mendukung Unicode secara internal, dan juga menawarkan dukungan 64-bit yang kami dambakan sejak awal proyek Git untuk Windows.

MSys2 juga mem-porting sistem manajemen paket Pacman dari Arch Linux dan sangat menggunakannya . Ini membawa kenyamanan yang sama dengan yang digunakan pengguna Linux dari yumatau apt-get, dan yang digunakan pengguna MacOSX dari Homebrew atau MacPorts, atau pengguna BSD dari sistem Ports, ke MSys2: sederhana pacman -Syuakan memperbarui semua paket yang diinstal ke versi terbaru tersedia saat ini.

MSys2 juga sangat aktif, biasanya menyediakan pembaruan paket beberapa kali per minggu.

Masih diperlukan upaya dua bulan untuk membawa semuanya ke keadaan di mana test suite Git lewat, beberapa bulan lagi sampai Git resmi pertama untuk Windows 2.x dirilis, dan beberapa patch masih menunggu pengajuan mereka ke proyek-proyek hulu masing-masing . Namun tanpa MSys2, modernisasi Git untuk Windows tidak akan terjadi .

Komitmen ini menjadi dasar untuk mendukung pembangunan Git berbasis MSys2.


Dalam komentar , pertanyaan diajukan pada Januari 2016:

Karena Git untuk Windows sudah berbasis pada MSYS2, apakah binari yang tidak bergantung pada lapisan emulasi telah tersedia sebagai paket MSYS2?

Ray Donnelly menjawab pada saat itu:

Kami belum sepenuhnya bergabung, tidak. Kami sedang mengusahakannya.

Tapi ... madz menunjukkan bahwa selama awal 2017, upaya itu tidak berhasil.
Lihat:

Masalahnya adalah bahwa saya tidak dapat berkontribusi perubahan yang akan menghasilkan msys2-runtime baru secara tepat waktu.
Bukan masalah besar, meskipun: Saya hanya akan menjaga garpu Git untuk Windows berjalan tanpa batas.

Wiki karena itu menyebutkan sekarang (2018):

Git untuk Windows membuat beberapa tambalan untuk msys2-runtime yang belum dikirim ke hulu. (Ini telah direncanakan, tetapi telah ditentukan dalam edisi # 284 bahwa itu mungkin tidak akan terjadi.)
Ini berarti Anda harus menginstal Git untuk Windows msys2-runtime yang disesuaikan untuk memiliki git yang berfungsi penuh di dalam MSYS2.


Perhatikan bahwa, sejak melakukan aeb582a9 (Git 2.22, Q2 2019), proyek Git untuk Windows memulai proses pemutakhiran ke versi runtime MSYS2 berdasarkan Cygwin v3.x.

mingw: izinkan bangunan dengan runtime MSYS2 v3.x

Baru-baru ini proyek Git untuk Windows memulai proses pemutakhiran ke versi runtime MSYS2 berdasarkan Cygwin v3.x.

Ini memiliki konsekuensi yang sangat penting yaitu $(uname -r)tidak lagi melaporkan versi yang dimulai dengan "2", tetapi versi dengan "3".

Itu merusak build kami, seperti df5218b ( config.mak.uname: mendukung MSys2, 2016-01-13, Git v2.8.0-rc0) tidak mengharapkan versi yang dilaporkan uname -rbergantung pada versi Cygwin yang mendasarinya: ia mengharapkan versi yang dilaporkan sesuai dengan " 2 "dalam" MSYS2 ".

Jadi mari kita membalikkan test case untuk menguji apa pun selain versi yang dimulai dengan "1" (untuk MSys).
Itu harus melindungi kita untuk masa depan, bahkan jika Cygwin akhirnya merilis versi seperti 314.272.65536.


Git 2.22 (Q2 2019) akan menjadi bukti di masa depan terhadap pembaruan untuk MSYS2 runtime v3.x series.

Lihat commit c871fbe (07 Mei 2019) oleh Johannes Schindelin ( dscho) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam commit b20b8fe , 19 Mei 2019)

t6500(mingw): gunakan PID Windows dari shell

Di Git untuk Windows, kami menggunakan MSYS2 Bash yang mewarisi model PID non-standar dari lapisan emulasi POSIX Cygwin: setiap proses MSYS2 memiliki PID Windows biasa, dan selain itu memiliki PID MSYS2 (yang sesuai dengan proses bayangan yang mengemulasi Penanganan sinyal gaya unix).

Dengan pemutakhiran ke runtime MSYS2 v3.x, proses bayangan ini tidak dapat diakses melalui OpenProcess()lebih lama, dan karena itu t6500 berpikir secara tidak benar bahwa proses yang dirujuk gc.pid(yang sebenarnya bukan gcproses nyata dalam konteks ini, tetapi shell saat ini) tidak lagi ada

Mari kita perbaiki ini dengan memastikan bahwa Windows PID ditulis dalam gc.pidskrip pengujian ini sehingga git.exedapat memahami bahwa proses itu memang masih ada.


1
Ini menimbulkan pertanyaan yang sangat menarik: karena Git untuk Windows sudah berbasis pada MSYS2, apakah binari yang tidak bergantung pada lapisan emulasi telah tersedia sebagai paket MSYS2? @RayDonnelly di atas menyebutkan bahwa tim MSYS2 memiliki minat dalam menciptakan jenis-jenis binari untuk melihat perbedaan kinerja seperti apa yang dihasilkannya.
jpmc26

4
Kami belum sepenuhnya bergabung, tidak. Kami sedang mengusahakannya.
Ray Donnelly

4
Untuk memperluas itu .. Belum, untuk saat ini, paket git MSYS2 masih terhubung ke msys-2.0.dll, ada proses yang berkelanjutan untuk menggabungkan MSYS2 dengan Git untuk Windows dan setelah ini selesai, kami berharap untuk hanya menjatuhkan paket git kami untuk sepenuhnya asli karena paket-paket yang terhubung dengan msys-2.0.dll ada untuk mendukung pembuatan perangkat lunak asli dan bukan tujuan akhir.
Ray Donnelly

1
@RayDonnelly Apa statusnya saat ini? Jika ganti Git untuk Windows dengan MSYS2 (manajemen paket!), Apakah ada kerugian?
Brecht Machiels


18

Pemahaman saya tentang koneksi di antara mereka adalah

  • Cygwin menawarkan emulasi POSIX di atas windows
  • msys mencoba menyederhanakan Cygwin tetapi sudah usang dari 2010
  • msysGit - memungkinkan Git hingga 1.9.4 di Windows (bisa disebut git-for-windows-1.X ), berdasarkan versi lama msys.
  • msys2 - Cygwin yang disederhanakan, bercabang darinya, dengan perubahan dari msys dan tetap disinkronkan dengan fitur-fitur dari Cygwin, terintegrasi dengan Pacman
  • MinGW - MinGW awal, ditinggalkan sejak 2010
  • MinGW-w64 - integrasi lebih cepat dan lebih baik dengan windows, tanpa POSIX
  • git-for-windows-2.x - menawarkan Git dari 2.X untuk Windows menggunakan MinGW-64 , MinGW-32 dan kapan tidak memungkinkan dengan mundur ke msys2

Bandingkan Cygwin, msys, msys2, MinGW, git-for-windows, msysGit

Biola dengan definisi grafik lengkap dalam putri duyung .


1
Grafis bagus. +1. "Git untuk Windows 1.0" benar-benar dilakukan berdasarkan upaya terbaik: stackoverflow.com/a/1704687/6309 (yang saya sebutkan di stackoverflow.com/a/50555740/6309 )
VonC
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.