Недавно мы сделали обратное преобразование - мы перенесли код с машины PowerPC под управлением VxWorks на систему Intel под управлением Linux. Я не помню, чтобы я сталкивался со многими трудностями в отношении различий между операционными системами. Очевидно, что любой вызов API для конкретной ОС должен будет измениться, и мы не широко использовали эти функции.
Нашей самой большой проблемой была не разница между операционными системами, а разница между PowerPC и оборудованием Intel. PowerPC - это Big Endian, а Intel - Little Endian. Наше программное обеспечение написано на C и сделало много предположений относительно порядка байтов, и это было абсолютным кошмаром, чтобы заставить его работать снова гладко. Существовали буквально сотни структур, которые определяли битовые поля и должны были быть переупорядочены для правильной работы. В итоге мы реализовали в GCC #pragma, которая обращала эти битовые поля при их определении (#pragma reverse_bitfields).