Skip to content

Instantly share code, notes, and snippets.

@klange
Last active November 13, 2024 21:11
Show Gist options
  • Save klange/f427a551af5f2f8b3c9ef80687883fcf to your computer and use it in GitHub Desktop.
Save klange/f427a551af5f2f8b3c9ef80687883fcf to your computer and use it in GitHub Desktop.
12 Years of ToaruOS

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.

Early Development

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.

1 - eL4aHBZ - Humble Beginnings

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.

screenshot182

Demonstrating a panic.

screenshot185

The first version of the ToaruOS logo.

Screenshot-QEMU

The first kernel shell, with keyboard input and commands.

4 - QvXsq - Multitasking

Initial implementation of task switching, developed while I was on spring break in 2011.

Screenshot-QEMU

April 2011, early escape sequence support testing. Not actually running Vim, this is a console recording being replayed.

Screenshot-QEMU-2

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.

Screenshot-QEMU-3

Early ports. This would have included the first instance of Newlib for a userspace C library and had working ports of GNU bc and dc calculators. May, 2011.

5 - t8ah4 - Colors and backgrounds

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.

6 - Fqs8U - Experimenting with Freetype

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.

7 - YTqaM - Fancy escapes

A mix of the previous two, testing color chart and vim output.

8 - 6hNOY - DejaVu

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.

9 - VjTMv - Full userspace terminal

One of the last screenshots before work on the GUI began in 2012.

The First GUI

10 - oWjXw - First GUI

The early windowing system. Work began in January of 2012.

11 - uNV8Z - Separate applications

Separate applications providing window data.

12 - Pk44T - Windowed terminal

Graphical terminal emulator ported to a windowed application.

14 - Zup2n - A plethora of apps

More graphical applications, first panel.

15 - lNrpV - Borders

Early window decorations.

16 - Xn93P - Panel design

Updated panel design.

Around this time, I graduated, went on vacation in Japan, moved to California, and started my first post-university job.

18 - 4SGhd - An editor

19 - DQK7P - Transparency

20 - 3SKt5 - Desktop icons

21 - uoB55 - Labels

22 - Sw0If - Shadows

23 - SO3FV - A PDF viewer

A port of MuPDF.

24 - sUqrm - Trying shadows for windows

25 - kOpJ2 - New panel design

26 - h6vpu - New border design

27 - 8eM8K - Operating System Design and Development

28 - tfcKL

29 - fpomP - WM features

30 - jkzkO - Login screen

31 - N6fxv - Lots of apps

Porting Vim and Python in 2013

32 - uYERSGN - Icons, wallpaper, and a real vim!

A real Vim!

33 - z1aFy0C - Mesa

Ports of Mesa and Python arrive.

34 - oelm9pQ - Python

35 - sdnxzwW - procfs

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.

36 - Y2YWMjc - Login screen improvements

37 - fX8gDah - More than meets the eye

38 - 4WE8nTU

39 - B88hMEZ - More panel design

40 - YOnQK9Y - Alt+Tab

Alt-tab window switcher in Yutani; part of the panel.

41 - OA1EWah - Gridding

42 - DWvV6Bk - Nested compositors

43 - uDMGhvx - Applications menu

44 - duIsLh7 - Telnet Star Wars

Initial network stack / TCP support.

45 - zbMMTTc - DOOM

Doom

46 - i5O8Vcl - Quake

Quake

47 - XxBe5ED - Menuet

Bochs

48 - R73apT8 - New login screen

49 - oeGNxX7

50 - HOukp9A

51 - uD25Dh0

52 - OrTrSp4

53 - hUd4DiG - IRC client

54 - zHLGvAJ - Video Player

55 - nZFaGjQ

56 - v589z3F

57 - 3xFNgEj

58 - cP5VJxU

59 - znckIcZ

60 - bXCwigN

62 - wOlmF4T

ToaruOS 1.0 was finally released in January of 2017.

ToaruOS 1.x

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!

61 - t1hZf5p

63 - ha32qUc

The panel here is ported to Python with a new design, and there are new graphical applications.

64 - VNJ0CmH

65 - i8TfJOK

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.

66 - fozXA1m

The NIH project begins. A fully in-house ToaruOS... looks a lot like ToaruOS from 2011!

67 - WEKhmxY

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.

68 - zxxJLLu

The signed distance field text rendering engine lands. The panel has been restored with the new theme backported from the Python version.

69 - Ce4lGPP

Python 3.6 building against our own libc, and with the windowing system bindings working again.

Screenshot_2018-08-16_19-48-26

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.

70 - JIWpAnx

The terminal could use FreeType, the SDF renderer, or a bitmap font.

