После написания автором этих строк предыдущей статьи о Windows Subsystem for Linux прошло больше полугода. За это время Microsoft успела выпустить первое крупное обновление Windows 10 — Anniversary Update 1607, в котором все нововведения, включая WSL, теперь доступны любому установившему это обновление пользователю. WSL стала гораздо более проработанной и, пожалуй, «цельной».

По сравнению со сборкой Windows 10 14316, в которой впервые появилась подсистема Linux, в Windows 10 Anniversary Update подсистема выглядит вполне работоспособной и применимой на практике (настолько, насколько это возможно на данном этапе). Стабильность работы не вызывает нареканий. Забегая вперед, отмечу самое главное — в WSL появилась возможность запуска графического окружения и других GUI-программ (из числа DE это пока что Unity и Xfce), чего не было в предыдущих сборках Windows 10. Пока это было сделано неофициально, отдельными энтузиастами-линуксоидами, а не разработчиками WSL, но есть надежда, что официальная поддержка запуска полноценного Linux GUI в WSL лишь дело времени.

Unity поверх Windows 10. И это не эмулятор
Unity поверх Windows 10. И это не эмулятор

WARNING

Помни: сначала WSL необходимо установить. Из коробки подсистема не заработает.

 

WSL. Полгода спустя

Как я уже сказал, за последние полгода разработчики WSL успели основательно доработать эту подсистему, что упростило ее установку и настройку. А сама Microsoft успела стать «платиновым» членом Linux Foundation. Лет пятнадцать назад о таком нельзя было даже мечтать. В своем новом качестве Microsoft обязалась поддерживать все инициативы Linux Foundation в области открытого ПО и Linux и ежегодно перечислять в фонд 500 тысяч долларов США. Это, безусловно, большое достижение. В первую очередь для всего сообщества FOSS (free/libre and open-source software — бесплатное/свободное и открытое программное обеспечение). Через пятнадцать лет после того, как Стив Балмер назвал Linux раковой опухолью, новое руководство Microsoft оказалось куда более дальновидным и разумным.

Но вернемся к Windows Subsystem for Linux. Установка собственно Windows 10 проходит быстро и просто (почти как установка Ubuntu), и нет нужды описывать ее нашему читателю. Ты можешь выбрать либо обновление из предыдущей версии Windows 10, что займет в разы больше времени и сил, либо удалить предыдущую версию и установить систему с нуля (что я и сделал, и не из лени, а чистоты эксперимента для, чтобы система была, что называется, девственно-чистой). Автор этих строк вот уже больше года является бета-тестером Windows 10, и новые версии доступны ему бесплатно (от слова совсем). Если ты тоже бета-тестер, то у тебя должна быть лицензия на новые бета-релизы Windows 10.

В последнюю версию Windows, Anniversary Update 1607 — «юбилейное обновление» (непонятно, правда, что за юбилей у MS), WSL включается по умолчанию. Надо лишь активировать «Режим разработчика» в разделе «Обновление и безопасность», дождаться, пока система загрузит так называемый пакет разработчика, и перезагрузить компьютер. После чего запустить инструмент «Включение и отключение компонентов Windows», где выбрать пункт «Подсистема Linux для Windows...». И снова перезагрузить компьютер.

В русской версии Windows 10 все немного иначе, но общий смысл такой же
В русской версии Windows 10 все немного иначе, но общий смысл такой же

Установка bash в WSL проходит без проблем (хотя и не так быстро, как хотелось бы). Мне не удалось с первого раза установить Unity: инсталлятор постоянно ругался на битые пакеты. Как оказалось, сначала нужно было обновить систему через штатный менеджер пакетов Ubuntu — APT. После получения обновлений установка пошла как по маслу и... продлилась на моем тестовом Dell Inspiron (не самый старый ноутбук, хотя и не топовый) около девяти с половиной часов. Почему — тайна сия мне неведома. Однако я заметил, что каждый Ubuntu-пакет устанавливался раза в три-четыре дольше, чем в «чистой» Ubuntu.

Инсталляция bash сводится к одной команде в консоли Windows 10
Инсталляция bash сводится к одной команде в консоли Windows 10

INFO

Перед установкой и включением WSL обязательно установи ВСЕ обновления Windows 10. Иначе могут возникнуть проблемы!

 

X Window, Unity и все-все-все

