Skip to content

Ferrum development journal · Part 15 of 19

Making Memory Protection and Lifetime Tests More Useful

The memory work checked more than successful allocation: page permissions, decommit, release, reuse, process-image data, and the bytes around each result.

Memory compatibility is one of the places where the difference between Windows and an Apple Silicon Mac becomes very concrete. Windows code can work with a 4 KB page while the host manages protection at a larger page size. The port needs to track the guest's view carefully instead of assuming that a writable host mapping means every smaller guest page is writable.

The work in this period expanded the tests around allocation, protection, decommit, release, and reuse. A successful allocation is the easy case. More interesting questions include whether a protected neighbor keeps its bytes, whether decommitted memory is reported correctly, and whether a reused address is being mistaken for the old allocation.

Process-image information needed the same care. The 32-bit structure has its own layout, and a buffer-size check or return-length field is part of the API's behavior. A result that looks plausible in the first field can still be wrong for a real loader reading the rest of the structure.

The development packets retained complete output structures, before-and-after bytes, and guarded regions around the target. That makes it possible to catch a write outside the intended field or a change that an abbreviated log would hide. The ordinary memory and lifetime profiles were later repeated on the adopted checkpoint, rather than assuming that an older passing result applied to every newer driver.

There were failures in the test and build machinery along the way as well. Those were preserved and repaired separately from product bugs. If a collector rejects a valid result because its own model is wrong, changing the collector doesn't magically become a new runtime success; the saved evidence still needs to be checked against the actual contract.

This phase overlaps the later startup work because the loader depends on these same memory behaviors. It made the foundation more useful for real applications, but it wasn't a reason to mark every VM or concurrency path complete. The point was to make the next application failure easier to trust and explain.

Ferrum development journal

View the journal

Live19 entries so farUpdated New (19 entries updated in the last 14 days)

  1. Part 1Bringing FEX to macOS: The First Windows ProgramDevelopment work: Aug 5 – 7, 2026Updated , new
  2. Part 2From Return Values to Pixels and SoundDevelopment work: Aug 8 – 11, 2026Updated , new
  3. Part 3Building More of the Windows RuntimeDevelopment work: Aug 12 – 18, 2026Updated , new
  4. Part 4Following a Game Through Its Opening VideoDevelopment work: Aug 19 – 20, 2026Updated , new
  5. Part 5Installers, Saves, Fonts, and the Parts Around the GameDevelopment work: Aug 21 – 22, 2026Updated , new
  6. Part 6Game Progress and Measuring the Right ThingDevelopment work: Aug 23 – 27, 2026Updated , new
  7. Part 7Building the 32-Bit Graphics PathDevelopment work: Aug 28 – Sep 1, 2026Updated , new
  8. Part 8Making Memory, Files, and Graphics State AgreeDevelopment work: Sep 2 – 3, 2026Updated , new
  9. Part 9DirectX 12, Shader Caches, and the Steam Startup WorkDevelopment work: Sep 4 – 6, 2026Updated , new
  10. Part 10Working on Presentation and Controller InputDevelopment work: Sep 7 – 12, 2026Updated , new
  11. Part 11A Launcher and a Freeze That Wasn't the PresenterDevelopment work: Sep 15 – 17, 2026Updated , new
  12. Part 12Portal Reaches a Command Stream, With the Frame Still AheadDevelopment work: Sep 23 – 26, 2026Updated , new
  13. Part 13Correcting the Ferrum Progress ReportDevelopment work: Oct 2, 2026Updated , new
  14. Part 14Recovering the Project and Resuming Real TestsDevelopment work: Oct 5, 2026Updated , new
  15. Part 15Making Memory Protection and Lifetime Tests More UsefulDevelopment work: Oct 6 – 9, 2026Updated , new
  16. Part 16Getting Wine's Real 32-Bit Startup to RunDevelopment work: Oct 9 – 11, 2026Updated , new
  17. Part 17Making the Launcher Own Its Storage and ProcessesDevelopment work: Oct 11, 2026Updated , new
  18. Part 18A Real Archive Roundtrip and Better File BehaviorDevelopment work: Oct 11, 2026Updated , new
  19. Part 19Asynchronous I/O and the Bytes a Cancelled Write KeepsDevelopment work: Oct 11, 2026Updated , new

Arrow keys move through the results, Enter opens one, Command or Control with Enter opens it in a new tab. Tab and Shift+Tab change which kind of results are shown.