Developers have full access to the same framework APIs used by the core applications. The application architecture is designed to simplify the reuse of components; the capabilities of any application can be published and then be made use of by any other application (subject to security constraints enforced by the framework). This same mechanism allows components to be replaced by the user.