MS-DOS OAKs

Prior to 1991, Microsoft did not sell MS-DOS to end users directly. Although MS-DOS 3.2 (1986) and later was available to system builders as a “packaged product”, most PC users would get an OEM version of MS-DOS with a new computer. Before 1986, that was the only way to get MS-DOS at all. Or DOS in general, if PC DOS is counted as a very special OEM version of MS-DOS. But where did the OEM versions come from?

Microsoft shipped DOS to OEMs in the form of the MS-DOS OEM Adaptation Kit, or OAK. The OAK consisted of binary files, source files, object files, and electronic documentation required to “install” MS-DOS on (or port to) an OEM platform. Over time, as the PC hardware was converging and DOS was evolving, the amount of code OEMs needed to adapt was getting smaller and the bulk of OEM versions of MS-DOS consisted of unmodified binaries provided by Microsoft. In fact Microsoft did not want OEMs to make significant changes, since Microsoft wanted to avoid unnecessary differences between various OEM releases of MS-DOS. Continue reading

Posted in Development, DOS, Microsoft | 11 Comments

Early Microsoft Networks

Microsoft networking technologies, often referred to as SMB and/or CIFS, have a very long history, longer than one might realize. While Microsoft’s networking products only became somewhat widespread around 1993-1994 with Windows for Workgroups, their history goes back to 1984-1985.

Microsoft Networks, or MS-NET, is tied to MS-DOS 3.0/3.1 and closely related to IBM’s PC Network Program, originally announced on August 14, 1984 (together with the PC/AT) and released on April 2, 1985 (together with PC DOS 3.1).

Thanks to the excellent ACT/Apricot website, some of the very early Microsoft networking products have come to light and can be examined. The following should be considered a work in progress and although the information presented here should be accurate, it is incomplete.

Continue reading

Posted in DOS, Microsoft, Networking | 17 Comments

An old idea: x86 hardware virtualization

It is well known that virtualization of the x86 architecture is an old idea. The Intel 386 processor (1985) introduced the “Virtual 8086” (V86) mode, enabling users to run real-mode operating systems as a task within a 32-bit protected-mode operating systems.

A more complete virtualization of the x86 architecture which includes 16-bit and 32-bit protected mode is likewise relatively old. One of the better known products which provided full x86 virtualization on x86 systems, VMware Workstation, dates back to 1999. Emulation on other architectures is even older, such as Virtual PC for the PowerPC Mac (1997).

On x86 architecture hosts, virtualization had to contend with numerous “holes” in the 32-bit x86 instruction set which made virtualization difficult and/or slow. Some of the more common issues are the POPF instruction which may quietly fail to update the interrupt flag, or the SMSW instruction which lets the guest operating system see the true state of control bits without allowing the hypervisor to trap it. To overcome these and other issues, Intel designed the VT-x (also known as VMX) extension to the x86 architecture, and AMD developed its own AMD-V hardware virtualization support. Specifications for VT-x and AMD-V were only published in 2005 and 2006, respectively; it took several more years for x86/x64 CPUs with hardware virtualization support to become mainstream. Yet the idea of complete x86 hardware virtualization is much, much older—by more than 15 years! Continue reading

Posted in 386, Intel, Virtualization | 14 Comments

Watcom Win386

When Windows 3.0 came out in 1990, the press loved it and users bought it in droves. Unfortunately, technically it was at best a step sideways, and Windows 3.0 was the cause of many sleepless nights for application developers. Even though Windows 3.0 in Enhanced mode took advantage of 386 features, those did little for Windows applications. While Windows 3.0 implemented DPMI and enabled 32-bit DOS extended programs to run alongside Windows, the Windows API itself was firmly rooted in 16-bit past and was of little help to would-be 32-bit Windows application developers.

In early 1991, Microsoft started making noise about Windows NT and Win32. However, the common knowledge at the time was that NT “might not ship before 1992” (in reality it shipped in mid-1993), and at the end of 1991, Microsoft simply did not have anything beyond demos for 32-bit Windows application writers. However, others did. Continue reading

Posted in 386, Development, Windows | 13 Comments

DOS boot hang update

Additional information came to light regarding the hangs with DOS 2.x/3.x when booting from a disk with large number of sectors per track.

The problem appears to have been noticed sometime in 1987—perhaps. The MS-DOS OEM Adaptation Kit (OAK) for MS-DOS 3.21 from May 1987 includes the buggy boot sector prone to hangs. However, the OAK for MS-DOS 3.30 from July 1987 contains a fix for the problem. That might suggest the problem was fixed around June 1987, but there’s more to the story. First a long digression…

