Является ли linux бинарный универсальным для всех видов дистрибутивов?
Мне довелось установить симулятор VHDL модели sim на Linux. В руководстве сказано, что он поддерживает только RedHat или Suse, но я только что попытался установить его на Ubuntu. И я мог бы установить его без проблем.
- Является ли Linux бинарный универсальным для всех видов распространения? Я имею в виду, если я создаю программу на дистрибутиве А, могу ли я быть уверен, что она будет работать на любом Linux?
- Почему большинство поставщиков коммерческих программ говорят, что программа работает в определенном дистрибутиве? (в основном Redhat и Suse, а не Ubuntu)
3 ответа
Это два вопроса:
Является ли бинарный файл Linux универсальным для всех дистрибутивов?
Это зависит:
- Если программа не использует ничего вне ядра Linux, она будет универсальной, за исключением 32- или 64-битного вопроса. Linux "hello world" (минималистичная программа, которая просто печатает "hello world" в окне терминала), вероятно, может быть независимым от дистрибутива.
- Если программа использует какую-либо неосновную библиотеку или службу (которая является большей частью Linux, ядро довольно маленькое), существуют различия в том, какие библиотеки включены, какие версии этих библиотек и где они расположены. Таким образом, в этом (наиболее распространенном) случае распределения не равны.
Почему многие коммерческие программы говорят, что они работают только на одном или нескольких дистрибутивах?
Потому что существует очень большое количество дистрибутивов Linux, и никто не хочет тестировать их программы на всех них.
Коммерческие поставщики обычно говорят, что они поддерживают только те дистрибутивы, на которых они тестировали свое программное обеспечение. Он может работать или не работать в других дистрибутивах, с точки зрения поставщика, просто вы не можете жаловаться, если он не работает в дистрибутиве, который они не поддерживают.
Какие дистрибутивы будут выбраны для тестирования, зависит от того, что продавец ожидает от своих клиентов. Коммерческие / профессиональные программы обычно выбирают корпоративные дистрибутивы, возможно, исходя из соображений, подобных "люди, которые заплатили за их ОС, с большей вероятностью будут платить за наше программное обеспечение", возможно, просто путем подсчета дистрибутивов, используемых их существующими клиентами.
См. Также Марк Шаттлворт (парень, который является причиной того, что у нас есть Ubuntu, в первую очередь) о бинарной совместимости между Ubuntu и Debian - Debian является ближайшим родственником дистрибутива Ubuntu.
И RedHat, и SUSE имеют давние корпоративные Linux-традиции и смогли изготовить и протестировать эти пакеты. Со временем будет больше примеров пакетов, которые были протестированы для работы в Ubuntu. На самом деле, многие такие пакеты с прошлого года проходят тестирование на работу с Ubuntu. Поскольку Canonical заключает соглашения с большим количеством поставщиков, будет больше пакетов, сертифицированных Ubuntu.
Первый вопрос: если вы хотите создать программу, которая будет работать во всех дистрибутивах, создайте статический (по сравнению с динамическим) исполняемый файл. statically-linked
Исполняемый файл не зависит от системных библиотек, поэтому может работать между дистрибутивами, если архитектура (например, Intel/AMD) одинакова.
Вот программа,
int main(void)
{
printf("Hello, World!\n");
return 0;
}
Давайте скомпилируем как обычно,
$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, World!
$ ldd helloworld
libc.so.6 => /lib/libc.so.6 (0x00007f3cc3481000)
...
$
$ gcc helloworld.c -static -o helloworld_static
$ ./helloworld
Hello, World!
$ ldd helloworld_static
not a dynamic executable
$
Итак, что вы можете сделать с этой программой VHDL? Получите файл.rpm и преобразуйте его в.deb, используя иностранца. Затем установите. Если это сработало, ты в порядке. Если это не работает, используйте ldd
выяснить, какой файл библиотеки отсутствует. В худшем случае создайте виртуальную машину для других дистрибутивов Linux и запустите программу там.
Я второй ответ jg-faustus, но вы также должны быть осторожны с форматом пакета. Даже если сами исполняемые файлы являются переносимыми и присутствуют все необходимые библиотеки, разные дистрибутивы размещают файлы в разных местах и используют разные инструменты для управления установленными пакетами. Если поставщик упаковывает свой продукт как пакет RPM, вам придется использовать пакет типа ' Alien', чтобы конвертировать и установить его в дистрибутиве на основе DEB, например Ubuntu.
Если они распространяют свое программное обеспечение в виде исходного кода, то вы также можете скомпилировать его самостоятельно, после чего исполняемый файл будет адаптирован для вашей конкретной системы (но менеджер пакетов ubuntu об этом не узнает).