ToaruOS v2.2.0
What's New in v2.2.0?
UI
- Window decoration buttons have been improved with larger hit targets and visible hover states
- Yutani now supports window minimization
- The panel has been redesigned and returns to a docked layout
- The menu library has seen various bugfixes
- The TrueType rasterizer has been improved and its path rendering functionality is now available to other applications
- Screenshots are now stored with timestamps, and a toast notification is displayed to confirm their creation
Kuroko
- Kuroko has been updated to 1.4
- Yutani bindings have been rewritten
mines.py
from ToaruOS 1.2 has been ported to Kuroko asmines.krk
Other
- The Julia fractal viewer has new functionality, including a Mandelbrot set explorer
/bin/sh
is now a symlink to/bin/esh
and can be changed to point to a proper POSIX shell such as Dash- Various bootloader improvements
- Various libc improvements
- Various bug fixes related to the operation of TTYs
- Old wallpapers have been removed from the default installation and may be found in the package repository.
What is ToaruOS?
ToaruOS is a hobbyist, educational operating system for x86-64 PCs, focused primarily on use in virtual machines. It provides a Unix-like environment, complete with a graphical desktop interface, shared libraries, feature-rich terminal emulator, and support for running, GCC, Quake, and several other ports. The core of ToaruOS, provided by the CD images in this release, is built completely from scratch. The bootloader, kernel, drivers, C standard library, and userspace applications are all original software created by the authors, as are the graphical assets.
Who wrote ToaruOS?
ToaruOS is primarily written by a single maintainer, with several contributions from others. A complete list of contributors is available from AUTHORS.
Running ToaruOS
It is recommended that you run ToaruOS in a virtual machine / emulator, for maximum compatibility. ToaruOS's driver support is limited, and running on real "bare metal", while possible, does not provide the most complete experience of the OS's capabilities except on very particular hardware. ToaruOS is regularly tested in VirtualBox, QEMU, and VMWare Player, and can be successfully booted (with poor performance) in Bochs. ToaruOS is intended to run from a live CD, though it is possible to install to a hard disk. Additional details on running ToaruOS in different virtual machines is available from the README.
Release Files
image.iso
is the standard build of ToaruOS, built by the Github Actions CI workflow. It uses ToaruOS's native bootloaders and should work in most virtual machines using BIOS.
Changelog
aarch64
: don't print every time we do a dtb lookupaarch64
: don't set debug output as primary so we can print early log to framebufferaarch64
: ensure module base address starts alignedabout
: 2023base
: new wallpaperbase
: Remove 'local' msk remote from default orderbase
: Remove old wallpapers (they're in the package repo now)base
: testingbase
: update /etc/issuebase
: update text_layout.krkbim
: sync with upstreamboot
: add option for 'lfbwc', and enable it by defaultboot
: CONSOLE_FLAGS mb2 tag is optionalboot
: Don't jump back to protected mode in EFI loaderboot
: draw something when loading ramdisk in vga text modeboot
: fix stray bits in scancodes in bochsboot
: move declarationboot
: prefer 1920x1080 mode in BIOS loaderboot
: Query shift state as bios doesn't give it to us?boot
: Set VGA text mode font to Deja Vucompositor
: Fix incorrect stride on blur texture in VMwarecompositor
: fix null pointer when clicking desktop sometimescompositor
: Improve screenshot saving with notificationscpuwidget
: add menu bardbg
: fix implicit cast warningdecor
: Add menu option for minimizedecor
: consider minimize button when collapsing titlesdecor
: Improve buttons with hover states using focus hackdecor
: Use a different button icon for unmaximizeefi
: Accept ACPI 2 table pointer as config tableesh
: Migrate shell to /bin/eshgensym
: avoid link step when generating symbol tablegraphics
: be more efficient at tracking mapped texture coordinatesgraphics
: expose matrix inversion in headersgraphics
: fix clipping from bad rounding when drawing with transformationsgraphics
: support shear operation on transformation matricesjulia
: Add mandlebrot mode, explore modejulia
: display zoom as multiplierjulia
: render at least once so we don't flash black when panningjulia
: usability improvements; progressive renderingkernel
: be more prudent with signal number bounds checkingkernel
: brute-force locking around unmap syscall, should make thread stuff more stable?kernel
: clean up module loaderkernel
: copy signal dispositions on fork; clear them on execkernel
: fix swapped LCUC conversion in ttykernel
: fixup issues with timeouts in fswait3kernel
: Interrupting fswait should return -EINTRkernel
: mark sockets in stat; reject them in seekkernel
: More instances of unintended signed values causing problemskernel
: proc->group may have exitedkernel
: Reject negative signum in signal, sigactionkernel
: writes to /dev/null should return number of bytes writtenkuroko
: bind class for transformation matriceskuroko
: bindings for Subregionskuroko
: bind props for TransformMatrixkuroko
: bumpkuroko
: bump for 'zip' *-expansion fixkuroko
: expose path rasterizing functions directlykuroko
: fixup menu bindings?kuroko
: Pull in latest 1.4.0a1kuroko
: sync for 1.4.0b2kuroko
: sync for different fixkuroko
: sync to fix issues with va_ars on aarch64kuroko
: sync upstreamkuroko
: sync upstreamkuroko
: sync with upstreamkuroko
: sync with upstreamkuroko
: sync with upstream for v1.4.0 releasekuroko
: sync with upstream (parseArgs updates)kuroko
: upstream fixeslbic
: aarch64 longjmp should pass second argument as return valuelfbvideo
: disable write-combining by default; add 'lfbwc' option to enable itlfbvideo
: make that just a flag optionlibc
: aarch64 setjmp, untestedlibc
: add asprintf, fix vasprintf return valuelibc
: Additional defines to help curl buildlibc
: Add some missing bit-twiddly libm functionslibc
: define F_DUPFD so srclib stuff buildslibc
: define FILENAME_MAX like other platformslibc
: Fix float formatters showing '0.10', etc.libc
: fix incorrect cast of field width to charlibc
: fix wrong argument order to bsearch comparatorlibc
: host entry list should be null-terminatedlibc
: only print debug info in poll with __libc_debuglibc
: poll: handle POLLOUT betterlibc
: remove bad conflicting bad ceil for x86-64libc
: update wcwidthmarkup
: Fix leaks in container types in markup parsermenu
: fix incorrect clearing of menu child in has_eventual_childmenu
: fix silly old bug with submenu highlightingmenu
: fixup overflowing rendering of menubarsmenu
: skip separators with keyboard navigationmeta
: fixup nm step still referencing misaka-kernel.64meta
: highmem=off is not needed for virt-2.12 targetmeta
: let gensym.krk do the sorting + dedupemeta
: set -name in qemumeta
: Start calling this 2.2, new codename is 'Eternal Reality' (Railgun S OP2)meta
: update link to esh source in READMEmeta
: Use -device AC97 instead of -soundhw option; no more pcspkrmines
: Port mines.py from toaru 1.2.xnet
: Handle signals, disconnects while waiting to recv in tcpnet
: Support getsockname, getpeername for tcpnet
: Support ioctl FIONBIO to set non-blockingpanel
: Adjust clockface, add counterweight to second handpanel
: Allow widgets to request faster update rate for animationspanel
: don't focus windows when closing them from the context menupanel
: fix signature mismatch on widget_update_volumepanel
: inform compositor of window tray locationspanel
: knock off more of the gnome-shell panel designpanel
: re-dock the panelpanel
: Replace clock widget with recreation of classic themepanel
: Use move_relative when creating widget menu windowspath_demo
: add more optionspath_demo
: Kuroko demo of path rendering libping
: use gettimeofday instead of relying on clock ticksprocfs
: fix format of /proc/versionprocfs
: Update comment describing how this worksrm
: accept and ignore -frm
: print error messagesshow-toasts
: Fix outdated parsing of MemTotalstrace
: support more stuffterminal
: also fix left arrowterminal
: Bitmap font can use uint8_tterminal
: cleanup some glyphs in the bitmap fallback fontterminal
: configurable scrollback; increase default to 10000terminal
: fix arrow tails in bitmap fontterminal
: xterm compatibility with cursor hang, \v \ftext
: adhere to context clipping when painting pathstext
: apply affine transformation matrices to Contourstext
: Cleanup downstream libs, expose new methods in Kurokotext
: Contour edges don't have directions, let's make them differenttext
: expose method to extend existing path with new texttext
: expose new path painting in Kuroko bindingstext
: expose stroke-to-contour steptext
: Expose vector engine, methods for drawing text to pathstext_layout
: Asynchronous renderingtext
: New path stroking algorithmtext
: Obtain ascender + descender sizestext
: Path painting with textures from spritestext
: Unify 'ellipsify' implementation in text librarytmpfs
: size of symlink is length of target stringtoastd
: Scale down large 'icons' in toasts instead of not showing themtty
: respect OPOST being unsettty
: support IUCLC since we support OLCUCtutorial
: Disable min/max buttons in decorationsutil
: fixgen_wcwidth
for modern kurokovirtio
: handle queue overflowvirtio
: name worker threads with square bracketsyutani
: allow mainloop to be set up early so tasks can be scheduledyutani
: Allow panel to inform compositor iconified window position/sizeyutani
: animate minimized windows to panel locationyutani
: animate upward?yutani
: Apply rotation correctly in minimize animationyutani
: bind more functionsyutani
: Don't raise new exception when fswait is interruptedyutani
: Don't use__new__
to build wrapper types, it's a pain to subclass withyutani
: exit mainloop on session-endyutani
: fix incorrect allocation of menu bar objectsyutani
: fixup some behaviours for minimized windowsyutani
: Font.width is a methodyutani
: Initial rewritten yutani module for kurokoyutani
: normalize rotation anglesyutani
: replace old _yutani moduleyutani
: restore window bound debugging functionalityyutani
: Rotate minimized window back while animatingyutani
: Support custom menu entries widgetsyutani
: Try resending resize offer if app doesn't respondyutani
: use:
inparseArgs
for__init__
methods in krk bindingsyutani
: window minimization, first pass
Known Issues
- Several utilities, libc functions, and hardware drivers are missing functionality.
- There are many known security issues with ToaruOS. You should not use ToaruOS in a production environment - it is a hobby project, not a production operating system. If you find security issues in ToaruOS and would like to responsibly report them, please file a regular issue report here on GitHub.