Установка bash — это лишь полдела. Дальше начинается самое интересное — установка и настройка X-сервера в Windows и запуск графических приложений, в том числе и Unity.

Изначально Canonical и Microsoft добавили возможность запуска Ubuntu поверх Windows 10 для того, чтобы предоставить системным администраторам и разработчикам возможность использования bash и других Linux-инструментов и утилит, таких как make, gawk и grep, непосредственно в Windows. Пользователи Linux, как истинные хакеры (в хорошем смысле этого слова), не заставили себя долго ждать и немедленно приступили к работе над запуском графических окружений рабочего стола в WSL. И угадай, что? Они сделали это. Гватемальский программист, зарегистрированный на GitHub под ником Guerra24, смог (цитата) «запустить Unity (рабочее окружение по умолчанию в Ubuntu) внутри WSL. Это говорит о том, что прослойка от Microsoft, в принципе, вполне способна запускать любые окружения рабочего стола».

Задача эта нетривиальная, и то, что в итоге получится, трудно назвать полноценным рабочим столом Linux, но это только начало. Если ты хочешь использовать рабочий стол Ubuntu в Windows 10 в практических целях, то лучше воспользуйся любой из доступных в данный момент виртуальных машин, например VirtualBox от Oracle. А вот если ты просто хочешь повеселиться и прокачать свои навыки программирования для рабочих столов, то можешь попробовать запустить «нативный» Linux прямо в Windows 10. Для запуска Unity в WSL тебе для начала нужно установить (любым доступным способом, желательно легальным!) версию Windows 10 Anniversary Update за номером 1607. Причем не «домашнюю» версию, а самую что ни на есть «профессиональную», а то и вовсе «корпоративную». После установки обязательно обнови систему и двигайся дальше.

После двух (иногда трех) перезагрузок в процессе обновления, чтобы установить bash, необходимо запустить командную строку Windows (Win + R, ввести cmd — и будет тебе счастье в виде «консоли» Windows) и ввести... да, именно так: bash. Будет предложено согласиться с условиями обслуживания (обязательно прими их, выбора у тебя нет!) и загрузить Ubuntu. На этом этапе тебе нужно просто нажать клавишу Y. Объем загружаемых файлов будет не многим более одного гигабайта. Так что, если у тебя медленный интернет (да, бывает и такое), приготовься ждать. Затем начнется установка, которая, в свою очередь, тоже займет некоторое время, зависящее от производительности компьютера. И в конце всего этого ты попадешь в пространство пользователя (пользовательское окружение) Ubuntu 14.04, работающее поверх WSL.

Технически ты запустишь не Linux. Оно может выглядеть как Linux, но это не Linux. Дело в том, что пользовательское окружение (тот самый bash и прочие) работает не поверх ядра Linux, а внутри прослойки WSL. WSL использует специальный API и набор инструкций, для того чтобы все выглядело как в Linux, но все же это не то же самое. В основе всего этого все еще стоит ядро Windows NT. Это важно понимать, чтобы разобраться в том, как запускается и работает Unity в WSL.

После установки Ubuntu обязательно обнови ее, введя стандартные для этого команды:

# apt-get update
# apt-get upgrade
VcXsrv — X-сервер для Windows
VcXsrv — X-сервер для Windows

Далее нужно снова вернуться в Windows 10 и установить совместимый с ней X-сервер. Для нашего эксперимента идеально подойдет VcXsrv. Его собрата Xming лучше не использовать, так как с ним, по неизвестной мне причине, возникает проблема: при попытке запустить любое графическое приложение для Linux все просто вылетает, в том числе и консоль Windows. Но это не все. Нужно сказать Ubuntu о том, что следует использовать именно X-сервер VcXsrv. Для этого введи в bash команду

# DISPLAY =: 0.0

Теперь любое графическое приложение Linux будет работать в Windows 10. Но только до закрытия bash. Чтобы WSL работала с графикой Linux все время, автоматически выбирая нужный для работы X-сервер, просто добавь указанную строку в конец конфигурационного файла bash (~/.bashrc):

# echo "export DISPLAY=:0.0" >> ~/.bashrc

VcXsrv — X-clock в Windows. Магия!
VcXsrv — X-clock в Windows. Магия!

Firefox для Ubutnu работает отлично, почти не тормозит!
Firefox для Ubutnu работает отлично, почти не тормозит!

