Если взять целиком программу, то её между между разными версиями юникс-подобной ОС не всегда без единого изменения можно перенести. Но можно писать программы так, чтоб эти изменения были минимальны и касались только аппаратуры и/или ОС. А можно говнокодить по методике программирования проф. уровня, я в теме про goto пример приводил.