Làm thế nào là msys, msys2 và msysgit liên quan với nhau?


162

Tôi đã tìm kiếm xung quanh, nhưng tôi không thể tìm thấy một mô tả kỹ lưỡng về những gì đang xảy ra với 3 phiên bản MSYS này. (Hoàn toàn có thể tôi chỉ không biết nên tìm gì.) Tôi hiểu rằng MSYS là một cổng tối thiểu của các công cụ Linux để hỗ trợ phát triển bằng MinGW, nhưng tôi không rõ về mối quan hệ giữa ba người trong số họ hoặc các nhóm đã phát triển / duy trì chúng.

Các vấn đề đặc biệt cần giải quyết:

  • Những cái nào đang được phát triển tích cực? (Cụ thể, MSYS đã chết và MSYS2 có hoạt động không?)
  • Mối quan hệ giữa các nhóm duy trì chúng là gì? (Cụ thể, nhóm MSYS có tạo MSYS2 không?)
  • Liệu msysgit chỉ sử dụng một trong những cái khác, hay họ có chi nhánh MSYS riêng?
  • Có ai trong số này tương thích với nhau?
  • Có bất kỳ vấn đề tương thích với các phiên bản Windows cụ thể cho bất kỳ trong số này?
  • Có một cung cấp các tính năng chính hơn các khác?

8
@JamesJohnston Trước khi viết câu hỏi này, tôi (và) hiểu rằng MSYS và MinGW đã được tạo ra như một đối thủ cạnh tranh với Cygwin vì Cygwin (ít nhất là trước đây; tôi không chắc về trạng thái hiện tại của nó) đã buộc bất kỳ mã mới nào phải trải qua một lớp tương thích khá không hoạt động thay vì gọi API Windows trực tiếp. Do đó, tôi luôn thấy MSYS và người thân của nó là một hệ thống trọng lượng nhẹ hơn Cygwin, vì vậy tôi không quan tâm đến tình trạng hiện tại của Cygwin. Điều đó có thể làm cho một câu hỏi tiếp theo tốt, mặc dù nếu bạn quan tâm; hãy hỏi nó nếu bạn có thể diễn đạt nó theo chủ đề.
jpmc26

4
Tôi cũng có ấn tượng đó cho đến khi tôi bắt đầu đào dưới vỏ bọc ngày hôm qua. Tất cả ba phiên bản MSYS mà bạn đề cập đều là nhánh của Cygwin, như @Ray Donnelly chỉ ra. Vì vậy, theo nghĩa đó, tất cả chúng là "Cygwin" - và câu hỏi này thực sự là về Cygwin và các nhánh của nó. Như Ray chỉ ra, có vẻ như MSYS đã phải chịu số phận. Tôi đã tự kiểm tra mã MSYS; nó đã lỗi thời và thậm chí còn thiếu đồng bộ hóa cơ bản trên bộ nhớ dùng chung. Các nhà bảo trì chỉ không theo kịp với thượng nguồn và không bao giờ có các bản sửa lỗi cho bộ nhớ chia sẻ mà thượng nguồn Cygwin có.
James Johnston

9
@JamesJohnston Tôi nghĩ bạn hiểu lầm. Quan điểm của tôi là Cygwin không (không?) Hỗ trợ xây dựng các nhị phân mới mà không có lớp tương thích. MSYS và người thân làm, thông qua MinGW. Như vậy, tôi không quan tâm đến Cygwin, mặc dù nhận thức rõ rằng tất cả chúng đều có nguồn gốc từ Cygwin. Vì tôi không quan tâm đến Cygwin, nên không có ý nghĩa gì khi hỏi về nó. Câu hỏi này cũng tập trung chủ yếu vào lịch sử của việc tự rèn và lý do cho nó và một số hậu quả thô sơ của nó. Khi cố gắng chọn giữa các phiên bản khác nhau của MSYS, lịch sử của Cygwin không thực sự phù hợp.
jpmc26

1
Điều tôi không hiểu là tại sao các nhà phát triển MSYS2 và các nhà phát triển Cygwin không thể thỏa thuận và thoát khỏi cuộc tranh cãi để chúng ta có thể ngừng có những nhánh ngu ngốc này. Cygwin ít được chú ý như vậy, nhưng ít nhất có những nhân viên Red Hat được trả lương làm việc trên đó; các dĩa thậm chí không có được điều đó. Tôi đã tìm thấy cuộc thảo luận từ năm ngoái trong danh sách gửi thư của Cygwin về việc có MSYS2 chỉ là một DLL hook cho Cygwin để MSYS2 không phải rẽ nhánh toàn bộ DLL Cygwin; Rõ ràng là những cuộc thảo luận đã không đi xa. Trong khi MSYS2 có năng lượng ngay bây giờ, tôi thấy trước nó bị đình trệ như MSYS nếu / khi các tình nguyện viên MSYS2 ngừng cập nhật nó
James Johnston

