Мы все очень ждали презентации Windows 11, но как-то нам ее подпортили. Незадолго до презентации слили рабочий билд и поэтому во время ивента ничего по-настоящему нового мы не увидели. Кроме одной вещи: Android-приложения на винде!

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


Ведь не так давно Microsoft сильно облажались со своей Windows на архитектуре ARM, в которой очень плохо работали x86-приложения. А если у них ничего не получилось тогда, то по какой причине получится сделать фактически тоже самое сейчас, но только наоборот?

Разбираясь в этих вопросах мы буквально прозрели. И поняли, что на самом деле у Microsoft очень далеко идущие планы.

Поэтому сегодня мы узнаем как работает Rosetta от Microsoft, а заодно разберемся, чем эмулятор отличается от транслятора? Узнаем, как Windows стал на Линуксом? И поразмышляем о том, как Microsoft планируют завоевать мир?

Эмуляторы


Начнем с небольшой теоретической части. Программы общаются с процессором при помощи определенного набора инструкций. И для каждой архитектуры этот набор инструкций разный. Поэтому для того, чтобы запустить приложение, написанное под архитектуру ARM на процессоре Intel с архитектурой x86 надо как-то пояснить процессору, что от него хочет чужеродная программа.

Сделать это можно разными способами. И один из самых распространённых — эмуляция.

Например, эмуляторов Android под Windows есть огромное множество. Но в чём же тогда проблема и зачем придумывать что-то еще?



Дело в том, что эмуляторы — неэффективны. По большому счету, эмулятор — это программа, которая прикидывается железом. То есть эмулятор — это софт, который пытается имитировать аппаратную часть платформы.

Программа, засунутая в эмулятор, даже «не понимает», что сейчас она находится в чужеродной среде. Она как Нео внутри «Матрицы». Вроде вокруг реальный мир, но иногда закрадываются сомнения. Потому что-то там подлагивает, подглючивает, ложки гнутся. Ну вы понимаете. А происходит это потому, что эмуляция несёт огромные накладные расходы.

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

И ладно, если речь идет про какую-нибудь простенькую восьмибитную консоль типа Dendy. Такие эмуляторы не смотря на тотальную неэффективность, будут работать быстро даже на смартфоне времен Windows Mobile. Но вот эмулировать какой-нибудь процессор Intel куда сложнее.

Отсюда и тормоза в Windows на ARM. Ведь Microsoft использовал именно эмулятор для запуска x86-приложений. Кстати, эмулятор назывался WOW64, но получилось совсем не WOW, как вы знаете.

Более того, до сих пор в Windows на ARM не поддерживается эмуляция 64-битных приложений, только 32-битных, то есть именно x86, а не x64, что еще сильнее усугубляет ситуацию. Но этому есть объяснение.

Эмулятор WOW64 изначально был придуман для запуска 32-битных приложений на 64-битной Windows, то есть под важную задачу Microsoft даже эмулятор новый не сделали, а скорее всего просто модифицировали старый.

Но в прошлом году Microsoft обещали, что поддержка 64-битных приложений появится, и очень скоро. И возможно она будет реализована совсем по-другому.

Как, спросите вы? Давайте для примера вспомним как это сделал Apple при переходе с процессоров Intel на свои собственные чипы на архитектуре ARM. При помощи невероятной штуки под названием Rosetta 2.

Ведь там на ARM'е каким-то чудесным образом запускаются x86-приложения практически без потери производительности.

Транслятор




Что такое Rosetta 2? По научному, — это двоичный транслятор, то есть переводчик. Rosetta просто переводит набор инструкций одной архитектуры в другую и всё.

Но чем же это лучше эмуляции? Дело в том, что эмуляция всегда происходит в реальном времени. А Rosetta переводит приложение заранее во время его установки или при первом запуске.

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

Но, естественно, всё не так радужно! Иначе никто бы не собирал разные версии приложений под разные архитектуры. У трансляторов есть серьёзные недостатки.

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

