Как стать автором
Обновить

Пингвин в окне: о потенциале и перспективах WSL2

Время на прочтение8 мин
Количество просмотров13K
Всего голосов 25: ↑20 и ↓5+15
Комментарии66

Комментарии 66

Виртуалка не нужна. У WSL1 еще был шанс.

О, да в этой «отличной» статье даже не сказано, что WSL2 это HyperV и конфликтует с остальными средствами виртуализации…
В дополнение скажу, что насколько я знаю, там используется какая то тонкая, «особая» виртуализация (не контейнер, но и не полноценная VM)

Явно заявлено "подмножество Hyper-V" — https://devblogs.microsoft.com/commandline/wsl-2-post-build-faq/ "Does WSL 2 use Hyper-V? — The newest version of WSL uses Hyper-V architecture to enable its virtualization. This architecture will be available in an optional component that is a subset of the Hyper-V feature."
И там же про конфликты — некоторые сторонние виртуализаторы уже обновили: "Some 3rd party applications cannot work when Hyper-V is in use, which means they will not be able to run when WSL 2 is enabled. Unfortunately, this does include VMware, and versions of Virtual Box before Virtual Box 6"

НЛО прилетело и опубликовало эту надпись здесь
Это не виртуалка, это скорее User-mode Linux или даже coLinux майкрософтовского разлива.
WSL2 как раз таки виртуалка
НЛО прилетело и опубликовало эту надпись здесь
конфликтует с остальными средствами виртуализации…

В VirtualBox уже реализовали поддержку Hypervisor Platform. Пока ещё не очень быстро, но ситуация улучшается.
Однажды винда перешла на ядро OS/2. Грядёт переход на ядро Linux?

Я тоже так думаю. А WINE вместе с родными MS-овскими DLL-ками обеспечит обратную совместимость.

Не было такого. Было ядро которое IBM и MS разрабатывали совместно. Потом на базе этих наработок IBM сделала полуось, а ms windows NT

Если быть точным: IBM и MS совместно выпускали полуось. Потом было принято решение сделать новое ядро, этим занялись MS. В какой-то момент совместный проект закончился, и было принято решение выпустить версию Windows на основе этого ядра.

>> Потом на базе этих наработок IBM сделала полуось, а ms windows NT

Ну разве что если «базой наработок» считать наработанный опыт сотрудников.
Ядро NT — совсем другое.

Какой же это линукс если не можешь сам ядро собрать?
Возникает и обратный вопрос — зачем нужен wsl, если есть полноценный линукс и вайн?

Затем, что есть много виндовой работы, которая на линуксах такая же боль, как линуксовая работа на винде. Сам долгое время просидел в WSL/Ubuntu терминале с ансиблом и прочей линуксовой радостью (только вот линуксового докера очень там не хватает), попутно оставаясь в актуальном рабочем окружении (Visual Studio / .NET framework, MS SQL), пока не открыл для себя VSC Remote.
Раз вам приходится прыгать между окружениями, то скорее всего у вас процесс разработки построен плохо. Нет плана, четкого разделения работы между платформами с описанием взаимодействия, нет тестов и отдельной дев среды. Завтра вам придется работать с отличным от убунта\центос дистрибутива, будете просить мелкософт добавить их поддержку?
Виртуалка с ssh решает ту же задачу не хуже, но позволяет не думать, что что-то в WSL может не работать и какие подводные камни всплывут при выводе в прод.
Если уж все равно извращаетесь, то Visual Studio, .net и MSSQL работают в линухе под вайном, а что-то уже и нативно, но бонусом вся прелесть линуксовой автоматизации, нормальный гит и секьюрность из коробки.
Ансибл это кроссплатформенная радость.
Ну до такого уровня извращений как запуск студии под вайном я надеюсь никогда не доживу. На счёт чёткого деления на среды — не знаю как в кровавом энтерпрайзе, а в студиях попроще приходится заниматься всем чем. Я больше в роли девопс/SRE, где приходится собирать всё подряд на всём подряд, при этом время от времени влезая в код. А виртуалка — штука на практике не особо удобная, переключения контекста бесят.
НЛО прилетело и опубликовало эту надпись здесь
Ну вот по факту к тому и пришёл, что от линуксов всё что мне нужно — это некий headless, а будет это виртуалка, отдельный комп или WSL — без разницы, лишь бы работало. А WSL работает без проблем для моих целей, вот только докеров там не хватает.

А есть где-нибудь почитать, что с WSL1 не так? Я натыкался на комментарии о том, что он слишком медленный, но что помешало майкрософту его ускорить?

Многие утилиты тупо не работали или вели себя странно. Например, nmap

Ну неработающие утилиты это понятно, ведь там, ЕМНИП, не все системные вызовы до конца были доделаны. Но опять же остаётся любопытно, что помешало их доделать

Так они и доделали — через втаскивание линухового ядра. Надо полагать, это оказалось тупо менее затратно и более эффективно, чем бесконечно пилить слой эмуляции системных вызовов.
Менее затратно — понятно (программисты не бесплатные), но почему более эффективно — совершенно непонятно

По сообщению MS в WSL1 тормозили файловые операции — https://devblogs.microsoft.com/commandline/announcing-wsl-2/ "Initial tests that we’ve run have WSL 2 running up to 20x faster compared to WSL 1 when unpacking a zipped tarball, and around 2-5x faster when using git clone"
Вероятно замедлялось из-за того, что слою трансляции системных вызовов приходилось эмулировать свойства и метаданные posix fs поверх ntfs, а затем вызывать ntfs подсистемы, предполагали также проблемы с кэшированием.


В WSL2 файловые операции быстрее для linux root fs, т.е. образа фс, с которым реализация файловых систем ядра линукс работает напрямую: https://devblogs.microsoft.com/commandline/wsl-2-is-now-available-in-windows-insiders/ "Make sure to put the files that you will be accessing frequently with Linux applications inside of your Linux root file system to enjoy the file performance benefits.
… To enjoy the faster file system access in WSL 2 these files must be inside of the Linux root file system."
А трансляцию доступа к файлам в linux root fs в wsl2 теперь производят для виндовых приложений.

Для программиста это выглядит как бред необразованного юзера.

Прямой вызов, пусть даже неэффективной функции, против слоя виртуализации…

Скорее политические мотивы.

С точки зрения файлового ввода-вывода:
Новая система WSL2 — это виртуальная машина в удобной обертке. Внутри виртуальной машины работает ядро Linux со своим родным кэшем, VFS, ФС (ext4). Слой виртуализации замедлит лишь доступ к блочному устройству в котором лежит ext4. (Доступ к ФС между ОС — по 9p протоколу через сеть.) Тесты ФС показывают для WSL2 незначительное замедление по сравнению с нативным линуксом: https://www.phoronix.com/scan.php?page=article&item=windows-10-wsl2&num=2 например, тест на создание файлов https://openbenchmarking.org/embed.php?i=1906141-HV-WSL2MICRO62&sha=6af9cf2&p=2 (виртуализация wsl2 добавила 5 мкс к 11 мкс нативного линукса; в wsl1 было в 60 раз медленнее); git быстрее https://openbenchmarking.org/embed.php?i=1906141-HV-WSL2MICRO62&sha=2c29823&p=2


ФС в старом WSL1 — это огромный слой эмуляции "lxcore VFS" — см https://blogs.msdn.microsoft.com/wsl/2016/06/15/wsl-file-system-support/ — при этом там есть два разных драйвера VolFs ("/", "/home", эмулятор posix флагов через NTFS Extended Attributes) и DrvFs (для /mnt/c, медленнее т.к. отключает часть кэшей фс); которые затем обращались к NT ядру для исполнения реальных запросов в NTFS. (вызов цепочки функций, увеличение числа запросов — для каждого linux stat надо прочитать несколько ntfs ea)

Сегодня же новая версия Microsoft Windows создается именно на базе Linux.

В смысле?
НЛО прилетело и опубликовало эту надпись здесь
Сегодня же новая версия Microsoft Windows создается именно на базе Linux.
Как же автора занесло.
Это переводчика занесло. В оригинале говорится о том, что Windows основана на DOS, и гораздо дальше от Linux чем MacOS (которая основана на BSD). Тоже сомнительно — непонятно зачем приплетать DOS, но не совсем бред.

When Apple reinvented the Mac OS in 2000, it was built atop the BSD Unix OS — which is more like Linux than DOS, which is what Microsoft Windows is built atop, Swartz pointed out.

