BUGS - HIGH PRIORITY
- RH: the stdout of all boot scripts is mingled, when there's
  a failure in a boot script, you can't tell by looking at the console
  which script it was, you need to reboot without activating SEREL,
  (or use SEREL_DEBUG and look at the logs in /tmp)

- better integration with RH /etc/rc:
  - cater for those /etc/rc/init.d/* scripts that don't have either
    lsb-style comments or use serel directly.
  - improve performance by caching the lsb-comments so that
    the boot scripts don't need to be parsed on each runlevel change.
  - ease management burden on users for when they upgrade packages
    and lose lsb comments in their boot scripts.
	Sure, they can rerun install-lsb again, but defaulting to
	dependencies-redhat-7.1.txt might be a better solution.
- replace use of C++-style comments // with /* */

BUGS - MEDIUM PRIORITY
- a needer blocks, a statuschange message comes in, the provider
  fails, but the blocked Edge (userdata: yes) is left dangling and
  has to be cleaned up.  Not exactly sure what to do here, 'cos
  one dangling edge like this might be useful for debugging,
  eg. it'd look nice displayed in a graph.
  Similarly, a provider fails, which causes the needers to fail,
  and the Edge hangs around.  Useful for debugging, but when the provider
  tries again and succeeds, we get two Edges between the same two Nodes.
  Could reuse the existing Edge of course, think for a while...
- must be lots of memory leaks - purify
- ensure that bad return values from malloc are handled correctly everywhere.
- server should remove the pipe upon shutdown
- releases for distribution shouldn't be compiled with -g

CHANGES - HIGH PRIORITY
- man pages for everything
- performance: implement fb_wrap in C
- allow a process to issue multiple "provide" statements.
- add a --immediate option to provide (asserting a successful exitstatus).
  This would offer finer-grained control to service providers by
  registering the service name before the caller exits.
- add provide --lifecycle option to support LSB Required-stop:
- gnu standards on all command lines: --version, --help
- SEREL_MODE="check" to start the scripts in serial, but
  have serel watch for potential errors and report
- shutdown implementation
- LSB: Required-Stop keyword involves a "eStateHalflife" state in the fsm,
  representing service names that exist for the duration of a process id
- RH: testing against all runlevels, not just 3 and 5
- RH: fix race conditions that lurk within /etc/init.d/rc
      (eg initlog and syslog)
- crusade against zombies - set an alarm in the client that
  checks getppid() and if it's 1, then exit with status 1, 
  generating warning on exit
- if the server loses state, scripts blocked on need/provide in the body
  of the script are a bit screwed:
  - can't shut down 'cos the unprovide statements
    will fail on the basis that there's no Node in eStateIn
  - can't be started, 'cos they will (quite properly)
    notice they're already running and fail
  - bug doesn't apply to scripts that use need/provide exclusively via
    the Linux Standards Base 

	Solution:
	There shouldn't be any known bugs that make the server terminate
	abnormally.

	It's reasonable to want to shut the server down to save memory
	during the "started up" life of the system, and to restore the
	server state during shutdown.

	UI to the server state: plain-text xml and point+click graph.

	Obviously, we don't want to be restarting services just to
	make the real world consistent with the state of the server.

CHANGES - MEDIUM PRIORITY
- namespaces:
  - allow non-super-users run the system under euid.
  - namespaces for single user also useful to support non-boot
    relationships with a similar problem.

- If you've got a service stuck in eStateIn, the only way of
  cleaning it out without restarting the server it to look up the pid
  and run "statuschange pid status".  Failing it by name would be
  more convenient.

- extensive use of malloc/free.  Performance would be improved
  by a buffered allocation scheme.  A pity the glib folks haven't
  exposed their interfaces.

- a server should fail when another is already listening on the same pipe
  It can find out by sending an "am I the only one?" message.
  Problem scope: there's a bug in the test scripts where the server isn't
  shut down under certain failure conditions.

- clean up the root directory of the source tree by shifting the
  autoconfiscate gunk into a subdirectory

ISSUES TO THINK ABOUT
- script parameter "restart"
- think about using the service name + hostname as a URL
  A query against this URL could be as simple as doing
  a ps -aux on the /var/lock/subsys.pid

BUGS FIXED
- clients block if server isn't running, should exit
- added O_NONBLOCK to the open()
