Depends on what you do, but the Mac is basically a Mach microkernel with a BSD-based, POSIX-compatible personality that is called Darwin. In fact, Apple hired a FreeBSD leader for that project.
You can basically compile the same code for OSX and Linux (except low level stuff, of course), and Apple even gives you an X11 server. So unless you develop device drivers or need things like direct GPU access ...
Windows on the other hand is ... total fuckshit, in my opinion, and their API and coding conventions are relics of the past, and are only bearable with copious amounts of abstraction or alcohol. Or both. Hungarian Notation for variable names is the stupidest shit ever: Bitch, you use a statically typed language like C and the compiler should know what type the variable is ... unless your code sucks. No need to force everyone name their Variables like "m_pszMyString" (stands for: a member of a class that is a pointer to a zero terminated string) and type that shit forever and ever. That shit was invented before IDE autocompletion was even a thing.
Also, whoever thought to name the function to open an (existing) file for reading "CreateFile()" should stub their little toe at least twice a day.