Пишем GUI на .NET для Linux
Довольно часто возникает вопрос "как можно писать приложения для Linux используя .NET". Кажется, пришло время ответить на этот вопрос. Тем более, выход MAUI лишь добавил непонятностей в эту тему.
Пишем на C# приложение с GUI для Linux
Довольно часто возникает вопрос "как можно писать приложения для Linux используя .NET". Кажется, пришло время ответить на этот вопрос. Тем более, выход в MAUI лишь добавил непонятностей в эту тему.
Сколько вариантов?
Вариантов, на самом деле, не один, и даже не два, а немного больше. Я насчитал четыре: Avalonia, Uno, MAUI, Blazor. Причем, некоторые из перечисленных вариантов представляют собой "полноценные" приложения, которые очень похожи на Windows-приложения, то есть графическим интерфейсом (GUI). Другие - это Single Page Application (SPA), то есть работают как frontend + backend. Где frontend это и есть SPA на базе Blazor (Blazor WebAssembly или Blazor Server). А роли backend может выступать, например, Web API, опять же написанный на C#.NET.
Не могу не отменить, что в роли frontend может выступать любой SPA-фреймворк, такие как React, Vue.js, AngularJS, BackBoneJS, Aurelia, EmberJS, Svelte и т.д. и т.п. Просто если мы говорим о возможности писать на C#, то я не беру JavaScript-фреймворки во внимание.
А теперь, давайте про каждый немного подробнее.
Avalonia
Это самый интересный, на мой взгляд, вариант, потому что он очень похож на WPF. Вот как описан этот фреймворк на сайте производителя
Avalonia - это кроссплатформенный фреймворк пользовательского интерфейса для dotnet, обеспечивающий гибкую систему стилизации и поддерживающий широкий спектр операционных систем, таких как Windows, Linux, macOS. Авалония зрелая и готова к производству. У нас также есть поддержка бета-версии для iOS, Android и на ранних стадиях поддержка браузера через WASM.
Avalonia поддерживается Visual Studio через плагин, а также можно использовать Rider.
Uno
Еще один вариант, писать под Linux, используя C# - это платформа Uno. Вот про нее говорится на сайте разработчика.
https://platform.uno/ - Платформа пользовательского интерфейса с открытым исходным кодом для создания приложений с одной кодовой базой для Windows, iOS, Android, WebAssembly, macOS и Linux
Зрелый, готовый к применению фреймворк и даже, наверное, платформа.
MAUI
Изначально предполагалось, что MAUI даст возможность писать код на .NET, а значит и на C# и для платформы linux. MAUI станет следующей вехой в развитии Xamarin.Forms, которые после выхода MAUI должны были перейти в режим "поддержки и исправления ошибок". То есть MAUI была призвана заменить Xamarin.Forms.
Но, когда вышла финальная версия MAUI, оказалось, что поддержки Linux просто нет. Более того, насколько я понял, поддержка платформы Linux не планируется. Печально...
Но мир не без добрых людей. Существует .NET Multi-platform App UI (.NET MAUI), которая создана и поддерживается сообществом разработчиков и доступна в виде Open-source. Вот что про нее написано в github.com:
NET Multi-platform App UI (.NET MAUI) — это кроссплатформенная платформа для создания собственных мобильных и классических приложений на C# и XAML. Используя .NET MAUI, вы можете разрабатывать приложения, которые могут работать на Android, iOS, iPadOS, macOS и Windows из одной общей кодовой базы.
Blazor
Это, как я уже говорил ранее, не совсем GUI. Это уже другой тип разработки основанный на Web-разработке. То есть когда есть frontend и backend
Заключение
В качестве заключения хочется ответить, что возможность писать для Linux на .NET платформе не ограничивается перечисленными мной вариантами. Существуют и другие менее распространенные способы, например, GtkSharp, Qml.Net, mono, ImGui.NET и даже ElectronJs (хотя это уже снова не .NET, а JavaScript).
Писать под Linux на NET можно! Выбирать вам!