Никогда прежде корпорация Microsoft не обращала столь пристального внимания на Linux, как в последние полгода. Конкретно сборка Microsoft Windows 10 Build 14316 для разработчиков (developer release) совместно с Canonical (!) включает подсистему Linux. Это не эмулятор и не виртуальная машина, а полноценный терминал Linux, работающий внутри Windows 10!

 

Как это понимать?

30 марта 2016 года на конференции Build для разработчиков Microsoft объявила о начале поддержки командного интерпретатора bash в Windows 10. Дастин Киркленд (Dustin Kirkland) из команды разработчиков Ubuntu в своем блоге раскрыл некоторые подробности этого знакового события. Вкратце работа линуксовых приложений организуется без использования контейнеров виртуализации, отдельной пересборки утилит и даже без использования ядра Linux — родные исполняемые файлы Linux запускаются благодаря специальной прослойке, на лету транслирующей системные вызовы Linux в системные вызовы Windows. По сути, реализован обратный аналог системы Wine, получивший название Windows Subsystem for Linux (далее — WSL) и якобы практически не влияющий на производительность выполняемых приложений Linux.

Установка этого чуда — не самая тривиальная задача. Для начала нужно установить сборку Windows 10 14316 — экспериментальную версию Windows 10 для разработчиков и участников программы Windows Insider. Установить сборку можно, обновившись до нее из самой Windows. При этом нужно быть участником программы Windows Insider и не забыть включить в настройках «десятки» получение экспериментальных сборок. Также есть вариант скачать готовый ISO-образ c торрентов. Этот вариант на первый взгляд выглядит незаконным, однако это не так. Экспериментальные сборки Windows 10 распространяются бесплатно для всех (прямо как Linux!).

INFO


Важно! WSL устанавливается и работает только в 64-битных версиях Windows.

Летом Microsoft обещает выпустить большое обновление для Windows 10 всех версий, которое по умолчанию будет включать WSL. После установки Windows 10 Build 14316 необходимо установить специальный образ Ubuntu, доступный из Microsoft Store. Установив данный пакет, пользователь Windows 10 сможет через меню «Пуск» вызвать командную оболочку 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. Код прослойки пока остается закрытым (имеется в виду именно код прослойки, а не код Ubuntu, конечно).

WSL создавалась как проект, независимый от конкретных дистрибутивов Linux. Ubuntu выбран для поставки в первой версии как наиболее популярный дистрибутив в среде разработчиков, и нет существенных технических причин (кроме полной и точной реализации системных вызовов), которые помешали бы поддержке пользовательских окружений других дистрибутивов в будущем, утверждают в Microsoft. Для WSL в ядре Windows была специально реализована поддержка fork() и некоторых других специфичных системных вызовов POSIX и Linux, что позволило добиться реализации более эффективной, чем при использовании эмуляции. Также в WSL удалось полностью избавиться от использования ядра Linux: по сути, пользовательское окружение Ubuntu работает поверх ядра Windows, так же как в Nexenta OS пользовательское окружение Ubuntu работает поверх ядра OpenSolaris.

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

Поддержка графических приложений не планируется. Система может запускать серверные приложения, но рассчитана скорее на их тестирование, чем на развертывание замены Linux-серверов для промышленного применения. Проект нацелен только на предоставление инструментария командной строки для разработчиков.

Ubuntu Bash в Windows 10 во всей красе
Ubuntu Bash в Windows 10 во всей красе
 

Немного об установке

Автор статьи устанавливал WSL в несколько этапов: вначале установленная на его ноутбуке Dell Inspiron «семерка» была обновлена до Windows 10. Это заняло около семи часов (не считая времени на загрузку образа с сервера Microsoft). После чего начался увлекательный процесс установки последней тестовой сборки Windows 10 Build 14316.

Дело в том, что автор никогда не был бета-тестером Windows 10 и из-за этого не мог участвовать в программе Windows Insider. Недолго думая, зарегистрировавшись на сайте для бета-тестеров, он попробовал обновиться. Не тут-то было! Система просто не видела того, что он участвует в тестировании. К тому же ни одно обновление Windows 10 не устанавливалось. После целого дня мучений было принято решение скачать и установить образ тестовой версии «десятки» с нуля. Но и тут ждал неприятный сюрприз: корпорация Microsoft распространяет образы своих экспериментальных сборок в виде не обычных ISO-файлов, а файлов нового формата, созданного самой же Microsoft, — ESD (Electronic Software Distribution). Название говорит само за себя. После скачивания файлов данного типа их необходимо конвертировать в более привычный формат ISO. Для этого Microsoft выпустила специальную утилиту, которая называется ESD Decrypter. Подробнее об этом интересном процессе можешь почитать тут.

Спустя два часа после начала конвертирования ESD-файла ISO-образ был успешно создан и записан с помощью утилиты WinSetupFromUSB на флешку. Установка прошла без проблем, и наконец у автора была Windows 10 Build 14316.

INFO


