Skip to content

Releases: klange/toaruos

ToaruOS v2.3.0

27 Apr 20:59

Choose a tag to compare

ToaruOS 2.3

headline

This Release's Wallpaper

Two years ago, I moved from Tokyo to the mountains of western Chichibu. As with all wallpapers in ToaruOS for the last several years, this release's wallpaper is my own photo, taken out my window. It depicts a warbling white-eye.

This Release's Codename

ToaruOS release codenames come from the soundtrack to its namesake franchise. This release series is titled "Grow Slowly", after the first ending credits theme to A Certain Scientific Railgun S, performed by Yuka Iguchi.

What's new in ToaruOS 2.3?

Terminal Tabs

terminal-tabs

The terminal emulator now supports multiple tabs. Create tabs with Ctrl-Shift-T; swap with Alt-1 through Alt-9.

Manual Viewer

man-viewer

A full man stack has been added, combining a roff formatter and a more complete more, plus a bunch of manual pages.

Kernel Improvements

Tons of a new system calls like pread/pwrite, sigsuspend, sigqueue, fcntl; support for FD_CLOEXEC and FD_CLOFORK; TTY line control and hangups; and more.

And more!

  • The latest Bim and Kuroko versions.
  • Tons of new utilities and new options in existing utilities.

Changelog

Kernel

  • On x86-64, rudimentary support for kernel load address randomization has been added in supported boot environments.
  • On x86-64, the syscall ABI has been updated to use syscall/sysret.
  • On aarch64, support for current QEMU virt machines has been implemented.
  • On x86-64, the lapic timer is now the primary preemption source on the boot processor. The PIT is only used as a calibration source.
  • The TTY layer now supports line control management, SIGTTOU/SIGTTIN, controlling sessions, VMIN, flushing on attribute changes, and sends SIGHUP to all session members when the master end closes.
  • pread(), pwrite(), lchown(), getrusage() system calls have been added, with corresponding libc bindings.
  • ptrace() now supports updating system call numbers, allowing debuggers and other tools to manipulate tracees.
  • times() now correctly reports user time separately from system time.
  • Various interfaces such as stat and readdir have been widened to 64 bits (with legacy ABI support for existing packages).
  • The kernel command line parser has been rewritten to support quoted values.
  • The network stack now supports multiple simultaneous ICMP sockets.
  • sigsuspend() is implemented properly as a system call.
  • Various missing permission checks have been added, thanks to issue reports from contributors.
  • A real rename interface has been added to the VFS, with support in tmpfs.
  • The access() system call now correctly reports whether the real user/group of a process has requested access permissions. An eaccess() system call was also added, alongside a libc binding, to support checking permissions for the effective user/group, which some GNU utilities like to have available.
  • The reboot() system call now accepts a parameter. This parameter is currently unused, but may specify more detailed restart behavior in the future. A reboot() libc binding has also been added.
  • The ABI for the sleep() system call has been adjusted to report remaining time correctly.
  • /dev/random (and /dev/urandom, which remains an alias) is now seeded by the system time on startup. Additionally, an issue discovered by a contributor in which /dev/random did not return byte values of 255 has been resolved. The collection of random data has also been adjusted to use all of the bytes available from rand().
  • The DSP audio interface now ensures that buffers are flushed when a client exits. This reduces the occurance of clicks and pops from clients that send data to the DSP and immediately exit.
  • The mixer interface now reports sensible error codes.
  • The getcwd() system call ABI has been adjusted to return error codes or bytes written (including a trailing NUL), rather than conforming to its userspace specification.
  • Several system call ABIs have been adjusted to require buffer lengths instead of operating on strings of unknown lengths.
  • The buffer size for pipes has been increased to 65536 bytes. This can be configured at boot with the pipesize= option.
  • The kernel now terminates threads when a thread group leader exits.
  • The VGA text mode device interface has been redesigned to allow for emulation of VGA text mode on a framebuffer.
  • O_CLOEXEC and O_CLOFORK have been implemented (previously, the kernel would always keep file descriptors 0, 1, and 2, and always close other file descriptors on exec).
  • pipe2 and dup3 system calls have been added.

libc

  • The DNS parser in gethostbyname() has been improved.
  • Bounds checks have been added to strftime.
  • Added getdelim, and getline, and many utilities have been adjusted to use them.
  • Added scandir, telldir, rewinddir, and seekdir.
  • Added ftruncate, fchmod, and fchown.
  • Added popen, pclose.
  • Previously stubbed functions rename, truncate, fcntl, and getppid now have real implementations.
  • ferror now indicates error states (mostly).
  • abort now behaves as specified, making it more useful in dbg; assert() now calls abort(), as well.
  • New POSIX functions sig2str and str2sig have been added (now used in kill, killall, strace, and dbg).
  • usleep() now handles error conditions from its underlying sleep() system call correctly.
  • The asprintf family correctly returns the number of bytes written (excluding the trailing NUL). Previously, it would erroneously return 0.
  • The execvp family no longer attempts to run preflight checks when searching $PATH; it instead attempts to perform the underlying system call on each potential candidate; if no candidate succeeded and EACCES was seen while attempting a candidate, that error will persist.
  • perror now correctly skips an argument which is NULL or an empty string.
  • getcwd has been adjusted to comply with GNU extensions.
  • %o has been added to the printf family.
  • Some issues in realpath() related to a current directory or target path of "/" have been resolved.
  • getopt no longer outright rejects any option characters as invalid - any single-byte value is allowed.
  • getopt_long now supports unanmbiguous prefix matches and detects unexpected arguments to no_argument long options.
  • getopt and getopt_long permutate their arguments, unless the first character in optstring is +, such that all non-option arguments are eventually after all option arguments, following the GNU convention.

