Future work on ABRT (ABRT v2?)
* Minimizing resource usage when idle. - stop running abrtd daemon continuously. - spawn ccpp hooks only when crash occurs. - handle python crashes only when they occur. - kernel oopses are detected by a small dedicated daemon or even by a cron job. - after crash data is dumped, a hook spawns abrtd "not-exactly-daemon-now" for further processing of the crash: more info collected, dbus signal emitted, etc. - python hook can perform dbus call asking abrtd to *create* the crash dump on its behalf, avoiding selinux problems. This still doesn't need abrtd to run continuously, dbus autostart helps here. - abrtd, started by any of these methods, shound time out and exit on timeout.
* Convert plugins to children. - plugins communicate back to parent abrtd via messages over stdout and by exit code. - can run plugins under non-root. - any resource leaks in plugins don't have long-lasting effects: as soon as they exit, everything is freed. - can easily run concurrent plugins without more difficult multithreaded coding. - crashes in plugins do not take abrtd down. - abrtd no longer needs to link against a lot of libraries. - plugins do not need to link against dbus libraries. - avoid problems with library initialization. - plugin executables may find new uses on their own (557943 RFE: Manually report a bz through abrt).
* Request files and other user data from non-root helper. - biggest problem is ccpp crash: hook is started by root, there is no way to access ~/files if they are e.g. on NFS4 volume or denied by selinux. - may want to collect non-file based info ($DISPLAY value etc). - abrtd needs to have a new dbus signal "hey, I have a crash, does anyone have any additional data for me?". - perhaps abrtd should try to collect this info itself, and ask for help only if it didn't work (how to avoid tripping over selinux?). - GUI applet or an "agent" daemon running under user UID (think about servers) can listen for such dbus signals and respond with dbus calls "hey abrtd, I have this additional data for that crash". - find out whether this "agent" can utilize dbus autostart.
* Make it possible to run abrtd under user, not root. - GUI applet may chose to not talk to system abrtd, but instead start an abrtd under current user and talk to it. - this is safer wrt security. - perhaps some functions will still need to be done by system abrtd (e.g. debuginfo download and caching).
* Gradually migrate code to C.
* Gradually migrate to common style: if (function(param, param)) { /* braces are preferred but optional for one-statement if */ body; } if (err) return; /* one-line ifs discouraged */
* Reorganize source tree into: doc examples src includes (a few files only, or even only one file abrt.h) lib (foo.c + foo.h) cli gui daemon plugins hooks
Near term
* Delete *Socket*.* and Firefox.* files.
* Save "ls -lR /proc/$PID" listing in the crash.