После этого ты сможешь запускать любые графические приложения Linux, например Firefox или любое DE. Однако они будут работать не так, как в Linux, падая каждую минуту, а некоторые, например Unity, и вовсе не запустятся. Проблема тут в том, что WSL не содержит в себе кода поддержки сокетов (универсальная концепция обмена данными между процессами в UNIX-подобных системах, подробности тут).

Для имплементации концепции сокетов графические окружения Linux по умолчанию используют систему обмена сообщениями D-bus. Большинство графических приложений Linux не смогут даже запуститься без D-bus, не то что работать. Но WSL, к счастью, поддерживает сетевой протокол TCP, что и подвигло пользователя Reddit.com под ником ShaRose найти способ заставить D-bus использовать вместо сокетов протокол TCP. Решение не идеальное, но оно работает. Чтобы «прикрутить» D-bus к TCP, введи в bash:

# sed -i 's/<listen>.*</listen>/<listen>tcp:host=localhost,port=0</listen>/' /etc/dbus-1/session.conf
Самое главное — правильно указать дисплей!
Самое главное — правильно указать дисплей!

Этой командой ты изменишь конфигурационный файл D-bus так, чтобы отныне он использовал TCP вместо сокетов. В этом тебе поможет старый добрый потоковый редактор sed. Что в итоге? Приложения, требующие для своей работы D-bus, теперь запускаются и в WSL.
Следующий шаг — установка графических приложений Linux. Для начала сделай в консоли WSL вот это:

# apt-get install ubuntu-desktop
# apt-get install unity
# apt-get install compiz-core
# apt-get install compizconfig-settings-manager
Долгая установка Unity...
Долгая установка Unity...

Первая команда установит основные графические компоненты Ubuntu, в том числе программы для конечного пользователя, такие как LibreOffice. Следующая команда устанавливает рабочий стол Unity. Две остальные команды поставят композитный оконный менеджер Compiz, использующий OpenGL, и графический фронтенд к нему. Именно его и нужно будет правильно настроить на следующем этапе.

Перед тем как начать пользоваться окружением рабочего стола Unity в Windows 10, тебе необходимо правильно настроить CompizConfig Settings Manager (CCSM). После установки всех этих приложений запусти из интерфейса bash CCSM и активируй в нем следующие плагины (все должно быть ИМЕННО так, как на скриншоте!):

Настройки Compiz
Настройки Compiz
  1. В секции General (Общие):

    • Commands (Команды)
    • Composite
    • Copy to texture
    • OpenGL
  2. В секции Desktop (Рабочий стол):

    • Ubuntu Unity Plugin
  3. В секции Utility (Утилиты):

    • Compiz Library Toolbox
  4. В секции Window Management (Управление окнами):

    • Place Windows (Переместить окно)
    • Resize Window (Изменение размеров окна)
    • Scale (Масштабировать)
    • Snapping Windows
  5. В секции Image Loading (Загрузка изображения):
    • PNG

Далее, чтобы все наконец заработало, закрой CCSM и запусти Compiz из bash командой

$ compiz

Примерно через минуту ты увидишь запущенную оболочку Unity.

Unity во всей красе
Unity во всей красе

Отмечу несколько ключевых моментов:

  1. Если ты и правда хочешь запускать иксовые приложения в WSL, устанавливай в качестве X-сервера VcXsrv, а не Xming. Опытным путем доказано, что Xming не желает нормально работать с WSL.
  2. После установки CCSM необходимо настроить его именно так, как показано на картинке (то есть включить то, что отмечено галочками, и выключить все остальное). Только тогда Unity со скрипом, не с первой попытки, но запустится.
  3. Лучше не устанавливать проприетарные драйверы ATI для Ubuntu внутри WSL. Это приводит к полному зависанию всей системы (в том числе и Windows 10) и влечет за собой тотальную переустановку WSL со всеми вытекающими.
  4. Огорчу тебя: не стоит возлагать на получившийся костыль большие надежды. Нормально ЭТО работать не будет. Но на моей тестовой машине Unity внутри WSL работала вполне сносно. Субъективно — чуть медленнее, чем в нативном Linux. Быть может, в будущем кто-нибудь доведет все это дело до ума. И от Unity в WSL таки будет польза.

