Steve complains about specs you can drive a Mac truck through. Reminded me of the LIM EEMS 2.0 spec, that had a call to unmap a memory block, so like a dummy when I implemented the driver, I actually unmapped the memory block when asked. Much issues occurred, mainly from Windows/286 itself, because it actually unmapped a block and then accessed that block, expecting it to be where it last left it (?!). Take about 'use-after-free'! It turns out that Microsoft only considered an unmapped block to actually be unmapped, ONLY after it had been re-mapped by a subsequent call (thread safe, anyone? NOT!). So, I had to 'break' my driver to allow Microsoft's broken usage of the specification that they, Intel, and Lotus had invented together. Sheesh.
Then Steve waxes philosophically about having to do a 3rd implementation to 'get it right'. That comes straight out of Fred Brook's "Mythical Man-Month', where he notes that most non-trivial software needs three releases to get it right. The first release is usually feature-poor, the 2nd is a bloated mess, and the 3rd is usually the winner. He points out the IBM 360 mainframe OS as an example, but I found it true with Windows - it took them until Windows 3 (actually 3.1) before it was a reasonable operating system.
Then Steve waxes philosophically about having to do a 3rd implementation to 'get it right'. That comes straight out of Fred Brook's "Mythical Man-Month', where he notes that most non-trivial software needs three releases to get it right. The first release is usually feature-poor, the 2nd is a bloated mess, and the 3rd is usually the winner. He points out the IBM 360 mainframe OS as an example, but I found it true with Windows - it took them until Windows 3 (actually 3.1) before it was a reasonable operating system.