Neo Kernel

A term (coined by TomAnderson for want of a better one) to describe OperatingSystems which don't really fit on the monolithic-microkernel-nanokernel-exokernel spectrum. In particular, OperatingSystems in which the application-OS boundary is blurred.

NeoKernels typically require that applications are written in some safe language, so that the usual guarantees about memory and processor use can be enforced by the compiler (that is, the compiler which emits native code; the applications may be supplied as bytecode). For example, if the OS has control over compilation, and applications are written in a language which cannot express unsafe operations (such as the JavaLanguage or ModulaThree), then MemoryProtection? is not needed. Similarly, if programs cannot make jumps to arbitrary memory locations, access to the OS API can be controlled at compile-time, and so many of the security checks which normally accompany OS calls can be elided. Preemptive threading may also be redundant, as the compiler can insert the necessary code to do cooperative threading. All of these lead to performance improvements. Further performance improvements can come from the ability to compile application and OS components at the same time, which allows such things as inlining OS calls.

A particular example is SpinOs. The LispMachine OperatingSystem, Genera, was also a NeoKernel - as usual, LISP was way ahead of its time.


Can a user process run by a NeoKernel provide abstractions to other users in a manner indistinguishable from the safe language's? And can a user process with sufficiently high priviledge modify the language? I don't understand the subject but my impression is that the answers to both of these questions are no.

The 'abstractions' supplied by the language are typically things like variables, arrays, control structures and the other normal linguistic constructs; user processes export abstractions at the level of interfaces and objects. In LISP, these two are somewhat interchangeable, of course. The language is constant across all processes.

If that is the case then the 'kernel' is the safe language and NeoKernels are MegaKernels.

What is a MegaKernel, and why does this make a NeoKernel one? My guess at the meaning of 'MegaKernel' would involve the kernel being huge, containing all sorts of functionality that would normally be found in user space such as a WindowSystem?, CommandShell?, TextEditor, email client, admin tools, etc. If that is the case, then, in a sense, NeoKernels are indeed MegaKernels, except that they're equally the ultimate ExoKernels. The point is that the boundary between kernel and application is blurred, so it is no longer entirely possible to distinguish between the two.

By the language is constant across all processes do you mean that if one process modifies an object (say, class Array) then this modification will not appear to other processes?

There are ways to modify a language so that multiple untrusted processes can share it. The naive way is to change every reference into a capability (perhaps with something like SubjectiveObjects?: http://citeseer.nj.nec.com/smith96simple.html). I don't know of any other ways but I'm guessing they would have to be fairly exotic (which is why I'm not interested in them). What I'm guessing people do is give each process a pristine copy of a base language and, perhaps, provide limited access to user extensions in a distinct space. If that's the case then the system is not an ExoKernel since it doesn't allow user processes to bypass the "kernel" by making their own modifications to it and sharing them.

Even if you lobotomized a language by stripping away all its libraries, leaving behind only the ByteCode, this may simply be too abstract to be considered a pure ExoKernel.


And could someone explain the difference between kernel and OS? I never got a solid grasp on that one. -- RichardKulisz

Simple. "Kernel" is a term with a simple technical definition. "OS" is a term with no coherent definition of any sort, either technical, legal, or popular. The two leading usages of "OS" are, respectively: "thing which came on one CD and allows my computer to function"; and "kernel". -- DanielKnapp

WhatIsaKernel?


EditText of this page (last edited June 24, 2002) or FindPage with title or text search