I did a bit of cross-platform development in C++, and I'm glad to report that Linux is an API clusterfuck in regard to anything going beyond system calls. None of the desktop-related stuff is part of the system and there's always more than one way to do something, and you have to support all of them because else someone would complain that your thing doesn't work on their particular configuration.