A new System Interface
The Java mantra “Write once, run anywhere” brought to light the vision that a program could be written in a programming language and executed in any platform. In order to realize this vision, Java relies on the Java Virtual Machine that must provide, in every platform, the APIs to interact with its environment. In some platforms the JVM depends on proprietary APIs, in other platforms it relies on the C or POSIX open standards.Either way, the Java/JVM implementation depends, like all programming languages and platforms on the underlining system APIs.
In a time of ubiquitous computing it seems that relying on a platform specific system APIs is not only ineficient (and wasteful) but also difficult for each language or software infrastructure to deal with the heterogeneuos and sometimes confliting concepts, implementations or semantic definitions provided by different operating systems.
A new system standard interface is required that provides developers the ability to request system services across all devices and platforms with the minimum effort and as efficiently as possible.
A standard system interface must be based on the API concept in order to be universal and to be easily used by client applications. To be usefull and foster a quick adoptation, a System API must fulfill a set of strategic design goals:
-
Platform independence
In order for the API to be realized in all platforms it must not rely on specific platform implementations. Good concepts in a specific platform can be generalized to all platforms but should not be tide to a particular implementation.
-
Evolution
No API can be prepared to answer all future requirements and this implies that an API design must accomodate change. This can be achieved by ensuring that change management is considered from the initial design.
-
Regular
The API must use a standard naming and calling convention. Using standard operation signatures reduces usage errors.
-
Performance
A system API must consider performance as being one of its drivers since system calls are critical for applications. When considering performance, the ultimate goal is the end result and not each call by itself.
-
Security
The security of a system depends heavily on the supported system interfaces and how these interfaces help client applications request system services in a secure way. Considering security at the application and system borders reduces the attack surface and, consequently, attack vectors.
These goals will drive the design and evolution of the API to support programming languages by providing them with a standard system library. However, considering that the API is a system level API, languages would ideally provide some abstraction language library that wraps the system library and makes it more easy for developers to access the system with an API that resembles more their language idioms. Such language abstractions are illustrated in the following diagram.
In order to support the interactions above, these interactions have to be considered in the API Design.