PatienceOS on pause

I’m pretty sure I’m going to abandon PatienceOS, at least for a while, as I’m finding 95% of my time is spent fighting the Microsoft .Net AOT compiler, rather than being able to learn and develop an OS.

I think I have fallen foul of the advice here: https://osdev.org/Languages

For example, C# has no ability to include assembly code, and it also seems no standard way to link to other object files once AOT compiled. So writing to an output port becomes very, very difficult. It does allow p/invokes to other dll’s, so that’s one possibility, however embeddeding the DLL to p/invoke seems only to be possible when using the ‘dotnet publish’ command, which does not respect linking to my assembly bootloader. The Microsoft linker doesn’t offer linker templates, so the fine-grain control offered by LD is not possible. All sorts of compiler methods need to be implemented, for example, RhpNewFast, for new object creation, which is orders of magnitude harder than a basic malloc implementation.

It’s obviously possible to have a C# compiled kernel, MOOS and FlingOS being good examples (nb. Fling has a handrolled C#-to-native compiler that circumvents some of the issues above), but I think as a starter OS for someone with zero low-level experience, C# was a bad choice. Perhaps once I’ve hand-rolled an ANSI C OS, I may come back to PatienceOS with fresh eyes.


Frank Ray Consulting. Software requirements for agile development teams, particularly remote, outsourced and offshore development teams working in financial services.

Get in touch if you need our help

Woking, Surrey, GU22, United Kingdom