12 октября Майкрософт прекращает поддержку Silverlight. С одной стороны - ок, все равно никто им уже не пользуется. А с другой, выясняется, что есть много компаний, которые 10+ лет назад написали свои внутренние продукты на Silverlight и успешно все это время работают. А сейчас нет ни людей, знакомых с бизнес логикой этих приложений, ни времени/возможности/знаний все это переписать с нуля.

Мы попытались бросить соломинку таким компаниям и выпустили OpenSilver - бесплатную  опенсорс реализацию Silverlight, которая работает во всех современных браузерах через WebAssembly.

Что под капотом?

У нас есть компилятор, который преобразует XAML в C# код. И есть движок, который генерирует html+css и js (для обновления dom), чтобы отобразить UI в браузере. Вся логика, весь IL код выполняется на WebAssembly. Чтобы упростить работу с WebAssembly, мы используем Blazor фреймворк.

Соответственно, если Silverlight работает сейчас только в IE 11, то OpenSilver версия работает везде, кроме IE11.

Особенно хочу подчеркнуть, что в отличие от некоторых современных продуктов, мы НЕ рисуем интерфейс на canvas.

Примеры

Самый базовый пример - https://opensilvershowcase.azurewebsites.net/ . Здесь можно посмотреть на разные контролы, компоненты, фичи с исходниками.

https://opensilvertelerik.azurewebsites.net/ - Telerik UI. Это набор контролов от Telerik. Тут видно, что какие-то элементы смигрировались отлично, с какими-то есть сложности при отображении и надо разбираться/фиксить движок.

На всякий случай: чтобы пользоваться Telerik библиотекой нужна лицензия. Telerik предоставляет исходный код компонентов. Именно поэтому мы можем пересобрать библиотеку под OpenSilver.

Кстати, все сторонние зависимости надо пересобирать под OpenSilver. С учетом того, что 10 лет назад, особенно для Silverlight библиотек, был очень популярен CodePlex, то бывает сложно найти даже опенсорс исходники :)

А как запустить?

Нам потребуется Visual Studio 2019 16.11+, OpenSilver SDK, .NET 5 или .NET 6 RC1+.

  1. Устанавливаем скачанный vsix.

  2. Создаем в Visual Studio новое OpenSilver приложение.

  3. Запускаем Browser проект и убеждаемся, что Hello World приложение работает.

Если вы хотите пописать интерфейс на XAML, то все готово. Вы можете смело разрабатывать .NET приложение под веб с интерфейсом на XAML.

Если хотите смигрировать Silverlight приложение, то добавляем в созданный проект OpenSilver class library, куда включаем имеющиеся файлы вашего приложения. Пробуем скомпилировать. Не факт, что получится. Если падает из-за зависимостей от сторонних библиотек, то проверяем нету ли в NuGet уже готовых. Мы смигрировали и разместили некоторые библиотеки. Если в NuGet нету, то ищем исходники и пересобираем под OpenSilver.

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

За помощью можно обращаться в документацию, в гитхаб репозиторий. Разработка активно ведется. PRs are welcome :)

Текущее состояние

Проект в бета версии. Есть успешно смигрированные приложения. Какие-то редко используемые Silverlight-фичи не покрыты, но мы регулярно добавляем.

Сейчас активно работаем над быстродействием. Удалось достигнуть невероятных успехов, особенно по сравнению с версией годовалой давности. Скорость увеличена больше чем в 10 раз. Одно из направлений работы для быстродействия - Ahead Of Time компиляция. С AOT компиляцией получается увеличить скорость еще в 2-3 раза, но при этом очень сильно увеличивается размер загружаемого приложения. На некоторых проектах доходит до 300-400 мб, даже с учетом тримминга. С одной стороны, это небольшая проблема для внутренних порталов, к тому же эта загрузка только первый раз, потом все из кэша. Но такие большие приложения сказываются и на потреблении памяти. Как вариант, тут можно поработать над триммингом еще.

Заключение

Не стоит рассматривать проект только как замену Silverlight. Это также отличный вариант попробовать написать что-нибудь под Web для опытных десктоп разработчиков, которые привыкли к XAML и C#. Знание js, html, css абсолютно не нужно. Но будет неплохим плюсом, если хотите поделать какие-то кастомные “низкоуровневые” компоненты.

