Как msys, msys2 и msysgit связаны друг с другом?

Я искал вокруг, но я не могу найти подробное описание того, что происходит с этими 3 версиями MSYS. (Вполне возможно, я просто не знаю, что искать.) Я понимаю, что MSYS - это минимальный порт инструментов Linux для поддержки разработки с использованием MinGW, но мне не ясны отношения между ними тремя или команды, которые разработали / поддерживают их.

Конкретные вопросы для решения:

  • Какие из них находятся в стадии активной разработки? (В частности, MSYS мертв, а MSYS2 активен?)
  • Каковы отношения между группами, которые их поддерживают? (В частности, команда MSYS создала MSYS2?)
  • Использует ли msysgit только один из них, или у них есть своя ветвь MSYS?
  • Совместимы ли какие-либо из них друг с другом?
  • Есть ли какие-либо проблемы совместимости с конкретными версиями Windows для любого из них?
  • Предоставляет ли один основные функции над другим?

3 ответа

Решение

Отказ от ответственности: я разработчик MSYS2

Хотя MSYS не умер, я бы сказал, что он тоже не очень здоров. Это проект, начатый командой Mingw много лет назад как форк Cygwin, который никогда не отставал от Cygwin.

msysgit - это ветвь немного более старой версии MSYS с некоторыми пользовательскими исправлениями, старыми версиями bash и perl и собственным портом git.

MSYS2 - это проект, начатый Алексеем Павловым из команды mingw-builds (которые являются официальными упаковщиками для наборов инструментов MinGW-w64) в качестве недавней развилки Cygwin, которая тщательно отслеживает последнюю версию Cygwin, чтобы она не устарела. Алексей вперёд портировал старые патчи MSYS и добавил некоторые свои.

Помимо предоставления необходимых инструментов Unix для компиляции нативного программного обеспечения - заявленной цели MSYS - мы портировали менеджер пакетов Pacman из Arch Linux. Pacman - это больше, чем просто управление бинарными пакетами (хотя он делает это очень хорошо). Он имеет инфраструктуру для создания программного обеспечения под названием makepkg, которая позволяет создавать рецепты (PKGBUILD и файлы патчей) для создания программного обеспечения. ИМХО, принятие Pacman существенно меняет ситуацию для разработки с открытым исходным кодом на Windows. Вместо того, чтобы все взламывали свои собственные скрипты оболочки для создания программного обеспечения в виде мешанины, несовместимым способом, пакеты теперь могут зависеть от других пакетов, а файлы PKGBUILD и связанные с ними патчи могут использоваться в качестве ссылки для создания новых PKGBUILD. Он настолько близок к системе Linux, насколько может (родная) Windows (в частности, Arch), и позволяет легко обновлять все установленные пакеты.

Мы нацелены как минимум на Windows XP SP3 и поддерживаем как 32-битную, так и 64-битную Windows. Мы просим вас никогда не смешивать MSYS2 с msys или msysgit. Pacman используется для управления всей системой, и поэтому файлы из других систем будут вызывать конфликты.

Мы также стараемся направлять наши патчи на проекты, которые мы создаем, и активно запрашиваем вклады от других проектов с открытым исходным кодом. Мы надеемся, что другим будет легко с нами работать.

Наш основной сайт находится на Sourceforge и содержит ссылки на наши репозитории PKGBUILD. У нас также есть более удобный установочный сайт на github.

