Portability has been a key factor of modern programming languages, allowing you to write once and compile for each platform to be deployed on in compiled languages and write once and run everywhere for intermediate languages and interpreted languages. This has been repeated numerous times, from textbooks to documentation and papers, letting a large portion of beginning programmers to believe that their code will be available for any platform. The utopia for any developer.
However, once you encounter the “It works on my computer” issue, you get a sense of how complicated our systems are and how fragile portability really is. Any practical program will have to rely on facilities provided by the operating system and its supporting programs. Though some abstractions are similar across different operating systems, the different implementations will result in unpredictable issues. Furthermore, the abstraction provided by most programming languages are not sufficient for tasks that require either performance or specific accesses to the OS.
I mean, just take a look at what the libev developers had to go through.