У меня к WSL две основные претензии:

  • Невозможность производить операции с файлами в WSL файловой системе средствами Windows программ.
  • Каждый WSL терминал имеет свой собственный init процесс, из-за чего приходится городить огороды, чтобы получить постоянно работающий SSHD. Гораздо разумнее было бы пускать WSL-init фоном, как виндовый сервис.

Использовать WSL для разработки под Linux неудобно, проще работать в Linux.
Использовать WSL для разработки под Windows (линуксовые утилиты + кросскомпиляция) так же неудобно, уж лучше MSYS2/MinGW. Отсюда вопрос — зачем оно? Чтобы без PuTTY иметь возможность подключаться к Linux машинам, сидя в Windows окружении?
Использовать WSL для разработки под Windows (линуксовые утилиты + кросскомпиляция) так же неудобно, уж лучше MSYS2/MinGW


MinGW невероятно, запредельно тормозной.

А вот разработка под микроконтроллеры, например, где кросс-компиляция будет по-любому, под WSL прекрасна — с одной стороны виндовый софт, с другой git/make/gcc в родном для них окружении.
А как обстоят дела с cygwin? Что в нём не работает?
Не знаю как сейчас, но когда я 6 лет назад пробовал собрать кросс под нужный мне ARM, тормозило просто ужасно. Так что я думаю все тормоза MinGW применимы и к GCC в cygwin. Опять же, в качестве приоритета в cygwin — портируемость, а не производительность.
Из того что не работает — пробовал завести distcc под cygwin, он тупо крашился) спрашивал в одном из своем посте в комментах — кто-то вообще заводил distcc+cygwin, мне не ответили.
Очень медленный. Работа с ФС — это просто боль, с WSL не то что на тестовых, а на практических задачах компиляции исходников или клонирования гита разница в 2-3 раза легко.

Я бы сказал не 2-3, а до 10 раз на мелких файловых операциях.


Плюс невменяемая стоимость exec и отсутствие fork/clone, из-за чего неприемлемо тормозит весь не-виндовый софт.

К сожалению, неправда. Тормозной цыгвин работает быстрее с фс чем WSL, я уже писал:
, распаковка архива tar.gz с 2.5 ГБ исходных текстов занимает 2 минуты 50 сек. Даже тормозной cygwin шелл выигрывает — 2 минуты 17 секунд.


В остальном, WSL это плюс.
К сожалению или к счастью, распаковывать 2,5-ГБ архивы мне приходится не то что не каждый день, но и не каждый месяц.

На реальной задаче компиляции проекта MinGW проигрывает WSL в 2-3 раза.
Если нужен билд сервер, то может… надо поднять этот билд-сервер(в т.ч. в виртуалке)?
Да не, бред какой-то, надо WSL использовать, скучно ведь.
А зачем конкретно мне нужны пляски с виртуалкой, в которой надо что-то поднимать, которая жрёт кучу памяти, которая не может прозрачно работать с файловой системой и вообще ресурсами хоста, если я могу тыцнуть одну кнопку и получить всё нужное в WSL?
Вы тыркнете в Windows Store по Ubuntu 18.04 и бац, открылась терминалка и хрен до неё докопаешься так просто, что это не полноценный линукс. Просто работает. Ну и к чему вся эта возня с тормознутыми виртуалками если можно без них?
Если действительно разработка под линукс, а не пару вспомогательных программ запустить, то там и внутренности ковырять приходится. И модули может потребоваться поставить и файловую систему позаковыристей и пораспределенней настроить и чуется мне все равно виртуалку придется ставить.
Ну и к чему тогда эта возня с WSL?

Я бы предпочел один раз настроить виртуалку, чем каждый раз сталкиваясь с необяснимым проверять а не в WSL ли это дело? А могу я использовать этот софт для дебагга в нем? Запустится ли он вообще?
К тому же виртуалки уже давно не тормознутые. Консольный вариант так и вовсе неотличим по задержкам.
За всё время существования WSL ни я, ни кто-либо из коллег не сталкивались с необъяснимым в WSL на примере данной конкретной задачи.

Зачем конкретно нам надо настраивать виртуалку и каждый день плясать вокруг неё и её ограничений?
Вы тыркнете в Windows Store по Ubuntu 18.04 и бац, открылась терминалка и хрен до неё докопаешься так просто, что это не полноценный линукс. Просто работает. Ну и к чему вся эта возня с тормознутыми виртуалками если можно без них?


