Spah's sappin' mah optimizations!
@MichaelFrank SmartOS, in a nutshell, is: the kernel of Illumos (which is based on a heavily community-maintained continuation of the last version of the OpenSolaris kernel before Oracle took Solaris's future code base closed-source), plus the userspace of FreeBSD, plus a unique KVM (Kernel Virtual Machine) port from Linux to the Solaris kernel.
so it's Solaris-ish with a userspace that works a lot like BSD, and much of the old Solaris crufty userspace is pushed to the side
given that many open source packages compile much more happily under BSD than under the Solaris userspace, that's a good thing
the only things that are off-limits (without starting up a Linux guest under the KVM hypervisor) are compiled Linux binaries (e.g. proprietary programs), and stuff that depends on kernel features only available on Linux, which, right now, is stuff like pulseaudio, systemd, udev
the main advantage is the zero-overhead, secure-out-of-the-box Solaris Zones, which are containers that run on the host kernel but have no filesystem or network access to the host or to other containers. that, and ZFS, which is an insanely fast, scalable and reliable filesystem
Solaris Zones and ZFS are so much better than the equivalent Linux offerings that they pulled me away from using CentOS 7 on my server
Solaris's kernel to userspace ABI is much simpler and older than the Linux kernel's equivalent, which also means that, from a security perspective, it's easier to secure -- with fewer APIs, there are fewer loopholes to consider
and since nobody (except a few special folks at Red Hat) write userspace code that directly calls into the kernel -- the proper way is to call the appropriate function in the C library -- as long as C library standards (POSIX, SUS, etc) are maintained, code written for Linux mostly works on Solaris/BSD.
autotools' great configure
scripts take care of the rest: for semantic differences in system calls or C library calls, the availability/absence of various functions in the C library of the platform, etc. -- the configure script can quite easily replace missing functionality, or convert one approach to an API into another using a macro or shim