chibicc is a really fun idea! If I was in college, I would take a compiler course from you.
Taken from your README:
"chibicc is developed as the reference implementation for a book I'm currently writing about the C compiler and the low-level programming. The book covers the vast topic with an incremental approach; in the first chapter, readers will implement a "compiler" that accepts just a single number as a "language", which will then gain one feature at a time in each section of the book until the language that the compiler accepts matches what the C11 spec specifies. I took this incremental approach from the paper by Abdulaziz Ghuloum."
Github: https://github.com/rui314/chibicc
Previous HN: https://news.ycombinator.com/item?id=24676851
So I would edit my comment to say: I'd love to take a compiler course from Rui, and a systems course from jart.
That's what I get for browsing HN on my phone late at night.
As for holding off on UI for the time being is probably the right thing to do, keeping with the minimal style planning on going for raw-x11,etc.
However, as much as I personally love plain framebuffers (late 90s democoder myself), it'd be totally non-accessible for "plain" applications and totally lacking performance compared to anything accelerated when it comes to rendering. Graphics cards are just so many times faster that it's not really even the same kind of usage (only sad part is Apple punting on OpenGL driver updates even if Intel on the low end has become so much better).
That said, having looked for a minimal UI framework and sadly they seem to be far inbetween these days (libUI is fairly compact on win/osX but required GTK on *nix but they've lost a bit of steam since 2018)
Best of luck on it all (hopefully I can snatch out some time to contribute)
As for GUIs I'm still open to merging raw x11 support. One tricky issue is that we'd need to define a new API that veneers framebuffers, and so far Cosmopolitan has mostly refrained from defining novel interfaces, since the focus has been twiddling with low level magic numbers in order to make the textbook interfaces we already have work everywhere!
Considered making some way to add "portable" modules yet(generic APE code with plat-specific impls) to avoid adding stuff to the core? I know the default calling-conv is slightly different but maybe by smth like defining virtual ports? (ie "send" structs since alignment rules should be mostly the same?)
Also hats off to you @jart!
Is this a one time thing or are you thinking of something bigger going with this project?
I had a quick look into doing this on your original thread[1], but got stuck pretty early on and just didn't have the time to get back into it.
If that's something you'd be willing to pursue I'd love to help any way I can. Feel free to DM me on Twitter[2] any time.