Skip to content

Ferrum development journal · Part 11 of 19

A Launcher and a Freeze That Wasn't the Presenter

The launcher made the project easier to approach. A separate graphics investigation showed why a changing frame counter wasn't enough to prove a changing picture.

The September launcher work gave Ferrum a more approachable starting point: drag a Windows program onto an application, classify it, prepare the environment, and launch it through the FEX path. The next changes added routing for 32-bit Windows executables. That was useful development packaging, although a launcher by itself doesn't make the runtime or the distribution ready to ship.

At the same time, an on-screen freeze needed a better explanation. An earlier theory blamed presenter early returns. The later investigation showed that the scrolling test was still presenting while its picture stopped changing. The actual problem was in GDI object allocation: freed handle-table indices and drawing-context slots were not being recycled.

The scrolling fixture created and deleted drawing objects repeatedly. Eventually the pools ran out, and later drawing operations stopped producing the expected content. A presentation counter could keep advancing through that failure, which made it a misleading witness if we looked at it alone.

Recycling those resources changed the result. The recorded bounded on-screen run lasted 65 seconds, with distinct captured content rather than just a rising presentation count. A withdrawal control restored the old allocation behavior and reproduced the failure. That is much more useful than changing the presenter and assuming a smoother-looking number explains the original problem.

There were still limits. The result belonged to that test, build, and display path; human smoothness and broader application sessions were not automatically accepted. The resource model also had documented stale-handle considerations. Those details matter before calling a component finished.

Some other 32-bit NT work from this period later failed the project's evidence audit because checks were accepting placeholder answers. I cover that correction in the October 2 chapter. I'm keeping the valid launcher and GDI progress separate from those discarded claims, rather than treating everything from the same dates as equally proven.

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.