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 +.
- Встановлюємо завантажений vsix.
- Створюємо в Visual Studio новий OpenSilver додаток.
- Запускаємо 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 недолюблюють, особливо в ру інтернеті. Пропоную це питання не обговорювати:) Є інструмент, у інструменту є користувачі. Ми хочемо їм допомогти.