msys, msys2 및 msysgit는 서로 어떻게 관련되어 있습니까?


162

주변을 검색했지만이 3 가지 버전의 MSYS로 진행중인 작업에 대한 자세한 설명을 찾을 수 없습니다. MSYS는 MinGW를 사용한 개발을 지원하기위한 최소한의 Linux 도구 포트라는 것을 이해합니다. 그러나 그 둘 사이의 관계에 대해서는 명확하지 않습니다. 개발 / 유지 관리 팀.

해결해야 할 특정 문제 :

  • 어느 것이 활발하게 개발되고 있습니까? (특히 MSYS가 종료되었고 MSYS2가 활성화되어 있습니까?)
  • 그들을 유지하는 그룹 사이의 관계는 무엇입니까? (특히 MSYS 팀이 MSYS2를 만들었습니까?)
  • msysgit은 다른 것 중 하나만 사용합니까, 아니면 자체 MSYS 분기를 가지고 있습니까?
  • 서로 호환되는 것이 있습니까?
  • 특정 버전의 Windows와의 호환성 문제가 있습니까?
  • 하나는 다른 것보다 주요 기능을 제공합니까?

8
@JamesJohnston이 질문을 작성하기 전에 Cygwin (적어도 이전에는 현재 상태를 확신하지 못함)으로 인해 새로운 코드가 통과되어야했기 때문에 MSYS와 MinGW가 Cygwin의 경쟁 업체로 만들어 졌다는 것을 이해했습니다. Windows API를 직접 호출하는 대신 성능이 떨어지는 호환성 레이어. 따라서 저는 항상 MSYS와 그 친척을 Cygwin보다 가벼운 시스템으로 보았으므로 Cygwin의 현재 상태에 관심이 없었습니다. 그래도 관심이 있다면 좋은 후속 질문을 할 수 있습니다. 주제에 대해 구를 표현할 수 있는지 물어보십시오.
jpmc26

4
어제 덮개를 파기 시작할 때까지 나는 그 인상을 받았다. 언급 한 MSYS의 세 가지 버전은 모두 @Ray Donnelly가 지적한 것처럼 Cygwin의 포크입니다. 그런 의미에서, 그들 모두는 "Cygwin"입니다. 그리고이 질문은 실제로 Cygwin과 그 포크에 관한 것입니다. Ray가 지적한 것처럼 MSYS가 파멸 된 것처럼 보입니다. MSYS 코드를 직접 조사했습니다. 절망적으로 쓸모없고 공유 메모리에 대한 기본 동기화조차 부족합니다. 관리자는 업스트림을 따라 잡지 않았으며 Cygwin 업스트림에서 얻은 공유 메모리에 대한 수정 사항을 얻지 못했습니다.
James Johnston

9
@JamesJohnston 오해가 있다고 생각합니다. 내 요점은 Cygwin이 호환성 계층없이 새 바이너리를 빌드하는 것을 지원하지 않는다는 것입니다. MSYS와 친척은 MinGW를 통해 그렇게합니다. 따라서 Cygwin에는 뿌리가 있다는 것을 잘 알고 있음에도 불구하고 Cygwin에 관심이 없습니다. Cygwin에 관심이 없기 때문에 그것에 대해 묻는 것이 합리적이지 않았습니다. 이 질문은 또한 포크 자체 의 역사 와 그 이유와 그에 따른 몇 가지 기초적인 결과에 중점을 둡니다 . 다른 버전의 MSYS를 선택하려고 할 때 Cygwin의 역사는 실제로 관련이 없습니다.
jpmc26

1
내가 이해하지 못하는 것은 MSYS2 개발자와 Cygwin 개발자가 용어를 접할 수 없어서 말다툼을 끝내지 못해 바보 같은 포크를 멈추는 이유입니다. Cygwin은 그다지 관심을 갖지 않지만 적어도 Red Hat 직원이 근무하고 있습니다. 포크는 그것을 얻지 못합니다. 작년부터 Cygwin 메일 링리스트에서 MSYS2가 Cygwin의 후크 DLL이되어 MSYS2가 전체 Cygwin DLL을 포크 할 필요가없는 것에 대한 토론을 찾았습니다. 분명히 그 토론은 멀리 가지 않았다. MSYS2 지금 에너지를 가지고 있지만 MSYS2 자원 봉사자를 업데이트 중지 할 때 / 경우에, 나는 MSYS 같은 침체를 예견
제임스 존스턴

