Skip to content
This repository has been archived by the owner on Mar 19, 2024. It is now read-only.

ToaruOS 2.0

Choose a tag to compare
@klange klange released this 12 Dec 00:00
· 514 commits to master since this release

A lead screenshot shows the "About" dialog
Three screenshots demonstrate various applications

ToaruOS has consumed the greater part of my life for the last eleven years. This release has been a long time coming: My first plans for a 64-bit, SMP-capable port of the OS date back to before the 1.0 release. The repository in which I built the new kernel was something I had already set up as far back as 2015. And now, finally, I think it is ready.

What is ToaruOS?

ToaruOS is a complete hobby operating system for x86-64 PCs. ToaruOS is made up of several components:

  • Misaka, an SMP-enabled kernel for x86-64. Misaka is the main focus of this release, as it replaces the older "toaru32" kernel from 1.x.
  • Yutani, a software-compositing windowing system. Yutani has been a core part of ToaruOS since very early in its development, and this release brings a number of improvements to the windowing protocol and compositor implementation.
  • Kuroko, a bytecode-compiled interpreted programming language. Kuroko first appeared in ToaruOS 1.14 as a replacement for Python, and has improved greatly since it made its debut.
  • Bim, a Vim-inspired code editor with syntax highlighting and plugins powered by Kuroko. All code written for ToaruOS in the last few years has been written in Bim.
  • Graphical applications for Yutani, including a file browser, terminal emulator, widget-powered panel, and a package manager.
  • A vast collection of terminal utilities, including a large subset of standard POSIX utilities.
  • The ToaruOS libc, a cleanroom implementation of the C standard library. ToaruOS's libc has proven itself by supporting a considerable set of complex ports.
  • A full suite of userspace libraries to provide support for PNG and JPEG images, TrueType fonts, and more.
  • A dynamic linker (
  • A set of bootloaders for BIOS and EFI systems.

All software components of ToaruOS are original to the project.

What's New in ToaruOS 2.0?

There are two ways to look at 2.0: First, as a follow up to 1.14.1. Compared to the last "stable" release, the changes in 2.0 are extensive but iterative. Alternatively, 2.0 can be compared to 1.0. That release was built on a number of third-party elements, and 2.0 demonstrates how those elements have been successfully replaced.

Features of Misaka

  • x86-64 architecture support and a far more portable base than its predecessor.
  • Support for symmetric multiprocessing (SMP).
  • VFS and process support for filesystem groups and supplementary group lists.
  • Per-thread and per-core CPU usage tracking.
  • Support for gzip-compressed ramdisks.
  • Loadable driver modules, which are now loaded from the ramdisk.
  • Process tracing with ptrace, providing visibility into system calls and signal delivery, single-step debugging, and cross-process memory access.
  • A newly-rewritten network stack providing a BSD-style sockets API, support for multiple interfaces, a loopback interface, and listening sockets.

Changes Since 1.14.1

  • New userspace utilities exposing functionality added in Misaka: top, strace, dbg, ping, cpuwidget.
  • Several improvements have been made to the graphics library, including the addition of affine transformations.
  • Several improvements have been made to the window compositing framework.
  • A new TrueType text rasterizer has been added.
  • A new marked-up text formatting library has been added.
  • The BIOS loader has been improved and should support a wider range of hardware configurations (including hard disk boot), the EFI loader has been rewritten, and both now support editing the kernel command line.
  • The panel has been redesigned, and widgets have been improved with loaded libraries, dynamic layout, and new popups.
  • The Julia set viewer has been rewritten with new palettes and exploration features.
  • A new calculator app has been added, powered by Kuroko.
  • The libc now supports basic timezone configuration. Please set your system RTC to UTC for accurate time.
  • The timezone offset and panel weather widget are automatically configured by location services, when available.
  • Driver support has been added for the Ensoniq ES1371 chipset emulated by VMware Workstation.
  • Many more things I lost track of.

Known Issues

  • The new network stack remains experimental and the TCP implementation is missing functionality I hope to deliver in a future update.
  • As in previous releases, ToaruOS's libc remains incomplete. Some functions may be provided as stubs, or may not accept all expected options.
  • There are known issues with the ext2 implementation and, while possible, disk installations are not recommended.
  • Please see the attached discussion for additional issues found in this release.

What's Next?

Several features were deferred to future releases in order to avoid scope creep and get 2.0 finalized. My roadmap for the future looks something like this:

  • 2.0.x: Various bug fixes and functionality that was almost ready for 2.0, such as TCP stack improvements.
  • 2.1: AHCI, xHCI, USB HID devices, and other improved hardware support that was specifically deferred.
  • 2.2: AArch64 port.

Running ToaruOS

About the Live CD

ToaruOS is distributed as a "live CD". The default configuration will boot into a user session for local. The password for this account is also local, and it is permitted to use the sudo command. When prompted for a password by either the graphical or command-line sudo utilities, enter local. The live CD is configured to provide an in-memory read-write filesystem and packages can be installed up to the limits of system memory, but no data will persist between boots. As in previous releases of ToaruOS, an experimental read-write ext2 implementation is available (insmod /mod/ext2.ko) and drivers for IDE hard disks are provided (insmod /mod/ata.ko). While these drivers have seen significant improvements since previous releases, their use on real systems is not recommended.

Virtual Machines

I generally recommend using a virtual machine such as QEMU, VirtualBox or VMware Workstation to run ToaruOS, as driver support for real hardware configurations is limited.

QEMU can be configured as follows:

qemu-system-x86_64 -cdrom image.iso -m 1G -device AC97 -enable-kvm

You may also wish to use multiple virtualized CPUs with -smp 2. For platforms other than Linux, substitute an appropriate command line flag for -enable-kvm to enable hardware virtualization.

For VirtualBox, be sure to provide 32MB of display memory and configure an Intel NIC with NAT, and AC97 audio for best support.

ToaruOS 2.0 has also been tested in VMware Player.

Real Hardware

Users wishing to try ToaruOS 2.0 on real hardware are recommended to use GRUB. Booting ToaruOS 2.0 is notably simplified over 1.x, as modules no longer need to be loaded by the bootloader to achieve a functioning system. Extract the kernel and ramdisk files from the release CD and place them in a path accessible from your GRUB loader, then add a menu entry with the following commands:

multiboot2 /kernel root=/dev/ram0 vid=auto migrate
module2 /ramdisk.igz
set gfxpayload=keep # You may need to specify an appropriate mode here.

Credits and Licenses

ToaruOS itself is made available under the following terms, commonly known as the NCSA / University of Illinois License:

Copyright (c) 2011-2021 K Lange, et al. (hereafter [fullname]). All rights reserved.

Developed by: ToaruOS (hereafter [project])

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
(the "Software"), to deal with the Software without restriction,
including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

* Redistributions of source code must retain the above copyright notice,
  this list of conditions and the following disclaimers.

* Redistributions in binary form must reproduce the above copyright
  notice, this list of conditions and the following disclaimers in the
  documentation and/or other materials provided with the distribution.

* Neither the names of [fullname], [project] nor the names of its
  contributors may be used to endorse or promote products derived from
  this Software without specific prior written permission.


ToaruOS integrates components separately licensed under the ISC License (apps/bim.c and related files):

Copyright (C) 2012-2021 K. Lange

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.


Kuroko, ToaruOS's bytecode-compiled interpreted language, is based on prior work by Robert Nystrom and is distributed under the MIT License:

Copyright (c) 2020-2021 K. Lange <>
Copyright (c) 2015 Robert Nystrom

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.


ToaruOS is built with GCC and its runtime support library (libgcc) is provided on the CD as a dynamic shared object. This file carries a GPLv3 license with a linking exception, which you may find here alongside the requisite sources:

Finally, ToaruOS includes the DejaVu family of TrueType fonts, license details for which may be found here: (embedded license text for fonts can be viewed in the OS with the font-tool utility using the -s flag)

All other assets, including icons, wallpapers, mouse cursors, and so on, are original works by the ToaruOS team and released under the same NCSA license as the rest of the OS. ToaruOS design assets may be made available under alternative Creative Commons terms by request.


  • about: accept resize messages
  • ahci: more testing
  • ahci: wip module
  • assert: use dprintf, not printf, when printing assertion message
  • ata: deal in pages, not sectors
  • ata: Don't make device nodes for disks that claim to be empty
  • ata: drop the disk scheduler task and just use a proper sleepable mutex
  • ata: Ensure we lock around submitting ATAPI command so we're woken up correctly
  • ata: fix badly allocated prdt
  • ata: fix bad timeout on ATAPI initialization, fixes vbox seeing the CD
  • ata: identify disk before checking its size...
  • ata: New disk scheduler; less terrible but very slow
  • ata: remove partition info which belongs to dospart module
  • ata: Rudimentary recovery of the legacy ATA driver
  • ata: slap a warning at the top of that
  • base: Accept QEMU IDE controller for ata driver autoload
  • base: Add 'guest' user with no groups, not in sudoers
  • base: add removed shell scripts from /bin
  • base: Add /src/boot and /src/modules
  • base: Cleaned up volume icons
  • base: Cleanup local's rc files
  • base: define some byte order macros
  • base: Don't wait for msk on boot
  • base: Ensure we're still providing the fake
  • base: Install auto-dep.krk to /bin instead of /usr/bin
  • base: Land new assets for 2.0
  • base: Load ATA drivers on vbox if IDE is detected
  • base: Load iso9660 and add a desktop icon when mounting CD at boot
  • base: Load the piix4 remapper if we see the ISA bridge; fixes OVFM under qemu without -M q35
  • base: make sure dir exists to build host Kuroko
  • base: minor cleanup of /usr/share
  • base: Only show tutorial once on first graphical login for 'local'
  • base: Prepare for 2.0.0
  • base: Print message when loading drivers on startup
  • base: Remove old qemu thing from startup
  • base: remove unsupported startup script
  • base: Show some toasts on startup.
  • base: Slightly less useless help files
  • base: update /etc/os-release
  • base: update package repository on startup
  • base: Update
  • base: Wait a bit before starting the wizard
  • bim: fix accidental wraparound when scrolling to '-1'
  • bim: fix argument parsing derp
  • bim: Report errors when opening files
  • bim: sync with upstream
  • bim: sync with upstream
  • bim: syntax highlighter for /etc/issue files
  • bim: Update gas highlighter
  • bim: upstream bug fix
  • bim: Use ansi theme on vga terminal
  • bim: version 3.0.0
  • block-dev-stats: Test tool for ongoing ata rewrite
  • boot: Add 1280x800 as a preferred resolution
  • boot: Add a shortcut to toggle video/text mode
  • boot: Add a status indicator when loading
  • boot: add command line editor
  • boot: add menu timeout
  • boot: adjust timeout a bit
  • boot: alternate help message when highlighting a toggle
  • boot: check for long mode support so we can complain if someone runs the wrong qemu
  • boot: Clean up editor redraw, shift-arrow input?
  • boot: Cleanup strings; spot-check memory on startup
  • boot: Don't clear lines before printing on them when drawing banners
  • boot: enable SMP by default
  • boot: enable vmware resize by default? it seems stable
  • boot: Fall back to 24bpp modes
  • boot: first pass at cleanup, just make sure everything has lead comments
  • boot: fixup returning from editor to menu
  • boot: generalize video mode selection to work on BIOS
  • boot: Jump back to real mode to load sectors?
  • boot: less debug text
  • boot: Make sure menu displays if an unrecognized key is pressed
  • boot: make this bootload v4.0?
  • boot: MBR / disk boot stub
  • boot: merge retooled EFI loader
  • boot: more editor key binds
  • boot: Prettify
  • boot: recommend 1GiB of RAM
  • boot: Recover BIOS loader.
  • boot: retain last mode when toggle to text mode
  • boot: Rewrite README
  • boot: Rewrite the legacy BIOS loader
  • boot: Select current mode on video menu; esc to go back without changing
  • boot: Set a kcmdline flag when debug is set in menu
  • boot: Support AOUT_KLUDGE kernels
  • boot: Use CD for QEMU
  • boot: VBE modesetting
  • build: Remove C++ support, stop including libstdcxx on the ramdisk
  • calculator: Don't let the window get too tiny
  • calculator: screwy, kuroko-backed calculator
  • calculator: set binpath so we can at least import 'math'
  • calculator: simple text input
  • chown: fixup semantics, support names in command
  • color-picker: New widget demo
  • compositor: Add a new OVERLAY layer, specifically for toasts
  • compositor: Add another layer above overlays for menus so they show in front of toasts
  • compositor: Add I-beam cursor; logic in terminal, file-browser
  • compositor: Animate bottom and top windows normally if they aren't marked ALT_ANIMATION
  • compositor: Avoid more transformations.
  • compositor: avoid transformations if we're just transparent
  • compositor: Close stale windows that were lost in the stack
  • compositor: correctly set next focused window when a window closes
  • compositor: don't animate regular dropdown menus
  • compositor: drop support for replacement renderers
  • compositor: Expand rotated coordinate bounds to handle rounding / truncation errors
  • compositor: Fix up float math ordering for better coordinate mapping results
  • compositor: fixup tiling sizes for one pixel of overlap, not two
  • compositor: Hack to support 24bpp framebuffers
  • compositor: Oops, we weren't reseting compositor clips
  • compositor: realign pointing hand cursor
  • compositor: refuse to initiate dragging when currently resizing
  • compositor: Restructure 'advertise' messages to provide window buffer, size
  • compositor: stop dragging windows on esc
  • compositor: support positioning a window relative to another
  • compositor: Switch window screenshot keybind to Shift+PrtSc because Gnome doesn't want us to get Alt+PrtSc in emulators
  • compositor: take screenshots on print screen key
  • compositor: Unthread the render pass
  • compositor: Wait until a flip event is received before revealing windows
  • cpuwidget: Add to menu as 'System Monitor'
  • cpuwidget: Cap graphs better
  • cpuwidget: Complete revamp
  • cpuwidget: CPU usage graph
  • cpuwidget: fix file descriptor leak
  • cpuwidget: Legend cleanup
  • cpuwidget: Shoddily add interface names to network legend
  • date: change default format
  • dbg: add backtrace command
  • dbg: add 'print' command
  • dbg: make sure debugged process terminates on exit
  • dbg: show signal number if name is not available
  • dbg: Try to figure out symbol names, library locations
  • decorations: try to be a bit smarter about drawing titlebar elements
  • decorations: Use a single spritesheet for window borders
  • dhclient: don't segfault on RO filesystem trying to write resolv.conf
  • dhclient: fallback to /var/resolv.conf if /etc is read-only
  • dhclient: Skip things that don't have hardware addresses
  • dhclient: Try a few times...
  • dhclient: try to configure all available interfaces
  • dospart: recover and convert to mount function
  • e1000: add ref link
  • e1000: Don't print that message
  • e1000: More driver rewrites
  • e1000: More transmit changes...
  • e1000: Receive SRPD irqs?
  • e1000: Remove debug procfs entry that was causing errors
  • e1000: remove print
  • e1000: rewrite tx a bit
  • e1000: should probably keep using whatever was in the card after reset
  • es1371: Audio driver for vmware
  • ext2: Add some necessary mutexes around block and inode allocation
  • ext2: Assign correct ownership of new files
  • ext2: fix block group calculation for inodes
  • ext2: fixup expanding directories
  • ext2: No cache for you
  • ext2: Recover (experimental) ext2 filesystem driver
  • ext2: report ROFS
  • ext2: Try to make this less broken
  • fbterm: Don't fill screen on startup, we don't set up memory caching for this nicely
  • fbterm: Make sure we're drawing with stride, not width
  • fbterm: Move log to center, set bg to black
  • fbterm: Only enable scrolling by default on vga terminal
  • fbterm: Support 24bpp framebuffers
  • fbterm: VGA backend, enable scrolling by default
  • fetch: Parse https and bail better
  • fetch: parse port like we do in fetch-tls
  • fetch: print total time when done, instead of 0.0 remaining
  • fetch: switch forced progress updates back off
  • file-browser: add a few more keyboard shortcuts
  • file-browser: Add picker mode
  • file-browser: do fewer redundant redraws
  • file-browser: Don't restart when wallpaper changes
  • file-browser: fix inner radius of focused text input box
  • file-browser: fix up scroll dimensions for desktop, though we really do need to make that multi-column
  • file-browser: Icons, identification of PDFs, little launcher wrapper
  • file-browser: little fixes
  • file-browser: realign and blink the cursor in the input box
  • file-browser: Recognize more file types by extension
  • file-browser: Set the default view mode to TILES
  • file-browser: Show a different context menu when no files are selected
  • file-browser: stretch columns to fit
  • file-browser: Use object icon for kernel modules
  • font-preview: If a font provides sample text, show it by default
  • font-preview: Include font name in window title
  • font-preview: Override preview text with argv[2]
  • font-preview: tool for viewing TrueType fonts
  • font-tool: Add option to extract all (understood) names
  • github: checkout the right commit of kuroko
  • github: fix ramdisk path for build artifacts
  • github: Re-add release management
  • github: upload CD image as build artifact
  • glogin-provider: cleanup, remove animation
  • glogin-provider: Fixup animation to not smear on slow systems
  • glogin-provider: fixup overflowing text boxes
  • glogin-provider: using wrong fonts for metrics...
  • graphics: actually fix that off-by-one in draw_sprite_alpha
  • graphics: Add affine transformations for sprites
  • graphics: better approach to transformed blitting
  • graphics: const arguments for point/line calculations
  • graphics: ensure rounded rectangle rendering is bounded?
  • graphics: faster alpha application...
  • graphics: fix alpha painting of sprites
  • graphics: fixup aa line rasterizer
  • graphics: general improvements
  • graphics: improved bilinear interpolator
  • graphics: Match nearest-neighbor signature to bilinear for easier swapping
  • graphics: off-by-one on scanline width in draw_sprite_alpha
  • graphics: only load image libraries once
  • graphics: short-circuit out of bounds lookups in bilinear interpolator
  • graphics: some improvements to the sprite blitters
  • groups: First pass at support for supplementary group lists
  • groups: Initial support for gids.
  • gsudo: Icon for panel, fixup overflowing password box
  • gunzip: Hidden option to print progress reports, for debugging
  • hda: stub module
  • help-browser: should be an inline tag
  • help-browser: viably display the AGPL text for the mupdf package
  • hexify: bail if fopen failed
  • i965: add a leading comment block
  • i965: Don't load if mode wasn't already set
  • i965: modeset a thinkpad
  • i965: register names
  • i965: Send mode change signal?
  • idt: Track core interrupt registers because arch_fatal() usually happens with bad stack data
  • imgviewer: include filename in window title
  • imgviewer: small improvements
  • insmod: Support passing arguments to modules
  • ioctl: request should be 'unsigned long'
  • ipv4: Don't wait so long for initial arp response
  • ipv4: try to arp local stuff?
  • irc: switch to sockets
  • irc: This really needs to use rline, but at least don't mess up long input lines
  • irq: Mark isr_common as global so it shows up in symbol table
  • iso9660: recover, fixup driver
  • iso9660: try to catch some potential mount errors
  • julia: change defaults
  • julia: completely retooled julia set explorer
  • julia: fixups
  • kbd: Catch different scancode from PrtSc key
  • kbd: stop sending empty events to clients
  • kernel: Acquire a lock around waitpid condition changes
  • kernel: add 'assert()'
  • kernel: Add simple mutex with a wait queue
  • kernel: at least add full lead comments to everything
  • kernel: bad ordering of list insert / wakeup caused crashes
  • kernel: begin work on re-adding module loading
  • kernel: Better fault reports
  • kernel: change signatures for vfs interfaces to match reality
  • kernel: clean up kernel/arch/x86_64/{cmos,pit}.c
  • kernel: cleanup kernel/arch/x86_64/idt.c
  • kernel: cleanup kernel/arch/x86_64/smp.c
  • kernel: cleanup kernel/arch/x86_64/user.c
  • kernel: cleanup kernel/generic.c
  • kernel: cleanup things introduced in COW
  • kernel: close file descriptors >STDERR_FILENO on exec like toaru32 did
  • kernel: exclude serial ports from pts numbering; start numbering at 1
  • kernel: Export sys_ functions so they appear in symbol table
  • kernel: Fix gdt install clobbering symbol table, or whatever else ends up after it
  • kernel: fix getpgid(pid != 0)
  • kernel: fix missing lock during wakeup from signal delivery
  • kernel: Fixup bad lock ordering in process_awaken_signal
  • kernel: fixup lock ordering around process_timeout_sleep
  • kernel: Higher resolution CpuPermille
  • kernel: Implement basic copy-on-write for fork()
  • kernel: Initial pass at new debug printf interface
  • kernel: Initial try at actual user buffer validation
  • kernel: make an attempt to clean up processes in SMP
  • kernel: make_process_ready may be called with sleep_lock already acquired?
  • kernel: more sensible idle tracking
  • kernel: (needs review) let threads sleep on their own children?
  • kernel: oops
  • kernel: opportunistically map stack space
  • kernel: Possibly fix sporadic lockup in compositor?
  • kernel: prevent modules from being loaded multiple times
  • kernel: Print gs alongside other registers in panic
  • kernel: Print tracebacks for more fatal errors
  • kernel: Put codename string in quotes for stylistic reasons
  • kernel: Release SHM while we're at it...
  • kernel: restore debug prints for a page fault in the kernel, since SMP failures are rare now
  • kernel: restore fprintf() for printing to vfs nodes (character devices)
  • kernel: Should not need to use temporary buffer for fxsave/rstr
  • kernel: times() can take NULL
  • kernel: track idle task usage
  • kernel: Track relative CPU usage over one-second spans
  • kernel: Use local APIC timer for preemption on APs, not an IPI
  • kernel: Use 'Misaka' as the system named presented by the kernel
  • kernel: use that new sleep_on_unlocking in ringbuffers
  • kmalloc: Use existing assertion infrastructure
  • ksym: start organizing kernel symbols for linking
  • kuroko: add managed modules to filesystem
  • kuroko: bind text library in _yutani module
  • kuroko: Bump for sendto() support
  • kuroko: more upstream updates
  • kuroko: pull in version number update
  • kuroko: Support keyword arguments to lambdas
  • kuroko: sync to fix string comparison crash
  • kuroko: sync with upstream
  • kuroko: sync with upstream
  • kuroko: sync with upstream
  • kuroko: sync with upstream
  • kuroko: sync with upstream
  • kuroko: Sync with upstream
  • kuroko: update repo
  • kuroko: Upstream updates
  • kuroko: yet more upstream updates
  • kuroko: _yutani: expose shm font support
  • Expose some internal data for use by debugger
  • Link for 4K pages
  • Set values in dynamic symbol tables when linking
  • Stop leaking low heap to init functions
  • Use a much bigger hash size and cc1 loads a lot faster
  • lfbvideo: Don't map EGA/VGA text mode range as WC as apparently things don't like that
  • lfbvideo: Ensure we map enough space for large preset video modes
  • lfbvideo: Fallback to port-IO driver if MMIO isn't available
  • lfbvideo: Keep resolution set by loader if none specified by args
  • lfbvideo: recalculate vmware memory size on display change
  • lfbvideo: set some more bits on bochs
  • lfbvideo: Use MMIO interface to configure qemu/bochs; vbox is still port i/o
  • libc: __assert_func should exit
  • libc: cleanup, some missing things
  • libc: Fix bad logic when looking for IP address
  • libc: fix fseek behavior with active read?
  • libc: Implement an actual quicksort for qsort...
  • libc: More bad (and a couple good) math functions
  • libc: only elide fractional parts in g/G, not f/F
  • libc: rand() should not return negative values
  • libc: support ip addresses in gethostbyname
  • libc: that xor-swap is silly and probably also slower
  • libc: Update wcwidth with latest data
  • libm: Add missing M_, INFINITY, NAN constants
  • libm: Add two missing functions
  • libm: Hyperolibc trig functions
  • libm: must implement sqrt() or it can loop in gcc
  • lib: update docs
  • localtime: rudimentary, incorrect support for timezone offsets
  • login-loop: Linefeed before issue text
  • login-loop: Use a simple, 'modern' /etc/issue
  • login: Return 2 when 'disconnect' is provided as a username
  • login: Support /etc/issue through login-loop
  • lspci: Add more device descriptions from my ThinkPad
  • lspci: add qemu's e1000e model
  • make: Add a test tool/script
  • make: bail if make fails?
  • make: Clean more stuff
  • make: Default SMP=4 for qemu targets because why not
  • make: Default to 2 SMP cores so we're consistently testing with SMP enabled
  • make: detect more base/ changes
  • make: Ensure we're creating /usr/bin so we can put auto-dep.krk in it
  • make: Give write access to docker container's bin dir
  • make: Pass SMP options to 'make shell'
  • make: Replace with a Kuroko equivalent
  • make: Strip final kernel image
  • make: 'test' target should use q35 system
  • make: /usr/lib/ libs (from gcc) should come from TOOLCHAIN
  • make: Why are we trying to echo PATH here?
  • markup: fix bad malloc
  • markup: Initial work on new marked up text rendering library
  • menu: Add fancy speech-bubble-style menus like Gnome has
  • menu: Better tail alignment for bubble windows
  • menu: Disallow dragging/resizing of menu windows
  • menu: flip after moving
  • menu: implement menu_free_entry
  • menu: Really, seriously don't show menus before moving them
  • menu: Rudimentary checkbox menu entries
  • menu: space out menu bars nicer
  • meta: Add .mailmap
  • meta: Add more screenshots
  • meta: A note on licenses
  • meta: Cleanup Makefile, add some comments
  • meta: Cleanup, rewrite parts of the README
  • meta: Describe filesystem structure in README
  • meta: Fix typo in README
  • meta: Fresh batch of screenshots
  • meta: I really should not have to keep doing this. Please stop stealing my free code.
  • meta: purge most instances of vim hints
  • meta: Some README updates
  • meta: Stop recommended recursive git checkout, since it pulls in gcc/binutils
  • meta: Update all of the heading comments in apps/
  • meta: Update leading comments in modules/
  • meta: Update README, new screenshot
  • meta: Update release notes template
  • meta: We shouldn't need to link -lgcc in the kernel
  • misaka: final merge prep
  • misaka: initial merge
  • misc: cleanup
  • mmu: Actually read multiboot mmap data
  • mmu: be annoying about making sure we aren't leaking pages?
  • mmu: Be more clear about what's happening when we run out of RAM
  • mmu: Fixup mapping for physical memory address >4GiB
  • mmu: Reserve a few more initial PTs so we can support 64GiB of memory
  • mmu: Try to perform really bad TLB shootdowns?
  • modules: cleanup header comments
  • modules: list modules in /proc/modules
  • modules: Reimplement loadable kernel modules
  • modules: track loaded sizes so we can free modules later
  • more: add simple pager utility
  • more: add space binding
  • msk: accept https: remotes
  • msk: clean up after ourselves
  • msk: Fixup local manifest file resolution
  • msk: Fixup support for multiple remotes, add a few options
  • msk: handle failures in 'fetch' when retrieving packages
  • msk: keep using an intermediary file for gunzip as it's still way faster than the pipe
  • msk: Switch back to using tar/gunzip with pipes
  • msk: Switch package source to CDN
  • msk: Use 192.168.11.* for local repo as it bails faster in vmware
  • multiboot: Correctly pass bits-per-pixel from framebuffer data
  • net: actually try to figure out destination hardware addresses
  • net: add arp?
  • net: add methods to configure addresses
  • net: add missing declaration
  • net: add netmask, examine more stuff from DHCP
  • net: Add stats counters
  • net: another batch of rewrites
  • net: arp fixups
  • net: cleanup
  • net: complete most of a TCP stream?
  • net: disable debug prints during TCP connection
  • net: don't duplicate struct layout in e1000 device object
  • net: don't dynamically allocate hashmaps and lists?
  • net: don't explode without a network
  • net: e1000 receive fixes?
  • net: fix bad copy in ICMP ECHO
  • net: fixups for dhclient, multiple nics
  • net: hacked up udp stuff, dns resolver
  • net: hack up some fin packets
  • net: Handle signals
  • net: initialize e1000e better?
  • net: initialize that list earlier
  • net: initial loopback interface support
  • net: initial raw socket implementation
  • net: Maybe allow udp binds?
  • net: more cleanup
  • net: more interface properties
  • net: more tcp; timeout nameserver lookups
  • net: net_udp_send() should return size of data sent
  • net: ongoing network work
  • net: Oops, we broke UDP sends
  • net: pack that?
  • net: respond to pings?
  • net: return eof when socket is closed and no data is available
  • net: select random sequence number to start
  • net: silence more debug messages
  • net: silence the network stack unless MISAKA_DEBUG_NET is defined
  • net: tcp: basic syn/ack receipt?
  • net: try to actually track received packet sizes...
  • net: try to get the package manager working
  • netty: Fixup the reverse shell host for socket connections
  • netty: quick hack to use threads so pasting doesn't deadlock
  • net: various
  • net: various improvements to still terrible network stack
  • net: we really need some proper blocking queue primitives
  • net: wip stuff for sockets
  • nproc: Expose processor count and use it to pick between yielding and non-yielding spin locks
  • package-manager: apply same optimization as file-browser
  • package-manager: Spin up a thread to run 'msk'
  • package-manager: update 'about' text
  • panel: Add icon, update less often
  • panel: Add notifications when a network connects/disconnects
  • panel: adjust size of 'Applications', clock
  • panel: always prefer center alignment for popups
  • panel: And improve the popup while we're at it
  • panel: And make more room for long month names
  • panel: Apply smarter alignment to popup menus
  • panel: cleanup and fix display of window items
  • panel: cleanup widgets, part 1
  • panel: Don't crash when alt-tab window is open and the last tabable window closes
  • panel: Don't display loopback in network status widget
  • panel: Dynamically size the date widget
  • panel: experiments with a new design
  • panel: First pass at modularization
  • panel: fixup window title display in alt-tab switcher
  • panel: improve design of calendar popup
  • panel: Improvements to the window switcher
  • panel: Keep ticking the clock when receiving other events
  • panel: Little improvements to weather widget
  • panel: New volume slider menu widget
  • panel: redo layout when panel resizes
  • panel: re-enable weather widget
  • panel: Restore Alt-F1 and Alt-F3 key binds
  • panel: Show icon of current window at full opacity
  • panel: show logout dialog in a thread (temporary)
  • panel: slide the panel up faster on ctrl-f11
  • panel: try some smarter popup placement
  • panel: Use full month name in date widget
  • panel: Visual adjustments to slider
  • pci: handle setups without a host bridge?
  • pci: Implement PIIX4 PIRQ remapping
  • pcspkr: recover module
  • pex: Actually try to close server endpoints
  • pex: Cleanup pipes?
  • pex: don't leave invalid connections with the server read/write methods?
  • pex: don't shove packets onto the pipes, shove packet pointers so we can read them atomically
  • pex: maybe finally fix this
  • piix4: move to module, only load in virtualbox
  • ping: fancier sub-ms printing (I think %Ng is supposed to do this, but mine might be broken?)
  • ping: Keep pinging, show summary on ^C
  • ping: shoddy implementation
  • pipe: Embiggen pipe buffers
  • pipe: Make pipes more direct with ring buffer usage
  • plasma: fix what I think is actually a math bug in plasma
  • polygons: cleanup
  • polygons: rasterizer demo
  • process: okay don't mark stack protectors nx...
  • process: Set up stack protectors for kernel stacks
  • process: (temp) avoid freeing processes that are still someone's last
  • process: try to fix up some locks, again
  • procfs: cleanup /proc/idle format
  • procfs: quick-and-dirty /proc/kallsyms, missing modules
  • ps2hid: Fixup initialization sequence; unbreaks scrollwheel in vbox
  • ps2hid: give up on PS/2 if trying to empty input buffer doesn't work after 1024 tries
  • ps: Include thread CPU usage in parent when not queried with -T
  • ptrace: Allow separate tracing of signals and syscalls
  • ptrace: avoid suggesting process terminated when continuing from ptrace_signal
  • ptrace: Catch signals, start work on debugger
  • ptrace: Inform non-parent tracer when tracee exits
  • ptrace: POKEDATA, permission fixes for PEEKDATA
  • ptrace: support tracing from non-parent process
  • ptrace: Update status before setting suspended flag
  • readelf: Fix missing -d option
  • readelf: fix typo in usage
  • readelf: GNU-style options
  • readelf: Show dynamic symbol tables
  • readelf: typo
  • readme: Fix docker command
  • readme: More updates.
  • readme: update
  • readme: Update readme
  • readme: Update README
  • readme: Update references to EFI loader
  • readme: updates
  • readme: updates
  • readme: update screenshot
  • ringbuffer: don't use heap allocator if buffer size is one page
  • rline: Add a new r-search
  • rline: highlight 'abs' as a builtin in kuroko repl
  • rline: stop highlighting numbers in the middle of words
  • serial: should be owned by 'dialout' group
  • sh: Recommend 'ifconfig' in place of 'ip'/'ipconfig'
  • sh: semaphore pipe write helps with a weird race condition
  • sh: use return code from last process in pipeline, and wait for everyone properly
  • smp: ACPI checksups are more of a suggestion
  • smp: add a procfs entry to see what other cores are up to
  • smp: allow command line override for where to scan for RSDP
  • smp: Co-opt Multiboot's config_table member to sneak ACPI tables to kernel
  • smp: do not try to send IPIs when we have one core and no lapic
  • smp: Don't just fatal() if there's too many cores; initialize up to 32
  • smp: fix wakeups doing bad EOI write
  • smp: Force userspace preemption on other cores.
  • smp: Memory invalidation fixes
  • socket: Purge rx queue when socket closes?
  • splash-log: Cleanup, disable log if 'debug' is not specified, unless we take too long
  • splash-log: handle display mode change
  • splash-log: Keep primary messages on screen
  • splash-log, migrate: Cleanup
  • splash-log: reset display on resolution change
  • splash-log: restore vga text output
  • splash-log: Retain last message to print it if we switch out of quiet mode
  • startup: try to dhcp on boot
  • stat: fix size definitions
  • stat: Print a more coreutils-y output
  • strace: fix-up bad signal name table
  • strace: initial -e trace=... support
  • strace: Initial support for a ptrace() mechanism, strace tool
  • strace: more syscall groupings from the real strace
  • strace: support more syscalls, output values, errno
  • strace: support -o option
  • sync: Support argument
  • sync: temporary thing for testing; not a proper sync
  • syscall: PTR_VALIDATE explicitly does not check null...
  • sysfunc: actually bother validating some values
  • sysinfo: OS name from /etc/os-release $PRETTY_NAME
  • sysinfo: Try to be slightly smarter about printing logo
  • sysinfo: Update, add CPU, re-add Font
  • tarfs: throw EROFS on create
  • tcp: fixup connect retry
  • tcp: Fixup socket receive buffers
  • tcp: handle connection refused
  • tcp: Time out connection after 3 attempts, reduce time between resends
  • terminal: Add some functionality to the -g flag
  • terminal: bind Ctrl Shift +, Ctrl -, Ctrl 0 to modify scaling
  • terminal: defer updates; not fully asynchronous
  • terminal: fix bad bounds in mouse position check
  • terminal: fix text width for DejaVu Sans Mono
  • terminal: fixup scroll damage rects
  • terminal: Implement some quick and dirty font fallback support
  • terminal: Launch without animation when running fullscreen
  • terminal: make scrollback more efficient?
  • terminal: Minor improvements to text selection
  • terminal: rewrite redraw logic to be more buffered
  • terminal: source repo for bitmap font moved, update comment
  • terminal: support ^[[3J to clear scrollback
  • terminal: various cleanups
  • terminal-vga: Backport selection improvements from graphical terminal
  • terminal-vga: Fixup upper left cell appearing selected
  • terminal-vga: recover vga text mode operation
  • terminal-vga: Rewrite display caching so it's actually fast, and buffered
  • test: install xhci module
  • test: more detailed logging for USB so we can test xhci
  • test-sigsegv: Add a deeper segfault to test debugging libs
  • text: Add some macros so we can more easily swap out the bitmap font
  • text: allocate subsamples based on glyph bounds
  • text: bring back shm-stored fonts provided by compositor
  • text: Expose method for brute-force path stroke
  • text: fix clipped right-hand-side of some glyphs
  • text: fix overly trusting bounds calculation
  • text: handle off-curve start point
  • text: Introduce new TrueType implementation
  • text: offset horizontal scanlines slightly to not bleed bottoms of glyphs into next pixel
  • text: on second thought, cache the data not the font object, so each tt_font_from_shm is a unique ref
  • text: purge the SDF renderer, RIP
  • text: read fonts with short glyf table offsets
  • text: read unitsPerEm from font, use for tt_set_size
  • text: remove sdf kerning config
  • text: Replace bitmap font with a baked version of Deja Vu Sans Mono, mostly for metrics reasons
  • text: shadowed text, port file-browser
  • text: Should have been doing two box blurs this whole time
  • text: spot fix for clipped text shadows
  • text: support more flexible sizing in pt, px
  • text: support type 4 cmaps, old Microsoft fonts
  • text: Switch several apps/libs to new text library
  • text: various rewrites
  • times: rudimentary support for process times
  • time: Try to figure out some sensible timezone names from the TZ offset, and collect that from ip-api
  • tmpfs: finer-grained locks, use global mmu mapping
  • tmpfs: Make total block allocations available through a procfs entry
  • toastd: Adjust spacing, try to vertically center text
  • toastd: Finish things up, I guess.
  • toastd: initial prototype
  • toast: Quick Kuroko toast client
  • top: Allow sorting by command line
  • top: cap CPU%/CPUA at 100
  • top: code cleanup
  • top: Differentiate general memory from memory used for tmpfs
  • top: Don't cap at 100, but do format >=100 differently
  • top: fixup memory leaks
  • top: process monitor
  • top: Track multiple slices of usage, show averages
  • touch: don't segfault when unable to touch
  • touch: don't segfault when unable to touch
  • tutorial: Add a page about the live CD
  • tutorial: Adjust spacings, fix centering
  • tutorial: remove reference to old irc network
  • tutorial: width/height should be minus decorations
  • udp: add bind() and recv() test tool
  • util: Add working bochsrc
  • util: Move ISO, FAT stuff to a library
  • util: Resolve bootstrapping issue through bruteforce
  • vbox: Minor cleanup, don't process events we didn't get an IRQ for
  • vfs: Allow 'filesystems' that are partition mappers to not return a node
  • vfs: copied nodes should get their own refcounts
  • vfs: ramdisk length needs to be updated on the original node
  • vmware: detect vmware by its PCI Express chipset
  • vmware: enable resize support
  • weather-tool: Handle bad location-data by trying to get it again
  • weather-tool: remove unused legacy conf file
  • weather-tool: Use a geoip service to get location
  • weather-tool: Use lat/lon when querying by guessed location
  • x86_64: Cleanup boot messages to fit in vga text mode better
  • x86_64: Don't wrap version codename in quotes as we're doing that directly now
  • x86_64: fixup bad memory walk when doing backtraces
  • x86_64: Mark kernel with AOUT_KLUDGE address parameters so the 64-bit ELF can be booted directly
  • x86_64: Support multiboot2 loaders
  • xhci: cleanup
  • xhci: convert to module
  • xhci: start on controller driver
  • xhci: userspace-queryable debug interface
  • yutani: new grabby hand cursor
  • yutani: pointing hand cursor
  • yutani-test: must flip once to reveal window