1
@JamesJohnston Tôi nghĩ rằng bạn có thể có được câu trả lời tốt hơn cho câu hỏi của bạn trên kênh IRC mà Ray đề cập trong câu trả lời của anh ấy. Chuỗi bình luận này đang trở nên khá dài và lạc đề.
jpmc26

Câu trả lời:


178

Tuyên bố miễn trừ trách nhiệm: Tôi là nhà phát triển MSYS2

Mặc dù MSYS chưa chết, tôi cũng sẽ nói nó trông không khỏe lắm. Đây là một dự án được bắt đầu bởi nhóm MinGW từ nhiều năm trước với tư cách là một nhánh của Cygwin không bao giờ theo kịp Cygwin.

msysgit là một nhánh của phiên bản MSYS cũ hơn một chút với một số bản vá tùy chỉnh, phiên bản cũ của Bash và Perl và một cổng Git bản địa.

MSYS2 là một dự án được bắt đầu bởi Alexey Pavlov của nhóm mingw-builds (là người đóng gói chính thức cho các bộ công cụ MinGW-w64) như một nhánh của Cygwin gần đây theo dõi Cygwin mới nhất để nó không bị lỗi thời. Alexey chuyển tiếp các bản vá MSYS cũ và thêm một số bản vá của riêng mình.

Cùng với việc cung cấp các công cụ Unix cần thiết để biên dịch phần mềm gốc - mục tiêu đã nêu của MSYS - chúng tôi đã chuyển trình quản lý gói Pacman từ Arch Linux . Pacman không chỉ đơn thuần là quản lý các gói nhị phân (mặc dù điều đó rất tốt). Nó có một cơ sở hạ tầng xây dựng phần mềm được gọi là makepkg cho phép tạo ra các công thức nấu ăn (PKGBUILD và các tệp vá) để xây dựng phần mềm.

IMHO, việc áp dụng Pacman thay đổi đáng kể mọi thứ để phát triển nguồn mở trên Windows. Thay vì mọi người hack các tập lệnh shell bespoke của riêng họ để xây dựng phần mềm theo cách ẩn, cách không tương thích, các gói giờ đây có thể phụ thuộc vào các gói và tệp PKGBUILD khác và các bản vá liên quan có thể được sử dụng làm tài liệu tham khảo để xây dựng PKGBUILD mới. Nó gần với hệ thống Linux như Windows (bản địa) có thể có (đặc biệt là Arch Linux) và cho phép cập nhật đơn giản tất cả các gói đã cài đặt.

Chúng tôi nhắm mục tiêu Windows XP SP3 ở mức tối thiểu và hỗ trợ cả Windows 32 bit và 64 bit. Chúng tôi sẽ yêu cầu bạn không bao giờ trộn MSYS2 với msys hoặc msysgit. Pacman được sử dụng để quản lý toàn bộ hệ thống và do đó, các tệp từ các hệ thống khác sẽ gây ra xung đột.

Chúng tôi cũng cố gắng ngược dòng các bản vá của chúng tôi cho các dự án mà chúng tôi xây dựng và tích cực thu hút sự đóng góp từ các dự án nguồn mở khác. Chúng tôi hy vọng những người khác thấy dễ dàng để làm việc với chúng tôi.

Trang web chính của chúng tôi là trên SourceForge và nó chứa các liên kết đến kho lưu trữ PKGBUILD của chúng tôi. Chúng tôi cũng có một trang cài đặt thân thiện với người dùng hơn trên GitHub .