1
@JamesJohnston Ray의 답변에서 IRC 채널에 대한 질문에 대한 답변을 더 잘 얻을 수 있다고 생각합니다. 이 코멘트 체인은 점점 길어지고 주제를 벗어납니다.
jpmc26

답변:


178

면책 조항 : 저는 MSYS2 개발자입니다

MSYS는 죽지 않았지만 건강에 좋지 않다고 말할 수 있습니다. 몇 년 전 MinGW 팀 이 Cygwin 을 따라 가지 않은 Cygwin의 포크 로 시작한 프로젝트 입니다.

msysgit은 약간의 이전 버전의 MSYS 포크이며 일부 사용자 지정 패치, 이전 버전의 Bash 및 Perl 및 기본 포트 Git이 있습니다.

MSYS2는 Mingw-builds 팀의 Alexey Pavlov (MinGW-w64 툴체인의 공식 패키지 관리자) 가 최근 Cygwin을 밀접하게 추적하는 최신 Cygwin 포크 로 시작한 프로젝트 입니다 . Alexey는 이전 MSYS 패치를 포팅하고 자신의 패치를 추가했습니다.

MSYS의 목표 인 네이티브 소프트웨어를 컴파일하는 데 필요한 유닉스 도구를 제공 할뿐만 아니라 우리 는 Arch Linux 에서 Pacman 패키지 관리자를 이식했습니다 . Pacman은 바이너리 꾸러미를 관리하는 것 이상의 의미를 지닙니다. makepkg라는 소프트웨어 빌드 인프라가있어 소프트웨어 빌드를위한 레시피 (PKGBUILD 및 패치 파일)를 작성할 수 있습니다.

IMHO는 Pacman을 채택하여 Windows의 오픈 소스 개발을 위해 크게 변화했습니다. 모든 사람들이 자신의 맞춤형 쉘 스크립트를 해킹하는 대신 호환되지 않는 방식으로 소프트웨어를 빌드하는 대신 패키지는 이제 다른 패키지에 의존 할 수 있으며 PKGBUILD 파일을 사용하고 관련 패치를 새로운 PKGBUILD 구성을위한 참조로 사용할 수 있습니다. 그것은 (기본) Windows가 얻을 수있는 것 (특히 Linux)과 마찬가지로 Linux 시스템에 가깝고 설치된 모든 패키지를 간단하게 업데이트 할 수 있습니다.

Windows XP SP3을 최소로 대상으로하며 32 비트 및 64 비트 Windows를 모두 지원합니다. MSYS2와 msys 또는 msysgit을 절대 섞지 말 것을 요청합니다. Pacman은 전체 시스템을 관리하는 데 사용되므로 다른 시스템의 파일은 충돌을 일으킬 수 있습니다.

우리는 또한 우리가 구축 한 프로젝트에 패치를 업스트림하고 다른 오픈 소스 프로젝트의 기여를 적극적으로 요청합니다. 우리는 다른 사람들이 우리와 함께 일하기 쉽기를 바랍니다.

우리의 주요 웹 사이트는 SourceForge 에 있으며 PKGBUILD 저장소에 대한 링크가 포함되어 있습니다. 또한 GitHub 에는보다 사용자 친화적 인 설치 관리자 사이트가 있습니다 .

