12 Years of ToaruOS
This is a repost and update to an imgur album with screenshots of ToaruOS throughout its development, as imgur is no longer a viable platform for maintaining this collection.
My first commit in the ToaruOS repository, ecd4fe2bc170b01ad700ff76c16da96993805355, was made on January 15th, 2011. This date has become ToaruOS's "birthday". It would be another six years and two weeks before ToaruOS's first real release, 1.0.
This screenshot shows ToaruOS a few days after the initial commit. This is the earliest contemporary screenshot I have been able to find of the OS. Note the window decoration theme on QEMU - that was the basis of the design that ended up in ToaruOS when I started working on the GUI.
Demonstrating a panic.
The first version of the ToaruOS logo.
The first kernel shell, with keyboard input and commands.
Initial implementation of task switching, developed while I was on spring break in 2011.
April 2011, early escape sequence support testing. Not actually running Vim, this is a console recording being replayed.
Userspace graphical applications! Running directly on the framebuffer. This Julia set fractal generator still exists, though the base colorscheme has changed and it's now a windowed application. April 30th, 2011.
Early ports. This would have included the first instance of Newlib for a userspace C library and had working ports of GNU
dc calculators. May, 2011.
Even in the early kernel console, I tried to support a wide range of escape sequences and spent a lot of time getting this color chart demo to work and look nice. This terminal emulator also supported background images.
This was an early port of the console to userspace and the first test of FreeType. FreeType would later be used throughout the GUI before being replaced in the "NIH" project in 2018 with a signed-distance-field baked bitmap renderer, and then finally my own TrueType rasterizer in 2021. The font here appears to be VL Gothic.
A mix of the previous two, testing color chart and vim output.
Switching to Deja Vu Sans Mono. The Deja Vu family was the Debian/Ubuntu default at the time and still my prefered set. Not an actual terminal session, this is a display test.
One of the last screenshots before work on the GUI began in 2012.
The First GUI
The early windowing system. Work began in January of 2012.
Separate applications providing window data.
Graphical terminal emulator ported to a windowed application.
More graphical applications, first panel.
Early window decorations.
Updated panel design.
Around this time, I graduated, went on vacation in Japan, moved to California, and started my first post-university job.
A port of MuPDF.
Porting Vim and Python in 2013
A real Vim!
Ports of Mesa and Python arrive.
There's a big jump here to March of 2014, this is showing kernel modules.
Yutani, the new GUI
Around April of 2014, I started working on a new windowing system. The old one had a number of issues and ToaruOS's kernel had gained a number of features in the two years or so since it was originally built. The new compositor would be Yutani.
Alt-tab window switcher in Yutani; part of the panel.
Initial network stack / TCP support.
ToaruOS 1.0 was finally released in January of 2017.
After 1.0, I wanted to write a bunch of applications in Python, so I built bindings to the windowing system. This is a much newer port of Python 3.6 - ToaruOS was actually the first OS to ship with 3.6!
The panel here is ported to Python with a new design, and there are new graphical applications.
The NIH Project
After release ToaruOS 1.2, I shifted my focus towards eliminating third-party elements in ToaruOS: In particular, Newlib had to go, and so did Cairo and Freetype. 2018 was the year of the NIH Project.
The NIH project begins. A fully in-house ToaruOS... looks a lot like ToaruOS from 2011!
Yutani, rebuilt without Cairo - and a terminal without Freetype to go with it. Again, things are looking like the early years with this screenshot looking a lot like the early GUI in 2012. The decoration theme here persisted throughout development as a fallback and is still available.
The signed distance field text rendering engine lands. The panel has been restored with the new theme backported from the Python version.
Python 3.6 building against our own libc, and with the windowing system bindings working again.
One of the best things to come out of the NIH project was that Bim became a usable editor. It has since become my "daily driver", something the OS itself never achieved.
The terminal could use FreeType, the SDF renderer, or a bitmap font.
Implementing a widget toolkit to rewrite Python applications in C.
A new file manager, image viewer, and "About" dialog.
Rewritten package manager replicating the UI of the Python version.
Quake is ported to run on our libc.
Iterating on the file browser design.
2019 and 2020 were slow years for ToaruOS, as I moved into a new house and started a new job.
Working on a PNG decoder and DEFLATE decompressor; the NIH project switched graphical assets back to bitmaps, though I did also write a JPEG decoder for wallpapers.
In December of 2020, I finally read through the fantastic Crafting Interpreters by Bob Nystrom, and started working on my own language. Kuroko was eventually ported to ToaruOS, and much like with Python I built bindings to the windowing system.
Kuroko even got a port to run in EFI.
Bim was also largely rewritten during this time to use Kuroko scripts to provide syntax highlighting.
In April of 2021, after over ten years of development, work began on the two core features for ToaruOS 2.0: SMP and x86-64 support. This required a new kernel: Misaka.
Misaka was based on a small project I had started several years earlier - the repository was first initialized in 2015. It took some work to clean up and get working again, but eventually Misaka booted and was able to print its symbol table. Misaka got a new
printf from the Kuroko EFI project.
Misaka tries to run a binary.
The VFS is functioning and Misaka can run a Hello World, complete with thread-local storage.
Misaka loads and runs the dynamic linker. Shared libraries are one of the few things in userspace that required changes to port to x86-64.
Misaka runs Kuroko, complete with a REPL.
The first hints of Misaka trying to start Yutani.
We have a login screen!
Misaka boots to a usable desktop. The first true screenshot of what would become ToaruOS 2.0.
Misaka runs multiple
plasma demos across multiple cores.
For Misaka, I also built a new network stack.
ToaruOS 2.0 gets a gcc port and the package manager makes its return once again.
Wait, that's not ToaruOS... An SDL application demos the first iteration of a new TrueType rasterizer.
The completed TrueType rasterizer arrives on ToaruOS.
Misaka allowed for the implementation of process performance tracking, and finally, ToaruOS got a
ToaruOS 2.0 was also heavily tested on real hardware during its development, seen here on a ThinkPad T410.
And if there's a console monitor, how about a graphical one with fancy graphs?
Updated panel widget popover designs.
A new window switcher with window previews, something that was lost in Yutani over the old GUI many years before.
ToaruOS 2.0 was released in December 2021.
A teaser screenshot of an incomplete AArch64 port of ToaruOS running the compositor, desktop, and a dialog box.
ToaruOS plays Doom on ARM64.
The BIOS loader switches to graphics modes.
The compositor gets support for blur-behind - modern graphical effects!
ToaruOS 2.1 was released in October, 2022.
New bindings for writing graphical applications in Kuroko start to take shape.
The old minesweeper game, original written in Python, makes its return with some visual updates, now in Kuroko.