Windows + WSL. Счастье виндузятника

Kate

Administrator
Команда форума
В этой статье расскажу, как я обустроился в этом мире тотальной гиперконвергенции Linux и Windows, созданным Microsoft.

Введение​

WSL сейчас переживает золотые времена: любой популярный дистрибутив можно поставить из Microsoft Store, а саму подсистему запустить можно одной командой либо скачав её опять же с магазина. Если какого-то дистрибутива не хватает - создаёшь. WSL интегрирована с хостовой Виндой - можно лезть друг к другу в директории как к себе домой, это работает в обе стороны. systemd теперь есть, опять же. Поддержка Docker максимально полная. У дистрибутивов Linux так же есть доступ к видеокарте, можно нейронки гонять. За счет возможности запуска X-Server есть возможность запустить графические Linux-приложения в Windows - да, окна из одной ОС будут сосуществовать с окнами хостовой операционки. Фантастика!

Зачем жить, если нет WSL?​

Это мой Windows Terminal с WSL. Ничего необычного

Это мой Windows Terminal с WSL. Ничего необычного
Для начала вопрос для себя: зачем тебе вообще нужен Linux при живой-то Windows, если ты очень высокоуровневая соевая фронтенд-макака, обитающая на высоте двух сотен тысяч вызовов в стектрейсе? Безотносительно должности, конечно. Дело касается исключительно домашнего ИТ-быта с элементами пет-проектов. А вот зачем мне это надо:

  1. Админить дешевые VPS'ки: набрал я их с пару десятков по всему миру, а бросать жалко, бекенды для Телеграм-ботов, опять же;
  2. Data Science. Вот эти все плейбуки Jupyter и т.д.;
  3. По идее, это относится к первому пункту, но он достаточно крупный и вылился в отдельное направление: изучение Ansible, у которого есть целая галактика!
  4. Изучение K8s, до которого я так и не дошел за 8 лет... где же я был эти 8 лет?
Бонусом научился базовым основам Linux, само собой: смена окружения, маршрутизация, правка конфигов, systemd, скриптинг на Bash (от которого я стараюсь отказываться в пользу кросс-платформенного и более организованного костылеписания на PowerShell). Куда-то ниже пятого-шестого уровня OSI и ближе к ядру подходить не буду - интерес к "пингвину" у меня чисто утилитарный.

Дальше подробнее о каждом пункте:

  1. Самое простое - админить VPS'ки напрямую. ssh <user>@<host> и вперёд! За счет выпуска на Винду первоклассного Windows Terminal сейчас это удобно и быстро, как никогда: Win+R, ввод wt (а если Windows Terminal стоит по умолчанию, то можно сразу набрать любимую оболочку, например, pwsh), затем делай через WSL то, что хотел. Намного удобнее, чем запускать Putty или пользоваться OpenSSH на Винде (который еще где-то в компонентах включить надо), и в разы лучше, чем перезагружать Windows и логиниться в Linux;
  2. Весь комплект из области Data Science у меня полностью в WSL: Anaconda, Jupyter Notebook, всё окружение для LaTeX. Подключаюсь через VS Code с расширением WSL, и работаю дальше в нём;
  3. Ansible. Несмотря на наличие поддержки Windows как в режиме сервера, так и клиента (у Ansible эти понятия максимально размыты), я рекомендую пользоваться именно Linux-версией. В моём случае - WSL. И работает оно прекрасно! Всё опять же благодаря VS Code и его возможности работать в подсистеме для Linux, как "у себя дома" в Windows;
  4. До "кубера" я пока не дошел. Но, наверное, кластер 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 хост на каком-нибудь из дистрибутивов пингвина:

  1. Работа с ядром Linux - написание драйверов, взаимодействие с eBPF и т. д.;
  2. Работа с железом. Насколько мне известно, проброс железа в виртуалку WSL - это очень извилистый путь, потому что у технологии Hyper-V другая цель - управлять поездом он позиционируется по-другому, оттого аппаратная поддержка хоста у гипервизора очень ограниченная.
Если есть другие пограничные случаи, когда WSL пасует, пишите в комментарии.

Альтернативы?​

С другой стороны, разве я не рассматривал другие варианты организации своего флоу Linux-Windows? Linux сам по себе мне нужен, от него отказываться не вариант! Из альтернатив есть только три с половиной пути самурая:

  1. Пересесть на Ubuntu полностью, Windows-игры и специфический софт запускать через Wine. Самый радикальный и очень технически и морально тяжелый путь. У меня довольно много всё завязано на сервисы от Microsoft. Пусть даже у всех этих сервисов и есть веб-версии, отказ от интеграций нативных программ в ОС, например, OneDrive, вызовет у меня сильный приступ стресса, а затем депрессии (никогда ее не было, но тут-то точно появится!);
  2. Дуалбут Windows-Linux. Во времена, когда Windows 10 неведомым образом затирала GRUB, отчего не грузилась добрая половина дистрибутивов, это тоже не было вариантом;
  3. Линь на отдельной машине, Вынь на своей как основная ОС. Подключение к Линю по RDP. Это был самый надежный вариант, но минусом (а для меня это минус) было минимальное количество интеграций, и скакать с окружения в окружение мне было бы не очень удобно;
  4. Полный отказ от Linux и замена его окружения каким-нибудь Cygwin. Что ж, при условии, что мне надо обучиться основам хотя бы в Ubuntu, этот вариант тоже отметался. Превратиться в скуфидона преждевременно тоже не хотелось бы. Все там будем!

Бонус​

Заметили, что на первом скриншоте оболочки Windows и Ubuntu выглядят максимально одинаково, несмотря на то, что у одного исполняется PowerShell, а у второго - Bash?

Конфигурация терминала - отдельный кайф и сугубо личное дело каждого, но иной раз всё-таки лучше рассказать о своём пути самурая. Много раз в рандомных местах интернетов - и на Хабре в том числе - я видел скриншоты с красиво оформленной оболочкой в каком-нибудь окне не менее красивого терминала. На манер таких:

Вот такие:
f58cf2ada8743c472d3c1480ba67d35d.jpg
9545bb11f366b6442e55bfeea2668b92.jpg
51b72d99eb086a8925f34ebfadf52c4f.png
897dbfbfd377b92d71e0b4c308ffd6c8.jpg

Выглядит цветасто и не очень натурально, ЕВПОЧЯ. Мне бы такую же примерно тему, но со спокойными акцентными цветами... Я задумался, как же сделать такие же красивости, только единообразно, чтобы одна и та же библиотека с помощью независящего от платформы конфига рисовала один и тот же интерфейс?

Ответ нашелся в первой строчке поисковика: OhMyPosh.

Гайд по установке этого чуда чуть менее тривиален, чем хотелось бы, поэтому я соорудил скрипт для установки OhMyPosh в полуавтоматическом режиме. Скрипт автоматом обходит некоторые ошибки, обновляет профиль PowerShell, устанавливает схему M365Princess и шрифт Caskaydia Cove (на моём скриншоте в самом начале включена именно она) и добавляет конфиг в VS Code и Windows Terminal. Тестировался на Windows 11 полгода назад.

Сейчас я с удовольствием раскатываю OhMyPosh на все свои VPS через Ansible. Доволен!

 
Сверху