Vui lòng tham gia với chúng tôi trên IRC (oftc # msys2) nếu bạn muốn biết thêm thông tin.


6
Có thể sử dụng msys2 để xây dựng và chạy git (tức là thay thế msysgit).
eckes

10
MSYS2 có gói git. Nó là phiên bản MSYS2 trái ngược với phiên bản gốc. Để cài đặt git: pacman -S git .. chúng tôi cũng có một công việc trong cổng tiến trình của msysgit trong kho lưu trữ gói MINGW của chúng tôi.
Ray Donnelly

16
Không, git MSYS2 của chúng tôi là tính năng hoàn chỉnh và không có hack. Chúng tôi sử dụng nó rộng rãi trong việc phát triển các gói khác. Có một mối lo ngại rằng MSYS2 (vì nó là một nhánh của Cygwin) bổ sung rất nhiều chi phí hoạt động cho tệp và vì git nặng về hoạt động của tệp nên một git bản địa sẽ nhanh hơn. Cách để chứng minh hoặc bác bỏ điều này là có cả hai và đánh giá chúng, vì vậy đó là những gì chúng tôi sẽ làm. Tôi nên cẩn thận về các điều khoản ở đây vì các tài liệu tham khảo của tôi về msysgit là hai thứ khác nhau, msys-fork với Windows git gốc và cả git Windows gốc. Ở đây tôi đang đề cập đến cái sau!
Ray Donnelly

7
@eckes Tôi chỉ muốn nói rằng tôi đã sử dụng MSYS2 cho git vài tháng nay. MSYS2 có một vài phần thô (phần mềm nào không?), Nhưng tôi đã rất vui khi sử dụng nó. Không ai trong số họ có liên quan đến git chính nó.
jpmc26

7
Lời hứa của msys2 đang đáp ứng mong đợi của tôi. Giữ thành tốt công việc, @RayDonnelly
bvj

73

Git 2.8 (Tháng 3 năm 2016) bao gồm một cam kết rất chi tiết giải thích tầm quan trọng của msys2 đối với git-for-windows mới thay thế msysgit vào đầu năm 2015 .

Xem cam kết df5218b (ngày 13 tháng 1 năm 2016) của tác giả Julian Schindelin ( dscho) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết 116a866 , ngày 29 tháng 1 năm 2016)

Trong một thời gian dài, Git cho Windows tụt lại phía sau các bản phát hành 2.x của Git vì các nhà phát triển Git cho Windows muốn để bước nhảy lớn đó trùng khớp với một bước nhảy rất cần thiết từ MSys sang MSys2.

Để hiểu lý do tại sao đây là một vấn đề lớn như vậy, cần lưu ý rằng nhiều phần của Git không được viết bằng C di động, mà thay vào đó Git dựa vào vỏ POSIX và Perl có sẵn .

Để hỗ trợ các tập lệnh, Git cho Windows phải gửi một lớp mô phỏng POSIX tối thiểu với Bash và Perl được ném vào , và khi nỗ lực Git cho Windows bắt đầu vào tháng 8 năm 2007, nhà phát triển này đã quyết định sử dụng MSys, một phiên bản rút gọn của Cygwin .
Do đó, tên ban đầu của dự án là "msysGit" (đáng buồn thay, gây ra nhiều nhầm lẫn vì ít người dùng Windows biết về MSys và thậm chí ít quan tâm hơn).

Để biên dịch mã C của Git cho Windows, MSys cũng được sử dụng: nó có hai phiên bản Trình biên dịch GNU C:

  • một liên kết ngầm với lớp mô phỏng POSIX,
  • và một cái khác nhắm vào API Win32 đơn giản (với một vài chức năng tiện lợi được đưa vào).

Các tệp thực thi Git cho Windows được xây dựng bằng cách sử dụng thứ hai và do đó chúng thực sự chỉ là các chương trình Win32. Để phân biệt các tệp thực thi yêu cầu lớp mô phỏng POSIX từ các lớp không có, lớp thứ hai được gọi là MinGW (GNU tối thiểu cho Windows) khi lớp trước được gọi là tệp thực thi MSys .

Điều này cũng phụ thuộc vào MSys phát sinh những thách thức:

  • một số thay đổi của chúng tôi đối với thời gian chạy MSys - cần thiết để hỗ trợ Git cho Windows tốt hơn - không được chấp nhận ngược dòng, vì vậy chúng tôi phải duy trì ngã ba của chính mình.
  • Ngoài ra, thời gian chạy MSys không được phát triển thêm để hỗ trợ, ví dụ UTF-8 hoặc 64 bit, và ngoài việc thiếu hệ thống quản lý gói cho đến sau này (khi mingw-getđược giới thiệu), nhiều gói được cung cấp bởi dự án MSys / MinGW bị tụt hậu phiên bản mã nguồn, đặc biệt là Bash và OpenSSL.

Trong một thời gian, dự án Git cho Windows đã cố gắng khắc phục tình trạng này bằng cách cố gắng xây dựng các phiên bản mới hơn của các gói đó, nhưng tình huống nhanh chóng trở nên khó lường, đặc biệt là với các vấn đề như lỗi Heartbleed yêu cầu hành động nhanh chóng không liên quan đến việc phát triển Git cho Windows hơn nữa.

