I spent Monday afternoon porting GNU Smalltalk to Darwin -- the biggest job being the porting of the libsigsegv library which is used for the generational GC. Gee, how hideous an environment!
It is as far from the standards as they could make it. Everybody has stack_t, they have struct sigaltstack. Everybody includes <signal.h>, they want you to include <sys/signal.h> as well. Some constants are named differently, and so much things are only available on the Mach level -- luckily I found the info on how to decode PPC instructions in the Boehm garbage collector, and some more source code in XEmacs. The port is a 20k patch while other OSes are 2kb at most. Bah. I am going to submit it to Bruno Haible for inclusion in the master libsigsegv sources.