ToaruOS 2.0
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 (ld.so).
- 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.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH
THE SOFTWARE.
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.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
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 <[email protected]>
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.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN 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: https://github.com/toaruos/gcc/
Finally, ToaruOS includes the DejaVu family of TrueType fonts, license details for which may be found here: https://dejavu-fonts.github.io/License.html (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.
Changelog
about
: accept resize messagesahci
: more testingahci
: wip moduleassert
: use dprintf, not printf, when printing assertion messageata
: deal in pages, not sectorsata
: Don't make device nodes for disks that claim to be emptyata
: drop the disk scheduler task and just use a proper sleepable mutexata
: Ensure we lock around submitting ATAPI command so we're woken up correctlyata
: fix badly allocated prdtata
: fix bad timeout on ATAPI initialization, fixes vbox seeing the CData
: identify disk before checking its size...ata
: New disk scheduler; less terrible but very slowata
: remove partition info which belongs to dospart moduleata
: Rudimentary recovery of the legacy ATA driverata
: slap a warning at the top of thatbase
: Accept QEMU IDE controller for ata driver autoloadbase
: Add 'guest' user with no groups, not in sudoersbase
: add removed shell scripts from /binbase
: Add /src/boot and /src/modulesbase
: Cleaned up volume iconsbase
: Cleanup local's rc filesbase
: define some byte order macrosbase
: Don't wait for msk on bootbase
: Ensure we're still providing the fake libm.sobase
: Install auto-dep.krk to /bin instead of /usr/binbase
: Land new assets for 2.0base
: Load ATA drivers on vbox if IDE is detectedbase
: Load iso9660 and add a desktop icon when mounting CD at bootbase
: Load the piix4 remapper if we see the ISA bridge; fixes OVFM under qemu without -M q35base
: make sure dir exists to build host Kurokobase
: minor cleanup of /usr/sharebase
: Only show tutorial once on first graphical login for 'local'base
: Prepare for 2.0.0base
: Print message when loading drivers on startupbase
: Remove old qemu thing from startupbase
: remove unsupported startup scriptbase
: Show some toasts on startup.base
: Slightly less useless help filesbase
: update /etc/os-releasebase
: update package repository on startupbase
: Update README.mdbase
: Wait a bit before starting the wizardbim
: fix accidental wraparound when scrolling to '-1'bim
: fix argument parsing derpbim
: Report errors when opening filesbim
: sync with upstreambim
: sync with upstreambim
: syntax highlighter for /etc/issue filesbim
: Update gas highlighterbim
: upstream bug fixbim
: Use ansi theme on vga terminalbim
: version 3.0.0block-dev-stats
: Test tool for ongoing ata rewriteboot
: Add 1280x800 as a preferred resolutionboot
: Add a shortcut to toggle video/text modeboot
: Add a status indicator when loadingboot
: add command line editorboot
: add menu timeoutboot
: adjust timeout a bitboot
: alternate help message when highlighting a toggleboot
: check for long mode support so we can complain if someone runs the wrong qemuboot
: Clean up editor redraw, shift-arrow input?boot
: Cleanup strings; spot-check memory on startupboot
: Don't clear lines before printing on them when drawing bannersboot
: enable SMP by defaultboot
: enable vmware resize by default? it seems stableboot
: Fall back to 24bpp modesboot
: first pass at cleanup, just make sure everything has lead commentsboot
: fixup returning from editor to menuboot
: generalize video mode selection to work on BIOSboot
: Jump back to real mode to load sectors?boot
: less debug textboot
: Make sure menu displays if an unrecognized key is pressedboot
: make this bootload v4.0?boot
: MBR / disk boot stubboot
: merge retooled EFI loaderboot
: more editor key bindsboot
: Prettifyboot
: recommend 1GiB of RAMboot
: Recover BIOS loader.boot
: retain last mode when toggle to text modeboot
: Rewrite READMEboot
: Rewrite the legacy BIOS loaderboot
: Select current mode on video menu; esc to go back without changingboot
: Set a kcmdline flag when debug is set in menuboot
: Support AOUT_KLUDGE kernelsboot
: Use CD for QEMUboot
: VBE modesettingbuild
: Remove C++ support, stop including libstdcxx on the ramdiskcalculator
: Don't let the window get too tinycalculator
: screwy, kuroko-backed calculatorcalculator
: set binpath so we can at least import 'math'calculator
: simple text inputchown
: fixup semantics, support names in commandcolor-picker
: New widget democompositor
: Add a new OVERLAY layer, specifically for toastscompositor
: Add another layer above overlays for menus so they show in front of toastscompositor
: Add I-beam cursor; logic in terminal, file-browsercompositor
: Animate bottom and top windows normally if they aren't marked ALT_ANIMATIONcompositor
: Avoid more transformations.compositor
: avoid transformations if we're just transparentcompositor
: Close stale windows that were lost in the stackcompositor
: correctly set next focused window when a window closescompositor
: don't animate regular dropdown menuscompositor
: drop support for replacement rendererscompositor
: Expand rotated coordinate bounds to handle rounding / truncation errorscompositor
: Fix up float math ordering for better coordinate mapping resultscompositor
: fixup tiling sizes for one pixel of overlap, not twocompositor
: Hack to support 24bpp framebufferscompositor
: Oops, we weren't reseting compositor clipscompositor
: realign pointing hand cursorcompositor
: refuse to initiate dragging when currently resizingcompositor
: Restructure 'advertise' messages to provide window buffer, sizecompositor
: stop dragging windows on esccompositor
: support positioning a window relative to anothercompositor
: Switch window screenshot keybind to Shift+PrtSc because Gnome doesn't want us to get Alt+PrtSc in emulatorscompositor
: take screenshots on print screen keycompositor
: Unthread the render passcompositor
: Wait until a flip event is received before revealing windowscpuwidget
: Add to menu as 'System Monitor'cpuwidget
: Cap graphs bettercpuwidget
: Complete revampcpuwidget
: CPU usage graphcpuwidget
: fix file descriptor leakcpuwidget
: Legend cleanupcpuwidget
: Shoddily add interface names to network legenddate
: change default formatdbg
: add backtrace commanddbg
: add 'print' commanddbg
: make sure debugged process terminates on exitdbg
: show signal number if name is not availabledbg
: Try to figure out symbol names, library locationsdecorations
: try to be a bit smarter about drawing titlebar elementsdecorations
: Use a single spritesheet for window bordersdhclient
: don't segfault on RO filesystem trying to write resolv.confdhclient
: fallback to /var/resolv.conf if /etc is read-onlydhclient
: Skip things that don't have hardware addressesdhclient
: Try a few times...dhclient
: try to configure all available interfacesdospart
: recover and convert to mount functione1000
: add ref linke1000
: Don't print that messagee1000
: More driver rewritese1000
: More transmit changes...e1000
: Receive SRPD irqs?e1000
: Remove debug procfs entry that was causing errorse1000
: remove printe1000
: rewrite tx a bite1000
: should probably keep using whatever was in the card after resetes1371
: Audio driver for vmwareext2
: Add some necessary mutexes around block and inode allocationext2
: Assign correct ownership of new filesext2
: fix block group calculation for inodesext2
: fixup expanding directoriesext2
: No cache for youext2
: Recover (experimental) ext2 filesystem driverext2
: report ROFSext2
: Try to make this less brokenfbterm
: Don't fill screen on startup, we don't set up memory caching for this nicelyfbterm
: Make sure we're drawing with stride, not widthfbterm
: Move log to center, set bg to blackfbterm
: Only enable scrolling by default on vga terminalfbterm
: Support 24bpp framebuffersfbterm
: VGA backend, enable scrolling by defaultfetch
: Parse https and bail betterfetch
: parse port like we do in fetch-tlsfetch
: print total time when done, instead of 0.0 remainingfetch
: switch forced progress updates back offfile-browser
: add a few more keyboard shortcutsfile-browser
: Add picker modefile-browser
: do fewer redundant redrawsfile-browser
: Don't restart when wallpaper changesfile-browser
: fix inner radius of focused text input boxfile-browser
: fix up scroll dimensions for desktop, though we really do need to make that multi-columnfile-browser
: Icons, identification of PDFs, little launcher wrapperfile-browser
: little fixesfile-browser
: realign and blink the cursor in the input boxfile-browser
: Recognize more file types by extensionfile-browser
: Set the default view mode to TILESfile-browser
: Show a different context menu when no files are selectedfile-browser
: stretch columns to fitfile-browser
: Use object icon for kernel modulesfont-preview
: If a font provides sample text, show it by defaultfont-preview
: Include font name in window titlefont-preview
: Override preview text with argv[2]font-preview
: tool for viewing TrueType fontsfont-tool
: Add option to extract all (understood) namesgithub
: checkout the right commit of kurokogithub
: fix ramdisk path for build artifactsgithub
: Re-add release managementgithub
: upload CD image as build artifactglogin-provider
: cleanup, remove animationglogin-provider
: Fixup animation to not smear on slow systemsglogin-provider
: fixup overflowing text boxesglogin-provider
: using wrong fonts for metrics...graphics
: actually fix that off-by-one in draw_sprite_alphagraphics
: Add affine transformations for spritesgraphics
: better approach to transformed blittinggraphics
: const arguments for point/line calculationsgraphics
: ensure rounded rectangle rendering is bounded?graphics
: faster alpha application...graphics
: fix alpha painting of spritesgraphics
: fixup aa line rasterizergraphics
: general improvementsgraphics
: improved bilinear interpolatorgraphics
: Match nearest-neighbor signature to bilinear for easier swappinggraphics
: off-by-one on scanline width in draw_sprite_alphagraphics
: only load image libraries oncegraphics
: short-circuit out of bounds lookups in bilinear interpolatorgraphics
: some improvements to the sprite blittersgroups
: First pass at support for supplementary group listsgroups
: Initial support for gids.gsudo
: Icon for panel, fixup overflowing password boxgunzip
: Hidden option to print progress reports, for debugginghda
: stub modulehelp-browser
: should be an inline taghelp-browser
: viably display the AGPL text for the mupdf packagehexify
: bail if fopen failedi965
: add a leading comment blocki965
: Don't load if mode wasn't already seti965
: modeset a thinkpadi965
: register namesi965
: Send mode change signal?idt
: Track core interrupt registers because arch_fatal() usually happens with bad stack dataimgviewer
: include filename in window titleimgviewer
: small improvementsinsmod
: Support passing arguments to modulesioctl
: request should be 'unsigned long'ipv4
: Don't wait so long for initial arp responseipv4
: try to arp local stuff?irc
: switch to socketsirc
: This really needs to use rline, but at least don't mess up long input linesirq
: Mark isr_common as global so it shows up in symbol tableiso9660
: recover, fixup driveriso9660
: try to catch some potential mount errorsjulia
: change defaultsjulia
: completely retooled julia set explorerjulia
: fixupskbd
: Catch different scancode from PrtSc keykbd
: stop sending empty events to clientskernel
: Acquire a lock around waitpid condition changeskernel
: add 'assert()'kernel
: Add simple mutex with a wait queuekernel
: at least add full lead comments to everythingkernel
: bad ordering of list insert / wakeup caused crasheskernel
: begin work on re-adding module loadingkernel
: Better fault reportskernel
: change signatures for vfs interfaces to match realitykernel
: clean up kernel/arch/x86_64/{cmos,pit}.ckernel
: cleanup kernel/arch/x86_64/idt.ckernel
: cleanup kernel/arch/x86_64/smp.ckernel
: cleanup kernel/arch/x86_64/user.ckernel
: cleanup kernel/generic.ckernel
: cleanup things introduced in COWkernel
: close file descriptors >STDERR_FILENO on exec like toaru32 didkernel
: exclude serial ports from pts numbering; start numbering at 1kernel
: Export sys_ functions so they appear in symbol tablekernel
: Fix gdt install clobbering symbol table, or whatever else ends up after itkernel
: fix getpgid(pid != 0)kernel
: fix missing lock during wakeup from signal deliverykernel
: Fixup bad lock ordering in process_awaken_signalkernel
: fixup lock ordering around process_timeout_sleepkernel
: Higher resolution CpuPermillekernel
: Implement basic copy-on-write for fork()kernel
: Initial pass at new debug printf interfacekernel
: Initial try at actual user buffer validationkernel
: make an attempt to clean up processes in SMPkernel
: make_process_ready may be called with sleep_lock already acquired?kernel
: more sensible idle trackingkernel
: (needs review) let threads sleep on their own children?kernel
: oopskernel
: opportunistically map stack spacekernel
: Possibly fix sporadic lockup in compositor?kernel
: prevent modules from being loaded multiple timeskernel
: Print gs alongside other registers in panickernel
: Print tracebacks for more fatal errorskernel
: Put codename string in quotes for stylistic reasonskernel
: Release SHM while we're at it...kernel
: restore debug prints for a page fault in the kernel, since SMP failures are rare nowkernel
: restore fprintf() for printing to vfs nodes (character devices)kernel
: Should not need to use temporary buffer for fxsave/rstrkernel
: times() can take NULLkernel
: track idle task usagekernel
: Track relative CPU usage over one-second spanskernel
: Use local APIC timer for preemption on APs, not an IPIkernel
: Use 'Misaka' as the system named presented by the kernelkernel
: use that new sleep_on_unlocking in ringbufferskmalloc
: Use existing assertion infrastructureksym
: start organizing kernel symbols for linkingkuroko
: add managed modules to filesystemkuroko
: bind text library in _yutani modulekuroko
: Bump for sendto() supportkuroko
: more upstream updateskuroko
: pull in version number updatekuroko
: Support keyword arguments to lambdaskuroko
: sync to fix string comparison crashkuroko
: sync with upstreamkuroko
: sync with upstreamkuroko
: sync with upstreamkuroko
: sync with upstreamkuroko
: sync with upstreamkuroko
: Sync with upstreamkuroko
: update repokuroko
: Upstream updateskuroko
: yet more upstream updateskuroko: _yutani
: expose shm font supportld.so
: Expose some internal data for use by debuggerld.so
: Link for 4K pagesld.so
: Set values in dynamic symbol tables when linkingld.so
: Stop leaking low heap to init functionsld.so
: Use a much bigger hash size and cc1 loads a lot fasterlfbvideo
: Don't map EGA/VGA text mode range as WC as apparently things don't like thatlfbvideo
: Ensure we map enough space for large preset video modeslfbvideo
: Fallback to port-IO driver if MMIO isn't availablelfbvideo
: Keep resolution set by loader if none specified by argslfbvideo
: recalculate vmware memory size on display changelfbvideo
: set some more bits on bochslfbvideo
: Use MMIO interface to configure qemu/bochs; vbox is still port i/olibc
: __assert_func should exitlibc
: cleanup, some missing thingslibc
: Fix bad logic when looking for IP addresslibc
: fix fseek behavior with active read?libc
: Implement an actual quicksort for qsort...libc
: More bad (and a couple good) math functionslibc
: only elide fractional parts in g/G, not f/Flibc
: rand() should not return negative valueslibc
: support ip addresses in gethostbynamelibc
: that xor-swap is silly and probably also slowerlibc
: Update wcwidth with latest datalibm
: Add missing M_, INFINITY, NAN constantslibm
: Add two missing functionslibm
: Hyperolibc trig functionslibm
: must implement sqrt() or it can loop in gcclib
: update docslocaltime
: rudimentary, incorrect support for timezone offsetslogin-loop
: Linefeed before issue textlogin-loop
: Use a simple, 'modern' /etc/issuelogin
: Return 2 when 'disconnect' is provided as a usernamelogin
: Support /etc/issue through login-looplspci
: Add more device descriptions from my ThinkPadlspci
: add qemu's e1000e modelmake
: Add a test tool/scriptmake
: bail if make fails?make
: Clean more stuffmake
: Default SMP=4 for qemu targets because why notmake
: Default to 2 SMP cores so we're consistently testing with SMP enabledmake
: detect more base/ changesmake
: Ensure we're creating /usr/bin so we can put auto-dep.krk in itmake
: Give write access to docker container's bin dirmake
: Pass SMP options to 'make shell'make
: Replace update-extents.py with a Kuroko equivalentmake
: Strip final kernel imagemake
: 'test' target should use q35 systemmake
: /usr/lib/ libs (from gcc) should come from TOOLCHAINmake
: Why are we trying to echo PATH here?markup
: fix bad mallocmarkup
: Initial work on new marked up text rendering librarymenu
: Add fancy speech-bubble-style menus like Gnome hasmenu
: Better tail alignment for bubble windowsmenu
: Disallow dragging/resizing of menu windowsmenu
: flip after movingmenu
: implement menu_free_entrymenu
: Really, seriously don't show menus before moving themmenu
: Rudimentary checkbox menu entriesmenu
: space out menu bars nicermeta
: Add .mailmapmeta
: Add more screenshotsmeta
: A note on licensesmeta
: Cleanup Makefile, add some commentsmeta
: Cleanup, rewrite parts of the READMEmeta
: Describe filesystem structure in READMEmeta
: Fix typo in READMEmeta
: Fresh batch of screenshotsmeta
: I really should not have to keep doing this. Please stop stealing my free code.meta
: purge most instances of vim hintsmeta
: Some README updatesmeta
: Stop recommended recursive git checkout, since it pulls in gcc/binutilsmeta
: Update all of the heading comments in apps/meta
: Update leading comments in modules/meta
: Update README, new screenshotmeta
: Update release notes templatemeta
: We shouldn't need to link -lgcc in the kernelmisaka
: final merge prepmisaka
: initial mergemisc
: cleanupmmu
: Actually read multiboot mmap datammu
: be annoying about making sure we aren't leaking pages?mmu
: Be more clear about what's happening when we run out of RAMmmu
: Fixup mapping for physical memory address >4GiBmmu
: Reserve a few more initial PTs so we can support 64GiB of memorymmu
: Try to perform really bad TLB shootdowns?modules
: cleanup header commentsmodules
: list modules in /proc/modulesmodules
: Reimplement loadable kernel modulesmodules
: track loaded sizes so we can free modules latermore
: add simple pager utilitymore
: add space bindingmsk: accept https
: remotesmsk
: clean up after ourselvesmsk
: Fixup local manifest file resolutionmsk
: Fixup support for multiple remotes, add a few optionsmsk
: handle failures in 'fetch' when retrieving packagesmsk
: keep using an intermediary file for gunzip as it's still way faster than the pipemsk
: Switch back to using tar/gunzip with pipesmsk
: Switch package source to CDNmsk
: Use 192.168.11.* for local repo as it bails faster in vmwaremultiboot
: Correctly pass bits-per-pixel from framebuffer datanet
: actually try to figure out destination hardware addressesnet
: add arp?net
: add methods to configure addressesnet
: add missing declarationnet
: add netmask, examine more stuff from DHCPnet
: Add stats countersnet
: another batch of rewritesnet
: arp fixupsnet
: cleanupnet
: complete most of a TCP stream?net
: disable debug prints during TCP connectionnet
: don't duplicate struct layout in e1000 device objectnet
: don't dynamically allocate hashmaps and lists?net
: don't explode without a networknet
: e1000 receive fixes?net
: fix bad copy in ICMP ECHOnet
: fixups for dhclient, multiple nicsnet
: hacked up udp stuff, dns resolvernet
: hack up some fin packetsnet
: Handle signalsnet
: initialize e1000e better?net
: initialize that list earliernet
: initial loopback interface supportnet
: initial raw socket implementationnet
: Maybe allow udp binds?net
: more cleanupnet
: more interface propertiesnet
: more tcp; timeout nameserver lookupsnet
: net_udp_send() should return size of data sentnet
: ongoing network worknet
: Oops, we broke UDP sendsnet
: pack that?net
: respond to pings?net
: return eof when socket is closed and no data is availablenet
: select random sequence number to startnet
: silence more debug messagesnet
: silence the network stack unless MISAKA_DEBUG_NET is definednet: tcp
: basic syn/ack receipt?net
: try to actually track received packet sizes...net
: try to get the package manager workingnetty
: Fixup the reverse shell host for socket connectionsnetty
: quick hack to use threads so pasting doesn't deadlocknet
: variousnet
: various improvements to still terrible network stacknet
: we really need some proper blocking queue primitivesnet
: wip stuff for socketsnproc
: Expose processor count and use it to pick between yielding and non-yielding spin lockspackage-manager
: apply same optimization as file-browserpackage-manager
: Spin up a thread to run 'msk'package-manager
: update 'about' textpanel
: Add icon, update less oftenpanel
: Add notifications when a network connects/disconnectspanel
: adjust size of 'Applications', clockpanel
: always prefer center alignment for popupspanel
: And improve the popup while we're at itpanel
: And make more room for long month namespanel
: Apply smarter alignment to popup menuspanel
: cleanup and fix display of window itemspanel
: cleanup widgets, part 1panel
: Don't crash when alt-tab window is open and the last tabable window closespanel
: Don't display loopback in network status widgetpanel
: Dynamically size the date widgetpanel
: experiments with a new designpanel
: First pass at modularizationpanel
: fixup window title display in alt-tab switcherpanel
: improve design of calendar popuppanel
: Improvements to the window switcherpanel
: Keep ticking the clock when receiving other eventspanel
: Little improvements to weather widgetpanel
: New volume slider menu widgetpanel
: redo layout when panel resizespanel
: re-enable weather widgetpanel
: Restore Alt-F1 and Alt-F3 key bindspanel
: Show icon of current window at full opacitypanel
: show logout dialog in a thread (temporary)panel
: slide the panel up faster on ctrl-f11panel
: try some smarter popup placementpanel
: Use full month name in date widgetpanel
: Visual adjustments to sliderpci
: handle setups without a host bridge?pci
: Implement PIIX4 PIRQ remappingpcspkr
: recover modulepex
: Actually try to close server endpointspex
: 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 atomicallypex
: maybe finally fix thispiix4
: move to module, only load in virtualboxping
: fancier sub-ms printing (I think %Ng is supposed to do this, but mine might be broken?)ping
: Keep pinging, show summary on ^Cping
: shoddy implementationpipe
: Embiggen pipe bufferspipe
: Make pipes more direct with ring buffer usageplasma
: fix what I think is actually a math bug in plasmapolygons
: cleanuppolygons
: rasterizer demoprocess
: okay don't mark stack protectors nx...process
: Set up stack protectors for kernel stacksprocess
: (temp) avoid freeing processes that are still someone's lastprocess
: try to fix up some locks, againprocfs
: cleanup /proc/idle formatprocfs
: quick-and-dirty /proc/kallsyms, missing modulesps2hid
: Fixup initialization sequence; unbreaks scrollwheel in vboxps2hid
: give up on PS/2 if trying to empty input buffer doesn't work after 1024 triesps
: Include thread CPU usage in parent when not queried with -Tptrace
: Allow separate tracing of signals and syscallsptrace
: avoid suggesting process terminated when continuing from ptrace_signalptrace
: Catch signals, start work on debuggerptrace
: Inform non-parent tracer when tracee exitsptrace
: POKEDATA, permission fixes for PEEKDATAptrace
: PTRACE_SINGLESTEPptrace
: support tracing from non-parent processptrace
: Update status before setting suspended flagreadelf
: Fix missing -d optionreadelf
: fix typo in usagereadelf
: GNU-style optionsreadelf
: Show dynamic symbol tablesreadelf
: typoreadme
: Fix docker commandreadme
: More updates.readme
: updatereadme
: Update readmereadme
: Update READMEreadme
: Update references to EFI loaderreadme
: updatesreadme
: updatesreadme
: update screenshotringbuffer
: don't use heap allocator if buffer size is one pagerline
: Add a new r-searchrline
: highlight 'abs' as a builtin in kuroko replrline
: stop highlighting numbers in the middle of wordsserial
: should be owned by 'dialout' groupsh
: Recommend 'ifconfig' in place of 'ip'/'ipconfig'sh
: semaphore pipe write helps with a weird race conditionsh
: use return code from last process in pipeline, and wait for everyone properlysmp
: ACPI checksups are more of a suggestionsmp
: add a procfs entry to see what other cores are up tosmp
: allow command line override for where to scan for RSDPsmp
: Co-opt Multiboot's config_table member to sneak ACPI tables to kernelsmp
: do not try to send IPIs when we have one core and no lapicsmp
: Don't just fatal() if there's too many cores; initialize up to 32smp
: fix wakeups doing bad EOI writesmp
: Force userspace preemption on other cores.smp
: Memory invalidation fixessocket
: Purge rx queue when socket closes?splash-log
: Cleanup, disable log if 'debug' is not specified, unless we take too longsplash-log
: handle display mode changesplash-log
: Keep primary messages on screensplash-log, migrate
: Cleanupsplash-log
: reset display on resolution changesplash-log
: restore vga text outputsplash-log
: Retain last message to print it if we switch out of quiet modestartup
: try to dhcp on bootstat
: fix size definitionsstat
: Print a more coreutils-y outputstrace
: fix-up bad signal name tablestrace
: initial -e trace=... supportstrace
: Initial support for a ptrace() mechanism, strace toolstrace
: more syscall groupings from the real stracestrace
: support more syscalls, output values, errnostrace
: support -o optionsync
: Support argumentsync
: temporary thing for testing; not a proper syncsyscall
: PTR_VALIDATE explicitly does not check null...sysfunc
: actually bother validating some valuessysinfo
: OS name from /etc/os-release $PRETTY_NAMEsysinfo
: Try to be slightly smarter about printing logosysinfo
: Update, add CPU, re-add Fonttarfs
: throw EROFS on createtcp
: fixup connect retrytcp
: Fixup socket receive bufferstcp
: handle connection refusedtcp
: Time out connection after 3 attempts, reduce time between resendsterminal
: Add some functionality to the -g flagterminal
: bind Ctrl Shift +, Ctrl -, Ctrl 0 to modify scalingterminal
: defer updates; not fully asynchronousterminal
: fix bad bounds in mouse position checkterminal
: fix text width for DejaVu Sans Monoterminal
: fixup scroll damage rectsterminal
: Implement some quick and dirty font fallback supportterminal
: Launch without animation when running fullscreenterminal
: make scrollback more efficient?terminal
: Minor improvements to text selectionterminal
: rewrite redraw logic to be more bufferedterminal
: source repo for bitmap font moved, update commentterminal
: support ^[[3J to clear scrollbackterminal
: various cleanupsterminal-vga
: Backport selection improvements from graphical terminalterminal-vga
: Fixup upper left cell appearing selectedterminal-vga
: recover vga text mode operationterminal-vga
: Rewrite display caching so it's actually fast, and bufferedtest
: install xhci moduletest
: more detailed logging for USB so we can test xhcitest-sigsegv
: Add a deeper segfault to test debugging libstext
: Add some macros so we can more easily swap out the bitmap fonttext
: allocate subsamples based on glyph boundstext
: bring back shm-stored fonts provided by compositortext
: Expose method for brute-force path stroketext
: fix clipped right-hand-side of some glyphstext
: fix overly trusting bounds calculationtext
: handle off-curve start pointtext
: Introduce new TrueType implementationtext
: offset horizontal scanlines slightly to not bleed bottoms of glyphs into next pixeltext
: on second thought, cache the data not the font object, so each tt_font_from_shm is a unique reftext
: purge the SDF renderer, RIPtext
: read fonts with short glyf table offsetstext
: read unitsPerEm from font, use for tt_set_sizetext
: remove sdf kerning configtext
: Replace bitmap font with a baked version of Deja Vu Sans Mono, mostly for metrics reasonstext
: shadowed text, port file-browsertext
: Should have been doing two box blurs this whole timetext
: spot fix for clipped text shadowstext
: support more flexible sizing in pt, pxtext
: support type 4 cmaps, old Microsoft fontstext
: Switch several apps/libs to new text librarytext
: various rewritestimes
: rudimentary support for process timestime
: Try to figure out some sensible timezone names from the TZ offset, and collect that from ip-apitmpfs
: finer-grained locks, use global mmu mappingtmpfs
: Make total block allocations available through a procfs entrytoastd
: Adjust spacing, try to vertically center texttoastd
: Finish things up, I guess.toastd
: initial prototypetoast
: Quick Kuroko toast clienttop
: Allow sorting by command linetop
: cap CPU%/CPUA at 100top
: code cleanuptop
: Differentiate general memory from memory used for tmpfstop
: Don't cap at 100, but do format >=100 differentlytop
: fixup memory leakstop
: process monitortop
: Track multiple slices of usage, show averagestouch
: don't segfault when unable to touchtouch
: don't segfault when unable to touchtutorial
: Add a page about the live CDtutorial
: Adjust spacings, fix centeringtutorial
: remove reference to old irc networktutorial
: width/height should be minus decorationsudp
: add bind() and recv() test toolutil
: Add working bochsrcutil
: Move ISO, FAT stuff to a libraryutil
: Resolve bootstrapping issue through bruteforcevbox
: Minor cleanup, don't process events we didn't get an IRQ forvfs
: Allow 'filesystems' that are partition mappers to not return a nodevfs
: copied nodes should get their own refcountsvfs
: ramdisk length needs to be updated on the original nodevmware
: detect vmware by its PCI Express chipsetvmware
: enable resize supportweather-tool
: Handle bad location-data by trying to get it againweather-tool
: remove unused legacy conf fileweather-tool
: Use a geoip service to get locationweather-tool
: Use lat/lon when querying by guessed locationx86_64
: Cleanup boot messages to fit in vga text mode betterx86_64
: Don't wrap version codename in quotes as we're doing that directly nowx86_64
: fixup bad memory walk when doing backtracesx86_64
: Mark kernel with AOUT_KLUDGE address parameters so the 64-bit ELF can be booted directlyx86_64
: Support multiboot2 loadersxhci
: cleanupxhci
: convert to modulexhci
: start on controller driverxhci
: userspace-queryable debug interfaceyutani
: new grabby hand cursoryutani
: pointing hand cursoryutani-test
: must flip once to reveal window