You need to learn about Apple's "walled garden" mindset. As long as you stay within Apple's ecosystem, things will work together exceedingly well. Apple strives to make life easy for their users, and delight them with a good user experience. But this can only work as long as you stay within their software and data ecosystem, meaning within the walled garden. My favorite example is integration of music storage and playlists through iTunes on all devices and data repositories, namely iTunes.
The moment you leave that walled garden, and try to get data in or out, or get things to interoperate across that boundary, it gets hairy. It's not that Apple deliberately creates problem for no good reason, they simply don't care about this use case. In particular, they don't document many of their external interfaces, because that's simply not required for their goals. And because they care deeply about good integration within their ecosystem, and good security and privacy within it, getting data in and out of it can be pretty hard.
My suggestion is: Try it, for example with Gnome or KDE. Don't invest much time in it, and in particular don't invest much emotion. Sometimes, it can be a better approach to use a tool that's within the Apple ecosystem to push data in/out, instead of trying to pull it from outside. For example, for Calendar integration, can you use AppleScript on a Mac to get contacts and calendar events within the Mac, and then push them out to outside tools?