И этот процесс называется Just In Time компиляцией. Или JIT-компиляцией.

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

И этот эффект я сам постоянно наблюдаю на новых Mac. Например, неадаптированный Блендер, через Rosetta работал быстрее, чем нативно на моем MacBook Pro 16. Но и за это приходится платить. Как думаете чем? Вашим SSD-диском. Переведенный код занимает много места, а динамическое кэширование изнашивает ресурс SSD. В особенности, такой эффект наблюдается на тяжеловесных программах, которые еще не пересобрали под ARM. Поэтому, приходится выбирать либо быстрая работа, либо долгоживущий SSD.

Intel Bridge




Но почему мы так долго говорим про Apple, если мы тут Windows 11 обсуждаем?

Дело в том, что для запуска Android-приложений в новой Windows, Microsoft решили сделать, примерно тоже самое, что сделали купертиновцы.

Вместе с Intel они разработали технологию Intel Bridge, которую они сами называют пост-компилятор. Но, по сути, это такой же двоичный транслятор.

Microsoft описывает эту технологию так:

«Создается нативное прокси-приложение которое, выступает мостиком между моделью приложения Android и моделью Windows приложения».

Иными словами, как и с Rosetta. Приложение будет переведено в нативный код еще на этапе установки. А недоступные фрагменты будут транслироваться на лету.

А с учетом того, что Android-приложения в своей массе достаточно простые почти не возникает сомнений, что с переводом будет всё в порядке.

WSL


В случае Windows, трансляция кода с x86 на ARM — это не основная сложность. Ведь тут еще и несовместимость на уровне ОС.

Android и Windows — это совершенно разные системы. Android основан на модифицированном ядре Linux, а в будущем планирует перейти на чистое ядро Linux. А Windows — это просто Windows. С Linux у Windows нет ничего общего. Так каким же образом тогда будут запускаться Android-приложения?

И вот тут неожиданный момент. Оказывается, еще в 2016 году Microsoft представили подсистему Windows для Linux, Windows Subsystem for Linux или WSL - Windows subsystem for Linux.



Это была специальная подсистема которая позволяла запускать Linux приложения в среде Windows. Система работала хорошо, но медленно, так как она работала поверх ядра Windows NT.

Запросы системы Linux переводились в запросы, понятные ядру Windows, и только потом отправлялись дальше. Это было долго.

Но в 2019 году анонсировали вторую версию подсистемы WSL 2, в которой ядро Linux работает параллельно ядру Windows, что ускорило работу системы в двадцать раз и фактически сделало Windows наполовину Linux.

g

То есть вы правильно поняли, WSL работает и на Windows 10, просто её нужно ставить отдельно. А вот в Windows 11 подсистема Linux будут встроена из коробки.

Как понимаете, наличие полноценного рабочего ядра Linux позволило Microsoft добиться максимальной совместимости с Android-приложениями.

По описанию Microsoft Android-приложения будут вести себя также как и обычные приложения Windows и этому можно верить:

  • Они будут открываться в отдельном окне
  • Можно будет закрепить приложение на панели задач
  • Будет полноценная поддержка: клавиатуры, мыши, тача и даже Bluetooth-наушников.
  • Более того — можно будет перекидываться файлами между Windows и Android-приложениями.
  • При этом уже сейчас Android поддерживает сборку универсальных APK, в которую можно запаковать бинарники как для ARM, так и для x86 архитектур? для чего нужно поставить одну галочку при сборке (разработчики исправьте меня в комментах если я не прав). Поэтому в каких-то случаях может Android-приложения даже не надо будет пропускать через транслятор Intel Bridge.

Да и вообще Android нынче уходит от классических APK и переходит на AAB, но в эту тему мы сейчас не будем углубляться.

Тем не менее, к реализации Android-приложений на Windows остаются вопросы.

Во-первых, что будет с поддержкой Google Play Сервисов? Скорее всего её не будет. Поэтому многие приложения, будут работать неполноценно, либо не будут работать вовсе.

