logo

drewdevault.com

[mirror] blog and personal website of Drew DeVault git clone https://hacktivis.me/git/mirror/drewdevault.com.git
commit: f0e4591e87bac9f85246b11347f7ae5474d3713a
parent 7b5ea495c3f71e7dd61a6961a07fcd1dbc1002e1
Author: Drew DeVault <sir@cmpwn.com>
Date:   Wed,  9 Aug 2023 17:39:37 +0200

Hello from Ares

Diffstat:

Acontent/blog/2023-08-09-Hello-from-Ares.md99+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 99 insertions(+), 0 deletions(-)

diff --git a/content/blog/2023-08-09-Hello-from-Ares.md b/content/blog/2023-08-09-Hello-from-Ares.md @@ -0,0 +1,99 @@ +--- +title: Hello from Ares! +date: 2023-08-09 +--- + +I am pleased to be writing today's blog post from a laptop running [Ares OS]. I +am writing into an ed(1) session, on a file on an ext4 filesystem on its hard +drive. That's pretty cool! It seems that a lot of interesting stuff has happened +since I gave that talk on Helios at [FOSDEM] in February. + +[Ares OS]: https://ares-os.org +[FOSDEM]: https://spacepub.space/w/wpKXfhqqr7FajEAf4B2Vc2 + +![A picture of my ThinkPad while I was editing this blog post](https://l.sr.ht/Rx-V.jpg) + +The talk I gave at FOSDEM was no doubt impressive, but it was a bit of a party +trick. The system was running on a Raspberry Pi with one process which included +both the slide deck as a series of raster images baked into the ELF file, as +well as the GPU driver and drawing code necessary to display them, all in one +package. This was quite necessary, as it turns out, given that the very idea of +"processes" was absent from the system at this stage. + +Much has changed since that talk. The system I am writing to you from has +support for processes indeed, complete with fork and exec and auxiliary vectors +and threads and so on. If I run "ps" I get the following output: + +``` +mercury % ps +1 /sbin/usrinit dexec /sbin/drv/ext4 block0 childfs 0 fs 0 +2 /etc/driver.d/00-pcibus +3 /etc/pci.d/class/01/06/ahci +4 /etc/driver.d/00-ps2kb +5 /etc/driver.d/99-serial +6 /etc/driver.d/99-vgacons +7 /sbin/drv/ext4 block0 +15 ed blog.md +16 ps +``` + +Each of these processes is running in userspace, and some of them are drivers. A +number of drivers now exist for the system, including among the ones you see +here a general-purpose PCI driver, AHCI (SATA), PS/2 keyboard, PC serial, and a +VGA console, not to mention the ext4 driver, based on lwext4 (the first driver +not written in Hare, actually). Not shown here are additional drivers for the +CMOS real-time clock (so Ares knows what time it is, thanks to Stacy Harper), a +virtio9pfs driver (thanks also to Tom Leb for the initial work here), and a few +more besides. + +As of this week, a small number of software ports exist. The ext4 driver is +based on lwext4, as I said earlier, which might be considered a port, though it +is designed to be portable. The [rc] shell I have been working on lately has +also been ported, albeit with many features disabled, to Mercury. And, of +course, I did say I was writing this blog post with ed(1) -- I have ported +Michael Forney's [ed implementation] from sbase, with [relatively few] features +disabled as a matter of fact (the "!" command and signals were removed). + +[rc]: https://git.sr.ht/~sircmpwn/rc +[ed implementation]: http://git.suckless.org/sbase/file/ed.c.html +[relatively few]: https://git.sr.ht/~sircmpwn/sbase/commit/ee0336bc3b6f55839785427d6184e6f897055e31 + +This ed port, and lwext4, are based on our C library, designed with drivers and +normal userspace programs in mind, and derived largely from musl libc. This is +coming along rather well -- a few features (signals again come to mind) are not +going to be implemented, but it's been relatively straightforward to get a large +amount of the POSIX/C11 API surface area covered on Ares, and I was pleasantly +surprised at how easy it was to port ed(1). + +There's still quite a lot to be done. In the near term, I expect to see the +following: + +* A virtual filesystem +* Pipes and more shell features enabled, such as redirects +* More filesystem support (mkdir et al) +* A framebuffer console +* EFI support on x86\_64 +* MBR and GPT partitions + +This is more of the basics. As these basics unblock other tasks, a few of the +more ambitious projects we might look forward to include: + +* Networking support (at least ICMP) +* Audio support +* ACPI support +* Basic USB support +* A service manager (*not* systemd...) +* An installer, perhaps a package manager +* Self-hosting builds +* Dare I say Wayland? + +I should also probably do something about that whining fan I'm hearing in the +background right now. Of course, I will also have to do a fresh DOOM port once +the framebuffer situation is improved. There's also still plenty of kernel work +to be done and odds and ends all over the project, but it's in pretty good shape +and I'm having a blast working on it. I think that by now I have answered the +original question, "can an operating system be written in Hare", with a +resounding "yes". Now I'm just having fun with it. Stay tuned! + +Now I just have to shut this laptop off. There's no poweroff command yet, so I +suppose I'll just hold down the power button until it stops making noise.