Sun's NeWS was a mistake, as are all toolkit-in-server windowing systems (2013)
By 1990 or so, we could see the writing on the wall that Sun wasn&#x27;t going to support NeWS for very much longer, no matter what they claimed.<p><a href="https:&#x2F;&#x2F;donhopkins.com&#x2F;home&#x2F;images&#x2F;X11NeWSPorscheHitsSunSoftBrickWall.jpg" rel="nofollow">https:&#x2F;&#x2F;donhopkins.com&#x2F;home&#x2F;images&#x2F;X11NeWSPorscheHitsSunSoft...</a><p>So there was an ongoing discussion about the best way to do it all over again from scratch. Scheme was obviously an excellent language to use instead of PostScript. Here are some notes from February of 1990 (before the abomination that is CORBA was thrust upon the world), discussing how to apply John Warnock&#x27;s &quot;linguistic motherboard&quot; ideas to other languages like Scheme, and how to implement them on top of something like Xerox PARC&#x27;s &quot;PCR&quot; (Portable Common Runtime, essentially the virtual operating system runtime that Cedar and other Xerox software like Interpress required to run on other platforms like Unix).<p>(But first here&#x27;s some other stuff I wrote recently about Cedar and PCR, for context. And I&#x27;ve inserted some links into the notes.)<p><a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=22378457" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=22378457</a><p>&gt;I believe that stuff is the port of Cedar to the Sun. Xerox PARC developed &quot;Portable Common Runtime&quot;, which was basically the Cedar operating system runtime, on top of SunOS (1987 era SunOS, not Solaris, so no shared libraries or threads, which PCR had to provide). He demonstrates compiling a &quot;Hello World&quot; Cedar shell command, and (magically behind the scenes) dynamically linking it into the running shell and invoking it.<p>&gt;Experiences Creating a Portable Cedar.<p>&gt;Russ Atkinson, Alan Demers, Carl Hauser, Christian Jacobi, Peter Kessler, and Mark Weiser.<p>CSL-89-8 June 1989 [P89-00DD6]<p><a href="http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;xerox&#x2F;parc&#x2F;techReports&#x2F;CSL-89-8.." rel="nofollow">http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;xerox&#x2F;parc&#x2F;techReports&#x2F;CSL-89-8...</a>.<p>&gt;Abstract: Cedar is the name for both a language and an environment in use in the Computer Science Laboratory at Xerox PARC since 1980. The Cedar language is a superset of Mesa, the major additions being garbage collection and runtime types. Neither the language nor the environment was originally intended to be portable, and for many years ran only on D-machines at PARC and a few other locations in Xerox. We recently re-implemented the language to make it portable across many different architectures. Our strategy was, first, to use machine dependent C code as an intermediate language, second, to create a language-independent layer known as the Portable Common Runtime, and third, to write a relatively large amount of Cedar-specific runtime code in a subset of Cedar itself. By treating C as an intermediate code we are able to achieve reasonably fast compilation, very good eventual machine code, and all with relatively small programmer effort. Because Cedar is a much richer language than C, there were numerous issues to resolve in performing an efficient translation and in providing reasonable debugging. These strategies will be of use to many other porters of high-level languages who may wish to use C as an assembler language without giving up either ease of debugging or high performance. We present a brief description of the Cedar language, our portability strategy for the compiler and runtime, our manner of making connections to other languages and the Unix operating system, and some measures of the performance of our &quot;Portable Cedar&quot;.<p>&gt;PCR implemented threads in user space as virtual lightweight processes on SunOS by running several heavy weight Unix processes memory mapping the same main memory. And it also supported garbage collection. Mark Weiser worked on both PCR and the Boehm–Demers–Weiser garbage collector.<p><a href="https:&#x2F;&#x2F;donhopkins.com&#x2F;home&#x2F;archive&#x2F;NeWS&#x2F;linguistic-motherboard-owen.txt" rel="nofollow">https:&#x2F;&#x2F;donhopkins.com&#x2F;home&#x2F;archive&#x2F;NeWS&#x2F;linguistic-motherbo...</a><p>Linguistic motherboard metaphore<p>hardware&#x2F;software metaphore<p>A motherboard is a nicer metaphore than a ball of wax.<p>PostScript as a linguistic motherboard<p>We need non-proprietary bus in order for this idea to succeed<p>Vendor supplied cards - software modules.
Motherboard extends over the net.
PCR allows tightly coupled modules on the same card (or compatible,
closely linked cards) to communicate in one address space, through
local procedure calls. 
PostScript allows cards to communicate in memory through PCR and over
the net through remote procedure calls.
Polylith is a software bus.
Generalization of client-server model: both ways. send code, not just data.<p>PCR is like the data, address, and control lines.<p>PCR:<p><a href="http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;xerox&#x2F;parc&#x2F;techReports&#x2F;CSL-89-8_Experiences_Creating_a_Portable_Cedar.pdf" rel="nofollow">http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;xerox&#x2F;parc&#x2F;techReports&#x2F;CSL-89-8...</a><p><a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=22378457" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=22378457</a><p><a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=22456720" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=22456720</a><p>PostScript is like Mitch Bradley&#x27;s Forth for the S-Bus.<p>Open Firmware:<p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Open_Firmware" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Open_Firmware</a><p>Allows device independant bootstrapping (binding of hardware on cards
to software on the net). Device drivers.
Jack Callahan&#x27;s paper describes how once you are bootstrapped and
communicating with your virtual hardware modules, you can generate and
put into place optimized device specific drivers (automatic dynamic
stub generation).<p>Many of the ideas originated at adobe, and have made the rounds
throughout the industry and academia.<p>Adobe has proven PostScript&#x27;s applicability to page description.
Sun has proven PostScript&#x27;s applicability to network extensibility.<p>Adobe and Sun have demonstrated that these concepts work for
particular applications, using a propriatary bus, like DEC&#x27;s BI bus,
i.e. a proprietary language implementation. They are not nearly as
useful as they could be were they based on an open bus -- a public
domain language implementation. PCR is a tightly coupled open bus, we
need a public domain PostScript (and Scheme, and other languages)
interpreter to go along with PCR.<p>Witness all the people complaining about problems with NeWS (like
non-availability, not running on particular pieces of hardware, server
core dumps), and Adobe PostScript (like the 9600 baud 7 bit printable
ascii data bottleneck), because of problems that would be easy to fix
if they had sources. The failure of NeWS as a window system has
demonstrated that it can fail simply because it&#x27;s controled by Sun.
The failure of PostScript as a ?? general purpose programming language
?? some people might argue is due to poor design, but I don&#x27;t think
most people I have heard criticize PostScript know what they&#x27;re
talking about, because they have attacked the cosmetic problems of
&quot;backward&quot; syntax, but not addressed the real problems of dynamic
binding.  PostScript is very well designed, and very powerful. Postfix
notation is as backward as prefix (cf big&#x2F;little endian battles), both
of which are simpler than infix.  PostScript&#x27;s main problem is dynamic
binding.  Reverse polish notation is a cosmetic problem, which is
addressed by LispScript.  There are extensions to PostScript that
would make it a lot more useful, and the dynamic binding problem might
even be solvable. PIX and NetScript come very close, and are (or will
be) in the public domain.<p>PIX:<p><a href="https:&#x2F;&#x2F;ieeexplore.ieee.org&#x2F;document&#x2F;301934&#x2F;" rel="nofollow">https:&#x2F;&#x2F;ieeexplore.ieee.org&#x2F;document&#x2F;301934&#x2F;</a><p><a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=17637483" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=17637483</a><p><a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=15327211" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=15327211</a><p>Right now, Scheme addresses this issue beautifully, and I think it may
be quite applicable to the problem, given a good enough implementation
(designed for the task). ELK comes close.<p>ELK:<p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Extension_Language_Kit" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Extension_Language_Kit</a><p>Scheme and PostScript in combination (in different address spaces, in
the same address space, or a synthesis of the two) might be an
interesting approach. Scheme with PostScript data types and NeWS
extensions. Scheme on a PostScript virtual machine (the byte code that
Scheme compiles into -- so you can device independant compiled scheme
code).<p>Try to pinpoint what it is about PostScript that makes it better than
Scheme for this problem. First of all, I think it&#x27;s easier to
interpret. Less overhead. Easier for machines to generate? Or is that
BS? The data types. Magic dictionaries as an interface to data
structures (like memory mapping device registers instead of having i&#x2F;o
instructions). Dynamic binding is simpler, but you could implement
closures on top of that, I think (by making it extremely easy to
switch dictionary stacks, the way class.ps does) and even
continuations (by switching execution stack).<p>Disadvantages of PostScript: Dynamic binding, addressed above.
Polymorphic operators, so built-in operators have to do type checking.
Provide type specific operators as primatives that the polymorphic
ones are built in terms of, not unlike Crispin Goswell&#x27;s PostScript
interpreter.<p>Crispin Goswell&#x27;s PostScript interpreter:<p><a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=13198492" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=13198492</a><p><a href="http:&#x2F;&#x2F;computer-programming-forum.com&#x2F;36-postscript&#x2F;46e6f5fcc616fac3.htm" rel="nofollow">http:&#x2F;&#x2F;computer-programming-forum.com&#x2F;36-postscript&#x2F;46e6f5fc...</a><p><a href="http:&#x2F;&#x2F;www.chilton-computing.org.uk&#x2F;inf&#x2F;se&#x2F;mmi&#x2F;p004.htm" rel="nofollow">http:&#x2F;&#x2F;www.chilton-computing.org.uk&#x2F;inf&#x2F;se&#x2F;mmi&#x2F;p004.htm</a><p>Advantages of NeWS, PIX, NetScript: light weight processes, event
queue, interprocess communication, magic dictionaries, garbage
collection, ...<p>PCR would be an excellent base. PostScript would be a good first step,
and would be extended towards scheme in an upward compatible manner. 
Proprietary vendor supplied (or public domain) cards could plug right
in (Cedar graphics, Folio fonts, Andrew editor, X protocol, etc...)