Microsoft жжет. Недавно мы писали о присутствии специальных системных файлов с названиями LXss.sys и LXCore.sys в новейшем билде Windows 10, который используется разработчиками программ и драйверов, а также тестировщиками в служебных целях. В драйверах содержался код разбора заголовков ELF-файлов, а также прочие системные функции, характерные для Linux и отсутствующие в Windows NT by design. Уже тогда стало очевидно, что Microsoft собирается всерьез заняться интеграцией подсистемы Linux в Windows 10.



У компании уже имелся подобный опыт. Оригинальная концепция Windows NT (на которой основана Windows 10) подразумевала присутствие там трех подсистем: родной MS Win32, UNIX POSIX, а также IBM OS/2. Обе последние подсистемы отвалились где-то по дороге, которая вела к превращению Windows 2000 в Windows XP, а сама POSIX перекочевала в отдельный инструмент без возможности присутствия в дистрибутиве Windows по умолчанию. То же касается микропроцессорной архитектуры Alpha, от поддержки которой Microsoft также отказалась с выходом Windows 2000. Остается только гадать, сколько продержится в Windows подсистема Linux.

Стоит отметить, что во-первых, архитектура ядра Windows 10, как и прочих версий Windows NT, подразумевает под собой интеграцию других ОС, хотя бы на уровне поддержки запуска там приложений с возможностью реализации соответствующих системных вызовов с правильной семантикой. Для этого был введен вспомогательный уровень подсистем, который в случае с Win32 называется NT layer (ntdll). Прочие библиотеки подсистем также имели доступ к ядру и могли воспроизводить то поведение системных вызовов, которое было нужно конкретной подсистеме (например, fork в POSIX, которая выполняла ветвление процессов).

Во-вторых, концепции Windows NT и Linux во многом похожи: обе основаны на монолитном ядре, разбитом на подсистемы, обе используют схожие механизмы реализации объектов ядра и межпроцессного взаимодействия, а также обе берут свои истоки у концепции ядра оригинальной UNIX.

Нам сложно сказать, что именно подвигло Microsoft на интеграцию в Windows 10 второй подсистемы, однако, как и в прочих случаях компания подошла к этому весьма основательно, не опираясь на какие-либо подходы псевдо-эмуляции или виртуальных машин. Все вышеперечисленные подсистемы разрабатывались исключительно как native и имели схожие с Win32 полномочия в реализации функций собственных подсистем.

И так, по сути. Анонс новой подсистемы состоялся на известной конференции Microsoft под названием Build 2016, на которой анонсируются программные новинки компании. Было заявлено, что в будущей версии Windows 10 пользователи смогут пользоваться услугами командного интерпретатора Linux, известного как bash, что в свою очередь сразу указывает на присутствие в Windows загрузчика исполняемых ELF-файлов, а также среды (подсистемы) для их исполнения и стандартных инструментов типа ssh, grep, sed, и awk. В качестве эталона была выбрана Ubuntu Linux.


Рис. Слайд презентации «Linux on Windows». На слайде указано, что речь идет именно о полноценной подсистеме Linux, а не о псевдо-эмуляции или виртуальных машинах. Да, Linux становится частью Windows 10 и так же как POSIX и OS/2 будет работать в пользовательском режиме с реализацией семантики системных вызовов на уровне ядра.


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


Рис. Так как Linux становится полноценной подсистемой и частью Windows, ее командный интерпретатор можно вызвать через оболочку Windows Shell или же командный интерпретатор, как и показано на слайде.


Рис. 3. Демонстрация работы известной UNIX-команды ls для вывода списка содержимого директории.


Рис. 4. Утилита readelf для анализа заголовка ELF-файла в действии.


Рис. 5. Компилятор исполняемых файлов gcc.


Рис. Есть над чем поработать. :)

Полное видео демонстрации работы подсистемы Linux на Windows можно посмотреть здесь.

