Kernel frameworks

Diomidis Spinellis dds at
Mon Oct 18 13:17:24 PDT 2004

Julian Elischer wrote:
> My gut feeling is that the same algorythms and data structure mechanisms
> keep occuring again and again in teh kernel, and that it should be
> possible to
> specify the kernel in a meta-language (also known as a Very High Level
> Language)
> and generate the result. I've actually thought a little about this.
> I havent seen a language that fits the bill yet. Does anyone have a
> favourite
> VHLL that they think could be used to describe a kernel?  My suspicion
> is that the descriptions would be such that we'd probably have to create
> our own KDS
> (Kernel descripion Language :-)

You are describing a domain-specific language (DSL).  This is an
ongoing, but currently less than hot, research topic.  The Usenix
Association sponsored two conferences on the subject in 1997 [1] and
1999 [2].  I've been playing with DSLs for more than 15 years [3-6];
reference [6] contains a (rather academic) survey of how DSLs are
typically implemented and used.  I've also used DSLs extensively in
practice in the implementation of a medium-sized software project: a
300KLOC CAD system for civil engineers and architects.  In that system
287KLOC are in C/C++; 16KLOC are in 12 different DSLs.

I feel that DSLs offer significant benefits, especially when they are
first used in the areas of a system where they are most applicable
(think our kernel configuration file).  Thereafter, the marginal returns
quickly diminish, and the associated problems take over.  In a summary,
the most important problems are:

- Finding or training developers to use the DSLs
- Maintaining the DSL compilers
- Development (e.g. debugger) tool support

One current promissing approach is extensible languages, such as those
made possible by the C# and the Java 5.0 code annotations.

Personally, I believe that C++ is now a serious candidate for an OS
implementation language.  I know of the many less than successful
object-oriented OS implementation attempts in the late 80s and early
90s, but I believe that those used a wrong approach (use object for
everything) and an immature version of C++.  Nowadays I would use the
C++ in an OS implementation effort for its encapsulation and generic
programming facilities, and would very sparingly employ inheritance and
virtual methods.

As you correctly point out, this is all day-dreaming, because of the
ammount of legacy code we have on our hands.

[1] Chris Ramming, editor.  Proceedings of the Conference on
Domain-Specific Languages
October 15-17, 1997
Santa Barbara, California, USA.

[2] Thomas Ball, editor.  The 2nd Conference on Domain-Specific
Languages. October 3-5, 1999. Austin, Texas, USA.

[3] Diomidis Spinellis. Implementing Haskell: Language implementation as
a tool building exercise. Structured Programming (Software Concepts and
Tools), 14:37–48, 1993.

[4] Diomidis Spinellis and V. Guruprasad. Lightweight languages as
software engineering tools. In J. Christopher Ramming, editor, USENIX
Conference on Domain-Specific Languages, pages 67–76, Berkeley, CA,
October 1997. Usenix Association.

[5] Diomidis Spinellis. Reliable software implementation using domain
specific languages. In G. I. Schuëller and P. Kafka, editors,
Proceedings ESREL '99 — The Tenth European Conference on Safety and
Reliability, pages 627–631, Rotterdam, September 1999. ESRA, VDI, TUM,
A. A. Balkema.

[6] Diomidis Spinellis. Notable design patterns for domain specific
languages. Journal of Systems and Software, 56(1):91–99, February 2001.

Diomidis - dds@

More information about the freebsd-current mailing list