Что мне нужно знать, если я хочу написать приложение, которое будет работать на любом дистрибутиве Linux?

15

Я планирую написать приложение, которое я хотел бы запускать на любой установке Linux без необходимости переписывать какой-либо код при этом (за исключением, возможно, интерфейса, GNOME против KDE и т. Д.).

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


источник
открытый код или проприетарный? составлено или интерпретировано?
ксенотеррацид
с открытым исходным кодом и скомпилированы.
ну, тогда вам не нужно беспокоиться о написании небольшого app / makefile или чего-то такого, что будет связывать вашу программу, как это делает oracle
xenoterracide

Ответы:

10

Некоторые моменты, которые следует учитывать при разработке,

  1. Используйте стандартную систему сборки
  2. Избегайте жестких путей к библиотекам
  3. pkg-configвместо этого используйте инструменты вроде поиска внешних пакетов.
  4. Если ваше приложение имеет графический интерфейс, используйте некоторые платформы, например, wxWidgetsкоторые могут отображать нативные элементы интерфейса в зависимости от того, где вы работаете.
  5. Избегайте создания зависимостей с пакетами, которые не будут работать в других дистрибутивах.

Единственный способ полностью убедиться, что ваше приложение работает во всех дистрибутивах, - это запустить его и протестировать на нем. Один из способов сделать это - создать виртуальные машины для каждого дистрибутива. VirtualBox может быть использован для этого. У меня на коробке около 8 виртуальных машин для такого рода тестирования.

Я думаю, что при развертывании приложения нельзя слишком много обобщать, поскольку каждый дистрибутив использует разные способы установки пакетов. Debian использует debи Fedora rpm.

Наванет К.Н.
источник
3
просто избегайте жестких путей кодирования, самое большое различие между ВСЕМИ дистрибутивами - это их менеджер пакетов и то, куда они помещают вещи. Предположим, что они разместят каждый отдельный файл и каталог в другом месте, чем вы.
ксенотеррацид
2

Просто мой 2c, но у меня было меньше головной боли с приложениями, которые либо идут с пакетами в официальных репозиториях, либо скомпилированы из исходного кода. Приложения, которые распространяются как сторонние двоичные файлы, как правило, страдают от некоторых проблем с зависимостями. Мне обычно нужно отслеживать их и решать вручную.

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

sybreon
источник
2

Если вы пишете для не встроенного Linux, главное помнить, что разные дистрибутивы будут иметь разную коллекцию версий библиотек. Поэтому вы должны установить достаточно старую базовую линию. Поскольку Debian обновляется медленно, стабильный Debian (или старый стабильный, когда он существует, через несколько месяцев после выпуска) имеет тенденцию быть разумным выбором.

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

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

Обратите внимание, что то, что я написал выше, неверно, если вы хотите, чтобы ваше приложение работало на встроенных системах (здесь подразумевается все, что не является сервером, настольным компьютером или ноутбуком), которые, даже если они работают с ядром Linux, часто не имеют обычных библиотек, начиная с отказа от Glibc в пользу µClibc , dietlibc , Bionic и т. д.

Жиль "ТАК - прекрати быть злым"
источник
1

Я считаю, что это Linux Standards Baseполезно, особенно если ваше приложение включает службы (демоны). Посмотрите некоторые из этих сайтов:

Но если бы мне пришлось ограничиться только ресурсом, это мог бы быть стандарт файловой иерархии .

Дэвид Дж. Лишевски
источник
0

Distros отличается в основном упаковкой и настройками по умолчанию. Каждый код, работающий в определенной архитектуре, должен работать в каждом дистрибутиве этой архитектуры. Также вы можете легко запускать приложения GNOME в KDE и наоборот, так что вы можете выбрать то, которое лучше всего подходит вам / вашей базе пользователей, и все готово!

Мистер Шунц
источник
0

Главное - это выбрать язык. На каком языке это будет работать? Если вы действительно хотите работать с любым дистрибутивом Linux, вы можете написать его на Python. Любое приложение на Python, которое будет работать на Linux, будет (в основном) работать на любом дистрибутиве Linux с 0 модификациями.

Python также имеет действительно хорошие связующие элементы GTK и Qt. Я никогда не работал с gtk, но с PyQt действительно здорово работать.

Преимущества Python в том, что вам, вероятно, не нужно будет компилировать какие-либо расширения (хотя это полностью зависит от того, что вы пишете. Даже если вам это нужно, это довольно просто.) И у вас также есть отличный источник распространения через pypi , Установка программ на Python оттуда, как правило, даже проще, чем репозиторий дистрибутивов.

Falmarri
источник