11 ms·
The Unix-Haters Handbook (1994) [pdf]
- MichaelZuo 4y ago"In those days it was mandatory to adopt an attitude that said: • “Being small and simple is more important than being complete and correct.” • “You only have to solve 90% of the problem.” • “Everything is a stream of bytes.” These attitudes are no longer appropriate for an operating system that hosts complex and important applications. They can even be deadly when Unix is used by untrained operators for safety-critical tasks." Very much so.
- toolz 4y agoWhere is this "complete and correct" code that came at the expense of being large and complex? I've certainly never seen it.
- User23 4y agoNASA has written such code.
- toolz 4y agoI'm reading over NASA's 10 rules for safety critical code and it's littered with the word simple and keeping things small. I don't think NASA is an example for large and complex at all. Not to mention NASA is known for many of the the most famous software bugs in history, but I'm guessing that's just related to space exploration more than anything particularly novel/incorrect about their approach to software.
- ajross 4y agoMultics. The Unix philosophy (and name) is a direct response to the failure of Multics. And they were right. It's true that by the 80's, we were starting to see real competition. But really what distinguished Unix in the 70's was that it worked at all on the kind of interactive hardware its users wanted to buy. Most stuff was either missing huge features, aimed at IBM style batch environments, or priced out of reach. Unix worked.
- eternityforest 4y agoIt worked because it was necessary. And occasionally still is. But we have workable alternatives now. We have bigger teams with version control servers, static analysis, and safer languages. We can make it general enough to be attract 1000 developers, then those 1000 developers can all decide to go for correctness in all cases with high feature richness. "Software" barely existed at the time of UNIX. UNIX philosophy basically says "Don't write software, assemble it onsite as needed just for one task". UNIX was amazing, and provided a great base to eventually evolve Linux and co, but it no longer seems to be the only way to do things.
- trasz 4y ago>We have bigger teams with version control servers, static analysis, and safer languages. That’s why enterprise software is such a crap - what you are describing is part of a problem, not a solution. Also, at that time big teams definitely existed: see OS/360 and Fred Brooks’ book. High level languages were there too, eg Lisp. What you want to replace Unix with is exactly what Unix itself had replaced.
- eternityforest 4y agoI'm not sure I've everyone been on the user side of true "enterprise software" since I don't do business side work, but basically all the commercial-inspirex stuff is made with the same idea. Feature rich, high level languages, high integration, opinionated workflow. Krita, FreeCAD, LibreOffice, Ardour, browsers, and VSCode mostly all seem to fully ignore anything UNIXy, and are amazing. I don't really see software doing significant amounts of sucking these days. When I do, it's usually because it's subscription or cloud dependent, or because they left out something important for simplicity's sake. Software basically runs the entire modern world. The expectations of computers are no longer to just "Compute". Everything is interactive, embedded systems are everywhere, and the stuff that really is "Computing" is often GPU accelerated or distributed. Computers were their own separate thing in the UNIX era. They weren't fully replacements for any other device yet, outside of research. People used real filing cabinets and records or cassettes. Large complex software enables huge classes of applications that would otherwise have enough friction that nobody would want them, you'd juat get a pen and paper rather than reading a man page to do what should be a 4 second task. And when you have dozens or hundreds of them, not many people are going to want to learn them all, and actively go out of their way to stay current with them. People complained CONSTANTLY about computers into the early 2000s. Somehow it was always a challenge, you always had to spend time figuring out how to get the computer to do what you wanted, and you might often wonder if it was worth using them at all. UNIX users have a very different perspective from average users. They spend a lot of time dealing with text and processing data, and mostly like computers for academic reasons or for tasks that are completely impractical by hand. Not many of them seem to actually want an ubiquitous IoT type future with an app for anything. With an appreciation of simplicity seems to come a love of the analog, because that's the ultimate UNIX philosophy, not using a computer at all.
- linguae 4y agoRichard Gabriel's "The Rise of Worse is Better," written around the same time period the Unix-HATERS Handbook was written, gives some clues. Unix was contrasted with environments such as Scheme (which is rather small, but because it's designed as a "crown jewel"), Common Lisp (the exemplar of a "big complex system" that is complete and correct, but large and complex), and the ITS operating system (https://en.wikipedia.org/wiki/Incompatible_Timesharing_System https://en.wikipedia.org/wiki/Incompatible_Timesharing_Syste...). Thankfully there are many open-source Scheme and Common Lisp implementations, and ITS is also available as open source (https://github.com/PDP-10/its https://github.com/PDP-10/its). Of course, modern Unix-like systems these days are large and complex, though Plan 9 and Inferno are quite architecturally refined, reducing some of the complexities that you'll see in contemporary Unix-like systems.
- toolz 4y agoCorrect and complete systems are large and complex, sure, but they are almost always comprised of small and simple parts. Unix in the 90s was around 300k LOC, hardly a small and simple system, but if we're to believe the author, it must have been made of small and simple parts.
- skissane 4y ago> ITS is also available as open source (https://github.com/PDP-10/its https://github.com/PDP-10/its) Sometimes I wonder, if you wanted to create an operating system like ITS for more modern platforms, what it would look like? ITS is written in PDP-10 assembly, what if someone wrote a compiler which read in PDP-10 assembly language and spit out C code? Could that be a first step to porting it? It is surely a lot more complicated than that. It contains self-modifying code, which would obviously break that translation strategy. A lot of hardware-specific code would have to be rewritten. 6 character filenames without nested directories might have been acceptable in the 1970s, but few could endure it today. A multi-user system with a near-total absence of security was acceptable back then, obviously not in today's very different world. ITS does have some interesting features contemporary systems don't: A process can submit commands to be run by the shell that spawned it – actually MS-DOS COMMAND.COM also had that feature (INT 2E), but I haven't seen anything else with it. A Unix shell could implement this by creating a Unix domain socket, and passing its path to subprocesses via an environment variable–but I've never seen that done. Another was that a program being debugged could call an API to run commands in its own debugger – I've never seen that in any other debugger, although I suppose you could write a GDB plugin to implement it (have a magic do-nothing function, then a GDB Python script sets a breakpoint on that function, and interprets its argument as commands for GDB.) Actually, in ITS these two features were the exact same feature, since the debugger was used as the command shell. Another was that a program had named subprocesses (by default the subprocess name was the same as the executable name, but it didn't have to be.) Compare that to most Unix shells, where it is easy to forget what you are running as background jobs 1, 2 or 3.
- eternityforest 4y agoI'm very glad modern Linux basically has nothing to do with UNIX. It has a lot of really neat ideas, but I don't want to use it. I would much rather use Linux, that totally breaks with all that, even the "Everything is a file" idea, now that it's rare to directly interact with the file-like nature of anything but an actual file. Even then, I think Android is just a bit better than Linux for a lot of things, only held back by how hard it is to write software compared to any non-mobile platform, and they are even farther from UNIX.
- deleted 4y ago[deleted]
- tux2bsd 4y agoYou smoking Hunter Biden's crack?
- qntty 4y agoInteresting to note that the forward was written in 1994 by Donald Norman (author of The Design of Everyday Things) who was ironically an Apple Fellow at the time.
- rr808 4y agoI think in the old days it was much harder to maintain a box. You'd get a new server, you'd have to configure email, create print queues, move partitions around keep an eye on system logs etc etc. Now people use Linux but dont really care - the server will only be alive for a few hours and it only has to do one thing. That makes living with Unix a lot easier.
- winrid 4y agoExcept for those of us that run traditional databases. Or self hosted kubernetes...
- fatbird 4y agoOr a linux VM in Azure that's required by company policy to have Microsoft Defender running on it. Disk exhaustion, file handle exhaustion, memory exhaustion, you name it, mdatp has use it to hang your single purpose VM.
- heavyset_go 4y agoLong running instances of Linux are very stable and require little to no maintenance, depending on how things are set up.
- pvg 4y agoBig related threads 3, 5, 8, 11 and 12 years ago https://news.ycombinator.com/item?id=19416485 https://news.ycombinator.com/item?id=19416485 https://news.ycombinator.com/item?id=13781815 https://news.ycombinator.com/item?id=13781815 https://news.ycombinator.com/item?id=7726115 https://news.ycombinator.com/item?id=7726115 https://news.ycombinator.com/item?id=3106271 https://news.ycombinator.com/item?id=3106271 https://news.ycombinator.com/item?id=1272975 https://news.ycombinator.com/item?id=1272975
- travisgriggs 4y ago> As for me? I switched to the Mac. No more grep, no more piping, no more SED scripts. Just a simple, elegant life: “Your application has unexpectedly quit due to error number –1. OK?” I wonder how that worked out for Don Norman (Apple Fellow and preface author)? (Written from my wonderful MBP, which is happily, a Unix)
- KerrAvon 4y agoOne of the authors was a NeXTstep freak, so I suspect Don Norman can also live with himself.
- simonh 4y agoAs for me, I switched to the Mac. It's got grep, pipes, SED scripts, all there when I need them.
- kanzenryu2 4y agoApparently those random crashes were often caused by hardware memory corruption. I remember one manual basically said something like "if this error happens, don't worry about it, it probably won't happen much". And then you would see it for the third time that day.
- guerrilla 4y agoWhere'd you read that? Doesn't seem likely. Everyone knew it was because MacOS didn't have memory protection at the time...
- noufalibrahim 4y agoI remember reading this and especially loved DMRs anti-foreword to the book https://pastebin.com/vBRynAXw https://pastebin.com/vBRynAXw
- torginus 4y agoIt's interesting to see the open contempt towards anything that has to do with graphics and/or multimedia: >No Gulag or lice, just a future whose intellectual tone and interaction style is set by Sonic the Hedgehog. You claim to seek progress, but you succeed mainly in whining. I'd say most of the complexity of modern OS's comes from handling all those interactive 3D/UI/Audio use cases, an area that desktop Linux is 15-20 years behind it's main competitors. A coherent, robust story is just starting to emerge, but as a veteran Linux enthusiast, I have become wary of the hot new thing just over the horizon that promises to solve all our problems.
- atoav 4y agoI have been a life long pro audio user on Windows and I must say both jack and pipewire are quite something. I miss those when I am on a Windows machine.
- torginus 4y agoThey probably are, but jack is aimed at tinkerers and experts, with no big distro shipping them as default, and pipewire as default is a fairly recent (1ish year old) thing.
- modo_mario 4y ago>an area that desktop Linux is 15-20 years behind it's main competitors I hope this was intended as an extreme exaggeration.
- lostmsu 4y agoWindows Vista (released in 2006, just about 15 years ago) could survive GPU driver crash with most UI programs intact. I don't think Linux has that capability to this day.
- DeathArrow 4y ago>Unix was designed for the computing environment of then, not the machines of today. Unix survives only because everyone else has done so badly. There were many valuable things to be learned from Unix: how come nobody learned them and then did better? Started from scratch and produced a really superior, modern, graphical operating system? Oh yeah, and did the other thing that made Unix so very successful: give it away to all the universities of the world That is a very good question! What we have now it's a bunch of old operating systems, no novelty, no new computing paradigm. Every research OS some clever guys and hobists came with, was killed. Linux, *BSD and MacOS are modeled after UNIX, a many decades old operating system. Windows is very old and Microsoft can't do anything about it since it's customers care the most about backwards compatibility. Server landscape is not so much plagued by compatibility issues, since many software can be ported to a different operating system without needing a POSIX layer. Also, when new computers types arrived (think smartphones and tablets), there was an opportunity to get rid of the old. Still, mobile oses were based somehow on UNIX. In the late 90s - early 2000 there were many new operating systems proposed by companies, researcher and hobbists for servers, personal computers and PDAs. Many doing new things and not being based on other operating systems. There were a reason to be optimistic and enthusiastic about the future of the operating system landscape. Now, it seems we are adding layers upon layers of lipstick to the same old pigs. It's not that UNIX and UNIX like systems were bad. They were ok. In the 70' to 90'. It's not that Windows was bad. It was ok from the '90s to 2000s. But now we need newer, better OSes to better adapt to the surrounding reality which changed much.
- Beltiras 4y agoAn alternative thought is that to endure the forces for change over 5 decades an idea must be really useful.
- Ekaros 4y agoOr very strong Stockholm syndrome. We are clearly in era when not everything is text, but still it seems that is somewhat carrying idea... I feel that in many cases whole Unix philosophy is outdated, if not even followed.
- shp0ngle 4y agoWhat would the book authors think about Kubernetes?
- tenebrisalietum 4y agoProbably: Unix leaps from being an ordinary virus to one capable of managing hordes of itself as a unit, permanently ensuring it's existence on multitudes of hosts. Nothing is safe now. The twilight for humanity is near, for at some point all humans will be replaced entirely with Unix.
- milky2028 4y agoWoof that opening quote about being born in East Africa has not aged well.
- deleted 4y ago[deleted]
- s_dev 4y agoI don't think that could be written down and published today. “I liken starting one’s computing career with Unix, say as an under- graduate, to being born in East Africa. It is intolerably hot, your body is covered with lice and flies, you are malnourished and you suffer from numerous curable diseases. But, as far as young East Africans can tell, this is simply the natural condition and they live within it. By the time they find out differently, it is too late. They already think that the writing of shell scripts is a natural act.” — Ken Pier, Xerox PARC
- JKCalhoun 4y agoI can allow for the times — it's the last line that is the real stinger, ha ha.
- itomato 4y agoDennis Ritchie said it all (on the book): Like excrement, it contains enough undigested nuggets of nutrition to sustain life for some. But it is not a tasty pie: it reeks too much of contempt and of envy.
- marcodiego 4y agoUNIX did have its limitations. Also, some of its philosophies could be directly damaging if followed without due thought. Nevertheless, the success of linux is a testament to how enduring most of those concepts still are. On the other side, many of those criticisms were addressed, fixed or were never correct. I rest when I read about UHH and think that many of those complainers have to use a UNIX or a UNIX-like OS nowadays. It is almost impossible to send a package over the internet without having it processed by a linux system at some point. My favorite part of the anti-foreword is when Dennis Ritchie talks about how most of better-than-UNIX-OS' are "not just out to pasture, they are fertilizing it from below." Prophetic.
- Beltalowda 4y agoIt's been years since I read it, but from what I remember another big issue is that it compares Unix to ten different systems. "Unix can't do this, but SystemX can do it! And SystemY can do this better, and SystemZ's implementation of A is much better thought out!" Well, that's kind of cheating, innit? You can make anything look bad by comparing it to the best of 10 other systems.
- pjmlp 4y agoFree beer always taste better than highly priced wine, no wonder it is enduring.
- justin66 4y agoI always had the feeling Dennis was just going along with the bit.
- MarkusWandel 4y agoOne thing that made Unix really compelling back then, even without access to the system source code, was that so many different CPU types and OS variants meant that any (free) software would come as source code. Generally for the more mainstream OS's, in my case being Solaris at work and early Linux at home, the "porting" effort to make it compile was maybe an hour or two. And that gave you a real sense of ownership, and a passing familiarity with the code, by the time it ran. And a head start on tinkering with it if it didn't quite work the way you liked. This was much more satisfying than (at the time) binary-only shareware distributions for MS-DOS or (in my case, before the switch to Linux) Amiga OS.