И второй вопрос. А зачем это вообще всё надо? Ведь мобильными приложением на компе пользоваться просто не удобно.

Допустим, на MacBook я могу поставить массу приложений с iOS, но делать этого не хочется. Да на многих Windows-ноутбуках сенсорные экраны, но все равно.

Тогда зачем была проделана вся эта огромная работа по интеграции Linux в Windows, созданию транслятора Intel Bridge, доработки всей этой штуки под Android-приложения?

Будущее Windows




И тут мы готовы высказать смелое предположение. Нам кажется, что поддержка Android приложений это один из этапов полного отказа от ядра Windows NT и перехода на ядро Linux.

Да, это звучит дико. Но во-первых, не мы одни так думаем. Раньше такую же мысль высказал уважаемый человек, евангелист Open Source Эрик Реймонд.

Смотри сами как всё логично:

В мире почти все ОС основаны либо на Unix (как Mac OS) или Linux (Ubuntu, Android и прочее) и только Windows одна такая особенная сидит на своём ядре Windows NT, с которым куча проблем.

Во-первых, его нужно развивать на, что уходит много денег. А Linux-ядро бесплатное.

Во-вторых, в самом ядре куча уязвимостей, которые постоянно нужно прикрывать заплатками.

В-третьих, у Windows ничего не получилось в мобильном сегменте.

В-четвертых, Microsoft уже потратили много лет и ресурсов на создание подсистемы Linux под Windows.

Поэтому переход на ядро Linux вполне логичный шаг. Смотрите, как это может выглядеть:

Сначала мы все переходим на Windows 11 на архитектуре x86. И потихоньку привыкаем, что на Windows нормально работают Android-приложения.

Параллельно, благодаря стараниям Apple, все пилят софт под ARM архитектуру, отчего выигрывает и Microsoft. Поэтому мы потихоньку начинаем переходить на ARM Windows. На которой Android-приложения чувствует себя вообще как родные.

Постепенно Linux ядро становится основной средой, а Windows второстепенной.

А потом ядро Windows NT выпиливается, и Windows становится графической оболочкой для Linux. Ну а на ядре Windows NT остаются работать только серверы и различное оборудование, где наследие старой Windows никак не искоренить.

Это, конечно самый смелый сценарий. Тем не менее, он вполне возможен.

Но даже если этого не произойдёт. В любом случае поддержка Android-приложений — это очень интересный ход. И для Windows на ARM он точно будет полезен, вспоминая планшеты например!

Выводы




Ну и напоследок про сам Windows 11. Мы немного поигрались с новой Windows и у нас сложилось двоякое отношение.

С одной стороны, Windows 11 — это просто «десятка» с новой графической оболочкой. И это немного разочаровывает. Ведь если откинуть ядро Linux, которое теперь будет идти из коробки. Кроме дизайна под капотом не так многое поменялось, зато с совместимостью драйверов вроде проблем нет. Более того, до старого интерфейса, по-прежнему, очень легко добраться.

Тем не менее новый интерфейс действительно симпатичный и понятный.

В нем множество крутых фич как с меню «Пуск», так и с окнами. Привыкаешь к нему буквально за 10 минут. После чего возвращаться к старому скину совершенно не хочется. Еще раз — получилось красиво и удобно! А значит переход на новую Windows пройдет безболезненно и пользователи в целом останутся довольны. А это уже победа…

