Если у программы нет зависимостей или она с ними статически слинкована, то только операционная система, под которую скомпилирована эта программа. Если зависимости есть и линковка динамическая, то должны быть и библиотеки этих зависимостей.
Чаще всего необходим "Microsoft Visual C++ Redistributable", а вот какой версии зависит от того чем и как собираете. Но если ваш (или не ваш) софт при запуске требует какой то файл, то по его названию можно определить версию.
В винде - обычно runtime C library, msvcpXX.dll, где вместо ХХ - номер, причем их до десятка может быть разных версий, MS обычно бесплатно раздает инсталляторы.
В линухе обычно все уже есть, там нужна обычно libc ну и другие, если использовались.
Программу нужно скомпилировать в запускаемый файл. При компиляции нужно указать, какие версии операционной системы должны поддерживаться. Всё это очень зависит от операционной системы, в которой программа будет исполняться.