Application Foundation (or simply, "Foundation") is a collection of specifications, utilities, and software components for use in easily creating advanced applications. Foundation is open-ended, meaning that it will continue to grow, encompassing more and more tools for application development. Key to this goal is a non language-specific, and non Operating System-specific approach. Specifications are always non-specific, however implementations are.
Each component of Foundation can be used independantly of the others, although some implementations may make behind-the-scenes use of other components. So there is no need to know about any other components when you decide to make use of any given one.
Common goals of Foundation are:
Programming language independance
Use of a component must be independant of the language of implementation so that the component could be used by Java, C++, Pascal, BASIC, C, assembler, etc. The only common requirements are: support for sharing object instances (basic COM), pointers, structures, pointers to ASCIIZ text (char* in C and C++), and 4-byte signed integers.
Success in the software market is helped by being able to supply your software on as many platforms as possible. Foundation component implementation will be O/S-specific, but the concept cannot be specific to any O/S platform. Implementations of the component should be work the same on any operating system from MS Windows to Linux to BEOS to OpenVMS, for examples. Thus, the concept of the component cannot exclude its implementation on any sufficiently modern O/S.
Components should, for the most part, be independant of any particular user interface. GUI and text-only should both be supported or else be irrelevant to the operation of the component.
Components must be able to understand and work with data in a backwards and forwards compatible means. This requires support for version/capability querying, the ability to handle old (possibly read-only) data, the ability for new versions of the component to operate in a backward-compatible way.
For a component to be truly useful, it must have a minimal learning curve. Foundation components may make use of other Foundation components, but must not require the user of the component to learn about any other components. In cases where an instance of an object from another component is used in a parameter, for instance, the user must be able to pass a null pointer and have the component work in a useful way. The one exception is that components must make use of UEH condition-code handling to avoid error domain collisions.
Each component has its own licensing restrictions, release schedules, specifications, etc. Below are links to each of the current Foundation components (note that links that are not active are those which have not been uploaded to the server yet, but will be in the near future):
CDD (sharing data structures between languages)
SCU (alternative to Windows Registry) Last modified: 10-Apr-2002
Debug interface (for viewing program internals at run-time) Last modified: 17-Apr-2002
Debugger interface (for sharing debugger utilities)
AutoUpdate (WWW program update utility) Last modified: 18-December-2002
UEH (Unified Error Handler) Last modified: 29-Mar-2002
UUI (Universal User Interface)