In Mac OS & Windows
To illustrate the pitfall I mention a recent experience with Mozilla and its support for debugging plug-ins.
There is a page on the web (which I will look for if I have time) which describes the debugging facilities.
It advises the user to print it on paper because the browser is incapable of running when these facilities are in use.
Its sort of like the browser power is off when you are tinkering with the browser innards.
This seems like a natural consequence of how computers but indeed it is not.
If I have another computer next to the one where I am debugging I can run Mozilla there.
If I have another browser on the same machine I can browse the debugging information while I am debugging.
It seems strange that the other browser must mot be the same implementation!
The unified behavior pattern seems deeply built into both Mac OS and Windows.
(Mac OS 10.3 has a multi user facility wherein two users can have concurrent applications running but the screen is owned by just one at a time and a password is required to switch.
I don’t know if the RAM holding the read-only application code is duplicated.
It needn’t be if Apple uses Unix function of BSD as it was intended.)
Alternate personas or alternate browsers are crude ways of getting two browser instances; there should be a light weight doing so.
This OS bias tends to burden some applications with the responsibility of tending to multiple contexts.
CMS within VM/370
When a program running under CMS reads the next record from a file the program provides the file name.
The file system remembers for this file and this reader which record is next.
By contrast the program in Unix, as it reads more data, specifies a file-id which was produced upon opening the file.
A Unix utility which compares files will get the right answer without special logic when the two file names provided by the user are the same.
This is not true of CMS.
The Unix program opens the same file twice an gets two distinct file-ids which are indeed distinct system objects, each with their own file cursor.
The general mal-pattern is to assume that one client of one service has just one thing on its mind as it talks to that service.
This is typically the first use-case but often becomes unsuitable if the service becomes important.
The user may want something different from the service provider.
If the web page is selling something then the seller may want to keep a profile of the user’s purchases.
The user may, or may not, want to keep this private.
My own politics are to make this negotiable, but this requires the user to agree on the arrangement and not to have it imposed by the platform and application.
I respect the bank’s right to refuse to make loans to someone it doesn’t know.
Languages such as C++, Java and most others in the OO camp scarcely support code that can operate aside from within instances.
This goes too far I think and is a sign of excess rigidity; they support too few patterns.