Might also be fun to make an installer, but this would require:
* mkfs.ext4 (not that hard)
* fdisk (somewhat hard)
* EFI runtime variables (pretty hard)
Might also be fun to make an installer, but this would require:
* mkfs.ext4 (not that hard)
* fdisk (somewhat hard)
* EFI runtime variables (pretty hard)
So, on day 20*, the Unix speedrun project has:
* Memory manager
* A VFS
* A bunch of filesystem syscalls
* fork/exec, preemptive multitasking
* Signals (sort of)
* AHCI block devices
* GPT and MBR partitions
* ext4 and memfs filesystems
* null, full, zero character devices
* pipe(2)
* A fairly beefy libc
* EFI and legacy boot support
* Framebuffer console
* A port of the dash shell
* 52 core utilities ported from sbase
* Technically 21 but I wasn't working on it yesterday
I have implemented signals. Poorly.
Did nanosleep(2)
Right, now you can open them
Once I get all of those done, it's time to write a blog post about it and resume other projects!
I think that's everything for day 13:
* O_CREAT support for openat
* Character and block devices, incl /dev/null, zero, full, and block devices and partitions
* Populate /dev with devices on boot
* Add idle task to scheduler
* New syscall: nanosleep
Next, in no particular order:
* Flesh out files a bit more (e.g. enforce O_RDONLY)
* Flesh out filesystem syscalls (mkdir, fstatat, etc)
* Signals & waitpid
* pipe(2), dup(2)
* Start writing a libc
* Port a shell
Signals 🤮
Okay, about done for today. Summary of day 14 writing a Unix clone:
New syscalls: exit, waitpid
Improvements to openat: enforces read/write mode, supports O_DIRECTORY, O_APPEND, O_TRUNC, O_EXCL, and O_CLOEXEC
Added an inode cache
Optimized the MMU code for fork and process clean-up (still no CoW, though)
And laid some groundwork for signals, which I have been dreading from the start.
initramfs :D
Simon Zeni ported the Helios EFI bootloader to the Bunnix boot protocol last night, so I'm doing some other boot improvements this morning to get EFI support upstreamed
EFI w/framebuffer console via GOP
EFI support ended up consuming all of day 15. D&D tonight!
Left: old thinkpad w/legacy boot
Right: modern starlabs starbook MkIV w/EFI boot
Both booted from the same flash drive :)
End of day 16:
* New syscall: fstatat (currently AT_EMPTY_PATH only, i.e. fstat(2) behavior)
* Serious build system improvements, to add...
* A sysroot during the build, into which...
* An early port of musl libc has been installed, including varying degrees of support for stdio, math, complex, ctype, malloc, string, unistd, stat, and more
Unfortunately I'm now fully committed to GNU make, but this build is too complex to really get away with POSIX makefiles.
Day 16: I am porting musl libc to Bunnix
Fleshed out libc a tiny bit more and tried to port some sbase utilities before calling it quits for today
Goal for the end of the week is to have a pretty decent C environment with a shell and a decent spread of coreutils ported, probably a bourne shell derivative plus sbase.
I'll port DOOM, too, if all of that is done before Saturday.
Another day, another GCC cross compiler
So, in the morning of day 17, I have three languages running in userspace: Hare, C, and C++
I will keep fleshing out libc and the necessary syscalls until we have a shell. I suspect there is another scheduler bug as well.
Coming up soon: pipe(2), dup(2), fcntl(2)
"success"
I write codeNatural language proficiency:★★★★★ 🇺🇸★★★☆☆ 🇯🇵★★☆☆☆ 🇳🇱★★☆☆☆ 🤟★☆☆☆☆ 🇫🇷Does not want to talk to you about cryptocurrency or AI
076萌SNS is a social network, courtesy of 076. It runs on GNU social, version 2.0.2-beta0, available under the GNU Affero General Public License.
All 076萌SNS content and data are available under the Creative Commons Attribution 3.0 license.