Присоединяйтесь к нам на IRC (oftC#msys2), если вам нужна дополнительная информация.

Git 2.8 (март 2016 года) включает в себя очень подробный коммит, который объясняет важность msys2 для нового git-for-windows, который заменил msysgit в начале 2015 года.

См. Коммит df5218b (13 января 2016 г.) Йоханнеса Шинделина ( dscho )
(Объединено Юнио С Хамано - gitster - в комитете 116a866, 29 января 2016 г.)

Долгое время Git для Windows отставал от выпусков Git 2.x, потому что разработчики Git для Windows хотели, чтобы этот большой скачок совпал с столь необходимым переходом от MSys к MSys2.

Чтобы понять, почему это такая большая проблема, необходимо отметить, что многие части Git написаны не на переносимом C, а вместо этого Git полагается на оболочку POSIX и Perl, которые должны быть доступны.

Для поддержки сценариев Git для Windows должен поставлять минимальный слой эмуляции POSIX с добавлением Bash и Perl, а когда в августе 2007 года началась работа над Git для Windows, этот разработчик решил использовать MSys, урезанную версию Cygwin.
Следовательно, первоначальное название проекта было "msysGit" (что, к сожалению, вызвало много путаницы, потому что мало пользователей Windows знают о MSys, и даже меньше заботятся).

Для компиляции кода C для Git для Windows также использовался MSys: он поддерживает две версии компилятора GNU C:

  • тот, который неявно связан с уровнем эмуляции POSIX,
  • и другой, предназначенный для простого Win32 API (с несколькими добавленными вспомогательными функциями).

Исполняемые файлы Git для Windows создаются с использованием последних, и поэтому они на самом деле являются программами Win32. Чтобы отличить исполняемые файлы, требующие уровня эмуляции POSIX, от тех, которые этого не делают, последние называются MinGW (Minimal GNU для Windows), а первые называются исполняемыми файлами MSys.

Эта зависимость от MSys также вызывала проблемы:

  • некоторые из наших изменений в среде выполнения MSys, необходимые для лучшей поддержки Git для Windows, не были приняты в апстрим, поэтому нам пришлось поддерживать собственный форк.
  • Кроме того, среда выполнения MSys не получила дальнейшего развития для поддержки, например, UTF-8 или 64-разрядных, и помимо отсутствия системы управления пакетами намного позже (когда mingw-get был представлен), многие пакеты, предоставляемые проектом MSys/MinGW, отстают от соответствующих версий исходного кода, в частности Bash и OpenSSL.

Некоторое время проект Git для Windows пытался исправить ситуацию, пытаясь создать более новые версии этих пакетов, но ситуация быстро стала несостоятельной, особенно с такими проблемами, как ошибка Heartbleed, требующая быстрых действий, которые не имеют ничего общего с разработкой Git для Окна дальше.

К счастью, тем временем появился проект MSys2 ( https://msys2.github.io/), который был выбран в качестве основы для Git для Windows 2.x.
Как и MSys, MSys2 является урезанной версией Cygwin, но она активно обновляется с исходным кодом Cygwin.
Таким образом, он уже поддерживает внутреннюю Unicode, а также предлагает 64-битную поддержку, к которой мы стремились с начала проекта Git для Windows.

MSys2 также перенес систему управления пакетами Pacman из Arch Linux и интенсивно использует ее. Это приносит то же удобство, к которому привыкли пользователи Linux yum или же apt-get и к которым привыкли пользователи MacOSX от Homebrew или MacPorts или пользователи BSD из системы Ports к MSys2: простой pacman -Syu обновит все установленные пакеты до новейших доступных на данный момент версий.

MSys2 также очень активен, обычно предоставляет обновления пакетов несколько раз в неделю.

Потребовалось еще два месяца, чтобы привести все в состояние, в котором проходит тестовый набор Git, еще много месяцев, пока не был выпущен первый официальный Git для Windows 2.x, и пара патчей все еще ожидает их отправки в соответствующие апстрим-проекты., Однако без MSys2 модернизация Git для Windows просто не состоялась бы.

Этот коммит закладывает основу для поддержки сборок Git на основе MSys2.


В комментариях вопрос был задан в январе 2016 года:

Поскольку Git для Windows уже основан на MSYS2, были ли двоичные файлы, не зависящие от уровня эмуляции, доступны в виде пакета MSYS2?

Ray Donnelly ответил тогда:

Мы еще не полностью слились, нет. Мы работаем над этим, хотя.

Но... madz отмечает, что в начале 2017 года эти усилия не madz.
Увидеть:

Проблема в том, что я не могу своевременно вносить изменения, которые приведут к новому запуску msys2.
Не большая проблема, хотя: я просто буду держать форк Git для Windows на неопределенный срок.

Поэтому вики упоминает сейчас (2018):

Git для Windows создал несколько исправлений для msys2-runtime, которые не были отправлены в апстрим. (Это было запланировано, но в выпуске № 284 было определено, что этого, вероятно, не произойдет.)
Это означает, что вам нужно установить Git для Windows, настроенную среду выполнения msys2, чтобы иметь полностью рабочий git внутри MSYS2.

Мое понимание связей между ними

  • cygwin предлагает эмуляцию POSIX поверх окон
  • msys пытался упростить Cygwin, но устарел с 2010 года
  • msysGit - разрешил git до 1.9.4 в windwos (можно было бы назвать git-for-windows-1.X), основываясь на старой версии msys.
  • msys2 - упрощенный cygwin, разветвленный из него, с изменениями из msys и синхронизированный с функциями cygwin, интегрированный с pacman
  • minGW - начальная minGW, заброшенная с 2010 года
  • minGW-w64 - более быстрая и лучшая интеграция с Windows, без POSIX
  • git-for-windows-2.x - предлагает git из 2.X для окон, использующих minGW-64, minGW-32 и, когда это невозможно, с отступлением до msys2

сравнить cygwin, msys, msys2, minGW, git-for-windows, msysGit

Скрипка с полным определением графа русалки

Другие вопросы по тегам