What I'm trying to do is something like the OpenStep specification; I
delineate the foundation classes from the interface classes; for those
unfamiliar with NeXT, GNUStep, or OS X, think of the difference between Glib
and Gtk; for KDE fans, Qt has a similar approach. I will write the foundation
classes as needed; my schedule is busy and all, but I make sure I get in a few
hours coding time every day. Here's our roadmap as it stands now:

The very essential modules:

VASM::Tree (hierarchical data structures)
VASM::Message (message catalogs)
VASM::Error (message catalogs subclassed for carp, croak)
VASM::Resource (locate resources using XDG Basedir framework)

See the XDG Basedir specification on freedesktop.org for more details. In most
cases, global config and data resources will be found in /etc/xdg/vasm and
/usr/share/vasm, respectively, and for users, ~/.config/vasm and
~/.local/share/vasm. These directories are parcelled out to different
applications logically.

The VASM::Resource module, in turn, has submodules tailored for specific types
of data. Right now, these are:

VASM::Resource::Message (covers error message catalogs as well)
VASM::Resource::Action

These submodules are simply procedural code written on top of VASM::Resource,
which is also procedural code. Not everything should be OO, IMnsHO. However,
most of the core modules are OO.

The apps are then written on top of the core modules. I gave up on the idea of
abstracting cdialog and Gtk2, because I would keep coming back to the lowest
common denominator of cdialog (which is a pretty LCD). Instead, VASM
developers will write their backend code as a module, as seen above. Then,
they will furnish applications for cdialog and/or Gtk2, as appropriate. The
features of each app may differ somewhat, as, e.g., Gtk2 provides far better
UI than cdialog. However, it is very important that all the basic system
administration applications (service editor, LILO conf, passwd management,
etc.) run well on cdialog. The applications should be seen as wrappers for the
backend functionality, and consequently should run several 100LOC.

Applications:

vaction-dialog.pl
vaction-gtk2.pl

Much more to be done, but these give some examples of UI guidelines for VASM.
