Давайте начнем с вершины. Вы создали программу в каком-то дистрибутиве Linux на каком-то языке программирования. Вы не сказали нам, что.
Если это в C, то ваши первые две проблемы - это hardware и glibc. Под аппаратным обеспечением я в первую очередь имею в виду 32-разрядный по сравнению с 64-разрядным, но также стоит отметить, что Linux работает на PPC, ARM и SPARC.
Если у вас 64-битная система, вы можете запустить 32-битную виртуальную машину и протестировать.
Программы, написанные для более новых версий glibc, обычно работают на более старых версиях, но не наоборот. Так что, если вам нужно поддерживать старый дистрибутив, вам придется создавать там.
Для большинства программ версия glibc является адекватной заменой для версии ядра, но если вы будете работать над ней достаточно усердно, вы также можете создать зависимость от версии ядра.
Если вы программируете на C ++, у вас возникает дополнительное беспокойство: среда выполнения C ++ / libstdc ++. Не во всех дистрибутивах есть общие библиотеки, необходимые для запуска всех возможных программ.
В некоторых случаях программа, скомпилированная и связанная с более старой версией g ++, не найдет libstdc ++, который ей требуется в более новом дистрибутиве.
Тогда вы упоминаете «Unix». В современном мире не существует такого понятия, как Unix, в практическом смысле этого слова. Есть несколько систем, которые вы, возможно, захотите поддержать, о которых вы можете беспокоиться здесь>
- Семейство BSD: netbsd / freebsd. Вы можете запустить их в виртуальной машине. Вы не можете ожидать, что двоичные файлы будут перенесены.
- (Open) Solaris: Вы можете запустить это на виртуальной машине, по крайней мере, для чипов Intel. Вы не можете ожидать, что двоичные файлы будут перенесены.
- HP-UX: Вы не можете запустить это на виртуальной машине.
- AIX: вы не можете запустить это на виртуальной машине.
Поддержание кода, который работает во всем этом зоопарке, - большая работа, которую не следует предпринимать легко.