The source code for SYS.COM in the MS-DOS 3.30 OAK shows that in June 1986(!), IBM made a change to only require the first 2,048 bytes (or four 512-byte sectors) of IBMBIO.COM to be contiguous. There’s interesting logic in the code which assumes (not unreasonably) that if IBMBIO.COM exists on the target disk, it is in the correct place and even if it’s the PC DOS 1.x version, covers enough contiguous space. Continue reading

Posted in DOS, IBM, Microsoft | 4 Comments

Solaris 2.5.1 and 2.6 crashes on modern Intel CPUs

I recently found that Solaris 2.6 and 2.5.1 does not work when run in a VM on a modern Intel CPU (Sandy Bridge generation Core i7), or to be exact fails most of the time (about nine times out of ten) when nested paging is used. The symptom is Solaris hanging or rebooting immediately after the kernel is loaded, even before the kernel banner is printed. When nested paging (or hardware virtualization) isn’t used, there’s no problem.

After managing to boot Solaris 2.6 on a physical Core i7 system (not so easy, since a boot floppy plus CD is required!), it turned out that the exact same thing happens, and this is thus not a virtualization issue. But what’s going on there? And why would nested paging fail when the older, slower virtualization methods work? Thanks to the debugging capabilities built into Solaris, it’s possible to answer most of those questions. Continue reading

Posted in Solaris, VirtualBox, Virtualization, x86 | 27 Comments

DOS 4.0, bum rap, and mismatched expectations

While researching the history of DOS extenders, I came across an article written in 1991 and explaining why OS/2 2.0 was going to be horribly incompatible with Windows 3.x. To support the argument, the following statement was used: “When IBM releases a complex product that has undergone only a relatively brief beta-testing period, what you get is DOS 4.0 — the first version of DOS written primarily by IBM rather than Microsoft, which didn’t work well with most non-IBM memory boards. (Microsoft corrected the problem later with MS-DOS 4.01.)” This quote is interesting on many levels and illustrative of the low quality of PC press at the time — though whether it has gotten any better is an open question. Continue reading

Posted in IBM, PC press | 13 Comments

NetWare for OS/2

NetWare for OS/2 was one of the most technically interesting products of the mid-1990s. Novell’s NetWare was long established as a file server for LANs; since NetWare/386, Novell’s NOS ran as a dedicated server which was loaded from DOS but took over the entire system once started. But ever since the late 1980s, Novell was talking about a non-dedicated NetWare server running on top of OS/2.

In August 1993, Novell finally released NetWare for OS/2 as a $200 add-on to NetWare 4.01. With the add-on, NetWare 4.01 server could be installed on top of OS/2. A single OS/2 machine could function as an OS/2 application server, a NetWare server, and could also run the NetWare client at the same time.

NetWare for OS/2 was essentially a paravirtualization layer (even though the term did not yet exist at the time) for NetWare which largely replaced direct hardware access by functionality provided by OS/2. The NetWare server could still use its own network drivers, but disk access and memory management were handled by OS/2, and NetWare ran as a special task. NetWare for OS/2 could run the same NLMs (NetWare Loadable modules) which dedicated NetWare servers supported. Continue reading

Posted in NetWare, Networking, OS/2 | 2 Comments

From a Feature to a Bug

Sometimes the quest for backwards compatibility has unintended consequences. In some cases, the presumably beneficial backwards compatibility turns into a source of problems. The costs end up far outweighing the benefits, yet the “feature” may be difficult to get rid of. If only it hadn’t been implemented in the first place…

If you’re on a Windows system, try a small experiment. Take an existing text file, say foo.txt, and try renaming it to aux.txt. Oops, it doesn’t work:

Try renaming to aux.doc, or aux.with.extension. It doesn’t work either. That surely looks like a bug, doesn’t it? Why would the operating system arbitrarily refuse to rename a perfectly good file? In fact Windows does that to be backwards compatible with an operating system that was obsolete before many current PC users were even born. Continue reading

Posted in DOS, PC history, Windows | 13 Comments

Operating System/2 announced 25 years ago

On April 2nd of 1987 (not April 1st, that wouldn’t do!), IBM and Microsoft jointly announced Operating System/2, the long-awaited protected-mode version of DOS.

However, OS/2 was not the only product announced on that day. OS/2 was merely one part (albeit very important one) of a massive product rollout blitz on both IBM and Microsoft’s part, purportedly the beginning of a new era of personal computing.

Perhaps coincidentally, this is also the 20th anniversary of the release of OS/2 2.0, the first mass-market 32-bit operating system for PCs. Not to the day (the official release date was March 31st, 1992; still the first quarter of 1992) but close enough to be significant. Continue reading

Posted in IBM, Microsoft, OS/2, PC history | 27 Comments