Если хочешь, чтобы WSL заработал, необходимо установить английский языковой пакет для системы, а также выбрать английский в качестве языка по умолчанию. Иначе WSL установится, но не запустится!
Скачивание Ubuntu из Windows Store
Скачивание Ubuntu из Windows Store

Далее активируешь доступную для участников Windows Insider функцию установки расширенных обновлений System Settings → Advanced Windows Update.

Включение Windows Insider
Включение Windows Insider

Переводишь систему на максимальный уровень оперативности доставки новых обновлений (the fast ring), переместив ползунок в крайне правое положение.

Нам нужна только свежатинка!
Нам нужна только свежатинка!

Включаешь режим разработчика (developer mode).

Теперь мы разработчики
Теперь мы разработчики

Инициируешь проверку наличия обновлений, устанавливаешь все доступные обновления и перезагружаешь систему.

Установка обновлений займет много времени
Установка обновлений займет много времени

После перезагрузки включаешь опцию Windows Subsystem for Linux (Beta). Для этого на панели задач Windows нажимаешь кнопку поиска и вводишь windows features.

Linux в Windows — это не баг, это фича
Linux в Windows — это не баг, это фича

Второй раз перезагружаешь систему. В меню Stаrt набираешь bash, выполняешь bash.exe, соглашаешься с правилами использования сервиса, ждешь окончания загрузки компонентов Ubuntu и получаешь традиционное приглашение командной строки Ubuntu с большинством основных утилит.

Linux в Windows — это не баг, это фича
Linux в Windows — это не баг, это фича
Linux в Windows — это не баг, это фича
Linux в Windows — это не баг, это фича
Linux в Windows — это не баг, это фича
Linux в Windows — это не баг, это фича

Для использования традиционного для Ubuntu шрифта в консоли загружаешь шрифт с
сайта, извлекаешь из zip-архива UbuntuMono-R.ttf и устанавливаешь его через двойной клик в проводнике. Далее меняешь настройки в реестре, установив параметр
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont в значение Ubuntu Mono. В настройках консоли выбираем шрифт Ubuntu.

Шрифт Ubuntu выглядит более привычным и красивым, чем Lucidia Console
Шрифт Ubuntu выглядит более привычным и красивым, чем Lucidia Console

P. S. Проделав все описанное, можешь вернуть русский язык как основной в системе.

 

Как это работает?

Спойлер: пока не очень хорошо и тормозит.

Как уже говорилось ранее, для запуска WSL после установки необходимо запустить консоль Windows — cmd, набрать bash, и перед тобой откроется привычный терминал Linux. Однако автор этой статьи заметил, что скорость работы приложений Linux несколько ниже, чем приложений Windows. Из пользовательских программ установились и запустились Midnight Commander, Finch (форк Pidgin, использующий в работе библиотеку ncurses), top и htop. Уровень торможения рос прямо пропорционально сложности приложения. Можно с уверенностью сказать, что WSL пока не готов для повседневного использования даже разработчиками. Это, скорее, экспериментальное нечто, позволяющее опробовать возможности bash в Windows. К тому же после нескольких дней активного использования WSL приказала долго жить — попросту не запускалась или начинала дико тормозить всю систему.

WARNING


Важно! Все действия в WSL выполняются исключительно от рута!

Решение было найдено в интернете. Чтобы переустановить/сбросить/удалить WSL, нужно в терминале Windows (cmd) ввести всего две команды:

# lxrun /uninstall /full -- полностью удаляет WSL
# lxrun /install -- устанавливает WSL заново
Удаление и дальнейшая переустановка занимают около получаса
Удаление и дальнейшая переустановка занимают около получаса

Автору было интересно, насколько быстро и корректно проходят всевозможные линуксовые тесты.

 

Проверка на вшивость

Итак, тесты. Большинство тестов, использованных автором, были взяты с сайта Arch Linux.

Первым бенчмарком, призванным проверить скорость работы WSL, должен был стать interbench, но он не установился, поскольку его нет в репозиториях Ubuntu. Поэтому таковым стала HardInfo — утилита, показывающая всю исчерпывающую информацию об аппаратной составляющей ПК. В целом тест проходит нормально, без проблем. Но очень медленно.

HardInfo в деле
HardInfo в деле

Вторым планировался UnixBench. Однако и он не пошел. Выдал ошибку. Остальные бенчмарки также благополучно не запустились.

Поэтому автор сосредоточился на установке и тестировании консольных приложений Linux. Первым был запущен и установлен Finch — консольный аналог Pidgin на основе библиотеки ncurses. Приложение на удивление быстро и без проблем установилось и запустилось. Удалось даже настроить подключение к сети ICQ и пообщаться с парой человек из числа тех, кто до сих пор использует «аську». Единственная проблема в том, что WSL пока не поддерживает кириллические шрифты. Точнее, ввод на кириллице. Поэтому пришлось набирать текст на транслите. Добро пожаловать в 1996 год!

Так выглядит Finch для Windows
Так выглядит Finch для Windows

