From mboxrd@z Thu Jan 1 00:00:00 1970 From: jon@fourwinds.com (Jon Steinhart) Date: Tue, 12 Sep 2017 15:11:03 -0700 Subject: [TUHS] X and NeWS history (long) In-Reply-To: References: <201709111649.v8BGnGTx005812@darkstar.fourwinds.com> <20170911230910.GH7819@mcvoy.com> <201709120738.v8C7ckOF007026@freefriends.org> <201709121535.v8CFZOuB015695@darkstar.fourwinds.com> Message-ID: <201709122211.v8CMB3pf029787@darkstar.fourwinds.com> > Jon Steinhart wrote: > As the guy who single-handedly prevented X from becoming an ANSI standard, > I'd be happy to start another thread on this topic if people are interested. Arthur Krewat writes: > Oh, do, please go on ;) Larry McVoy writes: > I'd like to hear that too. I like X11, use it all the time, take advantage > of the remote display all the time, have done some sunview programming and > a little of just the base libraries. I can imagine that standardizing all > that stuff would be more than a mouthful. But what else ya got? OK, you asked for it. I think that I need to ask the Thing King to zark in a few crates of old memories... I spent mt teenage years as a graphics person as a result of my summer job at Murray Hill working on the Glance-G terminal project. Side-tracked into test and measurement after getting my EE degree and doing cool black magic electronics at Tektronix. Got back into graphics and software when Tek tried to get into the UNIX workstation business. Started working on window systems at that time, and continued after I quit Tek and moved to the bay area to play at the startup game. Started consulting after the third startup failed which I'm still doing today. While at Tek one of my jobs was to come up with a C language binding for GKS, the Graphical Kernel System standard. That itself is a funny story which ties into the earlier troff thread. I designed a language binding and wrote it up. My friend Ed, author of "Real Programmers Don't Use Pascal", worked down the road at GSS (Graphics Software Systems). He told me that "yours looks better than ours, you should bring it to the standards committee". Amazingly enough my management bought off on it, I brought my draft to the Huntsville meeting, and it was adopted as the draft standard. Why? Because we had troff and an Imprint-10! Those were the days when people equated typeset with professional. I recall discussing the issues with the C binding at an ANSI C committee meeting in San Franscisco; probably met some you there. ANSI X3X3 formed a window management subcommittee X3H3.6 somewhere along the line. I moved over there as I was pretty much done with the GKS stuff and the window management end of things was more interesting. Life changed in that committee when the X push happened. But first, a bit on a parallel track. I knew Keith Lantz at Stanford who, if I remember correctly, had a graduate seminar and wanted to talk about window management systems. I came in as a guest lecturer. Partly because of this I became aware of the origins of X as those weren't the days when one could easily just get technical papers on line. For those of you unfamiliar with this, Stanford had developed the V operating system which featured very fast synchronous IPC. I believe that this ran on the original Stanford University Network (SUN) boards. They also developed the W window system which ran on top of V. I'm a bit fuzzy on the continental shift, but I believe that W made the cross country trip to MIT via some sort of DEC connection. Maybe they had funded some of the Stanford research. Gosling and Rosenthal had been working on the Andrew window system at CMU. I don't remember whether or not this was UNIX-based, but one of their early design decisions was to minimize round-trips because they didn't have fast synchronous IPC. Despite this prior art, Scheifler took the W code, ported it to UNIX, and called it X. As one would expect, the performance was terrible. X got stuck at this state, version 10, for a long time. Sun announced NeWS during this stagnant period. Freaked out Apollo, DEC, HP, etc. who got together at DEC's Hamilton Avenue building to plot the "anything but Sun" strategy. They were successful in holding off the adoption of NeWS until they could rewrite X to eliminate many of the synchronous round trips from the protocol resulting in X version 11 which was pretty much completely incompatible with version 10. In many respects Sun botched NeWS politically. Large numbers of businesses relied on applications that ran on Sun's SunView window system which was heavily hooked into the OS and not even remotely portable. They couldn't use NeWS instead of SunView because they were running real businesses. There was no way to run SunView and NeWS at the same time so businesses couldn't run new NeWS-based applications and old SunView applications at the same time. I'm a bit fuzzy here, but the decision to merge X and NeWS was a bad technical solution to a political problem. Sun wanted to be able to say "We have X too." Unfortunately, folks at Sun agreed to do this project without knowing what they were talking about; it got rough when they realized that the NeWS and X graphics models were completely incompatible. Oh, despite all of the hype, there was actually nothing useful that one could do using X at the time. Not being very well socially adjusted, I annoyed a lot of people by going to show floors and looking at X running things like maze and loudly proclaiming "Oh, that's exactly what I do for a living." Somewhere along the line Sun also decided to produce a mostly automated system to convert SunView programs to use X. I think that this was called XView. I remember billing for many a late night to actually get the thing working. One of my other clients at the time was AED (advanced electronic displays). If you were lucky enough to have a color frame buffer in those days it was likely one of theirs. They had a project to build X accelerator boards that plugged into Sun workstations. I think that I got called in because it wouldn't work on the 3/260 which I eventually tracked down to the behavior of the cache that only the 260 had. AED was trying to figure out what to do as the world had changed and frame buffers couldn't compete with workstations. I came up with the idea to make an X server that would run in a SunView window so that companies that relied on SunView applications could run X applications concurrently. We called this XTool in keeping with the SunView application naming scheme. I think that I still have a few "XTool - Safe X for Suns" tee shirts around somewhere. This project unfortunately failed because AED was bought by someone with a "ship it now, that'll force folks to fix the bugs" attitude. XTool was very small and fast compared to the X sample server because I wrote the server from scratch. I think that I'm the only person to write an X server outside of the X Consortium. One of the things that I learned by doing it was that the X Consortium folks were wrong when they said that the documentation was the standard, not the sample server. There were significant differences between the two. We showed XTool off at some shows. People would come by the booth and ask "how did you get it to run so fast?" Being me, I loudly answered "We cheated. We designed ours first." Turns out that one of these times Keith Packard and Jim Gettys were walking by which resulted in some long-standing animosity. Back to the standards track. Any of you that have done ANSI work know that CBEMA has a one organization, one vote policy. When Scheifler showed up at X3H3.6 all other work stopped and X became a draft standard. Whenever there was a vote everybody would look to see how Bob was voting and voted with him. For political reasons, all of the voting members from X Consortium member companies had been told that they couldn't vote against X for technical reasons. You may also know that one has to pay to be on an ANSI committee. I wrote the ANSI Secretariet and told them that I felt that by having both the X Consortium and their member companies voting violated the spirit of the one organization one vote rule, and that I couldn't justify continuing to pay to be on the committee with this behavior. They took it under advisement. Eventually, public review time came around. I submitted a document containing something on the order of 800 comments. These were pretty repetitious because I had to hit the document one request at a time, but the major themes were: o The only really worthwhile thing about X was the distributed extension registration mechanism. All of the input, graphics and other crap should be moved to extension #1. That way, it won't be mandatory in conforming implementations once that stuff was obsolete. As you probably know, that's where we are today; nobody uses that stuff but it's like the corner of an Intel chip that implements the original instruction set. As an aside, I upset many when working on OpenDoc for Apple and saying the same thing there. o The atom/property mechanism allows clients to allocate memory in the server that can never be freed. Some way to free memory needs to be added. o The bit encodings should be part of a separate language binding, not part of the functional description. I received a reply from the committee that said "Thank you for you comments." I wrote the ANSI Secretariet and asked "Don't the rules for milestone 9 say that the technical committee must make all reasonable efforts to accomodate public review comments?" The Secretariet wrote the committee. Everybody on the committee from companies such as Sun who had bee prohibited from voting no for technical reasons all jumped up and cried "procedural violation" and voted against forwarding the standard. Scheifler stormed out. I heard later than Scheifler wrote an angry letter to the Secretariet saying "how dare you listen to that one lone consultant when I have the backing of all of these major companies?" The response was "Didn't you read our rules before joining?" Of course, by the time all of this settled out X was entrenched setting back the state of UNIX UI for a long time. A couple of decades ago I bough a Sun Ultra-60 and asked whether it was worth paying for the dual processor version. The answer that I got was "Yes. You need one processor to run X and another for everything else." Wrapping this up, I have a section in the book that I'm writing where I talk about how to design a good API. I pose the question of why none of the original Apple Mac API published in 1985 taking about 1,200 pages is in use today whereas almost all of the UNIX V6 API published in 1975 taking 321 pages is still in use and has been copied by many other systems. I'm sure that everyone on this list knows the answer. X suffers from the same problems as the original Mac API. Scheifler et. al. didn't really do any system level design and modelling. I know this because I discussed it with Scheifler at an ANSI meeting in Tulsa, the only place that I have travelled to on business that had no redeeming qualities. He said "I don't believe in models because they predispose the implementation." Had he done some real design work and looked at what others were doing he might have realized that at its core, X was a distributed database system in which operations on some of the databases have visual side-effects. I forget the exact number, but X includes around 20 different databases: atoms, properties, contexts, selections, keymaps, etc. each with their own set of API calls. As a result, the X API is wide and shallow like the Mac, and full of interesting race conditions to boot. The whole thing could have been done with less than a dozen API calls. Wrapping this up on a happy note, some years ago I was hanging out yakking at the Hacker's Conference when this guy I didn't recognize due to hair loss came up to me and said "I'm not going to say that you weren't an asshole because you were, but you were right." It was Keith Packard who was trying to get X running on the OLPC and had run into the issue of clients allocating server memory that couldn't be freed. Been good friends since. Same with Gettys. Well, that's the whole sordid take from my point of view. Hope that you enjoyed it. Jon