Фреймворки и библиотеки для кроссплатформенной разработки десктопных программ
В этой статье я расскажу вам о некоторых самых популярных фреймворках, которые помогут вам при разработке программ для компьютеров под управлением Windows/MacOS/Linux. Если вы опытный программист, то вряд ли найдете в этой статье что-то новое для себя. Она скорее для новичков, которые ищут простое решение своей проблемы — быстрое написание хорошей (на сколько это возможно) кроссплатформенной программы.
Что такое кроссплатформенная разработка?
Что вообще из себя представляет кроссплатформенная разработка? Если вам нужно, чтобы ваше приложение работало сразу на нескольких операционных системах с минимальными затратами человеко-ресурса, то скорее всего вы прибегнете именно к этому. Вы разрабатываете одну программу, пишете один код, а он запускается на всех поддерживаемых платформах. Удобно! Но стоит различать кроссплатформенность и нативность.
Если вкратце, то кроссплатформенность — это способность программного обеспечения работать с несколькими аппаратными платформами или операционными системами. Нативные программы в свою очередь пишутся для работы на определенной аппаратной или программной платформе. Из этого можно сделать вывод: если ваша программа будет работать с железом, то скорее всего даже в кроссплатформенной программе вам придется прописывать нативный функционал для конкретной платформы.
В чем же преимущество кроссплатформенной разработки? Во-первых, вам нужно задействовать меньше людей (не нужно содержать DotNet разработчика, Swift/objective C разработчика и всех к ним прилагающихся), во вторых вы охватываете большее количество устройств -> больше людей смогут пользоваться вашей программой.
Также подобный принцип не лишен недостатков — плохая нативность, оптимизация тоже будет хуже, чем у такой же программы написанной под конкретную платформу. Но иногда бывает такое, что вам очень нужно, чтобы ваше приложение поддерживало несколько платформ, но разрабатывать под каждую возможности нет. Тогда на помощь приходят уже созданные Фреймворки и технологии для разработки кроссплатформенных GUI. Вот некоторые из них:
Electron JS
Недавно я написал статью о том, как на Electron JS написать "Hello World". В комментариях поднялась дискуссия о "за и против" этой технологии. До сих пор очень многие разработчики ведут споры относительно того, стоит ли использовать Electron в своих проектах или нет. Electron JS — это JavaScript фреймворк, позволяющий вам написать полноценную программу используя Web Технологии — HTML & CSS, JS. Electron JS представляет собой движок Chromium в котором и исполняется весь ваш код. У Electron'a есть один, но достаточно серьезный недостаток — большое потребление памяти, как физической, так и оперативной. Всем давно известно, какой прожорливый Chrome, а мы на него еще своего кода хотим навесить. Но если посмотреть с другой стороны: сегодня многие популярные приложения написаны на Electron'e — Slack, Skype, Discord, VSCode, Atom, Postman, Insomnia и т.д. А с учетом непрекращающегося роста мощности компьютеров все реже приходится слышать от пользователей, что «ваш хром съел всю мою память». Высокое потребление памяти не будет играть большой роли если продукт будет хорош в своей сфере, будет грамотно написан код и распределены процессы
Плюсы
Использование наработок из Web
Просто найти (или "воспитать") специалиста
Качественная (и русифицированная) документация
Поддержка сообщества и GitHub
Минусы
Высокое потребление памяти (физическая и ОЗУ)
Легко написать плохой код
Плохая нативность
NW.JS
Так же как и Electron, NW.JS позволяет вам создавать кроссплатформенные приложения с использованием Web технологий. Сегодня NW.JS Спонсируется компанией Intel, и разрабатывается сообществом. NW.JS не может похвастаться таким же богатым списком проектов как Electron, но это все равно очень хороший фреймворк для создания кроссплатформенных приложений. Так же как и Electron, NW.JS тащит за собой движок Chromium и все вытекающие из него проблемы. NW.JS очень похож по своему принципу на Electron, но все-же различия есть. Могу порекомендовать вам эту статью для ознакомления.
Плюсы
Использование наработок из Web
Просто найти (или "воспитать") специалиста
Качественная (и русифицированная) документация
Поддержка сообщества и GitHub
Минусы
Высокое потребление памяти (физическая и ОЗУ)
Легко написать плохой код
Плохая нативность
Qt/QML
Qt — очень мощный набор инструментов для создания кроссплатформенных приложений на языке С++ и Python (а также Ruby, PHP, C# и др. но они в отличии поддерживаются сообществом). Qt уже достаточно старый фреймворк, но он продолжает активно развиваться и на нем написаны такие программы как: 2ГИС для Android, Kaspersky Internet Security, Virtual Box, Skype, VLC Media Player, Opera и другие. Известное многим линукс-юзерам окружение рабочего стола KDE тоже написано с использованием Qt. Qt имеет среду разработки — Qt Creator, которая включает в себя Qt Designer с помощью которого можно создавать графический интерфейс. Визуальное создание интерфейса позволяет легко и просто создавать интерфейс, перетаскивая различные виджеты (выпадающие списки, кнопки, переключатели) на форму. Qt имеет обширную документацию, активную поддержку сообщества и множество других преимуществ.
Плюсы
Визуальный редактор интерфейса
Огромное количество модулей в составе фреймворка
Поддержка большого количества языков программирования (официально только Python и C++, остальные поддерживаются сообществом) -> хорошая нативность при грамотном коде
Низкий порог вхождения
Минусы
Большой вес приложения
Высокая стоимость коммерческой лицензии
GTK
GTK на ряду с Qt является одной из самых популярных библиотек для кроссплатформенной разработки элементов интерфейса для X Window Systems. Разработан Gnome Foundation и GNU. С использованием этой библиотеки написаны многие окружения рабочего стола и оконные менеджеры (Gnome, xfce MATE, Cinnamon, AfterStep, Marco и многие другие), и программы, например: Chromium, FireFox, MonoDevelop, Gimp и другие. GTK написан на языке C, но существуют обертки для многих языков программирование (C, C++, Python, Java и другие). Gtk имеет конструктор для визуальной разработки интерфейсов - Glade
Плюсы
Поддержка большого количества языков
Большое и активное сообщество
Много популярных проектов и примеров
Визуальный редактор
Минусы
Критичных минусов обнаружено не было (если у вас есть "проблемы" с Gtk - можете написать об этом в комментарии)
Avalonia
Достаточно молодой и активно развивающийся фреймворк для кроссплатформенной разработки, разработанный Стивеном Кирком и поддерживаемый .NET Foundation и сообществом. Avalonia позволяет создавать интерфейсы на основе XAML. Сама Avalonia основана на WPF/UWP. Код пишется на языке C#. Благодаря XAML Avalonia позволяет создавать гибкие и стилизованные интерфейсы. Имеет хорошую документацию, хоть и не большое, но очень приветливое рускоязычное сообщество.
Плюсы
Хорошая нативность (+поддержка системных декораций)
Активное и приветливое сообщество, как русскоязычное, так и англоязычное (чаты, форумы)
Заимствование и сходство с WPF (Если вы работали с WPF вам будет легко разобраться с Авалонией, и при возникновении трудностей, код написанный для WPF скорее всего заработает у вас на авалонии)
Стили (стили в Авалонии имеют сходство с CSS, что упрощает написание этих самых стилей)
Минусы
Маленькое сообщество (хоть и приветливое, но в силу молодости проекта, еще очень немногочисленное сообщество разработчиков)
Маленькое количество проектов (вы можете застрять с тем, что никто не решал такую задачу, которая встала перед вами)
WxWidgets/WxPython
wxWidgets (ранее известная как wxWindows) — это кросс-платформенная библиотека инструментов с открытым исходным кодом для разработки кроссплатформенных на уровне исходного кода приложений, в частности для построения графического интерфейса пользователя (GUI).Она разработана не только для того, чтобы создавать GUI. Она также имеет набор классов для работы с графическими изображениями, HTML, XML документами, архивами, файловыми системами, процессами, подсистемами печати, мультимедиа, сетями, классы для организации многопоточности, отладки, отправки дампов и множество других инструментов. Имеет обертку для языка Python -WxPython. С использованием этой библиотеки написанны такие программы как: FileZilla, AudaCity, BitTorrent и другие.
Минусы
Мало современной информации в интернете
Не очень активное сообщество
Плюсы
Простое написание интерфесов
поддержка разных языков программирования
Tkinter
Tkinter - кросс-платформенная событийно-ориентированная графическая библиотека разработанная Гвидо ван Россумом (создатель языка Python), позволяет написать вам простой, но функциональный интерфейс для вашего проекта на Python. По сути Tkinter представляет из себя пакет для Python, предназначенный для работы с библиотекой Tk. Библиотека Tk содержит компоненты графического интерфейса пользователя (graphical user interface – GUI), написанные на языке программирования Tcl и существуют реализации для разных языков (Tkinter приведен для примера).
Официальный сайт
Минусы
Примитивные интерфейсы
Для одного языка (но непосредственно Tk существует для разных языков)
Плюсы
Простое написание интерфесов
Позволяет вам быстро написать простой GUI для вашей Python программы
UPD
JavaFX: JavaFX - фреймворк для разработки кроссплатформенных десктопных приложений на Java. Он включает в себя графический интерфейс пользователя, анимацию, мультимедиа и поддержку многопоточности.
Xamarin: Xamarin - фреймворк для разработки кроссплатформенных десктопных приложений на С# и .NET. Он позволяет создавать приложения, которые работают на Windows, macOS и Linux.
NativeScript: NativeScript - фреймворк для разработки кроссплатформенных мобильных и десктопных приложений на JavaScript, TypeScript и Angular. Он использует нативные компоненты для создания пользовательского интерфейса и поддерживает Windows, macOS и Linux.
OpenFL: OpenFL - кроссплатформенная библиотека для разработки игр и приложений на ActionScript и Haxe. Она поддерживает Windows, macOS, Linux, Android и iOS.
Flutter: Flutter - фреймворк для разработки кроссплатформенных мобильных и десктопных приложений на Dart. Он использует свой собственный виджетный движок и поддерживает Windows, macOS, Linux, Android, iOS и веб.
React Native: React Native - это фреймворк для разработки кроссплатформенных мобильных и десктопных приложений на JavaScript и React. Он использует нативные компоненты для создания пользовательского интерфейса и поддерживает Windows, macOS и Linux.
Итог
В этой статье я рассказал далеко не о всех фреймворках, но о самых популярных, активно поддерживаемых и подходящих для абсолютно разных проектов и задач. Призываю вас в комментариях рассказать о своем опыте работы с различными фреймворками (но только с теми, что есть в статье), о том какие плюсы и минусы вы видите в кроссплатформенной разработке?