더 자세한 정보가 필요하시면 IRC (oftc # msys2)를 이용해 주시기 바랍니다.


6
msys2를 사용하여 git을 빌드하고 실행할 수 있습니다 (예 : msysgit 대체).
eckes

10
MSYS2에는 git 패키지가 있습니다. 기본 버전이 아닌 MSYS2 버전입니다. git : pacman -S git.를 설치하려면 MINGW-packages 저장소에 msysgit 포트가있는 작업도 진행합니다.
Ray Donnelly

16
아니요, MSYS2 git은 기능이 완전하고 해킹이 없습니다. 우리는 다른 패키지 개발에 광범위하게 사용합니다. MSYS2 (Cygwin의 포크이므로)가 파일 작업에 많은 오버 헤드를 추가하고 git이 파일 작업이 많기 때문에 기본 git이 더 빠를 것이라는 우려가 있습니다. 이것을 증명하거나 반증하는 방법은 둘 다 가지고 있고 벤치마킹하는 것이므로 우리가 할 것입니다. msysgit에 대한 내 참조는 두 가지 다른 것, 즉 기본 Windows git가있는 msys-fork와 기본 Windows git에 대한 용어이므로주의해야합니다. 여기서 나는 후자를 언급하고 있습니다!
Ray Donnelly

7
@eckes 방금 몇 달 동안 git에 MSYS2를 사용하고 있다고 말하고 싶습니다. MSYS2에는 몇 가지 거친 영역이 있지만 어떤 소프트웨어가 그렇지 않습니까? 그들 중 누구도 자식 자체와 관련이 없습니다.
jpmc26 2013

7
msys2의 약속은 나의 기대에 부응하고 있습니다. 좋은 일을 계속하십시오, @RayDonnelly
bvj

73

Git 2.8 (2016 년 3 월)에는 2015 년 초 msysgit대체 한 새로운 git-for-windows 의 msys2의 중요성을 설명하는 매우 자세한 커밋이 포함되어 있습니다.

Johannes Schindelin ( )의 commit df5218b (2016 년 1 월 13 일)를 참조하십시오 . ( Junio ​​C Hamano의해 합병 -- 커밋 116a866 , 2016 년 1 월 29 일)dscho
gitster

오랜 시간 동안 Windows 용 Git은 Git의 2.x 릴리스보다 뒤떨어졌습니다. Windows 용 Git 개발자는 MSys에서 MSys2 로의 필요한 점프와 함께 큰 도약을 원했기 때문에 Git의 2.x 릴리스보다 뒤떨어졌습니다.

이것이 왜 그렇게 큰 문제인지 이해하려면 Git의 많은 부분이 이식 가능한 C로 작성되지 않았지만 Git은 POSIX 셸과 Perl을 사용하여 사용할 수 있습니다 .

스크립트를 지원하기 위해 Git for Windows는 Bash와 Perl이 포함 된 최소 POSIX 에뮬레이션 레이어를 제공해야하며 2007 년 8 월 Windows Git 노력이 시작되면 Cygwin의 제거 된 버전 인 MSys 를 사용하기로 결정했습니다 .
결과적으로 프로젝트의 원래 이름은 "msysGit"입니다. 슬프게도 Windows 사용자가 MSys에 대해 잘 알지 못하고 관리가 덜 되었기 때문에 많은 혼란을 초래했습니다 .

Windows 용 Git의 C 코드를 컴파일하기 위해 MSys도 사용되었습니다. 두 가지 버전의 GNU C 컴파일러를 지원합니다.

  • POSIX 에뮬레이션 레이어에 암시 적으로 연결되는 것
  • 그리고 평범한 Win32 API를 목표로하는 또 하나의 API가 있습니다 (몇 가지 편리한 함수가 던져졌습니다).

Git for Windows의 실행 파일은 후자를 사용하여 빌드되므로 실제로는 Win32 프로그램입니다. POSIX 에뮬레이션 계층이 필요하지 않은 실행 파일을 식별하지 않는 실행 파일을 식별하기 위해 MSys 실행 파일이라고 할 때 후자를 MinGW (Windows 용 최소 GNU)라고합니다 .

그러나 MSys에 대한 이러한 의존은 다음과 같은 문제를 야기했습니다.

  • Windows 용 Git을 더 잘 지원하는 데 필요한 MSys 런타임에 대한 일부 변경 사항은 업스트림에 수용되지 않았으므로 자체 포크를 유지해야했습니다.
  • 또한 MSys 런타임은 UTF-8 또는 64 비트를 지원하기 위해 추가로 개발되지 않았으며 훨씬 나중에 ( mingw-get도입 될 때까지) 패키지 관리 시스템이 부족한 것 외에도 MSys / MinGW 프로젝트에서 제공하는 많은 패키지가 각각에 비해 뒤떨어졌습니다. 소스 코드 버전, 특히 Bash 및 OpenSSL.

잠시 동안 Git for Windows 프로젝트는 최신 버전의 패키지를 빌드하여 상황을 해결하려고 시도했지만 특히 Git 개발과 관련이없는 신속한 조치가 필요한 Heartbleed 버그와 같은 문제로 상황을 빠르게 해결할 수 없었습니다. 더 Windows.

다행히도 MSys2 프로젝트 ( https://msys2.github.io/ )가 등장하여 Windows 2.x 용 Git의 기반으로 선택되었습니다.
MSys와 마찬가지로 MSys2도 Cygwin의 제거 된 버전이지만 Cygwin의 소스 코드를 통해 최신 상태로 유지됩니다 .
따라서 이미 내부적으로 유니 코드를 지원하며 Windows 용 Git 프로젝트가 시작된 이래로 64 비트 지원을 제공합니다.

MSys2는 또한 아치 리눅스에서 팩맨 패키지 관리 시스템을 포팅하여 많이 사용했다 . 이렇게하면 Linux 사용자가 yum또는에서 apt-get, MacOSX 사용자가 Homebrew 또는 MacPorts에서 또는 포트 시스템의 BSD 사용자에서 MSys2 로 사용하는 것과 동일한 편의성이 제공 됩니다. pacman -Syu설치된 모든 패키지를 최신 버전 으로 간단 하게 업데이트합니다. 지금 사용 가능.

MSys2도 매우 활발하며 일반적으로 일주일에 여러 번 패키지 업데이트를 제공합니다.

Git의 테스트 스위트가 통과 한 상태로 모든 것을 가져 오는 데 2 ​​개월의 노력이 필요했으며, 최초의 공식 Git for Windows 2.x가 출시 될 때까지 몇 달이 더 걸렸으며, 몇 가지 패치가 여전히 각 업스트림 프로젝트에 제출되기를 기다리고 있습니다. . 그러나 MSys2가 없다면 Windows 용 Git의 현대화는 결코 일어나지 않았을 것 입니다.

이 커밋은 MSys2 기반 Git 빌드를 지원하기위한 토대를 마련합니다.


의견 에서 2016 년 1 월에 질문이 제기되었습니다.

Windows 용 Git은 이미 MSYS2를 기반으로하므로 에뮬레이션 계층에 의존하지 않는 바이너리가 MSYS2 패키지로 제공 되었습니까?

Ray Donnelly 는 당시 대답했습니다.

우리는 아직 완전히 합병하지 않았습니다. 우리는 노력하고 있습니다.

하지만 ... madz의 종료 지점 초기 2017 동안 즉, 이러한 노력은 못했죠.
보다:

문제는 변경 사항을 적시에 적용하여 새로운 msys2 런타임을 적시에 가져올 수 없다는 것입니다.
그러나 큰 문제는 아닙니다. Windows 용 Git 포크를 무기한으로 계속 실행하겠습니다.

따라서 위키 는 이제 언급합니다 (2018) :

Git for Windows는 업스트림으로 전송되지 않은 msys2-runtime 용 패치를 생성했습니다. (이것은 계획되었지만 문제 # 284에서 발생하지 않았을 것으로 판단되었습니다.)
이것은 MSYS2 내부에서 완전히 작동하는 git을 갖도록 Windows 사용자 정의 msys2-runtime 용 Git을 설치해야 함을 의미합니다.


이후, 그 주 aeb582a9을 커밋 (힘내 2.22, Q2 2019), 윈도우 프로젝트에 대한 힘내 Cygwin에서 v3.x.에 따라 MSYS2 런타임 버전으로 업그레이드 프로세스를 시작

mingw: MSYS2 런타임 v3.x로 빌드 허용

최근 Git for Windows 프로젝트는 Cygwin v3.x를 기반으로 MSYS2 런타임 버전으로 업그레이드 프로세스를 시작했습니다.

이는 $(uname -r)더 이상 "2"로 시작하는 버전을보고하지 않고 "3"으로 버전을보고하는 매우 중요한 결과입니다 .

df5218b ( config.mak.uname: 지원 MSys2, 2016-01-13, Git v2.8.0-rc0)는 단순히보고 된 버전 uname -r이 기본 Cygwin 버전에 의존 할 것으로 예상하지 않았기 때문에 빌드를 중단 합니다.보고 된 버전이 " "MSYS2"에서 2 ".

"1"(MSys)로 시작하는 버전 이외의 다른 것을 테스트하기 위해 테스트 케이스를 뒤집어 봅시다 .
Cygwin이 314.272.65536과 같은 버전을 출시하더라도 미래를 위해 우리를 보호해야합니다.


Git 2.22 (Q2 2019)는 MSYS2 런타임 v3.x 시리즈 업데이트에 대한 미래 테스트를 제공합니다.

Johannes Schindelin ( )의 commit c871fbe (2019 년 5 월 7 일)를 참조하십시오 . ( Junio ​​C Hamano의해 병합 -- 커밋 b20b8fe , 2019 년 5 월 19 일)dscho
gitster

t6500(mingw): 쉘의 Windows PID를 사용하십시오.

Windows 용 Git에서는 Cygwin의 POSIX 에뮬레이션 계층에서 비표준 PID 모델을 상속하는 MSYS2 Bash를 사용합니다. 모든 MSYS2 프로세스에는 일반 Windows PID가 있으며 MSYS2 PID도 있습니다 (이는 에뮬레이트하는 섀도우 프로세스에 해당) 유닉스 스타일의 신호 처리).

MSYS2 런타임 v3.x로 업그레이드하면이 새도우 프로세스는 OpenProcess()더 이상 액세스 할 수 없으므로 t6500은 참조 된 프로세스 gc.pid(실제로 실제 gc컨텍스트는 아니지만 현재 쉘) 가 참조하지 않는다고 잘못 생각했습니다. 존재합니다.

gc.pid이 테스트 스크립트에 Windows PID가 작성되어 git.exe해당 프로세스가 실제로 존재 함을 이해할 수 있도록하여이를 수정하십시오 .


1
Windows 용 Git은 이미 MSYS2를 기반으로하고 있기 때문에 에뮬레이션 계층에 의존하지 않는 바이너리가 MSYS2 패키지로 제공 되었습니까? 위의 @RayDonnelly는 MSYS2 팀이 어떤 종류의 성능 차이를 확인하기 위해 이러한 종류의 바이너리를 만드는 데 관심이 있다고 언급했습니다.
jpmc26

4
우리는 아직 완전히 합병하지 않았습니다. 우리는 노력하고 있습니다.
Ray Donnelly

4
아직까지는 MSYS2의 git 패키지가 여전히 msys-2.0.dll에 연결되어 있습니다. MSYS2를 Windows 용 Git과 병합하는 프로세스가 진행 중입니다.이 과정이 완료되면 git 패키지를 삭제하면됩니다. msys-2.0.dll- 링크 된 패키지가 네이티브 소프트웨어를 지원하기 위해 존재하고 자체 목적으로 최종 목표가 아니기 때문에 완전히 고유 한 것입니다.
Ray Donnelly

1
@RayDonnelly 현재 상태는 어떻습니까? Windows 용 Git을 MSYS2 (패키지 관리!)로 바꾸면 어떤 단점이 있습니까?
Brecht Machiels


18

그들 사이의 연결에 대한 나의 이해는

  • Cygwin 은 창 위에 POSIX 에뮬레이션을 제공합니다
  • msys 는 Cygwin을 단순화하려고했지만 2010 년부터 폐기되었습니다.
  • msysGit- 이전 버전의 msys를 기반으로 Windows에서 최대 1.9.4 ( git-for-windows-1.X 라고 함)를 허용했습니다 .
  • msys2- 간결한 Cygwin, msys의 변경 사항으로 Pacman과 통합 된 Cygwin의 기능과 동기화
  • MinGW- 초기 MinGW (2010에서 포기 됨)
  • MinGW-w64- POSIX를 사용하지 않고 창과 더 빠르고 효과적으로 통합
  • git-for-windows-2.x- MinGW-64 , MinGW-32를 사용하여 Windows 용 2.X에서 Git을 제공 하며 msys2 로 대체하여 불가능한 경우

Cygwin, msys, msys2, MinGW, git-for-windows, msysGit 비교

인어에서 완전한 그래프 정의 와 바이올린 .


1
멋진 그래픽. +1. 다음 "윈도우 1.0에 대한 힘내는"정말 그래도 최선의 노력을 기준으로 이루어졌다 stackoverflow.com/a/1704687/6309 (나는에 언급 stackoverflow.com/a/50555740/6309 )
VonC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.