
Rediscovering the Development Methodology Behind My 1986 RTOS
Over the past few weeks I've been reconstructing CHARM-II, an RTOS I originally developed in 1986.
Some previous posts about this project:
- Visualizing a 1986 RTOS in a Modern Browser https://www.reddit.com/r/osdev/s/XeZDemN4Wk
- Visualizing a 1980s Commercial Messaging System Running on a Reconstructed RTOS https://www.reddit.com/r/osdev/s/gu8LBK5iev
While working on those, I realized something that I had completely forgotten about the original development process.
When I started this reconstruction, I thought the challenge would simply be getting the old code running again.
Instead, I ended up rediscovering why I developed it the way I did.
Back in 1986, the RTOS was developed on a SUN-2 with a Motorola 68010 and deployed on a separate 68000 target board.
I had always remembered debugging the kernel on the SUN-2.
What I had forgotten was why I stopped there.
During the reconstruction, I realized that this had been a deliberate engineering decision.
A fully preemptive kernel, including interrupt handling, context switching, and processor state management, is by far the most hardware-dependent and complicated part of an RTOS.
Implementing all of that on the host would have made the project much more complicated.
So I postponed it.
Instead, I developed almost everything else on the host:
- queues
- events
- timers
- scheduling
- message passing
- application logic
By the time the software was moved to the target hardware, most of the debugging had already been completed.
At the time, I don't think I consciously thought of this as a development methodology.
It was simply the most practical way to make progress.
Forty years later, reconstructing the project made me realize how effective that approach actually was.
Interestingly, I ended up following almost the same process again.
The original SUN-2 has been replaced by a POSIX environment.
The target will be a Raspberry Pi Pico.
A browser-based visualization was added along the way, but the overall host-target workflow is remarkably similar.
One thing that surprised me during this reconstruction is that the biggest changes rarely came from the original plan.
The browser visualization, for example, was inspired by WebAssembly that I encountered while working on an unrelated project.
It reminded me that engineering projects often evolve through unexpected discoveries rather than carefully planned roadmaps.
I'm curious whether anyone else has experienced something similar.
Have you ever reconstructed an old operating system, or any long-lived system, and discovered that the original engineering decisions made much more sense decades later than they did at the time?