P.S. Я знаю, что Silverlight недолюбливают, особенно в ру интернете. Предлагаю этот вопрос не обсуждать :) Есть инструмент, у инструмента есть пользователи. Мы хотим им помочь.

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


  1. sebasww
    04.10.2021 11:45

    Года четыре назад пытались написать админку на cshtml5. Ну, очень много багов было. Хотя, работать заставили. Тогда она компилила не веб-сборки, а js. Эту версию не пробовали.


  1. Kuprijan
    04.10.2021 11:56

    А с NET 4 и 4.5+ заведётся?

    Помнится, что серебро рекламировали как замену флэшу. Я далёк от этой темы, на сколько это "альтернатива" сейчас?


    1. JacobL Автор
      04.10.2021 12:07

      А с NET 4 и 4.5+ заведётся?

      Если текущий Silverlight проект под NET 4 или 4.5+, то его реально смигрировать под OpenSilver. Но OpenSilver будет использовать DotNet6. Если есть какие-то фичи в проекте, которые не поддерживаются, то частично переписываются.


  1. codecity
    04.10.2021 13:40
    +5

    Почему MS задвинула такой удобный инструмент как XAML и не сделала его основой Blazor? Почему рассматривается это только как легаси, а не как основу для построения современных сайтов?

    Ведь был же Silverlight, отличный инструмент для разработки. Минус — сложности с запуском в браузерах, отличных от IE, т.е. тогда не было WebAssembly. IE проиграл, Silverlight вместе с ним опустился на дно. Но сейчас же ситуация поменялась — теперь везде есть WebAssembly и просто обязана выйти новая версия инструмента, аналогичного Silverlight. Но нет.

    Даже сторонние люди это поняли и сделали из говна и палок — а многомиллиардная корпорация тупит.


    1. sebasww
      04.10.2021 13:53

      Полностью согласен.


    1. vabka
      08.10.2021 02:01

      Почему MS задвинула такой удобный инструмент как XAML и не сделала его основой Blazor? Почему рассматривается это только как легаси, а не как основу для построения современных сайтов?

      Думаю, это связано с тем, что со времён, когда Silverlight стал легаси, в мире дотнета появился .net core, появился Angular, React, Vue, и много новых веб-разработчиков просто не знакомы с XAML.

      По тому Blazor для новичков гораздо проще и понятнее, чем что угодно на XAML


  1. gameplayer55055
    04.10.2021 16:49

    Лучше б его похоронили навсегда и переписали б код на хтмл5 и фреймворках, чтобы у кодеров было дело. А то достали легаси кодом уже


    1. codecity
      04.10.2021 21:52
      +1

      Лучше б его похоронили навсегда и переписали б код на хтмл5 и фреймворках

      У меня наоборот надежда что MS возьмет этот проект на поруки.


  1. Artima
    04.10.2021 19:14

    Сразу было понятно, что технология мертвая. Далее Flash не смог перейти на новый уровень развития. Куда уже там Silverlight. Удивлен, что встретил это название спустя столько лет.


    1. codecity
      04.10.2021 21:29
      +2

      WebAssembly — тоже мертвая?


      1. Artima
        04.10.2021 22:48
        +1

        Это уже не так очевидно. С одной стороны технология сама по себе очень интересная. С другой стороны ее развитие оставляет желать лучшего. Я не сильно углублялся в этот вопрос, но с ней явно что-то не так, раз она никак не может нормально распространиться. Может вы расскажете в чем проблема с ней?


        1. alan008
          05.10.2021 00:11
          +1

          Может, в безопасности исполнения "хрен знает что делающего двоичного кода"? Привет, ActiveX control.


          1. codecity
            05.10.2021 01:34
            +1

            Там же контроль за счет виртуализации — это и было главной фишкой. Иначе смысла нет.


        1. codecity
          05.10.2021 01:30
          +4

          раз она никак не может нормально распространиться

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


          1. Artima
            06.10.2021 21:09

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


            1. codecity
              07.10.2021 01:35

              На данный момент заметный плюс — позволяет писать на любимом языке, а не на JS. К примеру, можно писать на C# (Blazor). Но и минусы есть в виде тормозов при первоначальной загрузке.


  1. mSnus
    05.10.2021 03:02

    С мобильного Chrome https://opensilvershowcase.azurewebsites.net/ грузилась полминуты, а когда загрузилась - меню слева так и не заработало..


    1. vabka
      08.10.2021 02:07

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

      В Uno, Blazor webassembly, и в Avalonia поверх канваса я такого не замечал


  1. usa_habro_user
    05.10.2021 04:09
    +1

    Попытался, интереса ради, портировать свой старый fun-project игрушки на стадии "полудоведенности" (т.е. работать работает, но AI самый примитивный), есть вполне рабочий код SL и WPF, без сторонних библиотек. Даже на сайте через IE работает (не обращайте внимание на ошибки при загрузке - это я "прикручивал" онлайн игру, но не довел до конца; коммуникационная часть давно в down). Но через OpenSilver "не зашел", ну, или я, может быть, не разобрался. Если вам интересно показать, как все-таки оно может работать, могу выложить код на гитхаб.