А там еще можно вспомнить про новый магазин без комиссии для разработчиков с блэкджеком. Но это уже совсем другая история и другие планы Microsoft по завоеванию мира магазинов приложений и ответ лаунчерам.

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


  1. ris58h
    11.10.2021 17:04

    Хочется верить что это один из шагов к объединению десктопа и мобильного (как Samsung DeX):

    1. Даём возможность запускать мобильные приложения на "настольной" ОС.

    2. Разработчики адаптируют мобильные приложения под большие экраны "чтоб два раза не вставать".

    3. Имеем кучу приложений работающих на мобильном подключенном к монитору.

    Это закрывает потребности большинства обычных пользователей. Poweruser-ы, конечно, останутся на профессиональном "настольном" софте.


    1. picul
      11.10.2021 17:09
      +5

      А вот как это будет на самом деле:

      1. Даём возможность запускать мобильные приложения на "настольной" ОС.

      2. Разработчики адаптируют десктопные приложения под экраны смартфонов, и пользоваться ими на ПК становится неудобнее.

      3. ПК умирает быстрее потому что ну ведь нет удобных приложений.


      1. pingwinator
        11.10.2021 17:12
        +2

        шаг 1 уже сделала епл, позволив запускать iOS апы на m1


      1. ris58h
        11.10.2021 17:52
        -4

        ПК умирает

        Так может туда ему и дорога? Зачем обычному пользователю дома настольный ПК, если мощи мобильного хватает?


        1. picul
          11.10.2021 18:00
          +6

          Что такого люди делают на ПК, для чего хватает мощи мобильного?

          И, как я написал, дело не в мощи, а в удобстве интерфейса, который будут адаптировать под мобилки в ущерб ПК-пользователям.


          1. ris58h
            11.10.2021 19:11
            -4

            Что такого люди делают на ПК, для чего хватает мощи мобильного?

            Сёрфят интернет в браузере, смотрят соцсети и ютуб, делают заметки, используют офис, совершают видео-звонки.

            Можете, например, зайти на Reddit и посмотреть что люди делают на мобильном уже сейчас, а до этого делали на ПК.

            в удобстве интерфейса, который будут адаптировать под мобилки в ущерб ПК-пользователям

            Сильное утверждение. Пример приведёте?


            1. picul
              11.10.2021 19:45

              Сёрфят интернет в браузере, смотрят соцсети и ютуб, делают заметки, используют офис, совершают видео-звонки.

              Все кроме работы с офисом большинство людей делают как раз на смартфоне. Тем, кто делает это на ПК - ПК удобнее, и вымирание ПК им ни разу не улыбается.

              Что до офиса - на мелком экране в него особо не потыкаешь.

              Можете, например, зайти на Reddit и посмотреть что люди делают на мобильном уже сейчас, а до этого делали на ПК.

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

              Сильное утверждение. Пример приведёте?

              Эмм, Windows 11?


              1. ris58h
                11.10.2021 19:55
                -3

                Если Вы имеете в виду использовать телефон как системный блок

                Я именно об этом и пишу начиная с самого первого комента в ветке.

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

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

                Эмм, Windows 11?

                Windows не пользуюсь уже давно. Что именно там не так?


                1. Vaitek
                  11.10.2021 20:15
                  +4

                  Весь софт переписываем под какой-нибудь электрон, и вот он везде тормозит работает одинаково.


                  1. ris58h
                    11.10.2021 21:17

                    Как вариант, но электрон недоступен для iOS/Android, а мобильные приложения на декстопе запускаются уже сейчас.


    1. pingwinator
      11.10.2021 17:17
      +1

      я сам довольно скептично относился к Декс. В самом начале(года 2-3 назад) было очень больно, сейчас же вполне жить можно. К сожалению, моб софт не особо адаптирую под большие экраны и довольно часто получается, что ты имеешь "большой экран, где много меньших экранов".

      Разработчики адаптируют мобильные приложения под большие экраны "чтоб два раза не вставать".

      уже было такое от мс, называлось continuum. Но чет не взлетело (док дорогой был, да и холодно девы приняли)


      1. ris58h
        11.10.2021 17:47

        Да там и сама ОС не взлетела, чего уж о фичах говорить.


  1. pingwinator
    11.10.2021 17:10

    Более того, до сих пор в Windows на ARM не поддерживается эмуляция 64-битных приложений, только 32-битных, то есть именно x86, а не x64, что еще сильнее усугубляет ситуацию. Но этому есть объяснение.

    Эмулятор WOW64 изначально был придуман для запуска 32-битных приложений на 64-битной Windows, то есть под важную задачу Microsoft даже эмулятор новый не сделали, а скорее всего просто модифицировали старый.

    Но в прошлом году Microsoft обещали, что поддержка 64-битных приложений появится, и очень скоро. И возможно она будет реализована совсем по-другому.

    уже в 11 венде завезли. x86_64 работает прям на ура


  1. MooNDeaR
    11.10.2021 17:44
    +2

    По прежнему не впечатлился. Может быть года через полтора-два переползу на W11, сейчас желания вообще никакого.


  1. GennPen
    11.10.2021 18:45
    +1

    В нем множество крутых фичей как с меню «Пуск», так и с окнами. Привыкаешь к нему буквально за 10 минут. После чего возвращаться к старому скину совершенно не хочется. Еще раз — получилось красиво и удобно! А значит переход на новую Windows пройдет безболезненно и пользователи в целом останутся довольны.

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

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

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

    Ну и по мелочи. Например зачем то убрали "зацепление" за край экрана когда переносишь окно на другой монитор. Хорошо что оставили "зацепление" за углы.

    Если работаете за одним монитором, то возможно эти проблемы не коснутся, да и в остальном все довольно неплохо и даже понравилось, но эти проблемы с "Пуском" и панелью задач меня крайне "расстроили". Где то видел программу заменяющую "Пуск" на W10, не успел ее опробовать. Но пока не исправят проблему хотя бы с панелью задач, решил что останусь пока на W10.


  1. singular_asm
    11.10.2021 19:31
    +2

    на ядре Windows NT остаются работать только серверы и различное оборудование, где наследие старой Windows никак не искоренить.

    Как бы не так. Линуха в серверном сегмента очень сильно опережает мелкомягких. И всё что есть для серверов - есть в линукс.


    1. Megakazbek
      12.10.2021 00:07
      +2

      В энтерпрайзе это совсем не так. Офисная инфраструктура практически везде построена на продуктах MS на виндовых серверах.



  1. JavaFox
    12.10.2021 00:10
    +5

    Более того, до сих пор в Windows на ARM не поддерживается эмуляция 64-битных приложений, только 32-битных, то есть именно x86, а не x64, что еще сильнее усугубляет ситуацию

    Интересно, произойдёт ли чудо и перестанут ли люди путать битность с архитектурой. Это тоже самое, что сказать, что ios поддерживает сейчас только x64, а не ARM.


    1. vikarti
      12.10.2021 09:38
      +2

      Ну и кроме всего прочего это — в статье ошибка.
      Windows 11 как раз поддерживает эмуляцию x86-64. Есть даже режим для постенного переноса когда когда в одном процессе и x86-64 и arm64 ( https://blogs.windows.com/windowsdeveloper/2021/06/28/announcing-arm64ec-building-native-and-interoperable-apps-for-windows-11-on-arm/)


  1. dartraiden
    12.10.2021 10:18

    А зачем это вообще всё надо? Ведь мобильными приложением на компе пользоваться просто не удобно.
    Например, мне играть в одну мобильную игрушку на компе намного удобнее. С телефоном для этого приходится буквально около розетки сидеть.


  1. spiceginger
    12.10.2021 10:32
    +5

    Статья грешит неточностями. И помимо указаных выше, тот же макос это никакое не UNIX ядро, а вполне себе гибридное XNU (акроним от X is Not Unix, на минуточку), которое что бы 2 раза не вставать является POSIX совместимым и позволяет использовать юникс тулзы. Я примерно понимаю, что хотел сказать автор про то что линукс и юникс завоёвывают мир и вот вот всех победят. Но реальность такова что 2 самые распространенные оси работают как раз таки на не линукс/юникс ядрах. И как бы все ок. Так что предположение о будущем тоже очень смелое, так как Windows не такая уж и особенная сидя на своем ядре.


  1. strlock
    12.10.2021 23:36
    +1

    "— К чему этот долгий и утомительный процесс? — спросил я себя и вылил пиво в унитаз." (c) Сергей Лукьяненко.