12 Unix I think Unix and snowflakes are the only two classes of objects in the universe in which no two instances ever match exactly. I think that’s right, and it reminded me of another story. Some years ago, when I was being a consultant for a living, I had a job at a software outfit that was building a large graphical user-inter- face sort of application. They were using some kind of Unix on a PDP-11 for development and planning to sell it with a board to OEMs. I had the job of evaluating various Unix variants, running on various multibus-like hardware, to see what would best meet their needs. The evaluation process consisted largely of trying to get their test program, which was an early prototype of the product, to compile and run on the various *nixes. Piece of cake, sez I. But oops, one vendor changed all the argument order around on this class of system functions. And gee, look at that: A bug in the Xenix compiler pre- vents you from using byte-sized frobs here you have to fake it out with structs and unions and things. Well, what do you know, Venix’s pseudo real-time facilities don’t work at all you have to roll your own. Ad nauseam. I don’t remember the details of which variants had which problems, but the result was that no two of the five that I tried were compatible for anything more than trivial programs! I was shocked. I was appalled. I was impressed that a family of operating systems that claimed to be compatible would exhibit this class of lossage. But the thing that really got me was that none of this was surprising to the other *nix hackers there! Their attitude was something to the effect of “Well, life’s like that, a few #ifdefs here, a few fake library inter- face functions there, what’s the big deal?” I don’t know if there’s a moral to this story, other than one should never trust anything related to Unix to be compatible with any other thing related to Unix. And oh yeah, I heard some time later that the software outfit in question ran two years over their original schedule, finally threw Unix out completely, and deployed on MS-DOS machines. The claim was that doing so was the only thing that let them get the stuff out the door at all! In a 1989 posting to the Peter Neumann’s RISKS mailing list, Pete Schill- ing, an engineer in Alcoa Laboratories’ Applied Mathematics and Com- puter Technology Division, criticized the entire notion of the word
Unix Myths 13 “standard” being applied to software systems such as Unix. Real standards, wrote Schilling, are for physical objects like steel beams: they let designers order a part and incorporate it into their design with foreknowledge of how it will perform under real-world conditions. “If a beam fails in service, then the builder’s lawyers call the beam maker’s lawyers to discuss things like compensatory and punitive damages.” Apparently, the threat of liability keeps most companies honest those who aren’t honest presumably get shut down soon enough. This notion of standards breaks down when applied to software systems. What sort of specification does a version of Unix satisfy? POSIX? X/ Open? CORBA? There is so much wiggle room in these standards as to make the idea that a company might have liability for not following them ludicrous to ponder. Indeed, everybody follows these self-designed stan- dards, yet none of the products are compatible. Sun Microsystems recently announced that it was joining with NeXT to promulgate OpenStep, a new standard for object-oriented user interfaces. To achieve this openness, Sun would will wrap C++ and DOE around Objective-C and NEXTSTEP. Can’t decide which standard you want to follow? No problem: now you can follow them all. Hope you don’t have to get any work done in the meantime. Unix Myths Drug users lie to themselves. “Pot won’t make me stupid.” “I’m just going to try crack once.” “I can stop anytime that I want to.” If you are in the market for drugs, you’ll hear these lies. Unix has its own collection of myths, as well as a network of dealers push- ing them. Perhaps you’ve seen them before: 1. It’s standard. 2. It’s fast and efficient. 3. It’s the right OS for all purposes. 4. It’s small, simple, and elegant. 5. Shellscripts and pipelines are great way to structure complex problems and systems. 6. It’s documented online.