Комментарии (173)


  1. terryP
    31.03.2016 11:23
    +2

    Интересно, а как там решается вопрос лицензии GNU, которая запрещает линковку с закрытыми продуктами? Microsoft перепишет Linux заново или обходит это как-то по другому?


    1. Razaz
      31.03.2016 11:57
      +3

      Схожий вопрос про OSX — APPLE VIOLATING THE GPL WITH BASH ON "OS X"?

      Как и в Win там просто исполняемый файл, а не линковка.


      1. hardex
        31.03.2016 20:43

        Скорее всего откроют прослойку между libc и системными вызовами винды (LXSS)


        1. khim
          31.03.2016 23:38
          +2

          Но зачем, Карл? В самом ядре английским по байтам написано: This copyright does not cover user programs that use kernel services by normal system calls — this is merely considered normal use of the kernel, and does not fall under the heading of "derived work".
          Так как у Microsoft'а драйвера есть свои, то им нужно было просто реализовать "kernel services" доступ к которым осуществляется через "normal system calls" — и всё.


      1. dartraiden
        03.04.2016 17:41

        Они не линкуют. Они написали транслятор. Запускаться будут уже собранные бинарники из состава Ubuntu (на первых порах).


      1. MamOn
        03.04.2016 17:41
        +1

        Да, похоже что настал тот самый момент, встречайте: GNU/Windows.


    1. pda0
      03.04.2016 17:41

      В GPL есть оговорка, позволяющая программе линковаться с системными библиотеками, даже если они закрыты. Поскольку это теперь часть системы, то нарушения лицензии не происходит.


  1. mkpankov
    31.03.2016 12:18
    +2

    Круто. А когда это станет доступно?


    1. Razaz
      31.03.2016 12:19
      +1

      Вроде как летом со следующим Annual Update для 10. Вроде так услышал на презентации.


      1. NeoCode
        31.03.2016 13:42
        -15

        А для семерочки будет доступно?


        1. leschenko
          31.03.2016 18:11
          +31

          Конечно! Надо только до 10 сначала обновить систему.


          1. NeoCode
            01.04.2016 15:18

            Ну я вообще-то вполне серьезно спрашивал) Или там такая сильная завязка на десятку, что оно просто не будет работать под ранними версиями Винды?


            1. Razaz
              01.04.2016 15:21

              Думаю просто не будут тратить ресурсы, на поддержку старой версии. Да и ядро скорее всего менялось в 8, затем в 8.1, затем в 10. А так как там идет трансляция сисколов, то это еще уменьшает шансы.


            1. leschenko
              01.04.2016 15:27

              Я не работаю в Microsoft, но скорее всего дела обстоят так:

              1. для того чтобы новые функции появились в ОС, ее надо модифицировать. Т.е. выпустить новую версию ОС.
              2. для того, чтобы эти же функции появились в старой ОС, надо внести в нее те же модификации. т.е. надо обновить ОС.

              Т.е. обновление с 7 до 10 не шутка. Это вполне серьезный ответ. И заметьте, что пока еще это бесплатно. Как будет потом — не известно.


              1. leschenko
                01.04.2016 15:30

                Т.е. 7 + все новые фичи это и есть 10.
                Если вам нравится 7, но вы хотите получить новые фичи -> обновляйтесь до 10.


            1. khim
              01.04.2016 15:39
              +2

              Думаю что всё проще: там нужны разные модификации в ядре, а учитывая политику Microsoft никто их для Windows 7-8 делать не собирается, вот и всё.
              К примеру довольно большая часть вещей делается в Linux через фьютексы. В Windows8 они есть, а в Windows7 — их нет. Можно ли эту функцию "вынуть" из Windows8 и перенести в Windows7? Да, разумеется — но кто будет это делать?


        1. GenL
          03.04.2016 17:42

          Для семерочки будет доступно еще одно обновление с окошком «Get Windows 10».


  1. x88
    31.03.2016 12:21
    -2

    При установке git под винду bash вроде давным давно ставится


    1. jmistx
      31.03.2016 13:17
      +13

      Одно дело bash.exe портированный под windows, а другое дело оригинальный исполняемый файл с ELF заголовками.


      1. vsb
        31.03.2016 15:47
        +2

        В чём принципиальная разница для пользователя?


        1. kekekeks
          31.03.2016 16:05
          +5

          Можно ставить прямо из убунторепозиториев через apt-get.


  1. oYASo
    31.03.2016 12:29

    Первое апреля вроде как завтра?


    1. HomoLuden
      31.03.2016 12:32

      Вариация на тему известного анекдота…
      "В своем резюме вы написали, что 10 лет проработали в отделе юмора Microsoft. Мы проверили — такого отдела не существует..."


  1. Lsh
    31.03.2016 12:56
    +2

    Т.е. это не аналог coLinux и полноценного ядра тут нету? Следовательно, например, примонтировать ext4 не получится?
    Да и, к.м.к., будут проблемы с совместимостью, т.к. не будут же они все системные вызовы реализовывать.


    1. Razaz
      31.03.2016 13:07
      +5

      "So maybe something like a Linux emulator?" Now you're getting warmer! A team of sharp developers at Microsoft has been hard at work adapting some Microsoft research technology to basically perform real time translation of Linux syscalls into Windows OS syscalls.
      Тынц


      1. tkf
        31.03.2016 14:37
        +4

        line? line is not emulator :D
        Ничто не ново под луной в общем.


        1. Gorthauer87
          31.03.2016 14:39
          +1

          Ну ради вайна в ядро не тащили сисколы, только китайцы как-то выпендривались.


    1. Mingun
      31.03.2016 21:19

      А что такого сложного в этих "системных вызовах"? Обычные функции, не?


      1. fshp
        01.04.2016 00:59

        Практически все функции с побочным эффектом, а внутри очень сложный конечный автомат.


    1. MacIn
      31.03.2016 21:24
      +1

      Сдается мне, написать драйвер ext4 под NT проще, чем драйвер NTFS под Linux.


  1. avor_il
    31.03.2016 13:00
    +1

    Интересно, а какие могут быть сценарии использования этого?


    1. Duti_Fruti
      31.03.2016 16:07
      +21

      image


    1. BlackRaven86
      31.03.2016 19:39

      Для заточенных под Linux приложений, например git.


      1. HomoLuden
        01.04.2016 10:18

        Или Rails


      1. pvasili
        02.04.2016 22:39

        git и так давно в win прекрасно поживает :)
        Найти что-то очень заточенное — реально сложно. Скорее всего будет удобно использовать разработчикам, которым нужно 2 среды.


    1. l27_0_0_1
      03.04.2016 17:37

      TensorFlow/Theano/что там еще используют для машинного обучения.


    1. ExileeD
      03.04.2016 17:40

      Для меня это будет мега удобно. Я привык к bash. Но ставить дектопный linux я не хочу. Буду нативно запускать python, docker, вместо костылей типа cygwin


    1. JTG
      03.04.2016 17:42

      Собирать под виндой расширения Python, требующие всякие libastral-dev без возни с MinGW, например.


    1. vovka667
      03.04.2016 17:42

      Может быть Microsoft чувствует, что теряет разработчиков прикладного софта? Многие переходят на мак или линукс. И таким образом они надеются сделать windows более привлекательным.


      1. 6opoDuJIo
        03.04.2016 19:27

        Скорее последнее. Собирать ffmpeg на ndk через Cygwin не слишком удобно.


  1. pftbest
    31.03.2016 13:01
    -9

    А символические ссылки они сделали? без них никакого толку.


    1. northicewind
      31.03.2016 13:15
      +5

      Симлинки там и так давно есть


    1. intnzy
      31.03.2016 13:23
      +8

      В смысле "сделали"? В ntfs cимлинки сто лет в обед.


      1. pftbest
        31.03.2016 13:25
        -9

        Когда я последний раз пользовался cygwin там были текстовые файлы вместо настоящих симлинков. Вот я и спросил все ли хорошо сейчас с этим.


        1. mukizu
          31.03.2016 13:44
          +9

          mklink, зачем там cygwin?


          1. pftbest
            31.03.2016 15:15
            +1

            Я о том что если там всегда была хорошая совместимая поддержка символических ссылок, зачем тогда разработчикам cygwin пришлось изобретать велосипед и делать свою реализацию?


            1. eandr_67
              31.03.2016 15:47

              В NT-based системах — да, прекрасная поддержка. А в Win-9x/Me — только FAT, которая симлинков не имеет. Так что NTFS начала широко распространяться только после 2000 года (да и то сколько лет понадобилось, чтобы сначала 2000, а потом XP вытеснили 98SE) — когда cygwin уже давным-давно существовал. И до сих пор на флешках FAT используется.


              1. khim
                01.04.2016 00:00
                +2

                Прекрасная поддержка, да? Так сделать можно?

                /tmp$ ls -al src
                ls: cannot access src: No such file or directory
                /tmp$ ls -al target
                ls: cannot access target: No such file or directory
                /tmp$ ln -s target src
                /tmp$ echo test > target
                /tmp$ cat src
                test
                /tmp$ rm target
                /tmp$ mkdir target
                /tmp$ cd src
                /tmp/src$
                Как будет можно — заходите. CygWin поддерживает виндовые симлинки — но не создаёт. Вот именно поэтому: их нормально создать под Windows нельзя, собственно. А FAT на флешках — это фигня, это не самое страшное…


                1. MacIn
                  01.04.2016 01:05
                  -2

                  Это вообще как — создавать линк между несуществующими сущностями?


                  1. khim
                    01.04.2016 11:46

                    А вот так: A symbolic link provides no such assurance; in fact, the file named by the path1 argument need not exist when the link is created. A symbolic link can cross file system boundaries.
                    Вполне себе явное требование, прописанное в стандарте. Но проблема не в этом. Симлинк на "несуществующую сущность" в Windows создать можно — но нужно заранее знать: будет эта сущность файлом или подкаталогом!


                    1. MacIn
                      01.04.2016 16:13
                      -1

                      Это ограничение скорее всего вытекает из глобальной системы объектов.


                      1. khim
                        01.04.2016 16:41
                        +1

                        Нет, это ограничение проистекает из того, что когда симлинки добавлялись в Windows, то считалось что "мир POSIX" побеждён раз и навсегда и на совместимость с ним "можно забить".


                        1. MacIn
                          01.04.2016 17:22
                          -1

                          Это слишком частное ограничение для таких глобальных решений.


                          1. MacIn
                            01.04.2016 17:47
                            -1

                            Дополню — я имею в виду, что symlink в NT — вещь более старая, чем те, о которых мы говорим. И файловый symlink ложится на систему объектов как частный случай (наверно).


                            1. khim
                              01.04.2016 18:56

                              Вы не путаете Reparse Pointы (доступные с незапамятных времён) и символьные ссылки (появившиеся в 2006м)?


                              1. Lsh
                                04.04.2016 00:36

                                А можно для чайников, в чем разница?


                                1. khim
                                  04.04.2016 13:55
                                  +1

                                  Отличие в том на каком уровне всё интерпретируется.
                                  Reparse Point — это ошмёток от идеи создания "модульной фаловой системы": теоретически можно заставить обрабатывать каталог в файловой системе как угодно с помощью инсталляции драйвера, практически — есть только один драйвер, установленный по умолчанию, который используется как замена символьным ссылкам. Как несложно догадаться из описания — всё это происходит на уровне NTFS, обрабытывается локально и до уровня CIFS не доходит (то есть если на сервере есть Reparse Pointы, то клиенты про это никак узнать не могут). Однако в силу построения всей конструкции на файлы Reparse Point указывать не могут (драйвер контролирует что "внутри" Reparse Point'а) и на другие машины в сети — тоже (драйвер находится "ниже" уровня CIFS).
                                  Symbolic Links — это специальные объекты файловой системы, никакой магии, просто строчка "сюда не ходи, ходи туда", обрабатываются в ядре — но уже на клиенте и, соответственно, могут быть на оном клиенте увидены, а также могут указывать на другие машины в сети. В связи с такой нелокальностью для их создания нужны специальные права, по умолчанию доступные только админу (что есть IMNSO, бред). Могут также указывать на файлы, не только на каталоги — но "чтоб жизнь мёдом не казалась" это нужно знать в момент создания символической ссылки (что есть IMNSHO ещё больший бред: если вы уже добавляете сущность из POSIX, то зачем ломать всем известную семантику?).
                                  Как-то примерно так.


                                  1. MacIn
                                    05.04.2016 22:09
                                    -1

                                    но «чтоб жизнь мёдом не казалась» это нужно знать в момент создания символической ссылки (что есть IMNSHO ещё больший бред: если вы уже добавляете сущность из POSIX, то зачем ломать всем известную семантику?).

                                    Давайте попытаемся объективно прикинуть, почему это так. Для работы с файлами и каталогами будут использоваться разные API, значит для работы с сущностью нам надо знать, что это — директория или файл. Возможно, это связано и с разными методами синхронизации данных (размеры файлов и пр) в условиях сети и возможных отключений.


                                    1. MacIn
                                      05.04.2016 22:14
                                      -1

                                      Это, кстати, по поводу вашей проблемы с пакетным менеджером — вот создали мы симлинк на \abc\def, как ОС должна обрабатывать def — как файл? Или как директорию? А если на том конце def'а нет и мы это проверить не можем?


                                      1. khim
                                        05.04.2016 22:24

                                        Симлинки сами по себе не обрабатываются. Никак. Вообще. Это просто строка.

                                        Будет обращение — тогда и разберётесь.


                                        1. MacIn
                                          05.04.2016 23:50

                                          Тяжело, да. Попробую еще раз:
                                          При обращении. Да.

                                          симлинк на \abc\def, как ОС должна обрабатывать def — как файл? Или как директорию? А если на том конце def'а нет и мы это проверить не можем?


                                          1. khim
                                            06.04.2016 01:13

                                            Любой симлинк должен иметь возможность указывать в «пустоту» (на удалённый объект) и ОС должна корректно это обрабатывать.

                                            А если на том конце def'а нет и мы это проверить не можем?
                                            Вот с этого, пожалуй, стоит и начать.

                                            Какую-такую операцию вы пытаетесь осуществить, для которой важно знать — должен быть объект «с того конца» файлом или каталогом, но при этом не важно — существует он или нет?


                                    1. khim
                                      05.04.2016 22:23
                                      -1

                                      Мне совершенно наплевать на ваши «объектные менеджеры», «синхронизацию данных» и прочее. Симлинк — это просто синоним другого объекта, ни больше, ни меньше. Хотите заводить свои, особенные, структуры данных — заводите. Но зачем ломать известную сементику-то?

                                      P.S. Напомнить за что в своё время Sun засудил Microsoft, нет? Вот и здесь — та же история. Только в это раз она «стреляет» в обратную сторону: пока в Windows не будет, в частности, нормальных симлинков — говорить о какой-либо совместимости с Linux нельзя. И есть у меня подозрением что подобным «гитик» там… есть. Для «вау какая фенечка» на выставке — годится, для работы — нет.


                                      1. MacIn
                                        05.04.2016 23:52

                                        Мне совершенно наплевать на ваши «объектные менеджеры», «синхронизацию данных» и прочее

                                        А мне — плевать на ваше видение «правильного» симлинка. Это просто предположение о том, почему оно так устроено.

                                        Но зачем ломать известную сементику-то?

                                        С какого-то перепугу вы решили, что все кругом, в том числе не в Linux системах должны реализовывать некоторую сущность 1 в 1 как в Linux.


                              1. MacIn
                                05.04.2016 22:05
                                -2

                                Нет. Вы говорите о линках (каких бы то ни было) в файловой системе, а я о симлинках Object Manager'а. Ведь по идее файловая система — это объекты в пространстве OM, нет? И симлинки там были (например, DOSовский симлинк 'C:', который указывает на '\Devices\HardDiskVolume0' с очень старых времен. С NT4 как минимум.


                                1. khim
                                  05.04.2016 22:39
                                  -1

                                  Файловая система — это файловая система. Существование Object Manager'а — это деталь реализации которая меня волновать не должна. Также как и запрет на использование всяких букв (ну там ":", "\") в именах файлов. Какой к бесу Object Manager если мы обсуждаем запуск Linux программ???

                                  Впрочем с ограничениями на именование ядро NT вроде всегда сравлялось, это ограничение чисто Win32 API. А вот симлинки… интересно насколько глубоко у них это ограничение сидит…


                                  1. MacIn
                                    05.04.2016 23:59

                                    Какой к бесу Object Manager если мы обсуждаем запуск Linux программ???

                                    Обычный. Это предположение о том, почему есть ограничение. При чем тут Linux программы, если мы обсуждаем поведение симлинка в Windows? Это ограничение — указание типа «на том конце» — оно существует независимо от того, будем мы Linux программы запускать или нет.

                                    это деталь реализации которая меня волновать не должна

                                    Я и не говорю, будто должна. Я говорю, что там тоже есть симлинки, 100 лет как.

                                    Файловая система — это файловая система.

                                    Это замечательное наблюдение. Особенно если вспомнить про proc, например, да? Или про /dev/hd0?
                                    Ах да, «все суть файлы». Ну, тут все суть объекты.


                1. Zapped
                  01.04.2016 16:35
                  +1

                  и поддерживает, и создаёт
                  см. https://cygwin.com/cygwin-ug-net/using-cygwinenv.html

                  /winsymlinks
                  

                  ещё про поддержку символьных ссылок в Cygwin — https://cygwin.com/cygwin-ug-net/using.html#pathnames-symlinks

                  З.Ы. следите за обновлениями...


                  1. khim
                    01.04.2016 16:45

                    Вы пробовали пример выше исполнить с этой опцией? Попробуйте — а потом расскажите об ощущениях. Только не забудьте про разницу между winsymlinks:native и winsymlinks:nativestrict — а то полного "экспиенса" не получите...


                    1. Zapped
                      01.04.2016 16:51
                      +1

                      вчитался в пример
                      понял о чём Вы
                      только не понял — а нахуа такое на практике? ))))) или Вы про полное соответствие стандарту?


                      1. khim
                        01.04.2016 17:12
                        +2

                        Совсем такое — не очень нужно. А вот создавать симлинки "ведущие в никуда" приходится постоянно.
                        Очень просто: ставите вы два пакета — и в одном из них идут симлинки на файлы из второго. Причём этот пакет с симлинками пресловутый apt-get легко может поставить до второго — тогда симлинки уже будут, а файлов или каталого, на которые они указывают — ещё не будет. Это человек может догадаться что симлинк живущий в /usr/bin, скорее всего, должен указывать на файл, а симлинк в /usr/lib/perl5 — будет указывать на файл, если он оканчивается на .pm и на каталог если расширения нет. А пакетному менеджеру что делать? Весь дизайн переделывать только из-за того, что кто-то когда-то в Microsoft решил что-то там "прооптимизировать"?
                        P.S. Бонусные очки — за два пакета в каждом из которых есть симлинки на файлы из второго :-)


                        1. Mingun
                          03.04.2016 19:18

                          А зачем тогда делали систему зависимостей? Если пакет содержит симлинки на файлы другого пакета, то он от него зависит и это обязанность разработчика этого пакета задекларировать эту зависимость. Тогда и гадать не придется. А иначе непонятно, что делать в случае, если тот второй пакет так и не поставиться.
                          В случае циклических зависимостей разбиваем каждый пакет на 2 — на зависимую часть от другого и на независимую. Сначала ставим независимые части, потом зависимые.


                          1. khim
                            03.04.2016 21:53

                            Если пакет содержит симлинки на файлы другого пакета, то он от него зависит

                            Совершенно необязательно. Зависимость может быть и опциональной. Скажем есть у вас символьная ссылка с libsomething.so на libsomething.so.... Установите пакет — будет вам линковка с разделяемой библиотекой, не установите — не будет.
                            А иначе непонятно, что делать в случае, если тот второй пакет так и не поставиться.
                            А ничего не делать: в стандарте всё прописано. stat вернёт ENOENT, lstat вернёт информацию про саму ссылку (если мне это для чего-то нужно).
                            Если же между пакетами циклическая зависимость — ну тогда пакетный менеджер должен разрулить всё и обеспечить транзакционность.
                            В случае циклических зависимостей разбиваем каждый пакет на 2 — на зависимую часть от другого и на независимую. Сначала ставим независимые части, потом зависимые.
                            Ну то есть как я предполагал: переделать дизайн всей системы. Спасибо, но… спасибо не надо. Мне лень этим заниматься — это у Microsoft'а должна болеть голова о том, как обеспечить поддержку стандарта, а не у меня — о том как поддержать это глючное поделие.
                            Если Microsoft не решит эту (и кучу других подобных) проблем, то я боюсь разработчики будут относиться к этим багрепортам так же, как относятся к багрепортам с систем со всякими nVidia'вскими драйверами: просить проверить на нормальной системе — а потом уже жаловаться.
                            Собственно так же, как они сейчас реагируют на жалобы на то, что что-то не работает под CygWin'ом или MinGW.


                            1. Mingun
                              03.04.2016 23:10

                              Мне все же кажется, что стандарт описывает нехитрую ситуация — что делать, если структура попортилась и символьная ссылка стала указывать в никуда. Завязываться на это — не очень хорошая идея, я бы сказал. Даже если она стабильна и десятки лет живет, иначе, как костыль это не воспринимается. Разве в этом стандарте сказано, что можно/нельзя создавать заведомо некорректные ссылки?



                              Опциональные зависимости, завязанные на таких особенностях, это, конечно, остроумно, но вряд ли мудро. Что ни говори, а зависимость — это зависимость. И управляться она должна пакетным менеджером. Нужна зависимость одной библиотеки от другой библиотеки — ставим пакет, зависящий от обеих библиотек. Это вроде бы и есть Unix-way, разве нет?


                              1. khim
                                04.04.2016 14:01

                                Разве в этом стандарте сказано, что можно/нельзя создавать заведомо некорректные ссылки?
                                Именно так и сказано. Английским по байтам: the file named by the path1 argument need not exist when the link is created.
                                Это вроде бы и есть Unix-way, разве нет?
                                Давайте не рассусоливать про Unix-way, а? Скажу только что пакетные менеджеры — это довольно-таки позднее изобретение в мире Unix и завязываться на их существование — не стоит.


                              1. MacIn
                                05.04.2016 22:10

                                если структура попортилась и символьная ссылка стала указывать в никуда

                                Не просто попортилась. Скажем, сетевой лаг, отключение.


                                1. khim
                                  05.04.2016 22:32

                                  Скажем, сетевой лаг, отключение.
                                  И как, чёрт побери, знание того куда указывает симлинк (на файл или на каталог) мне поможет если сеть вдруг отключилась?


                                  1. MacIn
                                    06.04.2016 00:03

                                    Возможно, кеширование метаданных, не знаю.


              1. Mingun
                03.04.2016 19:19

                А что, на линуксовых машинах симлинки на FAT-флешках работают?


                1. khim
                  03.04.2016 21:54

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


                  1. Mingun
                    03.04.2016 23:12

                    Вообще, я несколько прозрачно намекал на то, что аргумент "потому что на флешках используется FAT" в том, почему cygwin не использует родные средства винды для символических ссылок, выглядит натянутым. Есть родные средства — используй их по умолчанию, а не пытайся сделать костыльно, но чтобы у всех работало. Путь костыли включают те, кому надо, чтобы и на FAT работало.


                    1. khim
                      04.04.2016 14:03

                      С этим я согласен. Если бы родные средства были — вопросов бы не было. Но их нет. Вернее они есть — но не такие, какие нужны.


            1. Stamerlan
              03.04.2016 17:41

              Потому что в качестве ФС может быть FAT. Если установить переменную $CYGWIN в winsymlinks:native, то будут создаваться windows-симлинки


              1. khim
                03.04.2016 21:57

                К сожалению главная проблема — даже не в FAT'е. На FAT'е хардлинки, к примеру, тоже не работают — и для этого у CygWin'а нет никаких опций. И даже winsymlinks:native не всегда будет создавать нативные симлинки. Я выше говорил почему. Потому что симлинки в Windows ущербные, увы.


                1. MacIn
                  05.04.2016 22:16

                  Это не ущербность. На POSIX свет клином не сошелся, чтобы несоответствие ему объявлять ущербностью.


                  1. khim
                    05.04.2016 22:36

                    В статье про интеграцию подсистемы Linux — это несомненная ущербность. В тех случаях когда POSIX делает одно, а Linux другое — ещё можно о чём-то говорить, если же они «сходятся во мнении», то вопрос исчерпан: либо ты делаешь по стандарту — либо «это глючное поделие мне и даром не нужно».

                    Пока такое ощущение, что вся это подсистема выглядит как dog and pony show, уж извините.


                    1. MacIn
                      06.04.2016 00:07

                      А вы знаете, как оно будет работать в POSIX под Windows в рамках данного проекта? Я-то думал, мы существующее положение дел в NT/Win32 обсуждаем. Может, добавят какой костыль, может снимут это ограничение — чего шкуру неубитого медведя-то делить?


        1. Zapped
          01.04.2016 16:36

    1. Peter1010
      31.03.2016 13:27

      Так они уже в винде давно есть, MKLINK


    1. chupasaurus
      31.03.2016 13:27

      Сделали ещё в Vista/2008.


      1. Lirein
        31.03.2016 14:50
        +4

        Я их ещё с четвёртой NT помню.


        1. vladon
          31.03.2016 22:28
          +3

          В четвёртой NT были только хардлинки, симлинки появились начиная с Windows 2000 (NTFS 3.0)


        1. MeG
          03.04.2016 17:41

          В NT4.0 (NTFS4) были реализованы только Hard Links ( «жёсткие» ссылки, как в *nix ).
          В 2000-ом (NTFS5) добавили поддержку Junction Points (аналог символических ссылок, но только для папок).
          А вот уже в Vista (NTFS5) появились полноценные Symbolic Links.


      1. vladon
        31.03.2016 22:27

        это фича NTFS ещё с NTFS 3.0 (на каталоги), т.е. с Windows 2000
        с 3.1 — на любые объекты, т.е. с XP


  1. Lsh
    31.03.2016 13:02
    +9

    Хм… А у файлов теперь будет executable bit или будет bash.exe? =)


    1. khim
      01.04.2016 00:03
      +3

      Вы не поверите, но в Windows уже есть executable bit — причём давно. Особенно смешно наблюдать лицо человека пытающегося запустить файл на котором такого бита нет. Копируешь — запускается. Оригинал — ни в какую.


      1. Athari
        02.04.2016 01:44
        +1

        Ссылку на доки можно?


        1. khim
          02.04.2016 04:43

          Какие нафиг "ссылки на доки"? Правой кнопкой щёлкните по любому файлу и посмотрите что у вас окошке с правами доступа написано. Или вы про Win 32 API? Тогда — FILE_EXECUTE, 6й бит, описан в WinNT.h ...


    1. none7
      03.04.2016 17:40

      Он там давно есть. Смотрите в глубине вкладки безопасности атрибут «траверс папок / выполнение файлов». Если снять галочку, то ни .exe ни .bat файлы запускаться не будут. Файлов без расширений это скорее всего тоже касается. В прочем сомнительно, что NTFS сможет не лагать храня индивидуальные правила безопасности для каждого файла.


  1. paxlo
    31.03.2016 13:07
    -18

    С 1 апреля


  1. tumikosha
    31.03.2016 13:13
    -17

    Недавно была новость про убийство одного из авторов Ubuntu кажется. Нет ли тут связи?


    1. SamDark
      31.03.2016 13:36
      +2

      Debian. Нет.


      1. Ununtrium
        31.03.2016 14:37
        +3

        … и не выйграл, а проиграл.


        1. Meklon
          31.03.2016 18:58
          +8

          Просто интересно, так как часто вижу. Я без претензий. Вы реально произносите слово как выЙграл?


          1. mukizu
            31.03.2016 22:35
            +1

            Вы так говорите, будто произносите выИграл ;)


            1. MacIn
              31.03.2016 22:42
              +6

              А как надо?


              1. mukizu
                31.03.2016 22:49
                +1

                Ну, везде где я жил, люди как правило таки произносят через «и» краткое, ровно также как и молоко произносят через «а».

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


                1. Zverienish
                  03.04.2016 17:39
                  +2

                  У нас все говорят «выиграл». Хм, даже и не думал что где-то по другому.


              1. maxshopen
                01.04.2016 02:49

                Забавно, что все кого я знаю говорят выИграл. Но правильно — выЙграл, хотя первый вариант тоже допустим. Я сам только сейчас об этом узнал ))
                http://new.gramota.ru/spravka/buro/search-answer?s=283580


                1. MacIn
                  01.04.2016 03:33

                  Но правильно — выЙграл,

                  Такого по ссылке не указано. Сказано, что это произношение — предпочтительное.


                  1. maxshopen
                    01.04.2016 04:41

                    Ну я лично исхожу что предпочтительно — это более правильно. А так то да, можно и в[ы]грать


                    1. toxicdream
                      01.04.2016 08:23
                      +1

                      Не путайте написание и произношение.
                      Пишем "выиграл", читаем (предпочтительное произношение) "выйграл".


                      1. maxshopen
                        01.04.2016 21:18

                        Я говорил исключительно только про произношение, поэтому даже теоретически не мог ничего попутать


                1. rprokop
                  01.04.2016 15:11
                  +1

                  И с ударением на "й"?..
                  43 года живу на свете, вживую ни разу не слышал "выйграл", только в комментариях читаю.


                  1. mukizu
                    03.04.2016 18:55

                    С ударением на первый слог.


                    1. rprokop
                      04.04.2016 12:11

                      Не разу такого не слышал.


                      1. mukizu
                        04.04.2016 21:33
                        +3

                        Ну, я вот «Не разу» тоже ни разу не видел. Все случается когда-нибудь в первый раз. :)


          1. Ununtrium
            07.04.2016 15:47
            +1

            Ого, даже не подозревал что тут такое обсуждение :) Ну лень было спеллчекер включать, простите. Да, если интересно, «выиграл» произношу как «выйграл».


            1. Meklon
              07.04.2016 16:52
              +1

              Спасибо. Я просто эту ошибку постоянно вижу и мне жутко режет глаз, так как я и пишу и произношу выИграл. И все вокруг меня. Возможно региональные особенности. Я из Краснодара.


              1. Ununtrium
                09.04.2016 21:13

                Понятно, я с северо-запада и вообще не в РФ сейчас :)


        1. AlexBin
          01.04.2016 12:25
          +2

          Пройграл


  1. Ununtrium
    31.03.2016 14:43
    -10

    Кто-нибудь объяснит, с чего тут кипятком писать? Вау, теперь grep на виндовсе можно использовать.


    1. petro25
      31.03.2016 20:34

      grep, sed и awk + регулярные выражения — реально мощь.
      Например можно будет парсить логи и т.д.
      Сейчас я на Windows не знаю аналогов для grep, sed и awk.


      1. navion
        31.03.2016 22:08
        +1

        PowerShell такое умеет. Синтаксис другой и не всегда компактный, зато со строками можно работать как с объектами:
        https://blogs.msdn.microsoft.com/zainnab/2007/07/08/grep-and-sed-with-powershell/
        http://windows-powershell-scripts.blogspot.com/2009/06/awk-equivalent-in-windows-powershell.html



      1. vlivyur
        07.04.2016 15:19

        Log parser если дело только в логах. На SQL-подобном можно писать запросы.


    1. fornit1917
      03.04.2016 17:41

      Лично меня это новость радует, т.к. возможно для большинства моих задач станут не нужны vagrant+vbox, которые я сейчас активно использую. Можно будет обходиться «родными» средствами винды, которые, вероятно, будут работать пошустрее чем vagrant+vbox. А если там еще и docker полноценно будет работать, то вообще красота.


  1. NickKolok
    31.03.2016 15:58
    +2

    Возврат к практике трёх "Е"?


    1. 6opoDuJIo
      31.03.2016 16:04
      +1

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


  1. dvserg
    31.03.2016 16:32

    Про 1 апреля уже было?


    1. cold147
      31.03.2016 18:33
      +1

      Не было
      Только от вас


  1. alemiks
    31.03.2016 17:19
    +4

    уже есть где-нибудь комментарий Линуса по этому поводу?)


  1. Krey
    31.03.2016 19:06
    +1

    И каково теперь будет называть OS GNU/Linux просто линуксом в то время как сам линукс там физически отсутствует. Звучит дико уже в этой статье. Столман, привет.


    1. VolCh
      31.03.2016 19:57

      GNU/LinuxOnWindows


      1. YuukiHogo
        03.04.2016 17:36

        К слову, действительно, в топике Linuxом и не пахнет — в чистом виде GNU


  1. izeberq
    31.03.2016 20:06
    +11

    Скоро на stackoverflow: "Как пропатчить KDE под Win10?"


    1. khim
      01.04.2016 00:06
      +1

      Сначала сделайте порт KDE в текстовый режим!


  1. MacIn
    31.03.2016 20:49
    +6

    Почему упорно называется "Windows subsystem for Linux", если это Linux subsystem for Windows?
    lxss.sys — это не LinuX SubSystem ли?


    1. Halt
      04.04.2016 14:13
      +1

      Наверное по той же логике, почему в директории WOW64 лежат 32-битные файлы.


      1. MacIn
        05.04.2016 22:18

        Ну это-то как раз имеет смысл — system32 зарезервированное имя. А xyz subsystem for Windows, где xyz скажем OS/2 или что-то там еще, использовалось с самого основания системы. Тот же Win32 ss.


        1. Halt
          06.04.2016 07:20

          Никакого смысла в этом нет. Это полный бред.

          • Во-первых, доступ к системным директориям должен происходить не по абсолютному пути, а с помощью системного вызова.
          • Во-вторых, старые 32-битные приложения которые ничего не знают о 64 битах полезут в system32 и внезапно обнаружат там 64 битные файлы.
          • В-третьих, был шанс нормально разграничить старое и новое, когда 64 бита только появились на винде, но они это не сделали. Теперешняя каша никуда уже не денется.


          Неужели было сложно сделать как в *nix? /usr/lib32 (system32) для 32-битных, /usr/lib64 (system64) для 64.


          1. khim
            06.04.2016 14:15

            Во-вторых, старые 32-битные приложения которые ничего не знают о 64 битах полезут в system32 и внезапно обнаружат там 64 битные файлы.
            Не обнаружат.

            Во-первых, доступ к системным директориям должен происходить не по абсолютному пути, а с помощью системного вызова.
            В идеальном мире — да. Но Windows живёт не в идеальном мире, а в реальном, с реальными программами. Отсюда и все эти редиректоры и LLP64 режим (aka IL32P64 — когда даже long'и в 64 битном режиме 32 битные) и прочее.

            Неужели было сложно сделать как в *nix? /usr/lib32 (system32) для 32-битных, /usr/lib64 (system64) для 64.
            А как потом заставить пользователей это покупать? Если у них программы не работают и/или падают после перекомпиляции? В мире *nix у людей не было выбора: на серверах им нужно было как-то работать с системами >4GiB, так что пришлось «жрать кактус», а Windows только-только перебралась на 64 бита! Чуть не половина пользователей до сих пор используют 32-битные системы!


  1. sepich
    31.03.2016 21:26
    +14

    Историческое событие — вот так процент Ubuntu на десктопах стал больше чем у Windows! ;)


    1. Newbilius
      01.04.2016 10:14

      Не станет, т.к. Windows 10+Ubuntu долгое время будет меньше, чем Windows 10+8+7+Vista+XP+сколько-там старых серверных...)


  1. Biga
    31.03.2016 21:45
    +12

    Сначала над вами смеются, потом добавляют в качестве подсистемы,… Остается только гадать, сколько продержится Windows.


    1. Error1024
      01.04.2016 09:29
      +1

      Так это может обратный эффект сделать — отсутствие необходимости ставить LINUX т.к. и в Windows все работает.


  1. Sergey6661313
    01.04.2016 08:38

    Ну почему именно ubuntu? мне не нужно большинство из десятков тысяч бинарных пакетов в архивах Ubuntu. Будет ли возможность организовать себе archlinux, gentoo, nixos и т.п?
    Лучше б организовали windows on windows. Такой чтобы можно было нативно запускать изолированные windows программы.


    1. VolCh
      01.04.2016 09:15
      +3

      По некоторым оценкам Ubuntu самый популярный дистрибутив в мире и по подавляющем большинству входит в тройку лидеров (все "родственники" — Debian, Ubuntu, Mint), так что выбор разумный.
      И, насколько я понимаю, Ubuntu в Windows является лишь предустановленным юзерспейсом из Ubuntu над подсистемой LinuxOnWindows, совместимой по API с Linux kernel API и работающей поверх ядра Windows NT (так же как поверх него работает подсистема WinAPI и работали (?) подсистемы Posix и OS/2 ). И теоретически никто не мешает вам поставить свой юзерспейс из любого другого дистрибутива, только патчи ядра не сможете применять из него, довольствуясь примененными из Ubuntu. Ну и, возможно, реакции MS на баги LoW под другими юзерспейсами не будет вообще и уж точно приоритет будет меньше.
      Windows Server 2016 будет поддерживать три вида контейнеров: Windows Server Containers (шаринг ядра для WinAPI контейнеров), Hyper-V Containers (каждый со своим ядром) и Docker (тут, судя по всему, шаринг ядра для WinAPI и Linux kernel API контейнеров) — подробнее https://msdn.microsoft.com/en-us/virtualization/windowscontainers/containers_welcome. Что из этого будет (и будет ли) в десктопной винде из коробки и что можно будет прикрутить ручками (скорее всего с нарушением лицензии), если не будет, пока не ясно.


      1. Lirein
        01.04.2016 12:31

        В Windows 10, так то Device Guard есть, но требует поддержку SLAT и VT-d от оборудования. Позволяет запускать отдельные приложения в песочнице.


        1. Sergey6661313
          02.04.2016 14:22

          никак не пойму почему везде при поиске пишут «Введение в Device Guard», «Обзор Device Guard», но нигде нет как его запустить?
          Скинте пример как с его помощью запустить например notepad.exe?


          1. navion
            02.04.2016 15:19

            Тут вроде было.


            1. Sergey6661313
              02.04.2016 18:32

              дык это никакая не песочница… это просто система доверенных/недоверенных программ… От мусора внутри программы это не спасёт потому что я будут вынужден для запуска этой программы один фиг сделать её доверенной… херня короче.


              1. navion
                02.04.2016 19:48

                От мусора из интернета ничего не спасёт, но DeviceGuard и не предназначен для защиты домашних компьютеров. А про песочницу Lirein немного напутал — в ней живёт LSA и сама проверялка, а не приложения.


    1. mezastel
      01.04.2016 09:44
      +1

      Так вроде это Microsoft App-V.


  1. lightman
    02.04.2016 08:16

    Лично я очень рад. Для меня это весомейшая (и единственная) причина переходить с 7 на 10. Стабильный виндовый GUI + мощная никсовая консоль — о таком можно было только мечтать.
    Но вызывают опасения кодировки. Виндовая консоль и в 2016 году продолжает влачить существование с древней досовоской однобайтовой OEM кодировкой. Будет очень грустно если при переходе в bash, там будет выставляться она же (вместо славного UTF-8).


    1. Athari
      02.04.2016 10:46
      +2

      chcp 65001?


      1. lightman
        03.04.2016 10:40
        +1

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


    1. PsyHaSTe
      03.04.2016 03:15

      image


  1. Aeliot
    03.04.2016 17:40
    -4

    Видимо испугались, что разработчики массово уходят (ушли) на linux. Сейчас по многим вопросам мануалов под винду уже не найти (очень сложно найти). А где разработчики, туда и пользователи подтягиваются. Добровольно или принудительно.
    Потому и бьют по одному из главных вопросов: «А как это установить/запустить на винде?»


  1. gaidukav
    03.04.2016 17:40
    +1

    Если там в нативном режиме заработает связка Apache и mod_perl — мои аплодисменты!
    А то уже надоело искать совместимые версии Apache for Win32/64 + Strawberry Perl + mod_perl.


  1. rvodka
    03.04.2016 17:40
    -1

    Была же уже такая шляпа, как Windows Services for UNIX. В чем отличия?


  1. x_sourer
    03.04.2016 17:41

    Ситуация заставляет меняться. И зарабатывать не на ОС и базовом ПО, а на сервисах. Акценты развития смещаются, иначе можно потерять весь рынок…


  1. Alex_GDI
    03.04.2016 17:41
    +1

    Теперь разработчикам Cygwin будет скучно.


  1. Manulable
    03.04.2016 17:41

    Отлично Майкрософт! Даешь андроид подсистему в Windows Phone?!


    1. khim
      03.04.2016 22:14

      Вы почти угадали. То, что они сейчас выкатили — это ошмётки от попытки сделать именно это.
      Кто-то в руководстве Microsoft осознал, что таким макаром Windows может последовать по стопам OS/2 и обрезал проект так, чтобы минимизировать потенциальную опасность.


  1. VerdOrr
    03.04.2016 17:42

    Очень логичный и вписывающийся в общую стратегию (расширение и упрощение средств кроссплатформенной разработки) шаг чтобы удержать адептов Visual Studio от перехода на альтернативные платформы.


  1. FlarGargoyl
    03.04.2016 17:42

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


    1. Lsh
      04.04.2016 00:33

      Пожалуй, пора сдуть пыль с ноута с подпиской на инсайдер превью.

      А сейчас еще можно бесплатно получить инсайдер превью или нужно иметь лицензию на винду?


      1. FlarGargoyl
        04.04.2016 08:57

        https://insider.windows.com/ — вроде, можно и без оной. Стоит учесть, если захочется отказаться от превью-билдов, возможно, придется реинсталлить ось. Подписался на "галимом" ноуте ещё в прошлый четверг, ждём-с когда прилетит.


  1. FlarGargoyl
    05.04.2016 13:28

    ISO-образы с новым релизом доступны
    https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewiso?OCID=WIP_r_14_Body_ISOS
    Разумеется. подписаться для доступа надо. Но можно тестить на виртуалке итд.


    1. ExileeD
      05.04.2016 14:34

      Этот релиз не включается в себя bash shell


      1. FlarGargoyl
        05.04.2016 14:37

        да, я «промахнулся» кнопкой «ответить» — хотел воткнуть в предыдущую цепочку. Можно не свою ось обновлять или лепить отдельную, а сразу «воткнуть» нужный превью билд. Это я хотел сказать :)


  1. ExileeD
    07.04.2016 18:33

    Релиз с bash shell вышел. Первое что заметил не стартуют приложение которые взаимодействуют с сокетом.