В календаре 8 марта, а я пишу эту статью.
Почему? - Потому, что WinUI 3 - это важно!
Предыстория
Для того, что бы понять, что из себя представляет WinUI 3 и какую глобальную проблему он решает, предлагаю окунуться в историю десктопной разработки под Windows:
Итак, на дворе 1995 год, и мы начинаем писать наш калькулятор на C++ и Win32. Win32 - самый низкоуровневый системный API, для работы с визуальным интерфейсом. Ниже только Windows Driver Model для драйверов.
2002 год - наш калькулятор уже может быть написан на более высокоуровневой оболочке - WinForms (Windows Forms). Она создаёт обёртку над Win32 для более простого и удобного взаимодействия с системой. А за счёт .NET Framework и CLR, которые так же вышли в 2002 году, мы можем использовать целый букет из различный языков для разработки. В их числе были C#, С++, VB.Net, J# и другие.
WPF - наш ответ устаревшим технологиям. В конце 2006 года Microsoft презентуют WPF - обширный API-интерфейс для создания настольных графических программ, имеющих насыщенный дизайн и интерактивность. Новый подход включал в себя совершенно другую модель построения пользовательских приложений, основывающуюся на .NET Framework и DirectX. Вместе с выходом WPF у нас появляются следующие возможности: WEB-подобная модель компоновки, богатая модель рисования, анимации, поддержка аудио и видео, стили и шаблоны, декларативный пользовательский интерфейс, подход MVVM, и язык разметки XAML.
2012 год - выход Windows 8. Очень много споров и дискуссий было на тему свежей ОС. Но самое интересное изменение, которое с ней случилось - выход WinRT или же Windows Runtime. Это именно то, почему у Windows присутствует 2 меню настроек: новое и панель управления. WinRT по существу является API, основанное на технологии COM. COM, в свою очередь, предполагал использование одних и тех же компонентов системы во многих местах одновременно. Например, PrintDialog - теперь единый компонент, к реальному состоянию которого можно получить доступ из любого места системы. Нам теперь не нужно загружать информацию о нём каждый раз при использовании, как это было с Win32.
2016 - Universal Windows Platform или же UWP. Апогей унификации Windows. Продолжающая идею WinRT, UWP активно объединяет системные функции и компоненты под единым программным интерфейсом, который теперь может работать на всех устройствах с Windows 10 без изменений в коде! Но, это касается не только программных функций, но и визуальных компонентов. Так и появляется на свет WinUI 2 - единый визуальный интерфейс для всех приложений на Windows.
Что мы в итоге получаем?
Как результат - у нас есть мощная платформа, с унифицированным программным и визуальным интерфейсом. Наш стандартный калькулятор уже построен как UWP приложение ( Исходный код Windows калькулятора можно найти в открытом доступе на github). Но, что-то всё равно не так…
Опрос от компании Telerik за 2016 год показал, что сообщество разработчиков без явного энтузиазма брались использовать UWP, как основную платформу в своих новых проектах. Что же не так? А всё дело в унификации приложений для Windows. За счёт оборачивания их в различные новые API и Windows Runtime, разработчики потеряли возможность работать со старыми добрыми Win32 напрямую. Они, в свою очередь, предоставляют огромнейшие возможности для тонкой работы с системой. И тот список системных API, которые сейчас доступны из UWP приложений, кажется просто смешным. Ознакомиться с ним более детально можно здесь: Список системных API, доступных через UWP приложение
WinUI 3
Именно проблему недоступности системных API и будет решать новая версия WinUI. WinUI 3 Preview 4 уже находится в пре-релизе, а официальный релиз намечен на март. Но каким образом удастся получить доступ к системным API приложению, которое изначально задумывалось как работающее на WinRT и UWP API?
Всё просто: Необходимо оделить визуальную часть и среду выполнения. Ключом к этому стала платформа .NET:
Что такое .NET?
Из блока предыстории можно узнать, что в 2002 году вышла Windows-ориентированная платформа для разработки ПО - .NET Framework. Она развивалась в плоть до 2019 года, когда была выпущена последняя версия - 4.8
Параллельно, с 2016 года начала развиваться новая модульная платформа для разработки программного обеспечения с открытым исходным кодом - .NET Core. Кроме того, она была кроссплатформенная.
И наконец - .NET 5. Это, выпущенная в 2020 году, единая платформа для разработки ПО. Она объединила в себе все преимущества .NET Framework, .NET Core и некоторых похожих платформ.
По заявлениям Microsoft, теперь это единственная платформа, в сторону которой будет развиваться компания.
И теперь, имея единую программную платформу - .NET 5, компания Microsoft может воплотить идею с использованием унифицированного интерфейса, но при этом оставить возможность использовать удобные API: будь-то UWP API или Win32.
Это и является той золотой срединой, когда мы можем использовать современные, производительные визуальные компоненты вместе с функциональностью системных API.
Перспективы WinUI 3
По заявлениям самих Microsoft, на WinUI 3 и его последующие версии, у компании огромные планы. Для начала, уже в осеннем обновлении Windows мы сможем увидеть переход многих частей операционной системы на WinUI 3.
Xamarin, MAUI and WinUI 3?
MAUI (Multi-platform App UI) - кроссплатформенная библиотека графического интерфейса. Является эволюцией Xamarin.Forms. Для Windows она будет работать именно через компоненты WinUI 3. Больше информации о MAUI: devblog.microsoft, github.
Uno Platform and WinUI 3?
Uno Platform - это кроссплатформенный графический пользовательский интерфейс с открытым исходным кодом, который позволяет запускать код на основе WinUI и универсальной платформы Windows на iOS, macOS, Linux, Android и WebAssembly.
Команда разработчиков Uno Platform с первых дней анонсировала свою нацеленность на WinUI 3. А спустя 12 часов после выпуска WinUI 3 Preview 4, его поддержка уже была добавлена в Uno Platform. Больше информации об Uno Platform: platform.uno, github.
Будущее системных API
Что касается системных API, Microsoft не оставляют идею их унификации. Поэтому, сейчас в активной разработке находится Project Reunion. Это универсальная модульная оболочка, которая должно предоставить быстрый доступ ко всем Win32 и UWP API.
Project Reunion будет очень тесно связан с WinUI 3. И уже сейчас находится в превью версии.
Больше информации о Project Reunion: docs.microsoft.com, github