SUBTERFUGUE to-do list

Here's a list of things to improve or fix, not really in much of a particular
order.

- look for changes in 2.4 that might obsolete our stuff.  (changes in
  sys_wait4 in particular)

- need some kind of regression testing (use python regrtest package?)

- check that we're handling things correctly when trick helper processes
  report on wait

- fix zombie accumulation problem (fixed by Pavel's kernel patch? not in 2.4 anyway)
- fix /proc/self bug in canonical_path

- interactive sandbox trick (Gtk+ interface)
  [Pavel is working on one: http://atrey.karlin.mff.cuni.cz/~pavel/sandbox-0.1.tar.gz]

- why doesn't emacs' shell-command work? (uses vfork) [works for me --pavel]
  (emacs does a vfork, and then sees the process exit via
  wait4(WUNTRACED|WNOHANG), then checks with kill(pid, 0) to see if it's
  really gone, but it's not, it's a zombie, which probably means we forgot to
  wait for it somehow)

- implement CLONE_THREAD (new in 2.4)

- time tricks to make netscape, staroffice installer work better
- handle volatile memory problem (which allows evasion)
O finish project web page docs (motivation)
- nicer strace trick
- add more detail to man page
- makefile improvements?

- out of memory trick
- disk full trick
- if follower crashes while a process in entering a syscall, that call still
  gets executed, even though we SIGKILL the process (?)

- not doing the right thing if parent has a SIGCHLD handler and kid exits (no
  signal gets sent???)
- handle rapid parent or child death at clone
- implement wait rusage
- handle restarting sleep/nanosleep (sigsuspend?) (probably needs KERNEL PATCH)
- disallow blocking (ignoring?) of SIGTRAP?
- problem: ignored signals still cause syscall intr
- deliver exit signal correctly to parent when it's not SIGCHLD (partially done)
- sigreturn call causes problems?
- need to handle lcall7, personality?
- handle siginfo correctly?
- blocking SIGCONT causes problems?  (doesn't look like it)
- handle bogus args (bad path ptr, etc)
- allow root to run as another user (like strace)
- more elaborate Memory interface
- nice general mapping classes (which map strings to values)
- option for tricks to ignore some children??
- maybe make SF multithreaded, so that child syscalls won't have to be
  serialized
- do early detach of a process we know will die? (like strace)
- paranoia trick (block anything that could steal control)
- implement process attach
- implement ptrace in kids (incl CLONE_PTRACE)
- gdb trick (e.g., allow gdb to be run under sf)
- any use for separate callbefore and callafter masks?
- callmask kernel patch
- get wait working best effort, for the non-traced-parent case
- trace/replay (a la MEC's qtrace) trick?
- support replacement of a call with multiple calls (rather than just 0 or 1),
  probably using RESTARTNOINTR
- do something smarter about the exec SIGTRAP
- handle SIGCONT or others sent to suspended kid (or prevent)
  (this is a race--we don't want other processes CONTinuing traced kids that
  are currently stopped in a PTRACE report

- profile/optimize python

- add distutils packaging? (won't work with tricks?!)
