OpenSilver. Воскрешаем Silverlight

984a96f1e219bf8817d7e4c6574e49cb.png

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 недолюбливают, особенно в ру интернете. Предлагаю, этот вопрос не обсуждать :) Есть инструмент, у инструмента есть пользователи. Мы хотим им помочь.

© Habrahabr.ru