The idea itself was fairly simple. Create a per-process “switch” in memory that would be set to either BSD or AT&T. The behavior of various system calls might depend on the value of the switch. Furthermore, certain special directories could be set up so that the directory you’d actually see would depend on the switch setting. Thus, you could have /usr/bin full of user programs, but it would really be two /usr/bin directories – one of BSD and one of AT&T!
Something – some subconscious drive – made me go an look-up this little bit of Unix history on Google; I’ve hacked/used a couple of BSD/SVr3 full or partial dual-universe platforms in my time, notably Pyramid, Sequent, and the Gould/Encore platforms in the late 80s / early 90s.
The marketing requirement for supporting two sets of tools lives on in even in modern Solaris, as the article continues:
For example, Solaris has two versions of the ls command, one in /usr/bin/ls, one in /usr/ucb/ls. It also has two versions of head, more, ln, ps, and many other commands. Thus, you need to check your search path carefully to know which version of a command you may be using.
You can read the whole article at [www.busan.edu] – it is an aspect of history that is worth remembering.
Deployed wisely and conscientiously, I believe that dual-universe solutions are actually a great idea, enabling quick porting of code and applications from another OS system to whichever is the best-fit target universe — but I believe that with the proviso I further believe your app (or user) should be exist clearly and definitively in one universe, or the other.
Never both.
Like in all good Sci-Fi, when the walls between universes are thin and/or permeable, bad sh*t starts to happen.
Leave a Reply