Right now the same objects are duplicated in many targets, causing huge duplication of code, causing symbols collision, and requiring a huge time to bind the libraries at runtime.
For instance, my collision detection script  outputs this:
Symbol pdb_default_getgrgid@@ (32-bit UNIX System V ABI Intel 80386) present 20 times
It means that there are 20 copies of the RPC objects. There are many, many more objects that have the same problem. It's especially bad for the Python extensions, but it's just as bad for the rest.
Having a single libsambacore.so library where all these symbols would be defined would reduce a lot the memory used (since it could then be shared among, say, the desktop system as a client and the smbd daemon as server), and would reduce the startup time of all the utilities.
weird, most of the krb5 tests fail and can't find the kerberos libs. What says "ldd /usr/lib/libkrb5.so" ?
I suffer from this too, when trying to make small netbook images containing samba-client which at 53Mb on disk is larger than the kernel ;-)
Indeed seven out of the largest 15 binaries in /usr/bin on my system are smb-client - which, given the relatively trivial nature of some of those tools (at least AFAICS), is quite amazing :-)
Waf is the, new build system in Samba 4.0 and later, uses shared objects extensively.
In a remarkable coincidence, samba is larger than ever.