@petit @icedquinn @shadowferret @sjw > The problem is people lapsing from "existing world" to "actual world". Nothing about pipes, virtual memory, arguments, and portable binaries is necessarily necessary or even good.
Well, how do you talk to the outside world? TCP packets make a stream, disks pretend to be big, contiguous wads of unformed bytes, files sit on the disk masquerading as contiguous bytestreams, processes spew bytestreams. You've got to be able to speak lowest-common-denominator to get anything into or out of your program, and lowest-common-denominator is ordered bits.
In these big companies, there are systems where you control both ends of the pipe, so you see them standardize on almost-REST JSON or ProtoBuf or SOAP¹, but there's an entry point into the system where things inexpressible within the system are received by the system and converted (with some friction) into some form acceptable to the system. There will always exist data that the system can't express. What's above this, what's the generalization of these systems?
I forget who was saying this, but I was listening to some lecture and the guy said that he got irritated when people talked about natural selection creating change, because it's the opposite: natural selection preserves the necessary characteristics. If something changes, it's because that thing didn't matter. What do you get if you try to apply this to operating systems?
So Unix doesn't clamp down enforcing structure and you can express whatever, you can fit a structured system into it, using its building blocks. Structure is an assertion: this matters enough that it will not need change. Unix isn't a system the way Lisp is a system, you decide too many things when building something on top of Unix. Unix is more like the subset of features all systems have. I realized this some time into playing with Plan 9, and I was frustrated a while, it felt half-finished in some regards, and I'm sort of passively absorbing the approach by reading man pages from Bell Labs, I'm reading stuff by people that built things on top of Plan 9, watching the mailing list and people are saying "You can make this with this", stuff like that, and something eventually leaps out at me while talking to a friend about this, something they never seem to make explicit because we're all talking past each other: Plan 9 isn't an operating system, it's a pile of building blocks. You look at old Unix stuff, you can see it there, too. It's not a product, it's not built that way, it's not really an operating system. Look at Plan 9's cat, look at GNU's. The GNU system was an attempt to build an operating system rather than "This is stuff you can use to build the system you want". "cat came back from Berkeley waving flags" looked like a crazy thing to say to people from the outside, but if you think of Unix as something for building systems rather than the end-goal, the system you want, then it clicks why BSD felt wrong to the Bell Labs guys, and if you think about the nature of the misunderstanding itself, then it clicks why nobody really cared. BSD was an operating system, that's what they were doing. Linux and HURD are operating systems. Unix as designed is not.
Anyway, "Unix is not an operating system" is my $0.02 on the matter, YMMV, you have no real way of knowing that I'm not some kind of lunatic.
¹ How this usually *actually* plays out is that several years-long attempts to standardize on something result in several subsystems where the legacy thing is spewing XML and the new one speaks almost-REST, you've got multiple backends with something in front of it that talks to all of them except sometimes it talks to the DB directly, and then *that* system ends up behind *another* system.