От используемого linux-софт же зависит.
К примеру, попробуйте кучу основанного на Docker софта запустить в WSL 1.
Для чего? Чтобы получить наиболее приближенную к production среду на этапе разработки.
ставите докер в WSL, в настройках expose daemon on… и
declare -x DOCKER_HOST=«tcp://127.0.0.1:2375»

К примеру, попробуйте кучу основанного на Docker софта запустить

Докер докеру рознь. «Софт основанный на докере» работает по разном на разных машинах. Например, на официальном докере для виндовс (виртуальная hyper-v машина) libgit не работает корректно с оверлеями, пока не пропатчишь, а на линукс машинах — без проблем.

-  if (git_repository_open_ext(&repository_, path_.c_str(), 0, NULL) != 0)
+  if (git_repository_open_ext(&repository_, path_.c_str(), GIT_REPOSITORY_OPEN_CROSS_FS, NULL) != 0)
ставите докер в WSL, в настройках expose daemon on… и
declare -x DOCKER_HOST=«tcp://127.0.0.1:2375»


Вы предлагаете некий способ решения проблемы.

А MS продает сервис, удобство, комфорт. Она за вас решает проблему в WSL 2 (и, автоматически, ряд других проблем). Тем самым увеличивая количество лояльных к Windows пользователей.

При выборе Ubuntu vs Arch большинство предпочитает Ubuntu. Люди в большинстве своем предпочитают «готовенькое», а не то, где нужно потратить дополнительные усилия для решения проблемы.

MS делает так, чтобы большинство предпочитало Windows.
Тут их позиция в корне не изменилась никак со времён предустановки Windows на 80% компьютеров мира.

«Сделаем пользователю удобнее, дадим ему сервис — и он выберет нас»

P.S.:
Согласен, что изначальное решение в виде легковесной оболочки было вполне изящно. Хотелось бы чтобы и такой вариант оставили, буде WSL 1 более производительным на ряде задач, чем WSL 2.
Так пробовали?

c:\users\%username%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\ LocalState\rootfs

на Хабре переносы сломались поставил пробел
Вы меня неправильно поняли. Нет никакой проблемы найти расположение файлов WSL. Проблема в том, что при их модификации/копировании с помощью Windows программ, портятся их метаданные. Т.е. файлы как бы есть, но трогать их можно только из WSL. Поэтому тот же CLion, при использовании WSL тулчейна, работает через SSH подключение.

Поскольку в абзаце про CVE речь идёт о безопасности, CVE database companies — это, видимо, "компании, поддерживающие базы данных распространённых уязвимостей".

> решительную направленность развития в сторону опен-сорса, которую продвигает CEO Сатья Наделла

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

Они вынужденно делают свои продукты более совместимыми с open-source решениями, чтобы не терять долю рынка. И делают это весьма неплохо, молодцы. Но ни о каком дружелюбии речи тут не идёт.

Как там в 2012м? Покупайте биток!

вымогает деньги с производителей Android-устройств, угрожая возможными исками по поводу нарушения ядром Linux каких-то их патентов.
Да, подумаешь, какие-то там патенты.
Но ни о каком дружелюбии речи тут не идёт.
О дружелюбии вроде ничего и не сказано.
> Да, подумаешь, какие-то там патенты.

Именно «какие-то там», в духе «наш фирменный уникальный запатентованный прямоугольник со скруглёнными уголками». Агрессивное патентование все что только можно в максимально расплывчатых формулировках, так что любая разумная реализация функциональности в этой области будет что-нибудь нарушать.
Так расскажите всё-таки, какие именно патенты, а то пока что в расплывчатых формулировках только вы выражаетесь.

MS скрывала списки патентов (и в целом сводки с этой войны не очень подробны), но в 2014 году Китай опубликовал 310 номеров патентов: https://www.zdnet.com/article/310-microsoft-patents-used-in-android-licensing-agreements-revealed-by-chinese-gov/ https://arstechnica.com/tech-policy/2014/06/chinese-govt-reveals-microsofts-secret-list-of-android-killer-patents/
сам список http://images.mofcom.gov.cn/pep/201404/20140408143159274.docx


