These ramblings bear on the choice of a style for the licensing of the source of a large program. One style attempts to reserve architectural control to one group, while another permits uncontrolled diversity. Sun’s Java license attempts controlled evolution while the Open Source initiative permits diversity.

When I was young I hoped for a universal programming language. I saw that FORTRAN was very useful but also that it lacked several properties of formal mathematical languages that seemed feasible in a programming language. I held out hope for Algol until I had used it for a bit.

Gradually I came to the sad conclusion that no one language could achieve all of the features that I wanted. Troglodytes had been saying that all along and I was embarrassed to agree with them. Now I think that better and better languages will be more diverse and will even become incomprehensible to users of other languages. Perhaps I thought that there was some ideal language towards which we could and should evolve much like the Victorians thought that evolution was towards some ideal goal towards which we still progressed, thus defining “progress”. Alas speciation is bad, but concomitant with progress.

Diversity is merely the necessary price we must pay. We should try to unify but not to the point of making incomprehensible stews of languages. I think that C++ may exceed optimal featuritis even though I want almost all of the features of C++.

I think that the same goes for operating systems and perhaps for any technology aspiring to universality.

The reasons are several and go beyond what I can describe or even understand, but here are a few thoughts on the issue.

When I look back on systems that I have helped design I discover that there were design principles that were paramount yet hardly articulated. These principles have shifted greatly from one design to the next. Early systems sought centralization when Grosch’s law mandated sharing the CPU for greater efficiency. Later systems sought to distribute authority while centralizing the actual computing, yielding time sharing systems. Still later, as in DSR, we sought to distribute everything including routing policy in order to even avoid centralized policy concerning routing strategies.

Some systems emphasize security while some put performance first. Systems can often be characterized by the values that permeate the design of the fundaments. Other values can often be added later but these second class values can seldom attain the rank of the originals. The later values are seldom as well represented and an archeologist can generally reconstruct the original order. Conceptual layering is hard to hide.