В чем разница между WSL, SFU, SUA / Interix, подсистемой POSIX и Cygwin?

1281
itaton

Я нашел много информации о том, как работает подсистема Windows для Linux (WSL) в блоге msdn . Я знаю, что это основано на переводе системных вызовов Linux в системные вызовы NT в режиме реального времени, и поэтому возможно запускать неизмененные двоичные файлы ELF.

WSL - это подсистема NT, а также подсистема Microsoft POSIX, службы Windows для UNIX (SFU) и подсистема для приложений на основе Unix (SUA) / Interix.

Cygwin, с другой стороны, представляет собой приложение, которое находится поверх подсистемы Win32.

В блоге написано, что программы нужно перекомпилировать для SUA. Поскольку SUA является (насколько я понимаю) преемником SFU, который, в свою очередь, является преемником подсистемы POSIX. Поэтому я предполагаю, что все эти необходимые перекомпилированные двоичные файлы тоже.

Если это так, то чем эти предшественники WSL отличаются от Cygwin?

Я ищу сравнение между ранее упомянутыми системами / программами и тем, как они работают «под капотом». (В частности, чем WSL отличается от своих преемников)

PS: сейчас нужно удалить некоторые ссылки, так как моя репутация на SU ограничивает меня до 2

4
Мы могли бы иметь правильную встроенную версию Bash: https://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/ Daniel Sokolowski 6 лет назад 0

2 ответа на вопрос

3
BeErikk

Что касается SUA / SFU и Interix, есть разница. Википедия объясняет это довольно хорошо и подробно: подсистема Microsoft POSIX и Interix

Interix был реализацией BSD поверх подсистемы POSIX. Вы можете заменить его другой реализацией, такой как GNU Debian или NetBSD (что было сделано). SUA (2005) открыл подсистему POSIX, чтобы вы могли расширять ее с помощью вызовов NT и даже запускать смешанные приложения Posix / Win32.

К сожалению, Microsoft никогда не выпускала подходящие средства разработки и даже привлекла сторонних разработчиков. Был форум, где пользователи могли помогать друг другу в разработке и других вещах. Компания поддержки предоставила репозиторий с широким спектром бинарных пакетов. В конце концов Microsoft прекратила финансирование, и почти вся информация о Interix исчезла, когда компания поддержки закрыла форум.

Короче говоря, приложения SUA Posix были очень быстрыми, возможно, наиболее эффективными из всех, которые вы могли запускать в Windows. Но их было сложно развить, включая взлом системных файлов NT и Posix, то есть очень весело.

2
grawity

Interix / SFU / SUA - это легковесная подсистема, заменяющая только слой Win32 пользовательского пространства чем-то вроде Unix libc - хотя для определенных задач и существует «драйвер подсистемы» (psxss), он по-прежнему использует исполняемые файлы Windows PE (.exe), libc по-прежнему использует системные вызовы ядра NT, процессы Interix почти полностью похожи на Win32 или нативные процессы и имеют одинаковый доступ к файловой системе.

Cygwin похож, но проще; он полностью построен как библиотека времени выполнения в пользовательском пространстве поверх Win32 (с отдельным вызовом NT). В результате приложения Cygwin на самом деле являются приложениями Win32, которые используют действительно странный libc.

Для сравнения, WSL гораздо более обширный, чем даже SUA - драйвер Lxss переопределяет системные вызовы ядра Linux, а не функции библиотеки пользовательского пространства, и может запускать неизмененные двоичные файлы ELF (по умолчанию в системе WSL используется стандартная Ubuntu). Среда WSL в основном является автономной и представляет собой виртуальную машину «Пользовательский режим Linux» с очень небольшим взаимодействием с операционной системой хоста. Хотя процессы WSL отображаются в дереве общих процессов, вы не можете просто запустить / bin / sh напрямую - вам нужно загрузить всю систему WSL, что делается bash.exeза кулисами. (Был пост в блоге об этом.)

Самое важное различие между ними заключается в том, что WSL может запускать одни и те же инструменты, которые Ubuntu запускает из одного и того же хранилища. Единственное исключение (в настоящее время) - это инструменты с пользовательским интерфейсом. Ramhound 7 лет назад 0
Это не странный libc. `Newlib` просто отличается от` GNU libc`, так как он в основном происходит от BSD matzeri 7 лет назад 0
Что за упомянутый пост в блоге этот? https://blogs.msdn.microsoft.com/wsl/2016/10/19/windows-and-ubuntu-interoperability/ Stijn Sanders 7 лет назад 0