Terminal

  • terminal and terminal-vga now supports multiple tabs.
    • Create new tabs with Ctrl-Shift-T, or through the context or File menu.
    • Switch tabs with Alt-1 through Alt-9.
    • Close tabs by terminating their sessions (or using the "Close tab" context menu entry in Terminal).
    • Tabs have independent font configuration (scaling, bitmap, bold emulation); each new tab will inherit the configuration of the tab that was active when it was opened.
    • The first tab starts with the command specified in the arguments to terminal; subsequent tabs start with the user's shell.
      • Currently, new tabs start in the same working directory as terminal; support may be added in the future to start new tabs in the same working directory as the tab that was open when they were created.
      • With the -l (--login) option, all new tabs run login-loop.
  • ESC c is now supported for a full reset, and reset emits it.
  • CSI 2 J now correctly saves lines up to the cursor position to scrollback and does not move the cursor.
  • The TTY layer has support for ECHOCTL.
  • Controlling sessions are now set by the terminal.
  • An issue has been resolved wherein keyboard events were sent to the terminal window when it was not focused.
  • The terminal now extends the background colors of cells on the bottom and right edges to fill the remainder of the screen.
  • When using the bitmap font, the terminal can emulate bold text by double-striking glyphs. This feature is optional and can be enabled from the "View" menu. While this can lead to a lack of glyph separation in some characters, the effect remains highly readable and can aid in tools like man that use bold text to differentiate certain content.
    Screenshot from 2026-04-27 08-21-40
  • The terminal no longer sends fatal signals to its children on exit, as the kernel TTY layer handles this task now.
  • Behavior in alternate screen mode has been changed as follows:
    • Scrollback is not affected or accessible.
    • When ^[[1007h is enabled, the mouse wheel sends arrow up and arrow down key sequences without the need to enable mouse reporting.
  • When text selection starts by double-clicking a word, the whole word is maintained as part of the selection.
  • A new "Terminal" menu has been added.
Read more

ToaruOS v2.2.0

28 Aug 01:10

Choose a tag to compare

ToaruOS v2.2.0

toaru_screen_2023-08-28_10_06_59

What's New in v2.2.0?

UI

  • Window decoration buttons have been improved with larger hit targets and visible hover states
    Screenshot from 2023-06-12 12-12-23
  • 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
    Screenshot from 2023-06-12 12-17-14

Kuroko

  • Kuroko has been updated to 1.4
  • Yutani bindings have been rewritten
  • mines.py from ToaruOS 1.2 has been ported to Kuroko as mines.krk
    toaru_screen_2023-06-12_12_16_17

Other

  • The Julia fractal viewer has new functionality, including a Mandelbrot set explorer
    toaru_screen_2023-06-12_12_18_40
  • /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 lookup
  • aarch64: don't set debug output as primary so we can print early log to framebuffer
  • aarch64: ensure module base address starts aligned
  • about: 2023
  • base: new wallpaper
  • base: Remove 'local' msk remote from default order
  • base: Remove old wallpapers (they're in the package repo now)
  • base: testing
  • base: update /etc/issue
  • base: update text_layout.krk
  • bim: sync with upstream
  • boot: add option for 'lfbwc', and enable it by default
  • boot: CONSOLE_FLAGS mb2 tag is optional
  • boot: Don't jump back to protected mode in EFI loader
  • boot: draw something when loading ramdisk in vga text mode
  • boot: fix stray bits in scancodes in bochs
  • boot: move declaration
  • boot: prefer 1920x1080 mode in BIOS loader
  • boot: Query shift state as bios doesn't give it to us?
  • boot: Set VGA text mode font to Deja Vu
  • compositor: Fix incorrect stride on blur texture in VMware
  • compositor: fix null pointer when clicking desktop sometimes
  • compositor: Improve screenshot saving with notifications
  • cpuwidget: add menu bar
  • dbg: fix implicit cast warning
  • decor: Add menu option for minimize
  • decor: consider minimize button when collapsing titles
  • decor: Improve buttons with hover states using focus hack
  • decor: Use a different button icon for unmaximize
  • efi: Accept ACPI 2 table pointer as config table
  • esh: Migrate shell to /bin/esh
  • gensym: avoid link step when generating symbol table
  • graphics: be more efficient at tracking mapped texture coordinates
  • graphics: expose matrix inversion in headers
  • graphics: fix clipping from bad rounding when drawing with transformations
  • graphics: support shear operation on transformation matrices
  • julia: Add mandlebrot mode, explore mode
  • julia: display zoom as multiplier
  • julia: render at least once so we don't flash black when panning
  • julia: usability improvements; progressive rendering
  • kernel: be more prudent with signal number bounds checking
  • kernel: brute-force locking around unmap syscall, should make thread stuff more stable?
  • kernel: clean up module loader
  • kernel: copy signal dispositions on fork; clear them on exec
  • kernel: fix swapped LCUC conversion in tty
  • kernel: fixup issues with timeouts in fswait3
  • kernel: Interrupting fswait should return -EINTR
  • kernel: mark sockets in stat; reject them in seek
  • kernel: More instances of unintended signed values causing problems
  • kernel: proc->group may have exited
  • kernel: Reject negative signum in signal, sigaction
  • kernel: writes to /dev/null should return number of bytes written
  • kuroko: bind class for transformation matrices
  • kuroko: bindings for Subregions
  • kuroko: bind props for TransformMatrix
  • kuroko: bump
  • kuroko: bump for 'zip' *-expansion fix
  • kuroko: expose path rasterizing functions directly
  • kuroko: fixup menu bindings?
  • kuroko: Pull in latest 1.4.0a1
  • kuroko: sync for 1.4.0b2
  • kuroko: sync for different fix
  • kuroko: sync to fix issues with va_ars on aarch64
  • kuroko: sync upstream
  • kuroko: sync upstream
  • kuroko: sync with upstream
  • kuroko: sync with upstream
  • kuroko: sync with upstream for v1.4.0 release
  • kuroko: sync with upstream (parseArgs updates)
  • kuroko: upstream fixes
  • lbic: aarch64 longjmp should pass second argument as return value
  • lfbvideo: disable write-combining by default; add 'lfbwc' option to enable it
  • lfbvideo: make that just a flag option
  • libc: aarch64 setjmp, untested
  • libc: add asprintf, fix vasprintf return value
  • libc: Additional defines to help curl build
  • libc: Add some missing bit-twiddly libm functions
  • libc: define F_DUPFD so srclib stuff builds
  • libc: define FILENAME_MAX like other platforms
  • libc: Fix float formatters showing '0.10', etc.
  • libc: fix incorrect cast of field width to char
  • libc: fix wrong argument order to bsearch comparator
  • libc: host entry list should be null-terminated
  • libc: only print debug info in poll with __libc_debug
  • libc: poll: handle POLLOUT better
  • libc: remove bad conflicting bad ceil for x86-64
  • libc: update wcwidth
  • markup: Fix leaks in container types in markup parser
  • menu: fix incorrect clearing of menu child in has_eventual_child
  • menu: fix silly old bug with submenu highlighting
  • menu: fixup overflowing rendering of menubars
  • menu: skip separators with keyboard navigation
  • meta: fixup nm step still referencing misaka-kernel.64
  • meta: highmem=off is not needed for virt-2.12 target
  • meta: let gensym.krk do the sorting + dedupe
  • meta: set -name in qemu
  • meta: Start calling this 2.2, new codename is 'Eternal Reality' (Railgun S OP2)
  • meta: update link to esh source in README
  • meta: Use -device AC97 instead of -soundhw option; no more pcspkr
  • mines: Port mines.py from toaru 1.2.x
  • net: Handle signals, disconnects while waiting to recv in tcp
  • net: Support getsockname, getpeername for tcp
  • net: Support ioctl FIONBIO to set non-blocking
  • panel: Adjust clockface, add counterweight to second hand
  • panel: Allow widgets to request faster update rate for animations
  • panel: don't focus windows when closing them from the context menu
  • panel: fix signature mismatch on widget_update_volume
  • panel: inform compositor of window tray locations
  • panel: knock off more of the gnome-shell panel design
  • panel: re-dock the panel
  • panel: Replace clock widget with recreation of classic theme
  • panel: Use move_relative when creating widget menu windows
  • path_demo: add more options
  • path_demo: Kuroko demo of path rendering lib
  • ping: use gettimeofday instead of relying on clock ticks
  • procfs: fix format of /proc/version
  • procfs: Update comment describing how this works
  • rm: accept and ignore -f
  • rm: print error messages
  • show-toasts: Fix outdated parsing of MemTotal
  • strace: support more stuff
  • terminal: also fix left arrow
  • terminal: Bitmap font can use uint8_t
  • terminal: cleanup some glyphs in the bitmap fallback font
  • terminal: configurable scrollback; increase default to 10000
  • terminal: fix arrow tails in bitmap font
  • terminal: xterm compatibility with cursor hang, \v \f
  • text: adhere t...
Read more

ToaruOS v2.1.0

27 Oct 00:31

Choose a tag to compare

Screenshot from 2022-10-27 09-26-27

What's New in v2.1.0

  • Initial architecture support for AArch64 (ARMv8) has been added:
    • Initial platform target support for the virt-2.12 machine target in qemu-system-aarch64 has been added.
    • Experimental support for Raspberry Pi 400 has been added.
      • Hardware driver support for this platform is limited and will be expanded in ToaruOS 2.2.
  • Several bugs have been fixed:
    • An issue in which the e1000 network device driver mapped pages as user-accessible has been resolved.
    • An issue in which segmentation faults were not properly delivered to processes on x86-64 has been resolved.
    • An issue in which animating windows were incorrectly rendered in the compositor has been resolved.
    • An issue in which exiting processes could be scheduled and delay cleanup has been resolved.
    • An issue in which mktime calculated incorrect dates has been resolved.
    • A number of issues related to incorrect or insufficient lock ordering around IPC primitives have been resolved.
    • An issue in which the PC serial console can cause unexpected lockups has been resolved.
    • Various issues with invalid/corrupt ELF files have been resolved in readelf.
    • An issue in which attempting to delete directories from a tmpfs would cause a kernel panic has been resolved.
    • An issue in which traced processes could exec SUID binaries as been resolved.
  • The implementation of signals has been largely replaced:
    • Signal delivery no longer induces a nested kernel execution context.
    • Signal handling occurs only during transitions to userspace.
    • Userspace signal context is now stored on the userspace stack.
    • Basic signals are now blocked on execution of their handlers.
    • Several issues related to nested signal handling have been resolved.
    • System call interfaces can now support automatic restart when interrupted by a signal.
    • Signal delivery in the debugger / ptrace interface has been improved.
    • sigaction, sigprocmask, sigwait, sigsuspend have been implemented.
    • waitpid will no longer return immediately when a candidate process is suspended and did not change state.
    • Adjustments have been made to the text printed when a signal key sequence is sent to a TTY.
  • Userspace memory management has been improved:
    • An experimental munmap system call has been added.
    • The libc malloc/free can now release memory from large allocations.
    • The fixed addresses of shared memory mappings have been relocated.
  • Some functionality of the compositor has been improved:
    • Resize events are now sent during mouse-initiated window resize.
    • When the cursor is over a rotated window, it will be rotated to match the orientation of the window during software rendering. (Hardware cursors, where supported, are not rotated.)
    • Blur effects are now available.
    • Window advertisement events are now sent when a window is resized.
  • Terminal rendering has been improved.
    • Deferred rendering has been implemented and improved.
    • A glyph cache for TrueType text provides greatly improved rendering speed.
    • Specialized rendering of some box drawing characters has been implemented, improving the appearance of lines and shaded blocks.
  • The dynamic linker has been improved:
    • Symbol resolution in some corner cases that were previously mishandled has been fixed.
    • TLS (thread-local storage) data has been relocated relative to the thread pointer.
    • Some dynamic TLS relocations are now supported.
  • Kuroko and Bim have received upstream updates.
  • Mechanisms for the setting the clock time have been added:
    • A settimeofday system call and corresponding libc function are now available.
    • The date utility can now parse some time strings and set the time when run as root.
  • Some improvements have been made to the networking stack:
    • ifconfig now supports setting IPv4 addresses and some route configuration.
    • recvfrom on UDP and ICMP sockets is now supported for obtaining source address information.
    • ICMP sockets have been made to work like other operating systems, returning only the ICMP payload.
  • The PC BIOS loader now uses BIOS calls to read keyboard input, which should allow it to work with USB keyboards.
  • The File Browser now has a context menu option to delete files.
  • The display of graphs in the System Monitor application has been improved.
  • A regex-capable grep utility has been added.
    • The regex dialect is not compatible with POSIX BREs, but this is subject to change; the current regex engine comes from Bim.
  • The output format of the ps command has been improved with additional columns.

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 x86-64 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, and in some EFI environments.

aarch64.tar.gz contains files for running QEMU ARMv8 VMs. Use the run.sh shell script to start QEMU, and adjust as needed to enable accelerated operation under KVM or HVF.

Changelog

  • aarch64: (wip) support kernel modules
  • aarch64: Actually reset kernel stack on exec
  • aarch64: Add a tty driver for the pl011 uart
  • aarch64: Load kernel symbol table
  • aarch64: ac97 driver as module
  • aarch64: add ext2, iso9660 modules; JUMP26 reloc
  • aarch64: apply e1000 permission changes
  • aarch64: atan2() by polynomial approximation
  • aarch64: basic kernel tracebacks on el1-el1 fault
  • aarch64: basic relocations, enough for test.ko
  • aarch64: be more flexible about where the kernel is physically
  • aarch64: cleanup
  • aarch64: cleanup some warnings
  • aarch64: cleanup, fix warnings
  • aarch64: clear instruction cache on new pages when forking
  • aarch64: disable lock debugging
  • aarch64: don't be so intent on running driver bringup on cpu0
  • aarch64: dospart.ko as well
  • aarch64: dump regs on unknown fatal exceptions
  • aarch64: e1000 driver as module
  • aarch64: enable userspace access to timer physical counter
  • aarch64: expose aarch64_interrupt_dispatch as a symbol
  • aarch64: expose dtb as a device file
  • aarch64: fix mmu_first_n_frames since ram moved
  • aarch64: fixup warning about discarded volatile
  • aarch64: flip smp mutex after doing init for better startup synchronization
  • aarch64: force task switch when idle gets wakeup signal
  • aarch64: idle task loops should be the same for BP and APs
  • aarch64: implement a better spinlock
  • aarch64: implement panic halting with sgis
  • aarch64: increase inital stack size for kernel startup
  • aarch64: interrupt mapping improvements, chained interrupt handlers
  • aarch64: mmu: be more paranoid about frame allocation/clearing
  • aarch64: mmu: fix up insufficient locking around mulitlevel page mapping
  • aarch64: read rtc time again on qemu
  • aarch64: remove some debug messages
  • aarch64: remove superfluous reload of TTBR1
  • aarch64: reset timer on entry into idle wait
  • aarch64: save/restore fpu status registers
  • aarch64: start work on interrupt dispatch
  • aarch64: temporary device drivers until modules are ready
  • aarch64: this seems to be necessary or hvf can occasionally throw a fault on syscall return?
  • aarch64: traceback: fix incorrect base pointer on manual traceback
  • aarch64: virtio: be even pickier about cache maintenance
  • aarch64: virtio: make sure irq handler symbols are in our table for debugging
  • about: use markup_text for rendering
  • base: Don't use large pages when building libs for x86-64
  • base: New default wallpaper.
  • base: g++ doesn't like these restricts
  • bim: Sync
  • bim: Update syntax definitions
  • bim: at least attempt to wait for forked children
  • bim: lua highlighter
  • bim: more search improvements
  • bim: regex search/replace improvements
  • bim: sync upstream
  • bim: sync with kuroko changes
  • bim: sync with upstream
  • bim: tab completion for 'import'; krk api updates
  • boot: Use BIOS calls to read keyboard, which should work for USB
  • calculator: slightly more sensible input handling
  • calculator: use markup_text for rendering
  • compositor: Implement semi-lazy window resizing
  • compositor: blu...
Read more

Preview: ToaruOS 2.1 on ARMv8

04 Feb 01:35

Choose a tag to compare

Pre-release

I am very pleased to announce the availability of a testing preview of ToaruOS 2.1 for ARMv8.

Porting ToaruOS to the AArch64 architecture has been an enlightening and fun experience.

The end goal is to support actual hardware targets including the Raspberry Pi 4 and M1 MacBooks, however this preview release is only for QEMU with the -m virt target (and specifically only virt-2.12). A recent version of QEMU is required. Running under KVM should work if you have appropriate host hardware, such as an RPi4 or, presumably, an M1 running Linux. Support for running under HVF on a macOS host requires a patch to QEMU that has not been merged yet.

Please note that this preview is experimental. A number of features are stilling missing, such as networking, audio, and some libc functions. As there is no access to my package repositories (and I haven't even begun to set them up for AArch64 ports), I have included a build of Doom on the ramdisk for testing.

Running the Preview Release

Unpack the archive and run tcg.sh or kvm.sh as appropriate to launch QEMU with the correct arguments.

Screenshot from 2022-02-04 10-34-46

ToaruOS v2.0.1

03 Jan 23:39

Choose a tag to compare

What's New in v2.0.1?

This is a minor bugfix patch to address issues found in v2.0.0 and update Kuroko with the latest upstream.

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

  • kernel: extend kernel heap sbrk sanity check
  • kuroko: Sync with upstream
  • kuroko: sync with upstream
  • kuroko: sync with upstream bugfixes
  • terminal: Keep flags from unset cells so unfocused cursor displays
  • tutorial: Drop references to in-progress ports

Known Issues

  • The SMP scheduler is known to have performance 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.

ToaruOS 2.0

12 Dec 00:00

Choose a tag to compare

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 (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
A...
Read more

ToaruOS v1.99.10

01 Dec 12:43

Choose a tag to compare

ToaruOS v1.99.10 Pre-release
Pre-release

ToaruOS v1.99.10

What's New in v1.99.10?

This is the last beta release of ToaruOS 2.0.

  • A number of issues with the ATA disk drivers and ext2 filesystem have been fixed, though both are still considered unstable and disk-based installations are not recommended.
  • The panel has been largely rewritten to load libraries for widgets. Further improvements are planned for the panel widget system.
  • The window switcher has been vastly improved with multiple window previews and a design I totally stole from Gnome.
  • The terminal emulator's rendering pipeline has been rewritten. Asynchronous redraws allow for significant improvements in throughput, though some latency may be visible.
  • Copy-on-write support has been added to the kernel for fork() operations.
  • An issue with the userspace dynamic linker that caused gcc to have extremely long startup times (up to a second) has been resolved.

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

  • ata: New disk scheduler; less terrible but very slow
  • ata: deal in pages, not sectors
  • ata: drop the disk scheduler task and just use a proper sleepable mutex
  • ata: fix badly allocated prdt
  • ata: slap a warning at the top of that
  • base: make sure dir exists to build host Kuroko
  • bim: sync with upstream
  • bim: version 3.0.0
  • block-dev-stats: Test tool for ongoing ata rewrite
  • boot: Select current mode on video menu; esc to go back without changing
  • boot: first pass at cleanup, just make sure everything has lead comments
  • e1000: Remove debug procfs entry that was causing errors
  • ext2: Add some necessary mutexes around block and inode allocation
  • ext2: Assign correct ownership of new files
  • ext2: No cache for you
  • ext2: Try to make this less broken
  • ext2: fix block group calculation for inodes
  • ext2: fixup expanding directories
  • gunzip: Hidden option to print progress reports, for debugging
  • ioctl: request should be 'unsigned long'
  • kernel: Add simple mutex with a wait queue
  • kernel: Implement basic copy-on-write for fork()
  • kernel: Possibly fix sporadic lockup in compositor?
  • kernel: Use local APIC timer for preemption on APs, not an IPI
  • kernel: at least add full lead comments to everything
  • kernel: bad ordering of list insert / wakeup caused crashes
  • 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: prevent modules from being loaded multiple times
  • ld.so: Use a much bigger hash size and cc1 loads a lot faster
  • menu: Better tail alignment for bubble windows
  • menu: Disallow dragging/resizing of menu windows
  • 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: We shouldn't need to link -lgcc in the kernel
  • meta: purge most instances of vim hints
  • netty: quick hack to use threads so pasting doesn't deadlock
  • panel: Add notifications when a network connects/disconnects
  • panel: Apply smarter alignment to popup menus
  • panel: Don't crash when alt-tab window is open and the last tabable window closes
  • panel: First pass at modularization
  • panel: Improvements to the window switcher
  • panel: Little improvements to weather widget
  • panel: always prefer center alignment for popups
  • panel: cleanup widgets, part 1
  • panel: fixup window title display in alt-tab switcher
  • panel: redo layout when panel resizes
  • sync: Support argument
  • sync: temporary thing for testing; not a proper sync
  • sysinfo: Try to be slightly smarter about printing logo
  • tarfs: throw EROFS on create
  • terminal-vga: Rewrite display caching so it's actually fast, and buffered
  • terminal: Add some functionality to the -g flag
  • terminal: defer updates; not fully asynchronous
  • terminal: rewrite redraw logic to be more buffered
  • terminal: support ^[[3J to clear scrollback
  • text: Should have been doing two box blurs this whole time
  • top: Allow sorting by command line
  • top: Don't cap at 100, but do format >=100 differently
  • top: cap CPU%/CPUA at 100
  • x86_64: fixup bad memory walk when doing backtraces

Known Issues

  • Several utilities, libc functions, and hardware drivers are missing functionality.
  • The ext2 driver is known to set incorrect block counts on inodes.
  • 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.

ToaruOS v1.99.9

09 Nov 04:38

Choose a tag to compare

ToaruOS v1.99.9 Pre-release
Pre-release

Screenshot from 2021-11-09 13-30-59

What's New in v1.99.9?

We are nearing the end of the 1.99.x beta series and the final release of ToaruOS 2.0 will soon be ready.

This beta brings a number of improvements based on user feedback from v1.99.8:

  • The BIOS bootloader now performs VESA modesetting and has been tested on real hardware.
    Screenshot from 2021-11-09 14-20-40
  • The startup process in general has been improved to provide a more visually coherent experience.
  • The compositor now supports different window layers so that toast notifications appear above regular windows but below menus.
  • The panel has a new volume slider:
    Screenshot from 2021-11-09 14-17-35
  • The alt+tab switcher shows windows previews:
    Screenshot from 2021-11-09 14-17-56
  • Packages are now hosted on a CDN that should see better download speeds for users not close to our original server's datacenter in San Francisco (users that include me!)
  • A number of improvements have been made to kernel debugging, including better panic messages and more available symbol information for tracebacks.
  • The network stack now provides an initial implementation of a local loopback.

Will there be a v1.99.10?

Possibly.

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 manually. 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 or EFI, and has also been successfully tested on some real hardware.

Changelog

  • assert: use dprintf, not printf, when printing assertion message
  • base: Don't wait for msk on boot
  • base: Ensure we're still providing the fake libm.so
  • base: Install auto-dep.krk to /bin instead of /usr/bin
  • base: Show some toasts on startup.
  • base: Wait a bit before starting the wizard
  • bim: upstream bug fix
  • boot: Add 1280x800 as a preferred resolution
  • boot: Add a shortcut to toggle video/text mode
  • boot: Clean up editor redraw, shift-arrow input?
  • boot: Don't clear lines before printing on them when drawing banners
  • boot: Fall back to 24bpp modes
  • boot: Make sure menu displays if an unrecognized key is pressed
  • boot: Prettify
  • boot: VBE modesetting
  • boot: fixup returning from editor to menu
  • boot: generalize video mode selection to work on BIOS
  • boot: retain last mode when toggle to text mode
  • build: Remove C++ support, stop including libstdcxx on the ramdisk
  • calculator: set binpath so we can at least import 'math'
  • 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: Animate bottom and top windows normally if they aren't marked ALT_ANIMATION
  • compositor: Hack to support 24bpp framebuffers
  • compositor: Restructure 'advertise' messages to provide window buffer, size
  • compositor: correctly set next focused window when a window closes
  • cpuwidget: Cap graphs better
  • cpuwidget: Legend cleanup
  • cpuwidget: Shoddily add interface names to network legend
  • cpuwidget: fix file descriptor leak
  • dhclient: Skip things that don't have hardware addresses
  • fbterm: Move log to center, set bg to black
  • fbterm: Support 24bpp framebuffers
  • file-browser: Don't restart when wallpaper changes
  • file-browser: Show a different context menu when no files are selected
  • glogin-provider: cleanup, remove animation
  • i965: Don't load if mode wasn't already set
  • irq: Mark isr_common as global so it shows up in symbol table
  • 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: Print gs alongside other registers in panic
  • kernel: Put codename string in quotes for stylistic reasons
  • kernel: exclude serial ports from pts numbering; start numbering at 1
  • kmalloc: Use existing assertion infrastructure
  • kuroko: Bump for sendto() support
  • kuroko: Sync with upstream
  • kuroko: sync with upstream
  • lfbvideo: Don't map EGA/VGA text mode range as WC as apparently things don't like that
  • lfbvideo: Keep resolution set by loader if none specified by args
  • libc: Update wcwidth with latest data
  • make: Clean more stuff
  • make: Default SMP=4 for qemu targets because why not
  • meta: A note on licenses
  • meta: Add .mailmap
  • meta: Add more screenshots
  • 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: I really should not have to keep doing this. Please stop stealing my free code.
  • meta: Some README updates
  • meta: Update README, new screenshot
  • mmu: Be more clear about what's happening when we run out of RAM
  • mmu: Fixup mapping for physical memory address >4GiB
  • msk: Fixup local manifest file resolution
  • msk: Fixup support for multiple remotes, add a few options
  • 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: initial loopback interface support
  • net: net_udp_send() should return size of data sent
  • net: try to actually track received packet sizes...
  • package-manager: Spin up a thread to run 'msk'
  • panel: Add icon, update less often
  • panel: Don't display loopback in network status widget
  • panel: Keep ticking the clock when receiving other events
  • panel: New volume slider menu widget
  • panel: Visual adjustments to slider
  • pipe: Embiggen pipe buffers
  • pipe: Make pipes more direct with ring buffer usage
  • readelf: Fix missing -d option
  • ringbuffer: don't use heap allocator if buffer size is one page
  • socket: Purge rx queue when socket closes?
  • splash-log: Cleanup, disable log if 'debug' is not specified, unless we take too long
  • splash-log: Retain last message to print it if we switch out of quiet mode
  • sysinfo: Update, add CPU, re-add Font
  • terminal: make scrollback more efficient?
  • toastd: Adjust spacing, try to vertically center text
  • vbox: Minor cleanup, don't process events we didn't get an IRQ for
  • x86_64: Don't wrap version codename in quotes as we're doing that directly now

Known Issues

  • The SMP scheduler is known to have performance 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.

ToaruOS v1.99.8

21 Oct 02:22

Choose a tag to compare

ToaruOS v1.99.8 Pre-release
Pre-release

Screenshot from 2021-10-21 11-22-24

What's New in v1.99.8?

A number of improvements have been made since 1.99.7:

  • The bootloader now supports disk boot, loads the kernel and ramdisk after displaying the menu, and can support both ELF and AOUT_KLUDGE Multiboot payloads.
  • Misaka is now capable of being booted as a Multiboot 2 payload, and can also be directly used as an Elf64 without having to be objcopy'd to an Elf32.
  • Misaka has a new debug and early startup logging interface.
  • The network subsystem now supports statistics counters.
  • The cpuwidget monitor tool has been improved to include memory and network statistics.
  • Various bug fixes based on user testing.

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

  • ata: Ensure we lock around submitting ATAPI command so we're woken up correctly
  • ata: fix bad timeout on ATAPI initialization, fixes vbox seeing the CD
  • base: Accept QEMU IDE controller for ata driver autoload
  • 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: Only show tutorial once on first graphical login for 'local'
  • base: Print message when loading drivers on startup
  • base: Update README.md
  • base: update package repository on startup
  • bim: Update gas highlighter
  • boot: Cleanup strings; spot-check memory on startup
  • boot: Jump back to real mode to load sectors?
  • boot: MBR / disk boot stub
  • boot: Set a kcmdline flag when debug is set in menu
  • boot: Support AOUT_KLUDGE kernels
  • boot: recommend 1GiB of RAM
  • calculator: Don't let the window get too tiny
  • compositor: refuse to initiate dragging when currently resizing
  • cpuwidget: Add to menu as 'System Monitor'
  • cpuwidget: Complete revamp
  • dbg: add backtrace command
  • es1371: Audio driver for vmware
  • fbterm: Only enable scrolling by default on vga terminal
  • fbterm: VGA backend, enable scrolling by default
  • fetch: Parse https and bail better
  • file-browser: Icons, identification of PDFs, little launcher wrapper
  • file-browser: fix up scroll dimensions for desktop, though we really do need to make that multi-column
  • glogin-provider: Fixup animation to not smear on slow systems
  • graphics: fixup aa line rasterizer
  • hda: stub module
  • insmod: Support passing arguments to modules
  • iso9660: try to catch some potential mount errors
  • kernel: Better fault reports
  • kernel: Fixup bad lock ordering in process_awaken_signal
  • kernel: Initial pass at new debug printf interface
  • kernel: Initial try at actual user buffer validation
  • kernel: Print tracebacks for more fatal errors
  • kernel: Use 'Misaka' as the system named presented by the kernel
  • kernel: make_process_ready may be called with sleep_lock already acquired?
  • kernel: oops
  • lfbvideo: recalculate vmware memory size on display change
  • libc: Fix bad logic when looking for IP address
  • libm: Add missing M_, INFINITY, NAN constants
  • libm: Add two missing functions
  • login: Return 2 when 'disconnect' is provided as a username
  • make: /usr/lib/ libs (from gcc) should come from TOOLCHAIN
  • make: Give write access to docker container's bin dir
  • make: Replace update-extents.py with a Kuroko equivalent
  • make: Why are we trying to echo PATH here?
  • make: bail if make fails?
  • net: Add stats counters
  • net: Oops, we broke UDP sends
  • net: don't explode without a network
  • netty: Fixup the reverse shell host for socket connections
  • sh: Recommend 'ifconfig' in place of 'ip'/'ipconfig'
  • smp: Don't just fatal() if there's too many cores; initialize up to 32
  • smp: allow command line override for where to scan for RSDP
  • splash-log, migrate: Cleanup
  • tcp: Fixup socket receive buffers
  • terminal-vga: Backport selection improvements from graphical terminal
  • terminal: Minor improvements to text selection
  • terminal: bind Ctrl Shift +, Ctrl -, Ctrl 0 to modify scaling
  • text: Expose method for brute-force path stroke
  • tutorial: Add a page about the live CD
  • util: Move ISO, FAT stuff to a library
  • x86_64: Cleanup boot messages to fit in vga text mode better
  • x86_64: Mark kernel with AOUT_KLUDGE address parameters so the 64-bit ELF can be booted directly
  • x86_64: Support multiboot2 loaders

Known Issues

  • The SMP scheduler is known to have performance 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.

ToaruOS v1.99.7

27 Sep 07:05

Choose a tag to compare

ToaruOS v1.99.7 Pre-release
Pre-release

ToaruOS v1.99.7

Screenshot from 2021-09-24 12-31-41

What's New in v1.99.7?

The ptrace interface has been partially implemented in the kernel and an strace utility as well as an interactive debugger (dbg) have been added.

A simple more pager has been added with limited features.

The login-loop system utility now supports parsing /etc/issue files with a number of escape sequences recognized from common getty implementations.

A handful of bugs have been fixed.

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

  • bim: Report errors when opening files
  • bim: syntax highlighter for /etc/issue files
  • compositor: Close stale windows that were lost in the stack
  • date: change default format
  • dbg: Try to figure out symbol names, library locations
  • dbg: add 'print' command
  • dbg: make sure debugged process terminates on exit
  • dbg: show signal number if name is not available
  • file-browser: Use object icon for kernel modules
  • kernel: Acquire a lock around waitpid condition changes
  • ld.so: Expose some internal data for use by debugger
  • ld.so: Link for 4K pages
  • ld.so: Set values in dynamic symbol tables when linking
  • login-loop: Linefeed before issue text
  • login-loop: Use a simple, 'modern' /etc/issue
  • login: Support /etc/issue through login-loop
  • more: add simple pager utility
  • more: add space binding
  • ptrace: Allow separate tracing of signals and syscalls
  • ptrace: Catch signals, start work on debugger
  • ptrace: Inform non-parent tracer when tracee exits
  • ptrace: POKEDATA, permission fixes for PEEKDATA
  • ptrace: PTRACE_SINGLESTEP
  • ptrace: Update status before setting suspended flag
  • ptrace: avoid suggesting process terminated when continuing from ptrace_signal
  • ptrace: support tracing from non-parent process
  • readelf: Show dynamic symbol tables
  • sh: use return code from last process in pipeline, and wait for everyone properly
  • strace: Initial support for a ptrace() mechanism, strace tool
  • strace: fix-up bad signal name table
  • strace: initial -e trace=... support
  • strace: more syscall groupings from the real strace
  • strace: support -o option
  • strace: support more syscalls, output values, errno
  • syscall: PTR_VALIDATE explicitly does not check null...
  • terminal-vga: Fixup upper left cell appearing selected
  • terminal: Launch without animation when running fullscreen
  • test-sigsegv: Add a deeper segfault to test debugging libs

Known Issues

  • The SMP scheduler is known to have performance 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.