26 февраля 2012 г.

Windows 8: ARM архитектура == смерть .Net и Silverlight?

Но рок-н-ролл мертв, а я-а-а-а ... еще нет...
Б.Г. (который не Билл Гейтс, а Борис Гребенщиков)

Мыслей много, с чего бы начать ...
Начну, пожалуй, так - 8 лет назад (в далеком 2004 году) Joel Spolsky написал замечательную статью - Как Microsoft проиграла битву за API (оригинал статьи - How Microsoft Lost the API War). Правильных мыслей в статье много и она остается актуальной и по сей день. В общем и целом статья сводится к одному предложению: Microsoft утратила религию обратной совместимости (eng. "Microsoft Lost the Backwards Compatibility Religion"). На тот момент речь шла о том, что утеряна обратная совместимость между новой платформой .Net и старыми языками (Visual Basic и Microsoft C++) - т.е. если Вы писали на чем-то "старом", то вам нужно все учить заново и практически с нуля.
Для молодого поколения, напомню, что платформа .Net появилась в 2002 году и примерно в 2003-2004 годах состоялся достаточно большой отток разработчиков Microsoft на другие средства (в том числе и прямого конкурента .Net - Java). Объясняется это просто - зачем инвестировать (в том числе время) во что-то новое с еще сомнительным будущем, если есть более "вкусные" для изучения языки/платформы? Тем более, что формально заявленные средства конвертации старого кода в новый попросту не работали. Например, мне не удалось за 2 недели портирвоать проект VB6 в 40тыс.строк кода на .Net. Проще было написать этот же код на .Net заново.

Итак, прошло 10 лет, Microsoft всех кто остался (и появился новый) приучила к платформе .Net, которая должна работать на всех современных версиях Windows и даже на мобильных устройствах (я про Windows Phone 7).


И вот новая версия Windows 8 уже не за горами. А в ней много всего "вкусного" и в том числе работа не только на Intel архитектуре, но и на ARM. И что мы видим - судя по всему .Net на ARM не будет (по крайней мере в обозримом будущем)! Мало того, бинарно приложения для ARM и Intel совместимы не будут (хотя это как раз более-менее прогнозируемый момент).
But at least with Windows 8 on PCs running Intel and AMD architectures (x86/x64), most Windows apps since version 3.0 will run on the Desktop. This will not be the case on Windows for ARM for an obvious and unavoidable reason: Applications compiled to run on these processors are not code-compatible with ARM-based platforms. And managed apps made for the .NET Framework - which as late as Spring 2011 was still being touted as the platform of Windows' future - will not run on WOA because the .NET Framework is not code-compatible with ARM, at least not at this time.

Как следствие - разработка для Windows 8 под ARM архитектуру будет "сбоку" от основной разработки и совсем уже не на .Net (а на чем? C++? In one sense then, the fears of .NET developers were justified and COM has its revenge). Эта ситуация ничего Вам не напоминает? Мне - 2002 год и переход с C++/VB6 на .Net.

Т.е. если бы я был разработчиком .Net и захотел "для" себя по программировать под мобильные платформы (tablets, smart-phones и т.д.), то скорее всего выбрал бы не С++ (или что там будет для ARM?) от Microsoft, а Objective C для Apple (рынок больше, стоимость разработчика дороже) ну или Java для Android (тоже неплохо и не нужно "возиться" с очисткой памяти).

Теперь поговорим о том почему скорее мертв .Net, а не Windows на ARM платформе.

1. Если верить одному из со-ведущих постоянных гостей шоу Радио-Т Петру Диденко, Microsoft в данный отрезок времени руководят продавцы. 2011 год был для Microsoft супер успешным с одной стороны (полученная прибыль превысила прогнозную), и в то же время их давние "партнеры" IBM и Apple "обошли" их по уровню капитализации, чего не было с давних 80-90 годов прошлого века. Иными словами, одна из главных задач Стива Балмера и Ко на 2012-2013 года это сохранение и увеличение прибыльности, увеличение капитализации компании одновременно с позитивным PR'ом Microsoft повсюду (а то для многих она по прежнему остается империей зла).

