Вот список опций, доступных по состоянию на 2018-05 годы, с большим количеством обновлений, касающихся WSL по состоянию на 2020-01 годы, а также немного подробностей по каждому из них.
Опции, которые выделяются
WSL становится все более и более зрелым (Microsoft уже давно отказалась от предупреждения о бета-версии ) и очень простым в установке, так что в большинстве случаев это очень хороший (если не самый лучший) вариант. Он решает проблему, используя другой метод, чем большинство других опций. Вы запускаете тот же самый двоичный код, что и в системе Linux. До 2020-01 WSL перехватывает вызовы ядра и транслирует их в вызовы windows ядра (думайте наоборот Wine). Это изменится, так как текущая бета-версия WSL запускает настоящее ядро linux в легковесной ВМ.
В любом случае, с WSL вы получите отличный командный интерпретатор с почти всеми CLI-функциями, которые вы ожидаете найти в стандартной установке Ubuntu и опцией apt install
почти все, что доступно в репозиториях. В Microsoft официально заявляют, что “WSL не нацелена на поддержку GUI-десктопов или приложений” , однако существуют неофициальные инструкции о том, как это сделать. Похоже, что на данный момент (2020-01) основными недостатками WSL являются следующие:
Вот старое, но приятное сравнение с cygwin (обратите внимание, что Рич Тернер (Rich Turner) является членом команды WSL и он разместил много полезной информации о WSL)
Cygwin предоставляет следующее:
- оболочку bash и терминал Mintty,
- обширный набор общих утилит Linux, скомпилированных для работы под Windows
- всесторонний уровень совместимости, позволяющий запускать программы Linux под Windows.
Cygwin стремится облегчить портирование приложений Linux на Windows. Если какая-либо программа на C была разработана для Unix и предполагает использовать такие возможности, как трубы, доступ к файлам в стиле Unix и каталогам e.t.c., то вы можете скомпилировать ее для Cygwin, и Cygwin будет действовать как уровень совместимости между кодом и foreign OS (Windows). Это позволяет одной и той же программе на C работать как под Linux, так и под Windows с небольшими изменениями или вообще без них. Таким образом, был выполнен огромный список программ для Linux, которые могут быть запущены при установке Cygwin. Однако вы, пользователь этих программ, вероятно, должны быть знакомы с Unix. Например, вам может понадобиться передать аргументы типа /cygdrive/c/autoexec.bat
вместо c:\autoexec.bat
и быть готовым к работе с выводом с завершением строки Unix (\n
) вместо завершения строки Windows (\r\n
).
Коллекция всех программ Cygwin состоит из репозитория, и хотя Cygwin не имеет традиционного менеджера пакетов для Linux, вы можете добавлять, удалять и обновлять программы из этого репозитория в любое время очень интуитивным способом (вы запускаете настройку Cygwin. exe в любое время после завершения установки)
- Babun ** - это Cygwin с полнофункциональным менеджером пакетов (pact), oh-my-zsh для его оболочки, git, автоматических обновлений и архитектуры, ориентированной на плагины. Хотя по умолчанию оболочкой по умолчанию является zsh, вы можете легко переключиться на bash. Похоже, что это хорошее обновление от ванильного Cygwin, если вы не возражаете против лишнего веса.
Mingw-w64 обеспечивает следующее:
- оболочка bash,
- достаточное количество утилит для Linux,
- цепочка инструментов разработки SW для сборки приложений, которые будут работать без уровня совместимости Linux (или с минимальным).
MinGW - в первую очередь дистрибутив программного обеспечения и платформа для сборки Windows. В частности, это Windows-порт инструментов компилятора GNU, таких как GCC, make, bash и так далее. Он включает в себя достаточное количество инструментов GNU и минимальный уровень совместимости с Unix.
Основная разница между Mingw-w64 и Cygwin заключается в приоритетах: Cygwin стремится обеспечить полный POSIX-совместимый уровень, включающий в себя полную реализацию всех основных системных вызовов и библиотек Unix; производительность вторична по сравнению с совместимостью. MinGW стремится к производительности, поэтому он не будет предоставлять определенные POSIX API, которые не могут быть реализованы легко и/или достаточно быстро под Windows. Также основной целью MinGW являются S/W разработчики. Тем не менее, случайные пользователи могут также наслаждаться его оболочкой и утилитами общего назначения.
MSYS2 обеспечивают следующее:
- оболочку bash и терминал Mintty,
- достаточное количество утилит Linux,
- полнофункциональный менеджер пакетов командной строки для установки программ ОС
- части из Cygwin и MinGW для поддержки сборки приложений как со всесторонним уровнем совместимости Linux, так и без него.
- репозиторий программного обеспечения и менеджер пакетов (pacman), который упрощает установку, использование, сборку и перенос программного обеспечения на Windows.
MSYS2 также является В первую очередь это дистрибутив программного обеспечения и строительная платформа для Windows типа MinGW, но она сочетает в себе как путь Cygwin, так и путь MinGW. Вы можете использовать MSYS2 для создания “MinGW программ” или “MSYS2 программ”. Более поздняя ссылка на слой совместимости MSYS2 (msys-2.dll), которая сама по себе внимательно следит за развитием слоя совместимости Cygwin с несколькими дополнениями/модификациями . Однако, репозитории 2-х проектов полностью не связаны друг с другом. Поэтому, хотя и MSYS2, и Cygwin предоставляют grep.exe
, они могут иметь совершенно другую версию.
- Git для Windows ** - это либо просто MSYS2 с установленным git'ом, либо по крайней мере в значительной степени основанный на MSYS2 . Он предоставляет ту же оболочку (bash), терминал (Mintty) и менеджер пакетов (pacman). Похоже, это самый популярный способ заставить доминирующий Git работать под Windows, и вместе с ним вы получаете приятное Unix окружение.
Общие принципы
За исключением WSL, большинство из вышеперечисленных инструментов имеют много общих технологий (библиотек, исполняемых файлов, концепций). Например, оболочка bash, которая идет с MinGW, зависит от msys-2.dll, которая сама по себе является развилкой cygwin.dll. Так что да, есть много места для путаницы :-).
Больше вариантов
Cmder ** предоставляет только хороший терминал и бэш-подобную оболочку для Windows. Его основным компонентом является * Conemu ** (терминал). Вдобавок к этому, он добавляет C, который предоставляет Powerful Bash-стиль редактирования командной строки, пользовательский макет запроса и цветовую схему Monokai. Он очень (или, возможно, полностью) совместим с консольными программами для родных окон.
Scoop ** предоставляет менеджер пакетов командной строки для многих известных кроссплатформенных программ, включая многие инструменты GNU. Он загружает предварительно скомпилированные пакеты. It не предоставляет ни оболочки, ни терминала, а запускается под командной строкой windows cmd.exe (со всеми его ограничениями, но также с полной совместимостью с родными консольными программами windows). Он также не содержит набора компиляторов (но, конечно, компиляторы и средства разработки - это типичные пакеты, которые можно установить с помощью scoop). Многие программы, которые устанавливает Scoop, либо исходят непосредственно из проекта MinGW/MSYS, либо были собраны с помощью их инструментов.
Еще больше вариантов
Решения, о которых мы говорим ниже, не кажутся активными, и я никогда не тестировал их, но они, кажется, делают работу за других:
Gow ** (Gnu On Windows) - легкая альтернатива Cygwin без оболочки. Он использует удобный инсталлятор Windows, который устанавливает около 130 чрезвычайно полезных приложений с открытым исходным кодом Linux, скомпилированных как родной win32 двоичный файл и доступных через командный интерпретатор windows’ cmd.exe. Она спроектирована так, чтобы быть как можно меньше (около 10 Мб).
UnxUtils & GnuWin32 **: UnxUtils - это набор портов обычных GNU Unix-подобных утилит на родной Win32, с исполняемыми файлами, зависящими только от Microsoft C-runtime msvcrt.dll. Вы должны загрузить основную часть и несколько обновлений . GnuWin32 имеет более поздние версии, чем UnxUtils, но требует поддержки файлов (например, DLL)
MSYS и MinGW похоже были устарели от MSYS2 и MinGW-W64, так что я никогда на них не смотрел.
Некоторые общие проблемы на Cygwin & MSYS2
Что касается терминала
Mintty - это терминал, используемый на Cygwin, MSYS2 и их производных. Следует помнить, что если вы используете Windows native консольные программы, то это не безболезненная замена командной строки Windows Command Prompt. В то время как программы с простым текстовым выводом обычно работают нормально, интерактивные и полноэкранные часто имеют проблемы. Читайте подробнее на главной странице Mintty , а также прочитайте запись “Некоторые родные консольные программы не работают при запуске из Git Bash” на Git for Windows FAQ . Эта запись содержит следующие рекомендации, которые следует делать, когда вы сталкиваетесь с такого рода проблемами:
Есть несколько методов работы с этими проблемами:
- Запускайте программы, у которых есть проблемы, с помощью утилиты winpty . Это позволяет продолжать использовать более красивый терминал mintty, но может стать громоздким, если Вам понадобится обходной путь для многих программ.
- [используйте cmd.exe] и настройте его на “Quick Edit”, разумный размер и прокрутку и подходящий шрифт юникода. Вам все равно придется жить с другими причудами [cmd.exe].
- установка и использование Conemu .
Другие проблемы
Следует помнить о двух наиболее важных вещах:
есть обмен между властью и трудными для отладки проблемами. Чем мощнее решение, тем больше вещей может пойти не так, как кажется на первый взгляд не имеющим отношения к Вашему Linux-слою.
если у вас нет большого опыта работы с Linux, не используйте более мощные решения, такие как Cygwin/MSYS2/MinGW
UnxUtils и GnuWin32 имеют наименьшую мощность, но также и наименьший потенциал причинения головной боли. Cygwin и подобные решения будут превосходить планку как по мощности, так и по головной боли. Cmder находится где-то посередине. Итак, когда вам нужны самые мощные решения, хорошенько выспитесь и будете полностью сконцентрированы. Избегайте использования мощных решений при тестировании чего-то нового и, возможно, нестабильного. Также не забывайте, что решения средней сложности, такие как cmder, не безупречны.
Проблема теневых оконных команд Linux является распространенной причиной проблем с отладкой в таких решениях, как Cygwin/MSYS2/MinGW. Вот пример: У меня был .bat-файл, в котором использовалась команда таймаута. Когда он запускается под Cygwin, он не работает, потому что таймаут - это тоже команда Linux, но с другим синтаксисом. После того, как я обнаружил проблему, я могу добавить PATH=… в верхнюю часть .bat-файла, чтобы убедиться, что команда windows имеет приоритет. Но потом я получил еще более загадочную “Input redirection is not supported” ошибку и решил обходной путь, прежде чем найти причину.
Вот пример проблемы с cmder. Я запускал Windows версию unison в Cmder и при некоторых особых условиях она зависала с absolutely no error message. Одна и та же команда всегда выполнялась идеально под cmd.exe. Забавно, что она также отлично работала под Cygwin (на самом деле, если у вас есть Unicode имена файлов, то терминал Cygwin лучше, чем cmd.exe, потому что cmd.exe часто отображает юникодный текст в неверном виде).
Об этом руководстве
В течение 2017-05 годов мне надоело не понимать различий вышеперечисленных инструментов, хотя некоторые из них я использую уже давно (в основном CygWin и cmder, но никогда не в целях разработки). Поэтому я потратил несколько часов, чтобы походить по ландшафту. Это руководство является результатом записей, которые я сохранил. Я не эксперт в этой области, но я очень старался найти всю необходимую информацию, прочитать ее критическим взглядом и четко представить наиболее важные части. Пожалуйста, прокомментируйте, если что-то покажется мне неправильным, и я сделаю все возможное, чтобы исправить это.
Наконец-то извините за некоторые терминологические проблемы: В этом тексте я иногда использую термин Linux вместо UNIX или POSIX. Я знаю, что это не одно и то же, но очень трудно отличить их, когда подходишь к теме с такой большой дистанции. Даже когда это не сложно, требуется время, которого у меня нет ;-).