Skip to content

Releases: klange/toaruos

ToaruOS v2.2.0

28 Aug 01:10
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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.

ToaruOS v1.99.6

18 Sep 05:05
Compare
Choose a tag to compare
ToaruOS v1.99.6 Pre-release
Pre-release

ToaruOS v1.99.6

Screenshot from 2021-09-18 13-49-35

What's New in v1.99.6?

  • CPU time tracking has been implemented, which finally brings a top utility and related libc functions.
  • The network stack has been expanded and the e1000 NIC driver has been rewritten. UDP sockets may now be bound, transmit throughput and reliability has been improved, and an interface to ICMP has been added (alongside a ping utility).
  • Performance in the package manager has been improved, and there are new packages: doom and mupdf.
  • The Julia set renderer has been rewritten with new palettes and exploration tools.
  • The EFI loader has been recovered, with new options.
  • Various improvements have been made to the panel, image viewer application, and file browser.
  • New assets for ToaruOS 2.0, including a new wallpaper and logo.
  • The terminal and file browser text input bar now display an I-beam cursor.
  • Rudimentary support has been added for timezones, with automatic detection at startup if networking is available.

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 and possibly EFI.

Changelog

  • ata: Don't make device nodes for disks that claim to be empty
  • ata: identify disk before checking its size...
  • base: Land new assets for 2.0
  • boot: Rewrite README
  • boot: merge retooled EFI loader
  • chown: fixup semantics, support names in command
  • compositor: Add I-beam cursor; logic in terminal, file-browser
  • compositor: fixup tiling sizes for one pixel of overlap, not two
  • compositor: realign pointing hand cursor
  • cpuwidget: CPU usage graph
  • decorations: Use a single spritesheet for window borders
  • decorations: try to be a bit smarter about drawing titlebar elements
  • dhclient: fallback to /var/resolv.conf if /etc is read-only
  • e1000: Don't print that message
  • e1000: More driver rewrites
  • e1000: More transmit changes...
  • e1000: Receive SRPD irqs?
  • e1000: add ref link
  • e1000: remove print
  • e1000: rewrite tx a bit
  • ext2: Recover (experimental) ext2 filesystem driver
  • ext2: report ROFS
  • fetch: print total time when done, instead of 0.0 remaining
  • file-browser: Add picker mode
  • graphics: actually fix that off-by-one in draw_sprite_alpha
  • graphics: off-by-one on scanline width in draw_sprite_alpha
  • help-browser: viably display the AGPL text for the mupdf package
  • imgviewer: small improvements
  • ipv4: Don't wait so long for initial arp response
  • ipv4: try to arp local stuff?
  • julia: change defaults
  • julia: completely retooled julia set explorer
  • julia: fixups
  • kernel: Higher resolution CpuPermille
  • kernel: Should not need to use temporary buffer for fxsave/rstr
  • kernel: Track relative CPU usage over one-second spans
  • kernel: more sensible idle tracking
  • kernel: times() can take NULL
  • kernel: track idle task usage
  • lfbvideo: Fallback to port-IO driver if MMIO isn't available
  • libc: cleanup, some missing things
  • libm: Hyperolibc trig functions
  • localtime: rudimentary, incorrect support for timezone offsets
  • make: Default to 2 SMP cores so we're consistently testing with SMP enabled
  • make: Ensure we're creating /usr/bin so we can put auto-dep.krk in it
  • mmu: Actually read multiboot mmap data
  • mmu: Reserve a few more initial PTs so we can support 64GiB of memory
  • msk: clean up after ourselves
  • msk: keep using an intermediary file for gunzip as it's still way faster than the pipe
  • net: Handle signals
  • net: Maybe allow udp binds?
  • net: add missing declaration
  • net: another batch of rewrites
  • net: e1000 receive fixes?
  • net: ongoing network work
  • nproc: Expose processor count and use it to pick between yielding and non-yielding spin locks
  • panel: Show icon of current window at full opacity
  • pci: Implement PIIX4 PIRQ remapping
  • pex: Actually try to close server endpoints
  • pex: Cleanup pipes?
  • piix4: move to module, only load in virtualbox
  • ping: Keep pinging, show summary on ^C
  • ping: fancier sub-ms printing (I think %Ng is supposed to do this, but mine might be broken?)
  • ping: shoddy implementation
  • procfs: cleanup /proc/idle format
  • procfs: quick-and-dirty /proc/kallsyms, missing modules
  • ps: Include thread CPU usage in parent when not queried with -T
  • readelf: fix typo in usage
  • readme: Update references to EFI loader
  • smp: Co-opt Multiboot's config_table member to sneak ACPI tables to kernel
  • smp: Force userspace preemption on other cores.
  • tcp: Time out connection after 3 attempts, reduce time between resends
  • tcp: handle connection refused
  • terminal: fix bad bounds in mouse position check
  • terminal: various cleanups
  • time: Try to figure out some sensible timezone names from the TZ offset, and collect that from ip-api
  • times: rudimentary support for process times
  • tmpfs: Make total block allocations available through a procfs entry
  • tmpfs: finer-grained locks, use global mmu mapping
  • top: Differentiate general memory from memory used for tmpfs
  • top: Track multiple slices of usage, show averages
  • top: code cleanup
  • top: fixup memory leaks
  • top: process monitor
  • touch: don't segfault when unable to touch
  • touch: don't segfault when unable to touch
  • tutorial: Adjust spacings, fix centering
  • udp: add bind() and recv() test tool
  • util: Add working bochsrc

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.