2. Для тех кто не заметил, мы с Вами живем уже в post-PC эру - т.е. время, когда компьютеры у нас дома повсюду: в телефоне, часах и автомобиле. К чему привело такое смещение акцентов? К уменьшению продаж компьютеров для домашних пользователей (я про desktop'ы и notebook'и/laptop'ы) и ... уменьшению доходов с этого сегмента, которые достаются Microsoft. Я знаю уже определенное количество людей, которые заменили старый домашний компьютер на планшет и вполне комфортно себя чувствуют. Т.е., с точки зрения Microsoft, домашним пользователям будет все сложнее продавать лицензии Windows и Microsoft Office. Значит нужно сделать так, что Windows и Microsoft Office появились и на других устройствах...

3. Мобильные устройства на Intel архитектуре не получаются :( Т.е. получаются, вот только автономность, уровень шума/температура оставляют желать лучшего (те кто смотрел "ужастики" на Intel планшете, когда в самый ответственный момент включается вентилятор меня поймут ;).

Если я прав по пунктам 1.-3., и Microsoft не захочет терять рынок домашних пользователей (это противоречит пункту 1., играм с Nokia и было бы попросту глупо) и сосредотачивать только на корпоративном сегменте, то компании необходимо как можно скорее переключаться с Intel архитектуры на ARM, брэндировать новый продукт как ОС Windows 8/Microsoft Office 15 (что-то мне не верится, что с точки зрения исходного кода это будет один и тот же продукт для разных платформ), привлекать разработчиков и выпускать дешевые (бесплатные?) средства разработки для ARM.

Итого получаем по .Net
1. Переход с тезиса .Net - наше все для Windows (и не только - я про Mono), на .Net - наше все для Intel.
2. Если б я был султан разработчиком Microsoft (не являюсь таковым с 2005 года) и мне нужно было начинать новый "большой" проект, я бы много раз подумал начинать ли его на .Net или попробовать что-то новое.
3. Кажется, что усилия по развитию .Net пойдут на убыль: нужно поддерживать две ветви средств разработки (а то и три?): платформа  .Net,  средства для разработки не .Net приложений для Intel архитектуры, средства для разработки под ARM.

Про Silverlight
С ним ситуация совсем очевидна - он мертв Microsoft сместила интерес в сторону HTML5. Вопрос с ним такой же как и с Flash'ем от Adobe - как долго будут поддерживать и когда закроют (те, кто пропустил Flash для мобильных устройств уже прекратил свое существование).
Для меня в этой "кагорте" языков(или платформ? как их правильно называть?) остается только один открытый вопрос - JavaFX. Но здесь все в руках Oracle. Подождем ...

Заключение
Жаль, что в лагере Редмонда "рулят" продавцы. Очередной "прыжок" в сторону нового и поворот "не лицом" к старым апологетам Microsoft. Хотя ... может все мы ошибаемся и Microsoft еще всем нам покажет ...

4 комментария:

  1. Интересно конечно. Буквально пол года назад был проект как раз под ARM, для Windows CE 6.
    Там был .NET 3.5, там был Silverlight. Один и тот же бинарник без каких-либо изменений работал как на PC, так и на ARM.
    Зачем, спрашивается, убирать эту совместимость?
    Ну а по поводу "революций" (вышеупомянутый 2002 год) - так Apple делает их еще чаще :) Причем, как в самом языке, так и в инструментах. Просто яблочники к этому давно привыкли - это ж Apple...

    ОтветитьУдалить
    Ответы
    1. Иван, скорее где совместимость была - там она и останется (иначе совсем бред), а где не было - не появится.
      А может все намного хуже - Windows CE != Windows 8 для ARM и все тут :)
      Как говорится, подождем.

      Apple - зато они разработчикам не платят за использование платформы, а даже совсем наоборот :D

      Удалить
    2. Apple - это точно :)
      А Windows CE, насколько мне известно, вообще исчезнет как класс.
      А по поводу мертвости Silverlight - оно таки еще шевелится :) По крайней мере, на том же ARM UI более предсказуемый и быстрый, чем с помощью стандартных средств .NET

      Удалить
    3. Windows CE 6 - обещают поддерживать еще 10 лет - до 2022 года, но это скорее "сказки для приезжиш" http://www.microsoft.com/windowsembedded/en-us/evaluate/windows-embedded-roadmap.aspx

      Silverlight - это агония. В Windows 8, как я понял, будет аналог для рисования UI, встроенный в ОС.

      Удалить