the stack
the bottom is borrowed. everything above it, we wrote.
what is this
Pony is a Linux distribution I'm building from the userland up - by hand.
No systemd. No glibc. No borrowed coreutils. Every piece between you and the kernel is written from scratch and, more to the point, written to be read: the C library, the shell tools, the init that runs as PID 1, the service supervisor, and a source-based package manager in the spirit of Gentoo's portage. The kernel, bash, and the bootstrap compiler are the only things I didn't reinvent - everything else is fair game.
9 milestones cleared· 0 bytes of glibc· 63/63 printf == glibc· -Wpedantic clean
the rules
- WRITE oats - our own C library: syscalls, crt0, errno, malloc, stdio, printf.
- WRITE coreutils - the everyday tools, small and single-purpose.
- WRITE reins - our init & service supervisor in one (PID 1), runit-style; our answer to systemd.
- WRITE stable - our package manager: fetch, build from source, track files.
- KEEP the Linux kernel, bash, and gcc/binutils - reinventing those is a different decade.
- FLOOR musl, used only to bootstrap until oats can stand on its own.
status - what actually runs
| milestone | state |
|---|---|
| Static binary on oats - zero glibc/musl linked | DONE |
| errno · open/close · strerror/perror | DONE |
| Hardening pass - types, archive, strict-warning-clean | DONE |
| malloc/free/calloc/realloc - boundary-tag allocator | DONE |
| Buffered stdio + printf - matches glibc byte-for-byte | DONE |
| Coreutils - cat · echo · true/false · head · ls · wc · mkdir · rm · chmod · ln · cp · mv | DONE |
| Boot kernel + oats userland in QEMU | DONE |
| own init as PID 1 - QEMU boot demo | DONE |
| reins - init & service supervisor, restart + crash backoff | DONE |
| stable - package manager (CLI scaffold; install awaits fs syscalls) | SCAFFOLD |
| oats - filesystem-mutation syscalls (mkdir, unlink, …) | SOON |
build log
build it yourself
It's a Makefile and a C compiler - that's the whole story.