Hạnh phúc thay, trong thời gian đó, dự án MSys2 ( https://msys2.github.io/ ) đã xuất hiện và được chọn làm cơ sở của Git cho Windows 2.x.
Giống như MSys, MSys2 là phiên bản rút gọn của Cygwin, nhưng nó được tích cực cập nhật với mã nguồn của Cygwin .
Do đó, nó đã hỗ trợ Unicode trong nội bộ và nó cũng cung cấp hỗ trợ 64 bit mà chúng tôi mong đợi kể từ khi bắt đầu dự án Git cho Windows.

MSys2 cũng đã chuyển hệ thống quản lý gói Pacman từ Arch Linux và sử dụng nó rất nhiều . Điều này mang lại sự thuận tiện tương tự cho người dùng Linux được sử dụng từ yumhoặc apt-get, và người dùng MacOSX được sử dụng từ Homebrew hoặc MacPorts hoặc người dùng BSD từ hệ thống Cổng, sang MSys2: đơn giản pacman -Syusẽ cập nhật tất cả các gói đã cài đặt lên các phiên bản mới nhất hiện đang có sẵn.

MSys2 cũng rất tích cực, thường cung cấp các bản cập nhật gói nhiều lần mỗi tuần.

Vẫn cần một nỗ lực hai tháng để đưa mọi thứ đến trạng thái nơi bộ thử nghiệm của Git đi qua, nhiều tháng nữa cho đến khi Git chính thức đầu tiên cho Windows 2.x được phát hành, và một vài bản vá vẫn đang chờ đệ trình của họ cho các dự án ngược dòng tương ứng . Nhưng nếu không có MSys2, việc hiện đại hóa Git cho Windows sẽ không xảy ra .

Cam kết này đặt công việc cơ bản để hỗ trợ các bản dựng Git dựa trên MSys2.


Trong các ý kiến , câu hỏi đã được hỏi vào tháng 1 năm 2016:

Vì Git cho Windows đã dựa trên MSYS2, nên các nhị phân không phụ thuộc vào lớp mô phỏng đã được cung cấp dưới dạng gói MSYS2 chưa?

Ray Donnelly đã trả lời vào thời điểm đó:

Chúng tôi chưa hợp nhất hoàn toàn, không. Chúng tôi đang làm việc trên đó mặc dù.

Nhưng ... madz chỉ ra rằng vào đầu năm 2017, nỗ lực đó đã không thành công.
Xem:

Vấn đề là tôi không thể đóng góp các thay đổi sẽ dẫn đến thời gian chạy msys2 mới một cách kịp thời.
Tuy nhiên, không phải là vấn đề lớn: Tôi sẽ giữ cho Git cho Windows chạy vô thời hạn.

Do đó wiki đề cập đến bây giờ (2018):

Git cho Windows đã tạo một số bản vá cho msys2-runtime chưa được gửi ngược dòng. (Điều này đã được lên kế hoạch, nhưng đã được xác định trong vấn đề # 284 rằng điều đó có thể sẽ không xảy ra.)
Điều này có nghĩa là bạn phải cài đặt Git cho Windows msys2-runtime tùy chỉnh để có một git hoạt động hoàn toàn trong MSYS2.


Lưu ý rằng, kể từ khi cam kết aeb582a9 (Git 2.22, Q2 2019), dự án Git cho Windows đã bắt đầu quá trình nâng cấp lên phiên bản thời gian chạy MSYS2 dựa trên Cygwin v3.x.

mingw: cho phép xây dựng với thời gian chạy MSYS2 v3.x

Gần đây, dự án Git cho Windows đã bắt đầu quá trình nâng cấp lên phiên bản thời gian chạy MSYS2 dựa trên Cygwin v3.x.

Điều này có một hậu quả rất đáng chú ý là $(uname -r)không còn báo cáo phiên bản bắt đầu bằng "2", mà là phiên bản có "3".

Điều đó phá vỡ bản dựng của chúng tôi, vì df5218b ( config.mak.uname: hỗ trợ MSys2, 2016-01-13, Git v2.8.0-rc0) đơn giản là không mong đợi phiên bản được báo cáo uname -rphụ thuộc vào phiên bản Cygwin cơ bản: dự kiến ​​phiên bản được báo cáo phù hợp với " 2 "trong" MSYS2 ".

Vì vậy, hãy đảo ngược trường hợp thử nghiệm đó để kiểm tra bất kỳ thứ gì khác ngoài phiên bản bắt đầu bằng "1" (đối với MSys).
Điều đó sẽ bảo vệ chúng ta trong tương lai, ngay cả khi Cygwin kết thúc việc phát hành các phiên bản như 314.272.65536.


Git 2.22 (quý 2 năm 2019) sẽ chứng minh một thử nghiệm trong tương lai đối với bản cập nhật cho dòng MSYS2 runtime v3.x.

Xem cam kết c871fbe (07 tháng 5 năm 2019) của Johannes Schindelin ( dscho) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết b20b8fe , ngày 19 tháng 5 năm 2019)

t6500(mingw): sử dụng Windows PID của trình bao

Trong Git cho Windows, chúng tôi sử dụng MSYS2 Bash kế thừa mô hình PID không chuẩn từ lớp mô phỏng POSIX của Cygwin: mọi quy trình MSYS2 đều có Windows PID thông thường và ngoài ra, nó còn có MSYS2 PID (tương ứng với quy trình bóng tối mô phỏng Xử lý tín hiệu theo kiểu Unix).

Với việc nâng cấp lên MSYS2 runtime v3.x, quá trình bóng này không thể được truy cập qua OpenProcess()nữa, và do đó t6500 đã nghĩ không chính xác rằng quá trình được tham chiếu trong gc.pid(không thực sự là một gcquá trình thực trong ngữ cảnh này, nhưng trình bao hiện tại) không còn nữa tồn tại

Chúng ta hãy khắc phục điều này bằng cách đảm bảo rằng Windows PID được ghi vào gc.pidtập lệnh kiểm tra này để git.execó thể hiểu rằng quá trình đó thực sự vẫn tồn tại.


1
Điều này đặt ra một câu hỏi rất thú vị: vì Git cho Windows đã dựa trên MSYS2, các nhị phân không phụ thuộc vào lớp mô phỏng có sẵn dưới dạng gói MSYS2 không? @RayDonnelly ở trên đề cập rằng nhóm MSYS2 đã quan tâm đến việc tạo ra các loại nhị phân đó để xem loại khác biệt về hiệu suất mà nó tạo ra.
jpmc26

4
Chúng tôi chưa hợp nhất hoàn toàn, không. Chúng tôi đang làm việc trên đó mặc dù.
Ray Donnelly

4
Để mở rộng về điều đó .. Hiện tại, gói git của MSYS2 vẫn liên kết với msys-2.0.dll, có một quá trình liên tục để hợp nhất MSYS2 với Git cho Windows 'và sau khi hoàn thành việc này, chúng tôi hy vọng sẽ bỏ gói git của chúng tôi đối với bản gốc hoàn toàn của chúng vì các gói được liên kết với msys-2.0.dll tồn tại để hỗ trợ xây dựng phần mềm gốc và không phải là mục tiêu cuối cùng theo quyền riêng của chúng.
Ray Donnelly

1
@RayDonnelly Trạng thái tại thời điểm này là gì? Nếu thay thế Git cho Windows bằng MSYS2 (quản lý gói!), Có bất kỳ nhược điểm nào không?
Brecht Machiels


18

Sự hiểu biết của tôi về các kết nối giữa chúng là

  • Cygwin cung cấp mô phỏng POSIX trên đầu các cửa sổ
  • msys đã cố gắng đơn giản hóa Cygwin nhưng đã lỗi thời từ năm 2010
  • msysGit - cho phép Git lên tới 1.9.4 trên Windows (có thể được gọi là git-for-windows-1.X ), dựa trên phiên bản cũ của msys.
  • msys2 - một Cygwin được đơn giản hóa, rẽ nhánh từ nó, với các thay đổi từ msys và được giữ đồng bộ với các tính năng từ Cygwin, được tích hợp với Pacman
  • MinGW - MinGW ban đầu, bị bỏ rơi từ năm 2010
  • MinGW-w64 - tích hợp nhanh hơn và tốt hơn với các cửa sổ, không có POSIX
  • git-for-windows-2.x - cung cấp Git từ 2.X cho Windows bằng MinGW-64 , MinGW-32 và khi không thể thực hiện được với dự phòng cho msys2

So sánh Cygwin, msys, msys2, MinGW, git-for-windows, msysGit

Fiddle với định nghĩa đồ thị đầy đủ trong nàng tiên cá .


1
Đồ họa đẹp. +1. "Git cho Windows 1.0" thực sự đã được thực hiện trên cơ sở nỗ lực tốt nhất: stackoverflow.com/a/1704687/6309 (mà tôi đã đề cập trong stackoverflow.com/a/50555740/6309 )
VonC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.