2014-09-09 1 views
33

Традиционно MSYS bash считается уступающим Cygwin bash. Первый был вспомогательным инструментом внутри MinGW, предназначенным для запуска сценариев autoconf. Но теперь есть MinGW-w64 и MSYS2. Последний поставляется со сладким pacman, таким как менеджер пакетов и элегантные оболочки, такие как zsh, поэтому я задаюсь вопросом, есть ли еще промежуток в слое эмуляции.Различия между MSYS2 и Cygwin

Хотя приложения MinGW * являются исполняемыми файлами Windows, для программного обеспечения MSYS2 требуется слой эмуляции POSIX, как это делает Cygwin. По крайней мере, случайному пользователю трудно определить различия между ними.

  • Каковы функциональные различия между двумя уровнями эмуляции (если они есть)?
  • Какая эмуляция выполняется быстрее (более эффективно)?
+1

Какие преимущества вы ищете, если не мнения? – Scimonster

+0

@Scimonster Я ищу технические детали и детали реализации, которые могут сделать один из двух проектов более совместимым с POSIX, а не для личного использования. проект x основан на 'cygwin.dll' или нет, а не проект x использует удобный установщик pacman. Я думаю, что последнее - это просто мнение о том, что вам нравится. – antonio

+0

Любопытный, я подумал, что вопрос о том, как три вилки отличаются от раздвоенного проекта, был слишком широк: [stackoverflow.com/q/25019057](http://stackoverflow.com/q/25019057/1851270) С этого момента аскер сам говорит: «Я открыт для любых предложений по улучшению этого вопроса. Я чувствую, что это может быть лучше». Я сосредоточился только на последней вилке (MSYS2), дающей больше контекста. Вместо этого вопросы с тремя вилами законны, а у меня нет. – antonio

ответ

43

Традиционно MSYS bash был уступает, но главным образом потому, что Cygwin оставался под активным развитием, в то время как MSYS этого не делал. MSYS forked из Cygwin версии 1.3.3 и никогда не синхронизируется, тогда как MSYS2 регулярно ресинхронизируется с проектом Cygwin.

У нас нет «сладкого pacman, как менеджер пакетов», у нас есть прямая перекомпиляция менеджера пакетов pacman Arch Linux, как мы могли бы достичь.

MSYS2 не имеет cygwin.dll, но у него есть msys-2.0.dll, который делает то же самое (и еще несколько). В частности, аргументы, которые выглядят как пути и PATH env. var преобразуются в форму Windows при запуске собственного программного обеспечения Windows.

Что касается замедления работы, я ожидаю, что будет очень мало различий, но MSYS2 будет на несколько меньше меньше из-за дополнительной работы по преобразованию. Опять же, скорее всего, вы запустите больше Windows-родного программного обеспечения из MSYS2 (например, компиляторы MinGW-w64), чем вы бы от Cygwin, так что это изменит ситуацию в пользу MSYS2.

+15

Следует отметить, что Рэй Доннелли является разработчиком MSYS2. Поэтому его ответ следует считать очень надежным. Надеюсь, в ближайшем будущем подобная информация будет добавлена ​​к [msys2.github.io] (http://msys2.github.io) или [github.com/msys2](https://github.com/msys2) – antonio

+3

Это есть на SF: https://sourceforge.net/p/msys2/wiki/How%20does%20MSYS2%20differ%20from%20Cygwin/ –

+0

https://github.com/msys2/msys2/wiki/How-does -MSYS2-differ-from-Cygwin - это обновленное местоположение ссылки Ника. – anishpatel

6

Как я понимаю, MSYS2 является вилкой Cygwin с основной целью предоставить возможность использовать пакеты MinGW-w64. Эта цель достигается за счет общего количества доступного программного обеспечения. Сравните список из MSYS2 и Cygwin.

По существу, это все. Поэтому, пока вам не нужно было компилировать что-то под MinGW-w64, вряд ли у вас будет какая-то причина использовать MSYS2, а не оригинальный Cygwin.

+0

+1 Я вижу, что MSYS2 не содержит 'cygwin.dll'. Означает ли это, что его инструменты более эффективны? Если у меня есть исходный код, ориентированный на Linux (но предполагайте, что не используете X), Cygwin скорее всего построит его, чем MSYS2? – antonio

+5

MSYS2 просто вызывает 'cygwin.dll' что-то еще. Он работает тем же Cygwin. Ваш код, скорее всего, будет работать с Cygwin, чем MSYS2. MSYS2 действительно не предназначен для создания программ MSYS2, отличных от тех, которые входят в состав MSYS2. MSYS2 в основном предназначался для создания «родных» программ Windows с использованием Unix-подобных инструментов. В частности, он предназначен для запуска сценариев GNU autoconf 'configure'. –

+4

«пока вам не нужно было компилировать что-то под MinGW-w64, у вас вряд ли была бы причина использовать MSYS2, а не оригинальный Cygwin». -Я думаю, ты положил телегу перед лошадью! Мы не используем MSYS2 для использования MinGW-w64 или его пакетов _specifically_. Мы используем MSYS2 для компиляции собственных программ Windows с помощью инструментов стиля GNU. MinGW-w64, являющийся компилятором, во многом определяет только деталь реализации. Причиной использования MSYS2 является его собственная система сборки, а не ее компилятор ... хотя, конечно, этот компилятор делает все возможное :-) –

Смежные вопросы