Опыт обеспечения кроссплатформенности десктопного приложения с графическим интерфейсом на основе .NET

Введение

На сегодняшний день отечественные компании все чаще предпочитают переходить на альтернативные операционные системы. Такая тенденция связана с тем, что многие корпорации, в том числе Microsoft, официально приостановили поддержку своих продуктов на территории России [9, 10, 11], а с сентября 2024 года планируют также приостановку и предоставления облачных сервисов. При этом на текущий момент отечественные разработки выгодно отличаются высоким уровнем безопасности и надежности систем, подтвержденным, в т.ч. сертификатами ФСТЭК. Наиболее популярны такие отечественные операционные системы (ОС) на базе ядра Linux, как: Astra Linux, ROSA Linux, ALT Linux и РЕД ОС.

Корпоративные пользователи чаще всего для решения задач выбирают крупные программные продукты (ПП) с длительной историей разработки и хорошо зарекомендовавшие себя на практике. Написание аналогичных ПП с нуля для новой системы значительно дороже, чем их адаптация. Существует множество программных продуктов с графическим интерфейсом, реализованных с помощью объектно-ориентированного языка C# на платформе .Net. Это связанно с распространённостью языка, универсальностью, обширным функционалом, а также относительной независимостью от аппаратного обеспечения и конкретной версии ОС.

В данной статье исследуется процесс обеспечения кроссплатформенности программных продуктов с графическим интерфейсом на платформе .Net для работы как в операционной системе Windows, так и в операционных системах семейства Linux. В качестве основы для исследования рассматривается программный продукт NGT SMART+ (Рисунок 1), который является удобным и современным инструментом для автоматизации процессов мониторинга и анализа разработки нефтегазовых месторождений.

Рисунок 1. Программный продукт NGT SMART+.

Рисунок 1. Программный продукт NGT SMART+.

Постановка задачи 

Программный продукт NGT SMART+ реализован с помощью объектно-ориентированного языка C# на платформе Microsoft .Net Framework 4.0. Самым надёжным способом запуска программного продукта на Unix-подобных системах является переход на кроссплатформенную разработку. Со стороны разработчика платформы .Net (Microsoft) не существует готового решения, которое бы позволило в сжатые сроки, с минимальными трудозатратами портировать программный продукт на Unix-подобные системы, с сохранением возможности компиляции кода для работы под ОС Windows.

В рамках проводимого исследования для ограничения сроков исполнения было принято решение отказаться от полного переписывания проекта. Также для ограничения трудозатрат сохраняется оригинальный язык программирования при минимальной переработке исходного кода, обеспечивается поддержка платформы .Net и графического интерфейса Windows Forms (десктоп-приложение).

Таким образом, Задача состоит в обеспечении кроссплатформенности программного продукта NGT SMART+ с графическим интерфейсом на платформе .Net для работы как в операционный системе Windows, так и в Unix-подобных системах. В рамках исследования рассматривалось применение таких решений как Wine, Mono, PlayOnLinux и CrossOver.

Для решения Задачи был предложен следующий алгоритм:

  • анализ существующих решений;

  • изучение программных обеспечений, позволяющих запускать приложения, созданные для Windows в Unix-подобных системах;

  • установка необходимых инструментов и подготовка среды выполнения на машинах с Unix-подобными операционными системами;

  • проведение тестирования и устранение возникающих конфликтов.

С целью снижения трудоемкости для тестирования были выбраны операционные системы Astra Linux и РЕД ОС на основе распространённости среди заказчиков и популярности на российском рынке.

Анализ существующих решений 

Анализ показал, что на базе платформы .Net возможна разработка кроссплатформенных консольных приложений и библиотек. Но при этом невозможна разработка программных продуктов с полноценным графическим интерфейсом [3]. Вследствие чего, многие авторы прибегают к альтернативным решениям проблемы посредством сторонних решений (Wine, Mono и CrossOver).

Наиболее популярным инструментом является программное обеспечение Wine. Это бесплатное программное обеспечение с открытым исходным кодом, которое не имеет особых требований к оборудованию [17]. ПО Wine корректно запускает большинство программных продуктов (кроме специальных программных продуктов) и нацелено в основном на эмуляцию ОС Windows для запуска компьютерных игр в ОС семейства Linux [5, 15]. Трудности могут возникнуть с чтением и записью файлов программы, а также c корректностью отображения интерфейса [7]. Кроме того, проводимые эксперименты по запуску вредоносного программного обеспечения выявили проблемы с безопасностью при использовании ПО Wine [8, 13, 16].

Следующей жизнеспособной альтернативой ПО является программная платформа Mono. Она менее востребована, но ее преимущество в возможности обеспечения работы приложения без какой-либо эмуляции как в ОС Windows, так и в ОС Linux [1]. Исследование производительности, основанное на замере времени, необходимом для запуска алгоритма, показало, что ПО Mono не редко эффективнее собственного кода [12].

Программное обеспечение CrossOver отличается удобным графическим интерфейсом и понятной документацией. Данная программа является коммерческой, но пробный период позволяет в полной мере оценить функционал и возможности продукта. Из недостатков пользователи отмечают нестабильность работы мультимедийных приложений [14].

Проведенный анализ выявил у существующих решений серьезные недочеты:

  • отсутствуют описания работы ПО на реальном примере;

  • не зафиксированы трудности, с которыми можно столкнутся в процессе работы и методы их решения;

не предусмотрена вариативность операционных систем, программных инструментов и их версий.

Решения поставленной задачи

Проведен анализ в формате оценки достоинств и недостатков ранее представленных инструментов портирования.

Программная платформа Mono выступает в качестве реализации платформы Microsoft .NET Framework. Важными достоинствами данного инструмента служит двоичная совместимость, наличие открытого исходного кода и бесплатный доступ к проекту. На момент написания статьи последняя стабильная версия 6.12.0.

При работе с данной платформой возникают трудности с тем, что платформа Mono не содержит реализации ряда функций, доступных в .NET. Вследствие этого, при переносе на Mono, требуется поиск и альтернативных решений и, при их наличии, внесение изменений в код программного продукта. На сегодняшний день платформа не пользуется широкой популярностью у разработчиков, поэтому возникающие конфликты слабо изучены.

Программное обеспечение Wine перенаправляет вызовы Windows API в соответствующие вызовы POSIX [6]. Такой подход предоставляет возможность минимизировать потерю памяти и сохранить производительность. ПО Wine позволяет устанавливать необходимые библиотеки и компоненты ОС Windows [4]. Программное обеспечение активно совершенствуется и последней стабильной версией является 9.0. При этом ПО Wine востребовано как среди разработчиков, так и среди простых пользователей. Чтобы обеспечить кроссплатформенность программного продукта для корректной работы необходимо повысить его версию до .NET 5 и выше.

Бесплатная программа PlayOnLinux использует все возможности ПО Wine, поскольку является его надстройкой. Благодаря удобному интерфейсу подходит для начинающих пользователей. При этом обладает существенными недостатками:

  • осуществляется поддержка узкого спектра программ,

  • допускается потеря производительности (замедление работы),

  • немногочисленный круг пользователей (редкое упоминание в статьях и форумах).

Программа CrossOver сфокусирована на запуске популярных офисных приложений Windows и представляет собой аналог ПО Wine. Программу легко устанавливать и использовать. ПО CrossOver не является бесплатным решением с открытым исходным кодом [2]. Основным недостатком является то, что программа ограничена в доступе на территории России.

Исходя из проведенного выше анализа разработано две стратегии для

обеспечения кроссплатформенности программного продукта NGT SMART+ с графическим интерфейсом на платформе .Net:

  1. Использование ПП Mono.

  2. Использование ПО Wine.

В случае неудачного опыта с одним из продуктов остается возможность пользоваться резервным и параллельно проводить апробацию двух вариантов решения поставленной Задачи.

Первая, более приоритетная стратегия, заключается в использовании программной платформы Mono, поскольку она поддерживает двоичную совместимость. Вторая стратегия заключается — в использовании программного обеспечения Wine, это востребованный программный продукт с широким функционалом. В случае провала реализации данных стратегий решением является использование альтернативных GUI фреймворков (инструментов графического интерфейса), которые предлагают преимущественно другой подход к пользовательскому интерфейсу.

В ПП Mono отсутствует реализация части функционала, поэтому его необходимо временно удалить из программного продукта NGT SMART+. Для этого проводится тестирование на дистрибутиве Linux непосредственно в Windows с помощью WSL (Windows Subsystem for Linux — подсистема Windows для запуска Linux-приложений). После удаления неподдерживаемого функционала необходимо подготовить среду выполнения на машинах с операционной системой Astra Linux и РЕД ОС. В список источников добавляется репозиторий Mono и устанавливается пакет mono-complete. Указанный пакет загружает нужные библиотеки, инструменты разработки и среду выполнения.

В ходе тестирования на Unix-подобных системах выявлено несколько конфликтов. Возникли проблемы на уровне системных вызовов, для решения которых необходимо вносить изменения в исходный код ПП Mono. Зафиксированы сбои с использованием современных библиотек, которые ПП Mono не поддерживает. Единственным выходом является поиск альтернативных решений и переписывание исходного кода программного продукта NGT SMART+. Т.к. в долгосрочной перспективе такой подход нецелесообразен, то было решено прекратить работу с программной платформой Mono и перейти к тестированию варианта решения на основе программного обеспечения Wine.

Платформа .Net Framework 4.0 на которой реализован NGT SMART+ не является кроссплатформенной и ориентирована на работу только в ОС Windows. Поэтому, начиная работу с ПО Wine, необходимо повысить версию платформы до .NET 5, затем подготовить среду выполнения на машинах с выбранными операционными системами. Для этого устанавливаются пакеты Wine и Winetricks (вспомогательный скрипт для настройки Wine), создается новый префикс и добавляется среда выполнения .NET 5.

Программный продукт был успешно запущен в операционных системах Astra Linux и РЕД ОС. Тестирование проводилось на версиях Wine 6.23, 8.0.2 и 9.0. В процессе тестирования выявлен и исправлен ряд ошибок, которые подробнее рассмотрены в следующей части статьи. Результатом проделанной работы служит скрипт, включающий в себя: установку ПО Wine, изменение настроек и создание ярлыка. Для автоматической настройки среды выполнения необходимо поместить скрипт во внутреннюю папку проекта, запустить его от имени текущего пользователя и перезагрузить компьютер.

Приведенные выше две стратегии решения Задачи представлены на рисунке 2.

Рисунок 2. Стратегии решения Задачи обеспечения кроссплатформенности программного продукта NGT SMART+ с графическим интерфейсом на платформе .Net

Рисунок 2. Стратегии решения Задачи обеспечения кроссплатформенности программного продукта NGT SMART+ с графическим интерфейсом на платформе .Net

Выявленные сложности

В рамках тестирования программного продукта на Unix-подобных системах посредством ПО Wine выявлены следующие недочеты:

—    отсутствовали собственные шрифты приложения,

—    наблюдалась некорректная отрисовка графики,

—    в процессе работы терялся фокус.

При работе очевидно несоответствие оригиналу отрисовки интерфейса программного продукта: не подгружаются собственные шрифты приложения в формате TFF, отсутствует сглаживание графики и шрифтов. Причина проблемы заключается в нехватке библиотеки графической подсистемы «gdiplus.dll». В программном продукте шрифт в формате TFF используется для отображения различных состояний скважин и других объектов. Для отображения скважины применяется система наложения двух символов черного и желтого цвета. На рисунке 3 приведено сравнение отображения скважин при использовании библиотеки и без нее.

Рисунок 3. Сравнение скважин при использовании библиотеки «gdiplus.dl» (а) и без нее (б)

Рисунок 3. Сравнение скважин при использовании библиотеки «gdiplus.dl» (а) и без нее (б)

Библиотека «gdiplus.dll» предоставляет множество возможностей, в том числе позволяет использовать сплайны, которые позволяют визуализировать гладкие кривые линии. Устанавливается «gdiplus.dll» относительно просто при помощи Winetricks. Результат применения библиотеки для сглаживания графики представлен на рисунке 4.

Рисунок 4. Сравнение графики при использовании библиотеки gdiplus.dll (а) и без нее (б)

Рисунок 4. Сравнение графики при использовании библиотеки gdiplus.dll (а) и без нее (б)

Сглаживание шрифтов исправляется с помощью Winetricks, изменив настройку FontSmooth. Данная настройка помогает включить сглаживание шрифтов Grayscale и субпиксельное сглаживание RGB и BGR.

Следующим серьезным недочетом в работе программы под управлением Wine является потеря фокуса программного продукта. Данная проблема проявляется в том, что окно становится неактивным. Нажатие кнопок срабатывает не с первого раза (требуется вернуть фокус на окно) и выпадающие списки автоматически закрываются через несколько секунд. Потеря фокуса в случае использования ПО Wine часто связана с появлением всплывающих подсказок, т.к. они отображаются как отдельное окно и перехватывают фокус. Данная ошибка устраняется следующими способами. Первый состоит в отключении настройки UseTakeFocus в Winetricks или в редакторе реестра Regedit. Предложенный способ подойдет далеко не для всех программных продуктов — так, при отработке в ПП «NGT SMART+» произошло бесконтрольное перемещение фокуса по окнам проекта. Второй способ заключается в использовании виртуального рабочего стола, который подключается в редакторе настроек Winecfg в разделе графики. Данный способ для ПП «NGT SMART+» привел к возникновению более серьезных ошибок — всплывающие окна и подсказки отображались за основным окном программы и визуальная составляющая виртуального стола не соответствовала требованиям Заказчика.

Решить эту проблему для операционной системы РЕД ОС удалось при помощи оконного менеджера Openbox: достаточно в основной файл конфигурации «rc.xml» добавить свойство фокуса для соответствующего окна.


 yes

Исправить проблему для операционной системы Astra Linux возможно с помощью настройки параметров окон. Необходимо изменить поведение окон соответствующего класса, установив, что они всегда располагаются поверх остальных.

Заключение

Представленная работа по использованию программного продукта в операционной системе Windows и в Unix-подобных системах основана на потребности обеспечения запуска отечественных разработок в операционных системах семейства Linux, соответствующих требованиям импортозамещения и минимизации санкционных рисков. Весь процесс обеспечения кроссплатформенности программного продукта с графическим интерфейсом на платформе .Net представлен на примере проекта «NGT SMART+» ориентированного на операционную систему Windows.

На основе анализа существующих инструментов портирования десктоп приложений Windows под ОС семейства Linux разработаны две стратегии: с применением программной платформы Mono и программного обеспечения Wine. Несмотря на то, что на первый взгляд ПП Mono служит наилучшим решением поставленной Задачи, поскольку является реализацией платформы Microsoft .NET Framework и обладает совместимостью на уровне байт-кода, на практике возникло множество трудностей связанных с использованием современных библиотек, без которых реализация современного графического пользовательского интерфейса затруднительна.

Переход ко второй стратегии на основе программного обеспечения Wine позволил успешно выполнить задачу запуска приложения под отечественными ОС Astra Linux и РЕД ОС. Стоит учесть, что при работе с ПО Wine необходимо повысить версию платформы проекта «NGT SMART+» до .NET 5. Возникающие недочеты связанные с отрисовкой интерфейса, загрузкой шрифтов и потерей фокуса решаются с помощью Winetricks и оконного менеджера. Установка ПО Wine, корректировка перечисленных недочетов и создание ярлыка программы вносятся в разработанный скрипт для автоматической настройки среды выполнения.

В данной статье не рассмотрены риски, связанные с импортозамещением ПО Wine. Ожидается, что они нивелируются за счет использования отечественных аналогов.

Список источников

1. Агеев Е.Л. Разработка на C# под Linux. Гагаринские чтения 2017: Тезисы докладов, Москва, 05–19 апреля 2017 года. — Москва: Московский авиационный институт (национальный исследовательский университет), 2017. — С. 665.

2. Бешков А. Запуск Windows‑приложений под Linux c помощью CrossOver Office. Системный администратор. — 2004. — № 2(15). — С. 4–13.

3. Горбунов В.А. Программное обеспечение для реализации кроссплатформенности.net‑приложений. Международная научно‑техническая конференция молодых ученых БГТУ им. В.Г. Шухова: Материалы конференции, Белгород, 30 апреля — 20 2021 года. — Белгород: Белгородский государственный технологический университет им. В.Г. Шухова, 2021. — С. 3539–3542.

4. Демидов Н. А., Выгоняйло К. В., Маняев А.А. Сравнительный анализ Wine и PortProton: Перекрёстные платформы в контексте эмуляции Windows приложений. Программные системы и вычислительные методы. — 2024. — № 2. — С. 99–118.

