How OpenSSL does portable. - Assume the OS provides nothing, because you mustn't break support for Visual C 1.52, etc. - Spaghetti mess of #ifdef #ifndef horror (nested 17 deep, #ifndef FOO within #ifdef FOO, etc.. - Written in "OpenSSL C" essentially it's own dialect - to program to the "worst common denominator" - Implement own layers and force all platforms to use it (RAND_foo, BIO_foo, malloc, etc. etc. etc.) many of these have issues (different API, poor implementation, etc) This is the source of much pain, and makes the code base very hard to work with. It assumes all the world is stuck in 1989.