В чем разница между WSL, SFU, SUA/Interix, подсистемой POSIX и Cygwin?
Я нашел много информации о том, как работает подсистема 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
2 ответа
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
за кулисами. (Об этом было в блоге.)
Что касается 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, то есть очень весело.