The well known definition for operating system is ``the software that securely abstracts and multiplexes physical resources'' [21]. By no means is it known that those resources should be contained in a single node. So, Why are our distributed operating systems based on microkernels which essentially multiplex just local resources?
Obviously system services can be later distributed when using a (centralized) microkernel. Indeed, that can be done even when using a monolithic system [17]. But this will not solve the actual problem that the system is not being actually distributed and is not multiplexing transparently both local and remote resources.
In this paper we argue that the best way to solve these two crucial deficiencies while providing adaptability and extensibility is to distribute the microkernel itself and make its interface to be close to the distributed hardware. If the system is to be distributed and resources are to be exported transparently no matter their location then the system should not being built based on the opposite assumption.
In this respect our philosophy is close to that used for years in multiprocessor systems. Such systems have been successfully multiplexing the whole machine resources instead of employing a different system on each processor.
Networking technology advances will fill, at least in part, the gap between distributed and multiprocessor systems. A fully transparent and efficient interprocess communication mechanism will not suffice to obviate the barrier imposed by the microkernel: It will continue to consider the local node as its own and only hardware, even in the cases where microkernels at different nodes cooperate.
A major drawback of current distributed operating systems is their lack of adaptability. It is known that adaptability can be achieved using a minimal microkernel as a foundation for the operating system [7][6][4][11]. If the microkernel used is centralized, adaptation of system services for particular requirements may harm the distribution of those services because they are distributed on top of the microkernel and their distribution is not supported by the microkernel itself. The reason is that user extensions may fail to preserve properties found in distributed systems and there will be no lower layer supporting them. If the microkernel is itself distributed poor system extensions may still benefit from system distribution because the lower layer is distributed anyway. This problem can be appreciated by the fact that it is necessary to modify and/or re-implement existing system services to add new distributed services to a typical microkernel based distributed system[5][13][20].
Yet another disadvantage of today distributed systems is the fact that applications have to be programmed explicitly to take full advantage of system distribution. An example of this fact is that conventional or centralized applications are usually unable to use sparse remote resources (CPU, memory, etc.) when local ones get exhausted. It happens even when the OS being used is distributed. In addition to this the abstractions provided by current ``distributed'' OSes are not adequate for today ``distributed'' applications; see for instance any of [16][10][22]. Operating System emulators running on top of centralized microkernels are not an exception to this rule; they are usually unable to use multiple machines when not programmed explicitly to do so [18].
Thus a better approach to build distributed adaptable operating systems must exist. The one we propose is a minimal adaptable distributed microkernel. It considers the whole network as a source of available resources. Each node may use local resources to cache remote ones when desired. Put in few words we advocate that we should
build distributed-microkernel based Operating Systems instead of microkernel based distributed systems.
There will be no need for simple applications to deal explicitly with distribution in order to take advantage of the system distribution. Also, as the abstractions provided by the microkernel are very close to the hardware , user level distributed operating systems can be built and they can be tuned to application requirements while at the same time desirable distributed system properties (e.g. adaptability, transparency, etc.) are not lost.
What remains of this paper is as follows: Section 2. will further elaborate our approach, section 3. will briefly describe the prototype distributed microkernel Off. In section 4. we will discuss some differences with other related approaches. Finally, section 5. will draw some final conclusions.