a component system that will provide extensibility and re-usability both inside and between applications, while being portable across platforms (and languages) and having the lowest possible overhead (both in machine resources and programming effort).