The Ars Technica article on OS/2 mentions, in passing, Workplace OS, the pie-in-the-sky successor to OS/2 IBM was working on. I found this fantastic journal article written by Brett D. Fleisch and Mark Allan A. Co, which goes into this failed project in great detail.
IBM’s Microkernel, named Workplace OS microkernel, was the core components of Workplace OS, a portable successor of OS/2. The basic premise of Workplace OS work was: 1) IBM would adopt and improve the CMU Mach 3.0 microkernel for use on PDAs, the desktop, workstations, and massively parallel machines, and 2) that several operating system personalities would execute on the microkernel platform concurrently. This architecture would allow users to switch between applications written for different operating systems while IBM would also benefit by having one common platform for all product lines. The goals of the microkernel and the technical features of design are described in this paper. We also present lessons that may benefit future projects with similar goals.
Also, I get to use the IBM icon!
malformed : remove the trailing double quote.
Kochise
Edited 2013-11-25 17:51 UTC
I actually forgot the opening quote.
Thanks and fixed!
You’re… welcome ?
Kochise
Wonder if this is the reason that Windows NT supported OS personalities as well. The original goals for NT were similar, with the ability to run DOS, OS/2, Win16, and Win32 apps simultaneously, each in their own interchangable personalities. The NT kernel was also originally very portable, with versions for x86, MIPS, PowerPC, Alpha, and one or two other CPU architectures.
There is even a posix subsystem, “Subsystem for UNIX-based Applications”, which is still supported on the latest Windows versions. I believe its a proper personality, not just a layer on top of the regular Windows APIs.
Myself, I just installed Cygiwn the last time I had to work on that cursed platform.
Edit: Great article by the way. One phrase kept pooping into my head while reading it: “Second system effect”. I was glad to see exactly that was the second item in the Lessons learned chapter.
Edited 2013-11-25 20:09 UTC
Not any longer, deprecated as of Windows Server 2012
http://technet.microsoft.com/en-us/library/hh831568.aspx
Ah, I wasn’t the only one doing that then!
These grand unifying projects are almost always doomed to failure, precisely because they are by their very definition, second systems and therefore extremely prone to the effect.
The POSIX personality has some special rights, because you need kernel level support for fork().
But other than that they are quite independent.
According to the official documentation, Windows NT family of kernels follows a micro-kernel design, even if to the outside world it looks monolithic.
For example, there are RPC mechanisms at the kernel level that help to modularize the kernel as if it was a micro-kernel one.
Since Windows 7, there are now quite a good support for user space drivers as well.
Fork is built into NT kernel and one doesn’t need any special rights to execute it. More specifically, NtCreateProcess is a generalization of fork. Just pass your process handle as InheritFromProcessHandle, don’t pass SectionHandle, and you’re done. One can quite easily fork a Win32 process (e.g. see example 6.1 in “Windows NT/2000 Native API Reference” book). The main problem with that is that Win32 libraries, including kernel32 and mscvrt, are not fork-safe — they cache per-process state in global variables. If you don’t depend on Win32 libraries or agree to work-around, you can fork all you want.
I may not be understanding those APIs correctly, but it doesn’t look like they resume the process at the point execution of the the child process like it does in fork().
NtCreateProcess creates a process without any threads in it. You then manually create a thread with NtCreateThread, where you specify the context (values of all registers) you want.
So it’s not really a fork, or a generalization of fork, but a component of what could become a fork. As a matter of semantics.
OK, let’s say that NtCreateProcess and NtCreateThread together allow one to write fork(), fork()+exec(), spawn(), subset of clone(), and some other similar functions.
Okay, I get it.
I was speaking from memory, about I passage I remember reading on the “Inside the Windows Kernel” book series.
Sadly I don’t have the books around me to search for it.
Also forgot to mention that NT originally started out as the successor to OS/2 2.x and didn’t get the Windows personality (and Windows NT name) until very late in development when Windows 3.x took off.
An old issue of BYTE that I have kicking around (April 94) has an article on IBM plans for the PReP platform – and it had a few mentions of WorkPlace OS: