Some 25 years ago, I wrote some simple windowing code for DOS, which could create a main window and thousands of child windows. It was very fast on a 486DX33, even when testing switching between hundreds of child windows.
Just for fun, I am now going back to the original code and planning to rewrite using nasm. The 16-bit DOS (or OS independant, using int 10) will be easy. I also want to write a version that works in Windows and Linux (both 32-bit only for now, as I have yet to jump into learning 64-bit code). The hardest part will be drawing pixels and lines. To do this in Windows and/or Linux, both of which are new to me, do I need to learn OpenGL programming, or is there an easier option for either of them?