Что же получится в итоге, после стольких мучений? А в итоге (теоретически, так как на практике выходит пока просто интересный экспериментальный способ запуска Unity и прочих DE внутри WSL) мы получим среду для тестирования Linux-приложений прямо внутри Windows. И Unity, работающую поверх Windows. Конечно, скорость работы и отзывчивость ее не такие, как на реальном железе, но все же быстрее, чем в виртуальной машине. Многие приложения, например Google Chrome или Pidgin, просто не запускаются. А вот Firefox, файловый менеджер, магазин приложений и прочие системные утилиты Ubuntu работают на ура (чуть медленней, чем в «настоящей» Ubuntu, но работают!).


WARNING

Установить WSL можно только в версиях Windows 10 «Профессиональная» и «Корпоративная». «Домашняя» не годится.

 

История ненависти и любви

Издавна Microsoft питала особые чувства к Linux в частности и ко всему миру FOSS в целом. И чувства эти, надо сказать, как правило, были не самыми теплыми — начиная со знаменитого «Открытого письма любителям» Билла Гейтса, написанного в далеком 1976 году (подробности в Вики), где автор обвинял пользователей персональных компьютеров (которые в те доисторические времена были и пользователями, и программистами, и хакерами!) чуть ли не в воровстве его интеллектуальной собственности (того самого бейсика), и заканчивая гневными высказываниями Стива Балмера в 2001 году по поводу Linux: «Linux — это раковая опухоль, которая пожирает всю интеллектуальную собственность, к которой прикасается. Согласно правилам лицензии, если вы используете какие-либо компоненты программного обеспечения с открытым исходным кодом, вы должны открыть код всего имеющегося у вас программного обеспечения».

Спустя пятнадцать лет, однако, Стив смягчил свою позицию: в марте 2016 года бывший генеральный директор Microsoft заявил, что рад видеть, что новый глава компании Сатья Наделла принял решение активнее поддерживать сообщество разработчиков открытого ПО, и «с удовольствием» (loved) наблюдал за анонсом MS SQL Sever для Linux. Во многом такой разворот бывшего гиганта софтверной индустрии — это заслуга сообщества FOSS. Тех тысяч и тысяч программистов, дизайнеров, майнтейнеров, FOSS-активистов и просто неравнодушных людей, которые годами «точили камень, аки вода».

Еще в середине 2000-х годов MS начала менять свою позицию в отношении FOSS. И это не пустые слова, а дела. Даром что ли не так давно Microsoft получила статус «платинового» участника Linux Foundation — главной организации, курирующей разработку Linux, высказала приверженность идеям разработки FOSS-сообщества. Ну и само существование WSL тому подтверждение. Спустя сорок с небольшим лет мы наблюдем, как некогда непримиримые идеологические (и не только идеологические) противники начали работать бок о бок, сообща делая мир лучше. Ну или хотя бы пытаться.

Спустя пятнадцать лет Стив Балмер, по сути, признал свою неправоту
Спустя пятнадцать лет Стив Балмер, по сути, признал свою неправоту

То самое письмо Билла Гейтса в защиту копирайта
То самое письмо Билла Гейтса в защиту копирайта

На данный момент апогеем такого симбиоза можно считать Windows Subsystem for Linux. Да, прослойка пока далека от совершенства. Но направление выбрано верное. И той и другой стороной.

 

«Дайте ей шанс!»

«Дайте Windows Subsystem for Linux шанс, и вы будете поражены», — говорят в Microsoft. Microsoft наконец-то признала потенциал мира FOSS в целом и Linux в частности. И каждое событие становится для Microsoft уроком, позволяющим оценить свои возможности и расширить свою деятельность в этой области программирования.

Совсем недавно, 16 ноября прошлого года, на сайте Microsoft для разработчиков появился пост с видеороликом под названием «Улучшения в bash на Windows и консоли Windows», в котором старший программист Microsoft Рич Тёрнер призывает Linux-разработчиков взглянуть на то, что Windows 10 может им предложить. «Установите экземпляр сборки Windows 10 для разработчиков (Windows 10 Insider Preview Build) и исполняйте свой код, используйте привычные вам инструменты, размещайте свои сайты на Apache, получайте доступ к своим базам данных MySQL непосредственно из вашего Java-кода», — говорит Тёрнер.

Новое, дружелюбное лицо Microsoft — Рич Тёрнер
Новое, дружелюбное лицо Microsoft — Рич Тёрнер

Тёрнер особо отметил, что WSL была создана специально для разработчиков с целью предоставить последним все необходимые инструменты разработки для Linux. И все это, по его словам, без потери новшеств и преимуществ Windows 10. «Независимо от того, какие инструменты вы обычно используете в Linux для создания приложений, будь то Go, Erlang или C, дайте шанс WSL, а самое главное, отправляйте нам отчеты об ошибках. Эти отчеты действительно делают нашу жизнь намного проще, позволяя нам создавать продукт, который мы все можем использовать, чтобы работать более плодотворно», — продолжил он.

Разумеется, Microsoft сама заинтересована в улучшении WSL, и Тёрнер утверждает, что конечная цель всего этого состоит в том, чтобы сделать эту подсистему полностью совместимой со всеми инструментами разработки для Linux. И, по их словам, любой, кто перейдет на Windows 10, будет чувствовать себя так же комфортно, как и в Linux. А это, в свою очередь, обеспечит Microsoft приток новых пользователей. «Пока мы только в самом начале. Нам предстоит долгий путь. В данный момент нельзя сказать, что эта штука действительно полностью совместима с Linux-инструментами и готова к полноценному использованию вами», — сказал он. Это заявление стало для многих людей сюрпризом. Однако, как уже говорилось, Сатья Наделла, нынешний глава софтверного гиганта, применит в отношении FOSS и Linux иной подход, рассматривая открытый и свободный код в качестве источника дохода и новых возможностей.

Отдельно отмечу, что Рич Тёрнер в своей речи не призывает разработчиков отказаться от Linux и нисколько не умаляет преимущества этой ОС, а лишь просит дать WSL шанс.

 

Промежуточные итоги

Что хотелось бы сказать в связи со всем этим? Во-первых, Microsoft уже не та. Не та монструозная корпорация зла. С каждым годом прибыли компании от продажи ПО падают, рынок мобильных устройств, по сути, отдан на откуп Google и Apple, а пользователи (как корпоративные, так и домашние) всё чаще стараются сэкономить на покупке софта. И компании приходится адаптироваться к новым условиям. Даже «заклятый друг» MS — Apple открывает исходники своих продуктов один за другим. Во-вторых, это все очень хорошо. В первую очередь для нас, простых пользователей.

В следующей статье про Windows Subsystem for Linux мы проведем несколько тестов на производительность и попробуем наконец WSL на практике, установив на нее веб-сервер Apache и запустив локальный хостинг сайта. А пока можно промежуточно резюмировать, что эксперимент удался.

6 комментариев

  1. Аватар

    witaha

    03.02.2017 в 13:13

    Пробовал как-то сетапить это чудо на свою рабочую лошадку в качестве эксперимента, конкретных замеров не проводил по производительности, но хост который я развернул на этой убунте работал на много лучше чем на виндовой тачке, но все-равно проигрывал Обычной линукс тачке. И точно утверждать не буду, но кажется этот путь мне еще не подошел из-за кривости создания симлинков в том проекте, который я разворачивал, который был заточен под Линукс.
    А так в целом вполне ничего, но еще есть минус — нужно понимать, что это не совсем ВиртуалБокс и у вас не получится наплодить таких машинок уйму, либо я когда с этой штукой разбирался, то плохо разобрался)

  2. Аватар

    d13ma

    04.02.2017 в 01:56

    В статье ни слова о том, в каких версиях винды есть этот пункт про Линукс бета, а автор мог бы почитать интернеты, что например в LTSB версиях нет такого апдейта как аниверсари и нет возможности вообще заранить терминал убунту.

  3. Аватар

    yurchenko

    05.02.2017 в 22:51

  4. Аватар

    Outz

    06.02.2017 в 09:11

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

  5. Аватар

    rare_beard

    10.05.2017 в 22:42

    Ещё со времён Ubuntu 12.10, с её привязкой к Amazon, стало понятно, что Шаттлворт не так прост как кажется. Теперь же можно с уверенностью сказан, что он — самая натуральная «крыса».

  6. Аватар

    rzet777

    07.03.2018 в 08:00

    Не запускается(
    Compiz (opengl) — Fatal: Root visual is not a double buffered GL visual
    Segmentation fault (core dumped)
    Все облазил ответа не нашел. Может тут кто решение скажет?

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