Ранее, на 2012 год MS получала выплаты примерно с 70% проданных андроид-смартфонов — https://www.howtogeek.com/183766/why-microsoft-makes-5-to-15-from-every-android-device-sold/
В 2014 году размер выплат оценивался в 1 млрд долларов от Самсунга и более 3 млрд со всех андроидов — https://www.zdnet.com/article/microsoft-open-sources-its-entire-patent-portfolio/
В 2018 году MS присоединилась к Open Invention Network https://www.zdnet.com/article/microsoft-open-sources-its-entire-patent-portfolio/ но судьба договоров о выплатах с андроид-производителями остается неясной.

Разве подобное включение не нарушает GPL? Даже если ядро запущено в виртуальной машине, достаточно тесная интеграция одного с другим все равно может рассматриваться как динамическая линковка
GPL не запрещает использовать в коммерческих продуктах.

Речь об открытости исходного кода, а не о том, коммерческий ли продукт

Речь об открытости исходного кода, а не о том, коммерческий ли продукт


Там общая память по вашей ссылке как критерий идет, да.

Из чего вы делаете далеко идущие выводы, так как:

Значит, и все ОС должны быть открыты, так как у них есть прикладное API и общая память (через которые и идет вирусное заражение лицензией, достаточно интегрировать в систему хоть одну единицу открытого ПО, а это широко используется, даже и с коммерческими ОС).

После чего — заражаются лицензией заодно и абсолютно все прикладные программы, так как они через API и общую память взаимодействуют с ОС, открытыми на предыдущем шаге?

Для прикладных API в Linux отдельно прописано
исключение из GPL
Для прикладных API в Linux отдельно прописано


И?
Почему виртуальная машина под это условие-исключение не попадает? Там тоже API docs.microsoft.com/en-us/virtualization/api

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

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

GPL не требует публикации. GPL требует возможности получения исходного кода желающим. Да хоть по отдельному запросу в MS электро-почтой вам лично.

Исключение заключается в том, что приложения не заражаются лицензией ядра при использовании системных вызовов. Без такого явного указания это было бы недопустимо. Однако, оно не затрагивает, например, модули ядра, которые обязательно должны быть GPL-совместимыми. Я не понимаю причем тут API Windows Hypervisor Platform.

Я полагал что WSL2 будет поставляться как компонент системы и тесно с ней интегрироваться, что нарушало бы GPL.

Вопрос был не в возможности получения исходного кода модифицированного ядра, он и так доступен. Вопрос в том, в праве ли Microsoft включать в состав дистрибуции проприетарной Windows ядро Linux, распространяющееся под GPL.
Я полагал что WSL2 будет поставляться как компонент системы и тесно с ней интегрироваться, что нарушало бы GPL.

А как вы думаете, почему для WSL 1 выбран столь неудобный способ:

1) Часть функционала активируется простой галочкой
2) А часть — требует обязательно явной установки пользователем из MS Store

Такой же практики придерживается и Ubuntu при установке несовместимых с ее лицензией компонент.
НЛО прилетело и опубликовало эту надпись здесь

Писать "новая Windows делается на основе linux" то ли чересчур оптимистично, то ли это попытка ввести в заблуждение. Просто новые инструменты, действительно, пишутся в первую очередь под linux, и windows версия часто плохо поддерживается. Например, докер под windows работает через виртуальную машину вместо нативной версии. А туториалы начинаются с "установите ubuntu...". Желания и сил вносить патчи в тысячи проектов у МС нет, потому они решили добавить слой совместимости для нативного запуска линуксовых компиляторов, докеров, менеджеров пакетов, ноды и т.д. чтобы разработчики оставались на Windows, а не убегали на linux.


Следующим шагом, я думаю, МС постарается сделать, чтобы работа с WSL была комфортнее, чем на настоящем линуксе — сделают какой-нибудь графический менеджер пакетов, чтобы начинающие любители яваскрипта могли поставить ноду без консольных команд или какой-нибудь удобный конфигуратор докера. При этом завяжут его на Windows API и магазин приложений Windows, чтобы на линуксе его запустить было нельзя. Не уверен, правда, что у них это получится.


При этом скорее всего WSL будет оптимизироваться исключительно под запуск докера, нгинкса, ноды, стандартного набора веб-разработчика, а например поддерживать Гном или KDE никто не будет — зачем вам Гном, если у вас уже есть десктопное окружение?


Windows не будет разрабатываться поверх линукса хотя бы из-за лицензии. Кому нужна винда, которую можно взять бесплатно и удалить из нее всю телеметрию?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий