FLProg и пингвины

Добрый день.Я разработчик программы FLProg — среды визуального программирования плат Arduino.В обсуждениях на форуме посвященном программе и в личных сообщениях мне очень часто задавали вопрос о возможности запуска программы под ОС Linux. К сожалению, я не являюсь линуксоидом, и не имел возможности проверить работу программы под этой системой.Но буквально сегодня один из пользователей программы сделал мне новогодний подарок. Он провел серьезное исследование вопроса запуска программы под различные версии Linux, и написал статью на эту тему. Я очень ему благодарен, и поскольку считаю, что читателям Хабра это то же будет интересно, представляю эту статью Вам.

Дорогие друзья,

Хочу написать пару слов об использовании FLProg под Линуксом.

Я заведую лабораторией автоматики на инженерном факультете одного частного университета. Мы много работаем с платформой Arduino и у нас всё заточено под Линукс. Кроме того, у нас большой популярностью пользуются русские разработки и русский язык. FLProg был встречен на ура, но к энтузиазму прибавилось и недоумение, почему у русских отсутствует версия под профессиональную операционку.

Но к счастью не всё так запущено.

От разработчика я узнал, что FLProg написан на SmallTalk с использованием вызовов Win API. Со SmallTalk-ом я знаком мало, но у меня есть большой опыт работы например с Си#, который тоже использует Win API, и у меня накопился положительный опыт кроссплатформенного использования подобных приложений. Поэтому у меня не возникло в принципе сомнений, что FLProg должен запуститься под Линуксом.

Для начала я просто скопировал файлы FLProg из Windows в Линукс и запустил программу из командной строки. Ожидания меня не обманули — FLProg запустился и бесперебойно работал под Убунту 12.10 и 14.04, а также openSuSe Evergreen 13.1. Разумеется, для работы с Win API Линукс требует соответствующей среды. Такой средой могут быть дистрибутивы использующие либо объединенное ядро LUK, либо стороннее ПО, как правило Mono или dotGNU (обе воспроизводят под Линуксом среду .NET). У меня во всех трех случаях установлена Mono. В настоящее время Mono поддерживают платформы Debian, Ubuntu, Red Hat, Suse, CentOS, Gentoo и Arch. В SuSe Mono установленя по умолчанию; в других дистрибутивах её надо установить из репозитория или исходников. В настоящее время это процесс достаточно отлаженный и автоматизированный, так что думаю нет надобности описывать его в деталях. Важно, чтобы у вас была версия вашего дистрибутива была по возможности поновее. Например, Убунту поддерживает Mono начиная с 12-й версии, а Fedora Core — с 10-й.

Но что делать, если у вас старая версия Линукса, или возникли проблемы в установлении Mono? (Например, Scientific Linux, которая хоть и является клономRed Hat, но Win API поддерживает крайне неохотно; Mono приходится устанавливать из исходников, долго и муторно доводя их до ума вручную.) Тогда на помощь приходит старый, добрый wine. В моем случае я запускал FLProg командой wine './FLProg' из командной строки под Убунту, openSuSe Evergreen 13.1 и Scientific Linux 6. Как и следовало ожидать, FLProg охотно запустился и стабильно работал во всех случаях. Если при этом, Убунту 12 ругается на несовместимые или отсутствующие модули:

1e005070db6540eb8a9ac07eb9cfaa00.png

это можно проигнорировать, так как речь идет о глюках в реализации поддержки режима i386 под системой amd64 и эти глюки устранены в новых версиях wine. На работе FLProg это не отражается.

Тут мне, возможно, укажут, и вполне справедливо, что нет смысла тупо копировать файлы FLProg-а на Линукс и рисковать, что что-нибудь накосячу, когда FLProg устанавливается стандартной процедурой с использованием инсталятора Smart Install Maker. Разумеется, я пошел по этому пути. Сразу оговорюсь: есть нюансы.

Во-первых, для работы со Smart Install Maker вам понадобится wine. А у wine своя, автономная система файлов и папок, имитирующая систему Windows. Следует учесть, что если инсталятор предлагает установку программы в папке по умолчанию как здесь:

ed9d41fa98f7422a92b6ec373cf509d8.png

то на самом же деле она будет находится в папке как здесь:

211076fae97c424395d05f6e4fac0471.png

Если вам не принципиально, где размещены файлы FLProg-а, можно всё оставить как есть. В противном случае вам придется вручную подогнать размещение папок под существующую или предполагаемую организацию.

Во-вторых, может случиться, что инсталятору придется помогать руками. Если, например, если под Убунту и SuSe весь процесс гладко прошел в автоматическом режиме, то под Scientific Linux 6 мне пришлось вручную создавать требуемые папки:

cbf115a75fa34cc6adc744289b944b7f.png

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

И в-третьих, FLProg установленный «по всем правилам» начинает заметно тормозить. Это особенно заметно на машинах с 2 гб памяти и посредственным тактовым генератором. Частично это можно объяснить тем, что теперь вызов программы происходит в измененной среде:

4c56570f43284a5e8729903418ec28fa.png

но только частично, так как при вызове программы из командной строки FLProg по-прежнему тормозит. Вероятнее всего это происходит из-за того, что wine сохраняет управление библиотеками в фоновом режиме.

Так что за вами выбор метода установки и вызова FLProg-а. Если вы решите запускать FLProg из командной строки, то проблем у вас не возникнет. Если же открывать каждый раз папку FLProg вам не охота и вы хотите запускать его глобально или, как у меня, из системного меню, то следует помнить, что FLProg ищет файлы в текущей папке и может вам выдать ошибку отсутствия файла:

fc4614451df74821bd66f5fc7c53e6b5.png

Лечится это очень просто: можно написать простой скрипт, который будет открывать нужную папку:

1b7b6261bc28465382d7c074fac2854f.png

и поместить её, например, в ~/bin. Можно также создать новый пункт в системном меню (например под alacarte в оболочке Gnome, как у меня):

0e85cf903bff4d638e5930096d2e6cdf.png

и вызывать скрипт через него или прописать обе команды прямо в командной строке через »;» — кому как удобно.

Если вы используете инсталятор для установки FLProg, то инсталятор создаст на рабочем столе две иконки — FLProg.desktop и FLProg.lnk. FLProg.lnk. можно сразу же удалить — он работать не будет; зато FLProg.desktop полностью рабочий — его можно оставить на рабочем столе или перетащить на панель задач — как кому удобнее:

b09754b51bef4088b7913c4c327fc1c2.png

Если вы работаете в Убунту под оболочкой Unity, то каких-то существенных проблем у вас тоже не будет. Если вы установили FLProg с инсталятором, то программа отлично запускается через Dash Apps Lens:

77078f9fc5bc4b3b8d07c81fb608e2e5.png

В моем случае видны три иконки — это результат установки через инсталятор и добавления FLProg в системное меню в разных местах и разным образом. На других компьютерах картинка может быть другая. Следует отметить, что в любом случае в панели задач FLProg будет отражатьса либо как приложение wine:

2153c25827d94aa798ef5a631cf4667c.png

либо как приложение из текстового терминала (в зависимости от метода вызова) и возможности поместить программу отдельно в панель задач на постоянно нету. Это, к сожалению, существенное неудобство Unity, но разработчики оболочки находятся под постоянным обстрелом критики линуксоидов и возможно в будущем что-нибудь в этом плане улучшиться.

Я еще раз хочу поблагодарить Former Naval Person за проделанную работу.Так же хочу представить еще несколько проектов пользователей программы FLProg.

Поздравляю всех читателей Хабра с Новым Годом

© Habrahabr.ru