Следующим был протестирован бессмертный Midnight Commander. Этот представитель линуксовых консольных приложений, тоже созданный на основе библиотеки ncurses, установился также без проблем. И работал. Но очень, очень, очень медленно. Операции копирования-перемещения выполнялись по полчаса на файл размером 200 Мбайт (видео). Интерфейс был жутко неотзывчивым. Хочется верить, что это всего лишь баги тестовой версии и к полноценному релизу все будет исправлено.

Старый добрый Midnight Commander
Старый добрый Midnight Commander

Остальные утилиты работали более-менее сносно. А благодаря хорошему фидбэку Microsoft поиск и устранение багов идет гораздо быстрее, чем раньше. Почти все штатные утилиты Linux, вроде time или cal, работают исправно, но тоже с еле заметным торможением. Все же это не полноценная среда Linux. Было бы неплохо увидеть поддержку графики, но этого, к сожалению, не планируется.

 

Что было до Windows Subsystem for Linux?

Были попытки внедрить прослойку Linux в среду Windows — с переменным успехом на протяжении уже 21 года. Самая знаменитая, безусловно, Cygwin — UNIX-подобная среда и интерфейс командной строки для Microsoft Windows. Cygwin обеспечивает тесную интеграцию приложений, данных и ресурсов Windows с приложениями, данными и ресурсами UNIX-подобной среды. Из среды Cygwin можно запускать обычные приложения Linux, также можно использовать инструменты Cygwin из Windows. Однако в отличие от WSL это, скорее, все же эмуляция или даже песочница для кода. А не прослойка, транслирующая системные вызовы Windows и Linux.

Изначально Cygwin разрабатывала компания Cygnus Solutions, которую позднее приобрела Red Hat. Это свободное ПО, опубликованное под GNU General Public License версии 2. В настоящее время Cygwin разрабатывается сотрудниками Red Hat, NetApp и множеством добровольцев. Подобные функциональные возможности предлагала также и Microsoft в своем пакете Services for UNIX, включающем в себя подсистему Interix, и Subsystem for UNIX-based Applications (в более новых версиях).

Cygwin представляет собой инструмент для портирования ПО UNIX в Windows и библиотеку, которая реализует интерфейс прикладного программирования POSIX на основе системных вызовов Win32. Кроме того, Cygwin включает в себя инструменты разработки GNU для выполнения основных задач программирования, а также и некоторые прикладные программы, эквивалентные базовым программам UNIX. В 2001 году в Cygwin был включен пакет X Window System. Кроме того, Cygwin содержит библиотеку MinGW, позволяющую работать с библиотекой Microsoft MSVCRT (Windows API); библиотека MinGW менее требовательна к объему оперативной и дисковой памяти, распространяется под более свободной лицензией и может работать с любым программным обеспечением, но функциональные возможности спецификации POSIX реализованы в ней не так полно, как в Cygwin.

Работа над проектом Cygwin была начата в 1995 году Стивом Чемберленом (Steve Chamberlain), программистом Cygnus, заметившим, что Windows NT и Windows 95 используют в качестве формата объектных файлов формат COFF. К тому времени в GNU уже была реализована поддержка архитектуры x86, COFF, а также библиотека языка C newlib; таким образом, по крайней мере теоретически, не представляло затруднений получить из GCC кросс-компилятор, который бы создавал исполняемые файлы Windows. Это оказалось несложным и на практике. Вскоре появился прототип.

Следующий шаг — заставить компилятор работать в Windows, но для этого была необходима эмуляция многих функций UNIX: к примеру, должен работать скрипт GNU configure. Этот скрипт нуждается в оболочке типа bash, которая, в свою очередь, требует наличия стандартных потоков ввода-вывода и системного вызова fork. Windows располагает подобными функциональными возможностями, и библиотека Cygwin лишь транслирует вызовы, исходящие от программ, управляя определенными видами данных, такими как файловые дескрипторы.

В 1996 году к проекту Cygwin присоединились и другие программисты, так как стало очевидным, что Cygwin сделает возможным использование инструментов Cygnus на системах с Windows (до этого намечалось использовать DJGPP). Этот вариант был особенно привлекательным, ведь кросс-компиляция могла бы производиться в трех направлениях: можно было использовать мощную станцию Sun для сборки Windows-кросс-компилятора MIPS, что позволяло значительно экономить время. С 1998 года Cygnus предлагает пакет Cygwin в качестве самостоятельного продукта.

Стоит заметить, что наработки Cygwin были бы весьма полезны разработчикам WSL. К примеру, для включения поддержки графического режима.

 

Итог

Через неделю мучений и экспериментов автор статьи получил наполовину работоспособное окружение Linux прямо поверх Windows 10. Что тут можно сказать? Идея очень даже хорошая. Простому смертному пользователю оно, может быть, и ни к чему, а вот разработчики, при условии, что задумка будет доведена до ума, действительно смогут получить новый мощный инструмент для работы. Ждем с нетерпением, когда выйдет первый релиз Microsoft GNU/Linux.

1 комментарий

  1. Аватар

    assp1r1n3

    02.07.2016 в 18:30

    >Ждем с нетерпением, когда выйдет первый релиз Microsoft GNU/Linux.
    Сплюнь!

Оставить мнение