Screenshot from 2018-11-18 13-32-28

Implementing a widget toolkit to rewrite Python applications in C.

Screenshot from 2018-11-19 21-52-48

A new file manager, image viewer, and "About" dialog.

Screenshot from 2018-11-26 18-53-33

Rewritten package manager replicating the UI of the Python version.

Screenshot from 2018-11-26 22-25-12

Quake is ported to run on our libc.

Screenshot from 2019-01-03 15-43-30

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.

Screenshot from 2020-04-21 16-24-51

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.

Kuroko

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.

Screenshot from 2021-01-23 15-25-25

Screenshot from 2021-04-05 19-43-51

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.

ToaruOS 2.0

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.

Screenshot from 2021-04-21 20-53-45

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.

Screenshot from 2021-04-28 17-35-51

Misaka tries to run a binary.

Screenshot from 2021-04-29 14-15-22

The VFS is functioning and Misaka can run a Hello World, complete with thread-local storage.

Screenshot from 2021-04-29 20-13-21

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.

Screenshot from 2021-05-05 17-15-01

Misaka runs Kuroko, complete with a REPL.

Screenshot from 2021-05-07 08-45-32

The first hints of Misaka trying to start Yutani.

Screenshot from 2021-05-07 14-09-03

We have a login screen!

Screenshot from 2021-05-07 15-48-45

Misaka boots to a usable desktop. The first true screenshot of what would become ToaruOS 2.0.

Screenshot from 2021-05-20 19-24-05

Misaka runs multiple plasma demos across multiple cores.

Screenshot from 2021-06-14 21-36-02

For Misaka, I also built a new network stack.

Screenshot from 2021-06-17 10-16-40

ToaruOS 2.0 gets a gcc port and the package manager makes its return once again.

Screenshot from 2021-07-02 10-22-46

Wait, that's not ToaruOS... An SDL application demos the first iteration of a new TrueType rasterizer.

Screenshot from 2021-07-07 09-14-19

The completed TrueType rasterizer arrives on ToaruOS.

top

Misaka allowed for the implementation of process performance tracking, and finally, ToaruOS got a top.

thinkpad_top

ToaruOS 2.0 was also heavily tested on real hardware during its development, seen here on a ThinkPad T410.

Screenshot from 2021-10-04 19-17-36

And if there's a console monitor, how about a graphical one with fancy graphs?

Screenshot from 2021-11-09 14-17-35 Screenshot from 2021-11-13 07-10-16

Updated panel widget popover designs.

Screenshot from 2021-12-02 09-27-33

A new window switcher with window previews, something that was lost in Yutani over the old GUI many years before.

Screenshot from 2021-12-11 09-14-13

ToaruOS 2.0 was released in December 2021.

ToaruOS 2.1

ToaruOS on ARM

A teaser screenshot of an incomplete AArch64 port of ToaruOS running the compositor, desktop, and a dialog box.

Doom

ToaruOS plays Doom on ARM64.

BIOS loader

The BIOS loader switches to graphics modes.

Blur behind

The compositor gets support for blur-behind - modern graphical effects!

ToaruOS 2.1 hero image

ToaruOS 2.1 was released in October, 2022.

Current Development

Early development of new Kuroko bindings

New bindings for writing graphical applications in Kuroko start to take shape.

Mines

The old minesweeper game, original written in Python, makes its return with some visual updates, now in Kuroko.

@Justaus3r
Copy link

ma man is a legend..

@akzi
Copy link

akzi commented May 4, 2022

牛逼

@aarmn
Copy link

aarmn commented May 8, 2022

wish to see even more astonishing result in future!
maybe better or more exotic UI, some ideas in package management / terminal utils /...
with a good default stack of free software (maybe cool alternatives of coreutils/similar to nix package manager idea/...) this can be a full reasonable vm distro. or maybe way more
let it be different

@Juliox360
Copy link

It's been wornderfull how this is growing up! There is a lot of insipiration with this! keep going!

@Vovo4k
Copy link

Vovo4k commented Aug 25, 2023

Legendary OS from just a console to cool gui OS

@lolguy91
Copy link

Legendary, I think I remember using it in the 1.x days

@aarmn
Copy link

aarmn commented Sep 29, 2023

holy dedication

@8dcc
Copy link

8dcc commented Jun 7, 2024

Good job.

@9xbt
Copy link

9xbt commented Jun 22, 2024

Incredible work you did man. It's sad to see it archived

@gamma63
Copy link

gamma63 commented Aug 3, 2024

RIP ToaruOS 2010-2024

@lolguy91
Copy link

RIP ToaruOS 2010-2024

indeed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment