TL;DR Почему на Хабре нет статей про то, как человек вполне доволен наличием WSL и активно ею пользуется? Неужели я один такой? Значит, пора добавить воды писать статью!
Дисклеймеры
Общий дисклеймер • О личности автора • Отказ от ответственности • Об использовании ChatGPT
Аннотация
Заметил, что на Хабре не сильно-то жалуют Windows Subsystem for Linux. Претензии поначалу были к наименованию данной подсистемы (потому что Linux Subsystem for Windows поначалу звучит даже логичнее), а потом шли поминки по-настоящему нативной WSL 1, затем просто лёгкий бугурт в комментариях насчет того, что WSL 2 - просто виртуалка! Что́ следует из этого тезиса, я так и не понял, потому что вот уже седьмой год пользуюсь WSL ежедневно, и жить без него не могу! Кто-то описал короткую заметку, что пользуется WSL, а я со своей стороны добавлю воды к этой теме.
В этой статье расскажу, как я обустроился в этом мире тотальной гиперконвергенции Linux и Windows, созданным Microsoft.
Введение
WSL сейчас переживает золотые времена: любой популярный дистрибутив можно поставить из Microsoft Store, а саму подсистему запустить можно одной командой либо скачав её опять же с магазина. Если какого-то дистрибутива не хватает - создаёшь. WSL интегрирована с хостовой Виндой - можно лезть друг к другу в директории как к себе домой, это работает в обе стороны. systemd
теперь есть, опять же. Поддержка Docker максимально полная. У дистрибутивов Linux так же есть доступ к видеокарте, можно нейронки гонять. За счет возможности запуска X-Server есть возможность запустить графические Linux-приложения в Windows - да, окна из одной ОС будут сосуществовать с окнами хостовой операционки. Фантастика!
Зачем жить, если нет WSL?
Для начала вопрос для себя: зачем тебе вообще нужен Linux при живой-то Windows, если ты очень высокоуровневая соевая фронтенд-макака, обитающая на высоте двух сотен тысяч вызовов в стектрейсе? Безотносительно должности, конечно. Дело касается исключительно домашнего ИТ-быта с элементами пет-проектов. А вот зачем мне это надо:
Админить дешевые VPS'ки: набрал я их с пару десятков по всему миру, а бросать жалко, бекенды для Телеграм-ботов, опять же;
Data Science. Вот эти все плейбуки Jupyter и т.д.;
По идее, это относится к первому пункту, но он достаточно крупный и вылился в отдельное направление: изучение Ansible, у которого есть целая галактика!
Изучение K8s, до которого я так и не дошел за 8 лет... где же я был эти 8 лет?
Бонусом научился базовым основам Linux, само собой: смена окружения, маршрутизация, правка конфигов, systemd
, скриптинг на Bash (от которого я стараюсь отказываться в пользу кросс-платформенного и более организованного костылеписания на PowerShell). Куда-то ниже пятого-шестого уровня OSI и ближе к ядру подходить не буду - интерес к "пингвину" у меня чисто утилитарный.
Дальше подробнее о каждом пункте:
Самое простое - админить VPS'ки напрямую.
ssh <user>@<host>
и вперёд! За счет выпуска на Винду первоклассного Windows Terminal сейчас это удобно и быстро, как никогда:Win+R
, вводwt
(а если Windows Terminal стоит по умолчанию, то можно сразу набрать любимую оболочку, например,pwsh
), затем делай через WSL то, что хотел. Намного удобнее, чем запускать Putty или пользоваться OpenSSH на Винде (который еще где-то в компонентах включить надо), и в разы лучше, чем перезагружать Windows и логиниться в Linux;Весь комплект из области Data Science у меня полностью в WSL: Anaconda, Jupyter Notebook, всё окружение для LaTeX. Подключаюсь через VS Code с расширением WSL, и работаю дальше в нём;
Ansible. Несмотря на наличие поддержки Windows как в режиме сервера, так и клиента (у Ansible эти понятия максимально размыты), я рекомендую пользоваться именно Linux-версией. В моём случае - WSL. И работает оно прекрасно! Всё опять же благодаря VS Code и его возможности работать в подсистеме для Linux, как "у себя дома" в Windows;
До "кубера" я пока не дошел. Но, наверное, кластер minikube всё-таки подниму на отдельной машине, так как мощности текущего ПК потихоньку исчерпываются.
Итак, именно в таких задачах WSL на 100% заменит "пингвина" на голом железе, и уж тем более справится лучше самой Windows.
В комментариях можно подискутировать: человек сообщает, что́ он делает у себя на домашнем ПК с помощью bare-metal Linux - и можно придумать, может ли он то же самое сделать через WSL. Естественно, никого принуждать и причинять добро не надо - сила привычек и сложившегося рабочего окружения в том, что человек явно быстрее всё сделает в своем родном мирке, а не будучи пересаженным на WSL.
Стратегическая роль WSL
Доля Windows имеет тенденцию к снижению, судя по данным аналитических агенств. Microsoft, в свою очередь, за последние 11 лет избавилась от почти всех идеологических оков и корпоративных предрассудков. Не знаю, кто додумался именно до таких стратегических шагов, но вполне логичным лозунгом является "догнать и перегнать Америку конкурентов!". Вкупе с постулатом "не можешь победить - возглавь", которую придумал в стародавние времена какой-то болванчик из Европы, это всё вылилось в идею "а давайте мы добавим Linux в Windows!". Не удивлюсь, если соответствующий Merge request в их системе контроля версий висел еще во времена Стива Балмера.
И это, видимо, работает - как минимум, одного такого человека они удержали на Windows. Еще одним косвенным признаком того, что такая стратегия помогает - последующий за релизом WSL выпуск подсистемы Windows для Android. Не стали бы они это делать, если WSL и WSA так или иначе вредили бы ОС. Что дальше? WSfBSD? Who knows...
Выводы
WSL меня не ограничивает - от слова совсем. Потребности элементарно не подошли к краю возможностей подсистемы Windows для Linux. Однозначно рекомендую WSL как default-решение для совмещения "пингвина" и "окон".
Есть, естественно, пограничные (не обязательно психически) случаи, когда нужен именно bare-metal хост на каком-нибудь из дистрибутивов пингвина:
Работа с ядром Linux - написание драйверов, взаимодействие с eBPF и т. д.;
Работа с железом. Насколько мне известно, проброс железа в виртуалку WSL - это очень извилистый путь, потому что у технологии Hyper-V другая цель -
управлять поездомон позиционируется по-другому, оттого аппаратная поддержка хоста у гипервизора очень ограниченная.
Если есть другие пограничные случаи, когда WSL пасует, пишите в комментарии.
Альтернативы?
С другой стороны, разве я не рассматривал другие варианты организации своего флоу Linux-Windows? Linux сам по себе мне нужен, от него отказываться не вариант! Из альтернатив есть только три с половиной пути самурая:
Пересесть на Ubuntu полностью, Windows-игры и специфический софт запускать через Wine. Самый радикальный и очень технически и морально тяжелый путь. У меня довольно много всё завязано на сервисы от Microsoft. Пусть даже у всех этих сервисов и есть веб-версии, отказ от интеграций нативных программ в ОС, например, OneDrive, вызовет у меня сильный приступ стресса, а затем депрессии (никогда ее не было, но тут-то точно появится!);
Дуалбут Windows-Linux. Во времена, когда Windows 10 неведомым образом затирала GRUB, отчего не грузилась добрая половина дистрибутивов, это тоже не было вариантом;
Линь на отдельной машине, Вынь на своей как основная ОС. Подключение к Линю по RDP. Это был самый надежный вариант, но минусом (а для меня это минус) было минимальное количество интеграций, и скакать с окружения в окружение мне было бы не очень удобно;
Полный отказ от Linux и замена его окружения каким-нибудь Cygwin. Что ж, при условии, что мне надо обучиться основам хотя бы в Ubuntu, этот вариант тоже отметался. Превратиться в скуфидона преждевременно тоже не хотелось бы. Все там будем!
Бонус
Заметили, что на первом скриншоте оболочки Windows и Ubuntu выглядят максимально одинаково, несмотря на то, что у одного исполняется PowerShell, а у второго - Bash?
Конфигурация терминала - отдельный кайф и сугубо личное дело каждого, но иной раз всё-таки лучше рассказать о своём пути самурая. Много раз в рандомных местах интернетов - и на Хабре в том числе - я видел скриншоты с красиво оформленной оболочкой в каком-нибудь окне не менее красивого терминала. На манер таких:
Вот такие:
Выглядит цветасто и не очень натурально, ЕВПОЧЯ. Мне бы такую же примерно тему, но со спокойными акцентными цветами... Я задумался, как же сделать такие же красивости, только единообразно, чтобы одна и та же библиотека с помощью независящего от платформы конфига рисовала один и тот же интерфейс?
Ответ нашелся в первой строчке поисковика: OhMyPosh.
Гайд по установке этого чуда чуть менее тривиален, чем хотелось бы, поэтому я соорудил скрипт для установки OhMyPosh в полуавтоматическом режиме. Скрипт автоматом обходит некоторые ошибки, обновляет профиль PowerShell, устанавливает схему M365Princess и шрифт Caskaydia Cove (на моём скриншоте в самом начале включена именно она) и добавляет конфиг в VS Code и Windows Terminal. Тестировался на Windows 11 полгода назад.
Сейчас я с удовольствием раскатываю OhMyPosh на все свои VPS через Ansible. Доволен!
Комментарии (58)
4umak
15.09.2023 09:31+6А чего про него особо говорить то?) Со второй версии практически прекрасно работает (надо только следить за пожираемым дисковым пространством и иногда по какой-то причине сеть внутри отваливается до перезагрузки всла, но такое всего пару раз ловил за несколько лет)
А так, прекрасный инструмент, просто работает, винда наконец-то стала полноценной рабочей операционной системой для админов
ilyagoz
15.09.2023 09:31+21a. Поставить вторую видеокарту для проброса в виртуалку и запускать Windows-игры и специфический софт в виртуалке. Нет, производительность не теряется. Все выгоды дуалбута без дуалбута.
4umak
15.09.2023 09:31+9А при нынешнем развитии линуксгейминга (славься, габен!), зачастую, даже этого дроча не требуется, можно просто мышевозно кликать в стиме кнопочки и оно всё само будет работать
Vanovsky714
15.09.2023 09:31+4Почему на Хабре нет статей про то, как человек вполне доволен наличием WSL и активно ею пользуется?
Потому что негоже отступать от веры истинной...
(шутка)
mpa4b
15.09.2023 09:31Эта ваша WSL2 зависает намертво если к примеру есть какие-то NFS маунты в /etc/fstab и потом они периодически отваливаются/лагают (или просто если потом хостовую ось несколько раз в гибернацию поуводить). Кончается тем, что какой-то там хостовый процесс начинает жрать процессор, а сам штатный терминал от WSL2 больше ничего не показывает и зависает. Даже `wsl --shutdown` тоже ничего не делает и зависает. Приходится ребутить хост.
Такое же можно словить даже от безобидных юзерспейсных маунтов по sshfs. Доколе?
4umak
15.09.2023 09:31+2Так ведь такое регулярно можно ловить и на обычных линусковых хостах, не думаю, что тут всл как-то сильно отличается.
Вот только то, что не помогает перезапуск всей подсистемы это странно, да
mpa4b
15.09.2023 09:31Когда линукс хостом, то зависания от залипших сетевых маунтов конечно бывают, но они всегда излечимы логином под рутом и далее
umount -f -l <чтонадо>
Вот только то, что не помогает перезапуск всей подсистемы это странно, да
Он не то чтобы не помогает, он прежде всего не происходит (выполнение
wsl --shutdown <имя>
не завершается, ничего другого тоже не происходит). И это притом, что WSL терминал тоже зависает и не даёт рутового доступа к гостевой оси.
SalazarMAX
15.09.2023 09:31Ребутить хост? Ну в самом крайнем случае — прибить процесс wsl в диспетчере задач, но именно с необходимостью ребута ни разу не сталкивался.
Mike-M
15.09.2023 09:31или просто если потом хостовую ось несколько раз в гибернацию поуводить
Режим Hibernate в Windows вообще недотестирован.
Например, через пару-тройку дней при запущенном Firefox начинает подтормаживать мышь.
atshaman
15.09.2023 09:31+1Несмотря на наличие поддержки Windows как в режиме сервера, так и клиента (у Ansible эти понятия максимально размыты), я рекомендую пользоваться именно Linux-версией.
Ээээ... к-к-какого "клиента"?
hurtavy
15.09.2023 09:31+2В альтернативах не указаны другие виртуальные машины, не от микрософт
vassabi
15.09.2023 09:31+2это да. Если бы WSL2 позволял VirtualBox-у работать, я бы на него уже перешел ...
SalazarMAX
15.09.2023 09:31+2У меня одновременно WSL2 и Virtualbox умеют работать, вроде бы давно уже несовместимость починили. Либо о чём вы?
omaxx
15.09.2023 09:31-1кажется начиная с 6й версии VirtualBox отлично работает с hyper-V.... на старых версиях да, они были несовместимы и приходилось выбирать, или -- или...
slonopotamus
15.09.2023 09:31"Кажется" - ключевое слово: https://github.com/MicrosoftDocs/WSL/issues/798
Goupil
15.09.2023 09:31+1Пользуясь wsl2 я столкнулся с тем, что питоновское приложение на нем работает в десятки раз медленее чем непосредственно с виндой. Хотя вроде бы указывалось что wsl2 имеет 95% скорости винды.
tommyangelo27
15.09.2023 09:31+4А вы его запускаете напрямую из WSL2 или из примонтированного каталога?
a1ez
15.09.2023 09:31+8надо запускать приложение ИЗ файловой системы линукс, а не винды.
тогда работает ровно с такой скоростью, как если бы было запущено на нативном линуксе.
Polarisru
15.09.2023 09:31-2Почему на Хабре нет статей про то, как человек вполне доволен наличием WSL и активно ею пользуется?
Наверное потому, что ни на что большее, чем работа внутри системы, WSL не годится? Сам думал написать статью про настройку XWindow для WSL, но потом столкнулся с тем, что оттуда практически нереально достучаться до устройств, подключенных по USB, плюнул и поставил себе виртуальную машину с нормальной убунтой.
Antra
15.09.2023 09:31У меня на NUC стоит Win10 ради того, чтобы не заморчаиваться со Stable Diffusion (несколько инстансов portable Automatic1111) и т.п.
И при этом Docker WSL2 c PowerDNS (для внутренних зон). И развернут Kubernetes "одной галочкой", на котором через ArgoCD задеплоено вот вообще все, что мне нужно. От "системно-мониторинговых" типа VictoriaMetrics, Grafana, до прикладных а-ля Netbox (с тем же PowerDNS интегрированным). Ну т.е. отдельно запущены Redis, PostgreSQL, используемые совместно и другими приложениями. Даже Let's Encrypt с Ingress прекрасно дружит, чтобы для всяких Графан работал https и безо всяких левых портов.
IMHO при наличии реальной потребности - вполне себе такой вариант годится. Не хуже, чем если бы я на той же винде именно отдельную виртуалку поднимал под Кубер.
Если не секрет, что именно не получилось с https://learn.microsoft.com/en-us/windows/wsl/connect-usb ?
Polarisru
15.09.2023 09:31Если не секрет, что именно не получилось?
Наверное, вот это: Windows 11 is recommended for connecting USB devices to a Linux distribution running on WSL 2. However, Windows 10 can be used to connect USB devices by building your own USBIP enabled WSL 2 kernel following the instructions in the USBIPD-WIN project repo
У меня все еще Win10
Bambarambambum
15.09.2023 09:31+6На мой взгляд, WSL + Visual Studio Code это отличное рабочее место для devops инженера. Только так и пользуюсь. Быстро стартует, легко бэкапится, можно пробросить GPU, ограничивается по ресурсам, отличная интеграция с VSC.
LuchS-lynx
15.09.2023 09:31Ставьте Линукс, gpu passthrough и виртуализация спасает в тех случаях когда не обойтись без видеокарты
eldog
15.09.2023 09:31Почему на Хабре нет статей про то, как человек вполне доволен наличием WSL и активно ею пользуется?
Я несколько раз писал такое в комментариях :-) Впрочем, для меня WSL это, в основном, баловство.
fo_otman
15.09.2023 09:31+3Все верно. Сам работаю на Windows + WSL2, вовсю юзаю Docker и счастлив. Удивлен, что автор не упомянул мой кейс - работу через удаленный рабочий стол (RDP). У меня 2 компа - домашний и рабочий. Между ними полчаса езды на трамвае. Иногда бывает нужно вечером или в выходные что-то срочно поделать по работе. Ехать в офис не вариант. Подсоединяюсь к рабочему компу по RDP и работаю. RDP настолько прекрасен, что иногда я забываю, что сижу не на домашнем компе, а через окошко удаленно работаю на рабочем. У Linux в теории тоже есть какой-то свой клиент для удаленной работы, а еще есть TeamViwer и AnyDesk, но они проигрывают начисто нативному виндовому RDP.
WASD1
15.09.2023 09:31+1Почему на Хабре нет статей про то, как человек вполне доволен наличием
WSL и активно ею пользуется? Неужели я один такой? Значит, порадобавить водыписать статью!Так а что про него писать-то?
Я как раз по мануалам с Хабра WSL-2 и настраивал.
Установил, развернул программистское окружение. Gvim внутри винды вполне нативно открывается - приятно (в виндовых аналогах мой ~/.gvimrc подхватывался не идеально).
Чтобы накидать дома какой-то proof of concept впролне работает. Доволен.
temaps
15.09.2023 09:31-1В тенденции импортозамещения, WSL можно использовать как постепенное привыкание к Linux разве что. Хотя времени оставляют уже мало на переход, поэтому проще и его не использовать. 30 сентября протухнут корпоративные лицензии на винду и пересаживаться на отечественные линуксы всё равно придётся резко.
saboteur_kiev
15.09.2023 09:31+2Самое простое - админить VPS'ки напрямую.
ssh <user>@<host>
и вперёд! За счет выпуска на Винду первоклассного Windows Terminal сейчас это удобно и быстро, как никогда:Win+R
, вводwt
(а если Windows Terminal стоит по умолчанию, то можно сразу набрать любимую оболочку, например,pwsh
), затем делай через WSL то, что хотел. Намного удобнее, чем запускать Putty или пользоваться OpenSSH на Винде (который еще где-то в компонентах включить надо), и в разы лучше, чем перезагружать Windows и логиниться в Linux;Простите, но тут вкусовщина и личные предпочтения.
Чем тут неуодбно работать с Putty? жмешь кнопку и он работает. Можно сделать ярлык на быстрой панели, который сразу логинится в нужную сессию. Можно вообще путти агент запустить, и выбираьт нужную сессию двумя кликами мышки.
Если же у вас МНОГО серверов, то вместо putty можно найти какой-нить secureCRT с удобной навигацией по хостам.
putty это просто клиент, им можно и на wsl подключаться, только не спутать порт sshd и wsl
Paul_Arakelyan
15.09.2023 09:31+4" За счет возможности запуска X-Server есть возможность запустить графические Linux-приложения в Windows - да, окна из одной ОС будут сосуществовать с окнами хостовой операционки. Фантастика!" - фантастика в том, чтоб не знать о существовании Х серверов под винду уже лет 25+. Вот под ДОС - не уверен, что есть Х-серверы :).
khajiit
15.09.2023 09:31-5Тоже восхохотавши под лавкою )
У виндузятников лапки, если нет штуки которая сделает за них все — они абсолютно беспомощны. Потому таки да, для них — фантастика.
Antra
15.09.2023 09:31Не понимаю, что вас так удивило в этой фразе.
Для меня лично тоже появление возможности запуска графических приложений из WSL2 стало существенным улучшением по сравнению с WSL.
Не то, чтобы мне это было позарез нужно, но если в эпоху WSL я не мог запустить Firefox линуксовый непосредственно на винде, то теперь иногда захожу с "очень другой машины".
slonopotamus
15.09.2023 09:31+3Из альтернатив есть только три с половиной пути самурая
Поставить на отдельные рядом стоящие компы, соединить клавомышь через Synergy.
aborouhin
15.09.2023 09:31+1WSL у меня, понятное дело, стоит и используется, но для всяких админских задач и экспериментов некоторое время назад перешёл на отдельную удалённую виртуалку.
Плюсы - можно запустить в screen долгоиграющую задачу и ноут свой выключить. Можно в срочной ситуации, если ноут не под рукой, подключиться и сделать что надо хоть со смартфона. Бекапится всем образом сразу штатными средствами гипервизора по расписанию. При необходимости легко увеличивается объём выделенных ресурсов (некоторым штукам оперативки надо МНОГО, но иногда это довольно разовые задачи).
Sabirman
15.09.2023 09:31Мне пришлось удалить и докер, и wsl из-за того что с ними не запускается эмулятор андроида.
Aelliari
OpenSSH клиент на последних версиях все еще нужно включать? Я не помню. Но даже так, какие принципиальные отличия между включением клиента и wsl?
Но это так, безотносительно остальных применений
4umak
Если вопрос про WSL, то конечно нет, оно во всех линуксовых дистрах же есть по умолчанию
Aelliari
Нет, вопрос про установку openssh клиента в винде, и про установку wsl ради «прямого доступа» к openssh. С моей колокольни - процедуры не имеют принципиального различия, но имеют оверхед в виде транслятора (wsl1)/виртуальной машины (wsl2)
Повторюсь, без относительно альтернативных применений wsl
4umak
а, это конечно резонный вопрос, если рассматривать ситуацию только с т.з. ссх. Но всл даёт намного больше, чем только это)
MountainGoat
SSH винды присутствует, но в нём отсутствует часть функций, например команда ssh-copy-id.
saboteur_kiev
не самая полезная команда...
temaps
Почему? Вам удобнее руками и флешкой копировать открытые ключи на сервер?
Это может быть не самой полезной командой только в том случае, если Вы по ssh ходите по паролю. Но это вообще странно и стрёмно. Надо копировать ключ, а вход по паролю желательно вообще блокировать для безопасности.
alexkuzko
А чем старообрядный способ по ручному редактированию в authorized_keys не нравится? Помимо всего остального позволяет посмотреть что там сейчас находится, почистить и т.п...
saboteur_kiev
В последнее время очень часто на той стороне может быть не authorized_keys а что-то другое. А ssh-copy-id не умеет лазить по sshd_config и догадаться куда именно нужно вставить, если там authorized_keys2, например или что-нибудь еще.
Okeu
Последние пару лет (может больше), я точно руками не включал на виндовых тачках OpenSSH. Работает из коробки, правда есть периодически шаманства с форвардингом ключей, и вроде еще были какие-то проблемы, но сейчас не вспомню
dayroon
В Win сейчас есть ssh, ssh-agent и ssh-keygen из коробки.
Только готового ssh-copy-id нет, но есть сторонние реализации.
4umak
А мультиплексор есть?
dayroon
screen и tmux можно поставить, но именно родного, вроде бы нет.
4umak
это не совсем про скрин и тмукс, а про переиспользование уже имеющегося соединения с сервером, может использоваться не только для подключения к консоли, но и переливки файлов, проброса портов и т.д.
warus
scp под виндой работает
-D (прокси), -L проброс работает, -R не знаю, но наверно также
SalazarMAX
Есть костыль без использования сторонних инструментов:
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh {IP-ADDRESS-OR-FQDN} "cat >> .ssh/authorized_keys"
Можно алиас сделать