В чем разница между Windows Subsystem для Linux (WSL), Cooperative Linux (coLinux) и Cygwin?
Кто-нибудь еще помнил coLinux? Я помню, что он использовался для SpeedLinux и Portable Ubuntu несколько лет назад.
Довольно ясно, что делает coLinux, как-то работает под управлением Windows поверх Windows, но может использовать настоящий раздел linux. Тем временем cygwin перекомпилирует Linux-приложения для использования в Windows.
Но WSL? WSL ближе к coLinux или Cygwin?
2 ответа
WSL будет ближе к coLinux, чем Cygwin.
Имейте в виду, что Unix, POSIX и Linux - это разные вещи.
Cygwin - это уровень совместимости POSIX, который работает поверх подсистемы Win32. Это не имеет ничего общего с Linux; в широком смысле его можно рассматривать как "просто еще один Unix-подобный", где портирование программ требует перекомпиляции и, возможно, модификации исходного кода, а все, что требует не-специфичных для POSIX Linux функций, вероятно, не будет работать.
WSL 1 разработан, чтобы быть ABI- совместимым с собственно Linux. Он не использует настоящее ядро Linux, но совместим так, что программы, скомпилированные для Linux, могут работать на нем без перекомпиляции или перевода. WSL является частью ядра NT, поэтому существует независимо от подсистемы Win32. Это похоже на более старый SUA, хотя это была подсистема POSIX (не Linux!) Поверх ядра NT.
WSL 2, еще не доступный, будет запускать настоящее ядро Linux на облегченной виртуальной машине. Он обещает интеграцию с Windows, аналогичную WSL 1, но с настоящим ядром Linux (поэтому модули ядра, файловые системы и т. Д. Должны работать).
coLinux использует настоящее (хотя и модифицированное) ядро Linux. Со стороны Windows он существует как драйвер, который обеспечивает управление памятью и доступ к вводу / выводу. Концептуально, это наиболее близко к виртуальной машине, хотя с более тесной интеграцией между хостом и гостем.
С точки зрения программы, и WSL, и coLinux выглядят примерно так же, как настоящее ядро Linux, работающее на сыром оборудовании. WSL (в настоящее время) имеет больше ограничений и причуд, но также имеет поддержку сторонних разработчиков (Microsoft) и wotks на x86_64. coLinux и WSL 2 - настоящие ядра Linux, поэтому будут вести себя так же, как Linux, тогда как WSL 1 - это реализация ABI для чистых помещений.
Cygwin не выглядит ближе к Linux, чем, скажем, FreeBSD.
Отличный ответ Боба , но я просто добавлю одну уточняющую деталь о WSL2.
... теперь есть WSL2. Но насколько я понимаю, это всего лишь виртуальная машина.
WSL2 больше похож на Docker (и другие технологии контейнеризации), чем на саму виртуальную машину. Да, подсистема WSL2 (часть, называемая «Платформа виртуальных машин») работает на облегченной виртуальной машине, но у нас нет доступа к самой виртуальной машине. Вместо этого эта виртуальная машина используется для запуска «дистрибутивов» (я обычно называю их «экземплярами») в их собственных пространствах имен.
Каждый экземпляр WSL2 имеет отдельный:
- пространство имен PID
- Подключить пространство имен
- пространство имен IPC
- пространство имен UTS
- Системное распространение WSLg (только для Windows 11)
Однако все они имеют следующее общее с родительской виртуальной машиной WSL2 (и, следовательно, друг с другом):
- Пространство имен пользователя
- Пространство сетевых имен
- Пространство имен Cgroup
- Дерево устройств (кроме
/dev/pts
) - ЦП/ядро/память/своп (очевидно)
-
/init
двоичный (но не процесс)
Дополнительная литература: в книге «Контейнеризация с помощью LXC» есть отличная глава , в которой подробно объясняются многие используемые здесь концепции. В настоящее время это глава с бесплатными образцами на Packt.