Представьте, что у вас есть исполняемый файл.Операционная система должна загрузить его в память.Даже это не портативно.Что загружать, где находится код, какие функции он будет импортировать из других библиотек DLL и т. Д., Записывается в исполняемый файл, и каждая ОС имеет свой собственный формат.См. Следующие ссылки:
Теперь представьте, что из-за магии у ОС есть все в памяти, она сопоставлена со своими структурами и даже знает адрес основной функции, которую нужно вызвать.Ваша программа, даже для записи строки на экране, должна вызывать функцию CRT или OS API .С помощью CRT он не знает, что делать, они различаются в двух средах, и даже API различаются.
Даже если, представьте себе снова (в Windows реализовано подмножество POSIX API ), у него есть общая функция вызова, он не знает, как ее вызвать из-за различных соглашений о вызовах .