В ближайшие дни Microsoft представит совместную с Ubuntu разработку для ОС Windows 10, которая позволяет запускать немодифицированные (пока только консольные) бинарные файлы в Windows. Суть новинки заключается в трансляции системных вызовов Linux/POSIX в вызовы Win32 API, что позволяет достичь практически родной скорости выполнения Linux-приложений в среде Windows. Если не вдаваться в тонкости, то разработчики из Microsoft написали Wine наоборот.

Некоторые детали реализации:

    Все диски Windows будут доступны через точки монтирования в /mnt.
    Сама корневая система Linux/Ubuntu будет находится в C:\Users\$USER\AppData\Local\Lxss\rootfs\
    На данный момент терминал vt100, который эмулируется для приложений Linux, реализован не полностью, поэтому такие утилиты, как byobu, screen и tmux пока не работают.
    Основа всего — Ubuntu 14.04 LTS.
    Ubuntu для Windows распространяется как приложение UWP, поэтому работает только в Windows 10.

Почему Microsoft пошла на это? Чтобы привлечь тех разработчиков, для которых cmd.exe и PowerShell не являются достаточными, а cygwin не обеспечивает достаточной скорости.

Дастин Киркленд (Dustin Kirkland), входящий в команду, принимающую решения по разработке продуктов и определению стратегии развития в компании Canonical, раскрыл подробности совместного с Microsoft проекта по предоставлению пользователям Windows 10 возможности работы с пользовательским окружением Ubuntu Linux.

Работа приложений организована без использования контейнеров, виртуализации, отдельной пересборки утилит и даже без использования ядра Linux — запуск родных исполняемых файлов Linux реализован путём включения специальной прослойки, на лету транслирующей системные вызовы Linux в системные вызовы Windows. По сути реализован обратный аналог системы Wine, получивший название «Windows Subsystem for Linux» (WSL) и практически не влияющий на производительность выполняемых приложений Linux.

Для упрощения установки для пользователей Windows подготовлена специальная сборка Ubuntu, содержащая образ корневой системы с набором базовых приложений. Пакет будет доступен для установки из каталога Windows Store. Установив данный пакет пользователь Windows 10 сможет через меню Start вызвать командную оболочку cmd.exe, запустить в ней bash и получить штатный интерфейс командной строки Ubuntu.

Пользователю доступны apt, ssh, rsync, find, grep, awk, sed, sort, xargs, md5sum, gpg, curl, wget, apache, mysql, redis, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch и большинство бинарных пакетов из архива Ubuntu, содержащих консольные и серверные приложения. При этом некоторые приложения пока остаются неработоспособны, например, из-за неполной эмуляции терминала VT100 невозможно использовать byobu, screen и tmux. Также ничего не говорится о реализации запуска графических приложений.

Приложения Ubuntu выполняются в отдельном представлении файловой системы, повторяющей организацию файловой иерархии в Linux. Файловые системы Windows доступны на запись в форме разделов, примонтированных в директории /mnt. Например, директория «C:\Users\Kirkland\Downloads» доступна как «/mnt/c/Users/Kirkland/Downloads».

Для Windows-приложений корневая ФС Ubuntu видна как «C:\Users\Kirkland\AppData\Local\Lxss\rootfs\». Для установки дополнительных пакетов и обновления системы применяется инструментарий apt с загрузкой штатных пакетов и обновлений из репозиториев Ubuntu.

Код прослойки пока остаётся закрытым. Функциональность будет доведена до пользователей в ближайшем обновлении Windows 10. Для активации запуска Linux-программ в настройках Windows необходимо включить режим для разработчика (Developer Mode).

В комментариях один из разработчиков прослойки WSL пояснил некоторые детали:

    Система WSL создавалась как проект не зависимый от конкретных дистрибутивов Linux. Ubuntu выбран для поставки первой версии как наиболее популярный дистрибутив в среде разработчиков, но имеются определённые технические причины, которые мешают поддержке пользовательских окружений других дистрибутивов;
    Для WSL в ядре Windows была специально реализована поддержка fork() и некоторых других специфичных системных вызовов POSIX и Linux, что позволило добиться реализации, более эффективной, чем при использовании эмуляции;
    В WSL удалось полностью избавиться от использования ядра Linux, по сути пользовательское окружение Ubuntu работает поверх ядра Windows, так же как в Nexenta пользовательское окружение Ubuntu работает поверх ядра OpenSolaris;
    WSL не основывается на ранее доступной подсистеме POSIX (SUA), которая в NT 3.5.1 содержала лишь минимальный набор системных вызовов и позднее была заменена на систему Services for Unix (SFU), основанную на наработках Interix. WSL является полностью новой реализацией, не требующей перекомпиляции программ или сборки специальных дистрибутивов;
    В WSL подготовлена новая инфраструктура ядра Windows, которая предоставляет слой совместимости с Linux syscall API и специальный загрузчик, что позволяет напрямую запускать уже поставляемые в Ubuntu немодифицированные исполняемые файлы, так же как запускаются обычные программы для Windows;
    Поддержка графических приложений не планируется. Система может запускать серверные приложения, но рассчитана скорее на их тестирование, чем на развёртывание замены Linux-серверов для промышленного применения. Проект нацелен только на предоставление инструментария командной строки для разработчиков.