util/ is now structured as follows:

util/error: basic error handling functions (lowest layer)
util/win: win32 portability (lowest layer)
 util/string: string and memory abstraction (depends on error)
  util/disk: disk IO abstractions (depends on string)
 util/config: configuration handling (depends on error)
  util/getopt: command line parsing (depends on config)
 util/threads: pthread abstractions (depends on error)
  util/os: process and system abstractions (depends on threads, config)
   util/network: network IO abstractions (depends on threads, config, os)

The following depend on all of the above:
util/cron: periodic job execution 
util/config_impl: implementation of config API 
util/loggers: specific logging implementations

util: main utility library (depends on all of the above)
      => these are all statically linked into gnunetutil.so

-------- TODO ----------
util/crypto: implementation of crypto API (depends on gnunetutil.so)
      => linked to gnunetutil_crypto.so
util/containers: implementation of bloomfilter/vector/hashset (depends on gnunetutil.so)
      => linked to gnunetutil_containers.so (also requires libgnunetutil_crypto)
util/network_client: library for synchronous communiation of clients with gnunetd (depends on gnunetutil.so)
      => linked to gnunetutil_network_client.so

Most GNUnet libraries and plugins will only need to (directly) link
against gnunetutil.so.  Some may also require crypto or containers.
Applications will usually additionally link against gnunetlogging.so
and gnunetconfig.so which during startup will be used to provide
concrete configuration and error handling implementations.

