SN923: Spinrite

  • Be sure to checkout “Tips & Tricks”
    Dear Guest Visitor → Once you register and log-in:

    This forum does not automatically send notices of new content. So if, for example, you would like to be notified by mail when Steve posts an update to his blog (or of any other specific activity anywhere else), you need to tell the system what to “Watch” for you. Please checkout the “Tips & Tricks” page for details about that... and other tips!

  • A Patch for SpinRite 6.0's Division Overflow
    Please see my blog posting for the whole story!

Dave New

Well-known member
Nov 23, 2020
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.
  • Like
Reactions: SeanBZA