Блог о программном обеспечении

Зачем оно нужно?
Публиковать для себя разные вещи, чтобы потом не искать их у себя по разным папкам.
И, конечно, - делиться открытой информацией с другими.
Коротко по темам Caelinux - самый инженерный дистрибутив линукс;
CalculiX - мощная программа для расчетов по МКЭ;
OpenOffice Basic - то что легче выучить и затем эффективно использовать
Maxima - символьная математика от Вильяма Шеллтера, профессора Остинского университета. Все прочее - понемногу.

Дистрибуция приложений в linux

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

Итак, рассмотрим некоторое приложение, например консольное - без графического интерфейса. Например, такое как calculix CCX
 Внешне для пользователя на экране данное приложение выглядит как файл (без расширения exe как в Windows). Этот файл запускается через консоль, вместе с файлом модели и в результате расчета производит много других файлов с результатами расчета.
Данная расчетная программа не работает сама по себе на "одном ядре"
у нее есть внешние библиотеки. В линукс они складированы в недрах системы, закрытых для пользователя системных папках. Это файлы с расширением .so (аналог dll в Windows). Работают они аналогично dll, кстати в Windows та же программа выглядит как один exe файл и несколько dll, которые складируются в одной папке с exe
Так вот, в Linux, в принципе можно вытащить so файлы и складировать их в одной папке с экзешником - эффект будет тот же. Папку с файлами можно будет переносить с одного дистрибутива на другой, где они будут успешно работать.
Можно пойти дальше и при компиляции экзешника посредством GCC добавить ключ -static
в этом случае получится экзешник с уже вшитыми в него библиотеками (весить он будет больше на размер всех библиотек)
Статически линкованный файл будет работать на "голом ядре" в любом линуксе, даже, возможно, очень старом.
В linux есть команда file, позволяющая получить информацию об экзешике, является ли он statially linked или dynamically linked (то есть с библиотеками отдельно в системных разделах)

Чуть сложнее обстоит дело с программами, имеющими графический интерфейс. Ну, в общем, все различие в том, что экзешник линкован с библиотеками графического интерфейса. Но некоторые такие библиотеки настолько общие, что они наверняка окажутся любом дистрибутиве (так, что и не потребуется до устанавливать).
Например программы скомпилированные в среде Lazarus имеют в linux зависимость от GTK2, это очень общая и распространенная по умолчанию библиотека. Каких то усилий по портабелизации в данном случае можно не предпринимать.

Известно, что при наличии внешних библиотек могут случаться конфликты между версиями ("ад зависимостей") и в этом случае сложно бывает заставить приложение работать. Linux изначально - серверная операционная система, предназначенная для более-менее профессиональных пользователей, поэтому "ад" для начинающего - суть стандартная решаемая ситуация для продвинутого.
Но при использовании linux в качестве десктопной системы, зависимости могут причинять массу неудобств (особенно когда много программ или их версий)

Поэтому распространение софта в портабельном виде, вместе с библиотеками - наиболее распространенный способ.
В linux есть масса примеров распространения софта (в том числе очень сложного, коммерческого, типа  Siemenc NX или GiD pre- postprocessor) или открытого, как Salome-Platform, в портабельном виде, то есть когда все библиотеки идут вместе с приложением и складируются отдельно от системы.
Обычно файлы пакуют в так называемые run файлы - что то вроде setup exe в Windows. Иногда - просто папки в архиве, как qcad или Z88Aurora хотя в этом случае иногда нужно либо запустить скрипт, либо с помощью нескольких команд разрешить файлам и библиотекам выполняться.

В общем, портабельный софт в линукс - обыденная задача. С некоторых пор она даже проще решается чем в windows, где надо до устанавливать Net или среду выполнения программ на C++

Более серьезные сложности могут возникнуть при распространении приложений для разных архитектур (32 и 64 битных), в этом случае компиляторы разные и работа программы может немного отличаться (требуется отдельное тестирование)
Но это - отдельная тема, которая сути вопроса не касается





No comments:

Post a Comment