5. Комраков А. А., Ушакова К. О., Исаев В.Г. Импортозамещение программного обеспечения в авиационно‑космическом сегменте оборонно‑промышленного комплекса. Информационно‑технологический вестник. — 2019. — № 4(22). — С. 71–82.

6. Лунченкова Э. Б., Горячева Н.В. Возможности инструментальных средств разработки электронных образовательных ресурсов, используемых под управлением операционной системы Windows, на ЭВМ под управлением операционной системы Astra Linux при установке на них промежуточного программного обеспечения Wine. Пенитенциарная система и общество: опыт взаимодействия: Сборник материалов IX Международной научно‑практической конференции, Пермь, 06–08 апреля 2022 года / Сост. А.И. Согрина. Том 1. — Пермь: Пермский институт Федеральной службы исполнения наказаний, 2022. — С. 112–115.

7. Соловьев А.В. Способы запуска Windows‑приложений на ЭВМ под управлением Astra Linux. Новые информационные технологии в научных исследованиях: Материалы XXVIII Всероссийской научно‑технической конференции студентов, молодых ученых и специалистов, Рязанский государственный радиотехнический университет имени В.Ф. Уткина, 22–24 ноября 2023 года. — Рязань: Рязанский государственный радиотехнический университет имени В.Ф. Уткина, 2023. — С. 170–171.

8. Уймин А. Г., Морозов И.М. Оценка безопасности Wine с использованием методологии STRIDE: математическая модель. Современная наука: актуальные проблемы теории и практики. Серия: Естественные и технические науки. — 2023. — № 6–2. — С. 164–170.

9. Хватов А. А., Деревянкин А.Ю. Влияние санкций на развитие информационных технологий в России. Вестник евразийской науки. — 2023. — Т. 15. — № s1.

10. Храмцова С.Н. Импортозамещение в сфере ит. НОВЫЙ ПУТЬ РОССИЙСКОЙ ЭКОНОМИКИ: ИМПОРТОЗАМЕЩЕНИЕ, ИННОВАЦИОННОСТЬ, ЭКОНОМИЧЕСКАЯ БЕЗОПАСНОСТЬ: сборник статей Международной научно‑практической конференции, Воронеж, 15 декабря 2022 года. — Уфа: Общество с ограниченной ответственностью «Аэтерна», 2022. — С. 92–101.

11. Шершаков А.Д. Внедрение альтернативных операционных систем в сферу производства в санкционных условиях в России. Яковлевские чтения: Материалы Всероссийской научно‑практической конференции, Сакнт‑Петербург, 04 апреля 2022 года. — Сакнт‑Петербург: ООО «Скифия‑принт», 2022. — С. 135–137.

12. Blajian, Gregory & Eggen, Roger & Eggen, Maurice & Pitts, Gerald. Mono versus.net: A Comparative Study of Performance for Distributed Processing. Proceedings of the International Conference on Parallel and Distributed Processing Techniques and Applications & Conference on Real‑Time Computing Systems and Applications, PDPTA 2006, Las Vegas, Nevada, USA, June 26–29, 2006, Volume 1, Pages 45–51.

13. Duncan, Rory & Schreuders, Z. Security implications of running windows software on a Linux system using Wine: a malware analysis study. Journal of Computer Virology and Hacking Techniques, 15(1), 2019.

14. Hall Jes. CrossOver Office 5.0. ACM Digital Library. URL: https://dl.acm.org/doi/fullHtml/10.5555/1 152 899.1152917 (дата обращения: 27.03.2024).

15. LeBlanc Dee‑Ann. Get Your Game On. Running Windows Games in Linux. ACM Digital Library. URL: https://dl.acm.org/doi/fullHtml/10.5555/1 118 998.1119013 (дата обращения: 27.03.2024).

16. Septiasari, Rycka & Pramadi, Yogha. A study on windows‑based ransomware implications on linux operating system using compatibility layer wine based on dynamic analysis. IOP Conference Series: Materials Science and Engineering, 2020, 1007, 012 120.

17. Zhao, Huimin. A Design of Information Teaching Platform Based on Linux Operating System. Journal of Physics: Conference Series, 2021, 2138, 012 018.

© Habrahabr.ru