Releases: klange/toaruos
ToaruOS v2.2.0
ToaruOS v2.2.0
What's New in v2.2.0?
UI
- Window decoration buttons have been improved with larger hit targets and visible hover states
- Yutani now supports window minimization
- The panel has been redesigned and returns to a docked layout
- The menu library has seen various bugfixes
- The TrueType rasterizer has been improved and its path rendering functionality is now available to other applications
- Screenshots are now stored with timestamps, and a toast notification is displayed to confirm their creation
Kuroko
- Kuroko has been updated to 1.4
- Yutani bindings have been rewritten
mines.py
from ToaruOS 1.2 has been ported to Kuroko asmines.krk
Other
- The Julia fractal viewer has new functionality, including a Mandelbrot set explorer
/bin/sh
is now a symlink to/bin/esh
and can be changed to point to a proper POSIX shell such as Dash- Various bootloader improvements
- Various libc improvements
- Various bug fixes related to the operation of TTYs
- Old wallpapers have been removed from the default installation and may be found in the package repository.
What is ToaruOS?
ToaruOS is a hobbyist, educational operating system for x86-64 PCs, focused primarily on use in virtual machines. It provides a Unix-like environment, complete with a graphical desktop interface, shared libraries, feature-rich terminal emulator, and support for running, GCC, Quake, and several other ports. The core of ToaruOS, provided by the CD images in this release, is built completely from scratch. The bootloader, kernel, drivers, C standard library, and userspace applications are all original software created by the authors, as are the graphical assets.
Who wrote ToaruOS?
ToaruOS is primarily written by a single maintainer, with several contributions from others. A complete list of contributors is available from AUTHORS.
Running ToaruOS
It is recommended that you run ToaruOS in a virtual machine / emulator, for maximum compatibility. ToaruOS's driver support is limited, and running on real "bare metal", while possible, does not provide the most complete experience of the OS's capabilities except on very particular hardware. ToaruOS is regularly tested in VirtualBox, QEMU, and VMWare Player, and can be successfully booted (with poor performance) in Bochs. ToaruOS is intended to run from a live CD, though it is possible to install to a hard disk. Additional details on running ToaruOS in different virtual machines is available from the README.
Release Files
image.iso
is the standard build of ToaruOS, built by the Github Actions CI workflow. It uses ToaruOS's native bootloaders and should work in most virtual machines using BIOS.
Changelog
aarch64
: don't print every time we do a dtb lookupaarch64
: don't set debug output as primary so we can print early log to framebufferaarch64
: ensure module base address starts alignedabout
: 2023base
: new wallpaperbase
: Remove 'local' msk remote from default orderbase
: Remove old wallpapers (they're in the package repo now)base
: testingbase
: update /etc/issuebase
: update text_layout.krkbim
: sync with upstreamboot
: add option for 'lfbwc', and enable it by defaultboot
: CONSOLE_FLAGS mb2 tag is optionalboot
: Don't jump back to protected mode in EFI loaderboot
: draw something when loading ramdisk in vga text modeboot
: fix stray bits in scancodes in bochsboot
: move declarationboot
: prefer 1920x1080 mode in BIOS loaderboot
: Query shift state as bios doesn't give it to us?boot
: Set VGA text mode font to Deja Vucompositor
: Fix incorrect stride on blur texture in VMwarecompositor
: fix null pointer when clicking desktop sometimescompositor
: Improve screenshot saving with notificationscpuwidget
: add menu bardbg
: fix implicit cast warningdecor
: Add menu option for minimizedecor
: consider minimize button when collapsing titlesdecor
: Improve buttons with hover states using focus hackdecor
: Use a different button icon for unmaximizeefi
: Accept ACPI 2 table pointer as config tableesh
: Migrate shell to /bin/eshgensym
: avoid link step when generating symbol tablegraphics
: be more efficient at tracking mapped texture coordinatesgraphics
: expose matrix inversion in headersgraphics
: fix clipping from bad rounding when drawing with transformationsgraphics
: support shear operation on transformation matricesjulia
: Add mandlebrot mode, explore modejulia
: display zoom as multiplierjulia
: render at least once so we don't flash black when panningjulia
: usability improvements; progressive renderingkernel
: be more prudent with signal number bounds checkingkernel
: brute-force locking around unmap syscall, should make thread stuff more stable?kernel
: clean up module loaderkernel
: copy signal dispositions on fork; clear them on execkernel
: fix swapped LCUC conversion in ttykernel
: fixup issues with timeouts in fswait3kernel
: Interrupting fswait should return -EINTRkernel
: mark sockets in stat; reject them in seekkernel
: More instances of unintended signed values causing problemskernel
: proc->group may have exitedkernel
: Reject negative signum in signal, sigactionkernel
: writes to /dev/null should return number of bytes writtenkuroko
: bind class for transformation matriceskuroko
: bindings for Subregionskuroko
: bind props for TransformMatrixkuroko
: bumpkuroko
: bump for 'zip' *-expansion fixkuroko
: expose path rasterizing functions directlykuroko
: fixup menu bindings?kuroko
: Pull in latest 1.4.0a1kuroko
: sync for 1.4.0b2kuroko
: sync for different fixkuroko
: sync to fix issues with va_ars on aarch64kuroko
: sync upstreamkuroko
: sync upstreamkuroko
: sync with upstreamkuroko
: sync with upstreamkuroko
: sync with upstream for v1.4.0 releasekuroko
: sync with upstream (parseArgs updates)kuroko
: upstream fixeslbic
: aarch64 longjmp should pass second argument as return valuelfbvideo
: disable write-combining by default; add 'lfbwc' option to enable itlfbvideo
: make that just a flag optionlibc
: aarch64 setjmp, untestedlibc
: add asprintf, fix vasprintf return valuelibc
: Additional defines to help curl buildlibc
: Add some missing bit-twiddly libm functionslibc
: define F_DUPFD so srclib stuff buildslibc
: define FILENAME_MAX like other platformslibc
: Fix float formatters showing '0.10', etc.libc
: fix incorrect cast of field width to charlibc
: fix wrong argument order to bsearch comparatorlibc
: host entry list should be null-terminatedlibc
: only print debug info in poll with __libc_debuglibc
: poll: handle POLLOUT betterlibc
: remove bad conflicting bad ceil for x86-64libc
: update wcwidthmarkup
: Fix leaks in container types in markup parsermenu
: fix incorrect clearing of menu child in has_eventual_childmenu
: fix silly old bug with submenu highlightingmenu
: fixup overflowing rendering of menubarsmenu
: skip separators with keyboard navigationmeta
: fixup nm step still referencing misaka-kernel.64meta
: highmem=off is not needed for virt-2.12 targetmeta
: let gensym.krk do the sorting + dedupemeta
: set -name in qemumeta
: Start calling this 2.2, new codename is 'Eternal Reality' (Railgun S OP2)meta
: update link to esh source in READMEmeta
: Use -device AC97 instead of -soundhw option; no more pcspkrmines
: Port mines.py from toaru 1.2.xnet
: Handle signals, disconnects while waiting to recv in tcpnet
: Support getsockname, getpeername for tcpnet
: Support ioctl FIONBIO to set non-blockingpanel
: Adjust clockface, add counterweight to second handpanel
: Allow widgets to request faster update rate for animationspanel
: don't focus windows when closing them from the context menupanel
: fix signature mismatch on widget_update_volumepanel
: inform compositor of window tray locationspanel
: knock off more of the gnome-shell panel designpanel
: re-dock the panelpanel
: Replace clock widget with recreation of classic themepanel
: Use move_relative when creating widget menu windowspath_demo
: add more optionspath_demo
: Kuroko demo of path rendering libping
: use gettimeofday instead of relying on clock ticksprocfs
: fix format of /proc/versionprocfs
: Update comment describing how this worksrm
: accept and ignore -frm
: print error messagesshow-toasts
: Fix outdated parsing of MemTotalstrace
: support more stuffterminal
: also fix left arrowterminal
: Bitmap font can use uint8_tterminal
: cleanup some glyphs in the bitmap fallback fontterminal
: configurable scrollback; increase default to 10000terminal
: fix arrow tails in bitmap fontterminal
: xterm compatibility with cursor hang, \v \ftext
: adhere t...
ToaruOS v2.1.0
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 inqemu-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.
- Initial platform target support for the
- 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.
- An experimental
- 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 asroot
.
- A
- 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 modulesaarch64
: Actually reset kernel stack on execaarch64
: Add a tty driver for the pl011 uartaarch64
: Load kernel symbol tableaarch64
: ac97 driver as moduleaarch64
: add ext2, iso9660 modules; JUMP26 relocaarch64
: apply e1000 permission changesaarch64
: atan2() by polynomial approximationaarch64
: basic kernel tracebacks on el1-el1 faultaarch64
: basic relocations, enough for test.koaarch64
: be more flexible about where the kernel is physicallyaarch64
: cleanupaarch64
: cleanup some warningsaarch64
: cleanup, fix warningsaarch64
: clear instruction cache on new pages when forkingaarch64
: disable lock debuggingaarch64
: don't be so intent on running driver bringup on cpu0aarch64
: dospart.ko as wellaarch64
: dump regs on unknown fatal exceptionsaarch64
: e1000 driver as moduleaarch64
: enable userspace access to timer physical counteraarch64
: expose aarch64_interrupt_dispatch as a symbolaarch64
: expose dtb as a device fileaarch64
: fix mmu_first_n_frames since ram movedaarch64
: fixup warning about discarded volatileaarch64
: flip smp mutex after doing init for better startup synchronizationaarch64
: force task switch when idle gets wakeup signalaarch64
: idle task loops should be the same for BP and APsaarch64
: implement a better spinlockaarch64
: implement panic halting with sgisaarch64
: increase inital stack size for kernel startupaarch64
: interrupt mapping improvements, chained interrupt handlersaarch64
: mmu: be more paranoid about frame allocation/clearingaarch64
: mmu: fix up insufficient locking around mulitlevel page mappingaarch64
: read rtc time again on qemuaarch64
: remove some debug messagesaarch64
: remove superfluous reload of TTBR1aarch64
: reset timer on entry into idle waitaarch64
: save/restore fpu status registersaarch64
: start work on interrupt dispatchaarch64
: temporary device drivers until modules are readyaarch64
: this seems to be necessary or hvf can occasionally throw a fault on syscall return?aarch64
: traceback: fix incorrect base pointer on manual tracebackaarch64
: virtio: be even pickier about cache maintenanceaarch64
: virtio: make sure irq handler symbols are in our table for debuggingabout
: use markup_text for renderingbase
: Don't use large pages when building libs for x86-64base
: New default wallpaper.base
: g++ doesn't like these restrictsbim
: Syncbim
: Update syntax definitionsbim
: at least attempt to wait for forked childrenbim
: lua highlighterbim
: more search improvementsbim
: regex search/replace improvementsbim
: sync upstreambim
: sync with kuroko changesbim
: sync with upstreambim
: tab completion for 'import'; krk api updatesboot
: Use BIOS calls to read keyboard, which should work for USBcalculator
: slightly more sensible input handlingcalculator
: use markup_text for renderingcompositor
: Implement semi-lazy window resizingcompositor
: blu...
Preview: ToaruOS 2.1 on ARMv8
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.
ToaruOS v2.0.1
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 checkkuroko
: Sync with upstreamkuroko
: sync with upstreamkuroko
: sync with upstream bugfixesterminal
: Keep flags from unset cells so unfocused cursor displaystutorial
: 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
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...
ToaruOS v1.99.10
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 slowata
: deal in pages, not sectorsata
: drop the disk scheduler task and just use a proper sleepable mutexata
: fix badly allocated prdtata
: slap a warning at the top of thatbase
: make sure dir exists to build host Kurokobim
: sync with upstreambim
: version 3.0.0block-dev-stats
: Test tool for ongoing ata rewriteboot
: Select current mode on video menu; esc to go back without changingboot
: first pass at cleanup, just make sure everything has lead commentse1000
: Remove debug procfs entry that was causing errorsext2
: Add some necessary mutexes around block and inode allocationext2
: Assign correct ownership of new filesext2
: No cache for youext2
: Try to make this less brokenext2
: fix block group calculation for inodesext2
: fixup expanding directoriesgunzip
: Hidden option to print progress reports, for debuggingioctl
: request should be 'unsigned long'kernel
: Add simple mutex with a wait queuekernel
: 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 IPIkernel
: at least add full lead comments to everythingkernel
: bad ordering of list insert / wakeup caused crasheskernel
: clean up kernel/arch/x86_64/{cmos,pit}.ckernel
: cleanup kernel/arch/x86_64/idt.ckernel
: cleanup kernel/arch/x86_64/smp.ckernel
: cleanup kernel/arch/x86_64/user.ckernel
: cleanup kernel/generic.ckernel
: cleanup things introduced in COWkernel
: prevent modules from being loaded multiple timesld.so
: Use a much bigger hash size and cc1 loads a lot fastermenu
: Better tail alignment for bubble windowsmenu
: Disallow dragging/resizing of menu windowsmeta
: Stop recommended recursive git checkout, since it pulls in gcc/binutilsmeta
: Update all of the heading comments in apps/meta
: Update leading comments in modules/meta
: We shouldn't need to link -lgcc in the kernelmeta
: purge most instances of vim hintsnetty
: quick hack to use threads so pasting doesn't deadlockpanel
: Add notifications when a network connects/disconnectspanel
: Apply smarter alignment to popup menuspanel
: Don't crash when alt-tab window is open and the last tabable window closespanel
: First pass at modularizationpanel
: Improvements to the window switcherpanel
: Little improvements to weather widgetpanel
: always prefer center alignment for popupspanel
: cleanup widgets, part 1panel
: fixup window title display in alt-tab switcherpanel
: redo layout when panel resizessync
: Support argumentsync
: temporary thing for testing; not a proper syncsysinfo
: Try to be slightly smarter about printing logotarfs
: throw EROFS on createterminal-vga
: Rewrite display caching so it's actually fast, and bufferedterminal
: Add some functionality to the -g flagterminal
: defer updates; not fully asynchronousterminal
: rewrite redraw logic to be more bufferedterminal
: support ^[[3J to clear scrollbacktext
: Should have been doing two box blurs this whole timetop
: Allow sorting by command linetop
: Don't cap at 100, but do format >=100 differentlytop
: cap CPU%/CPUA at 100x86_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
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.
- 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:
- The alt+tab switcher shows windows previews:
- 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 messagebase
: Don't wait for msk on bootbase
: Ensure we're still providing the fake libm.sobase
: Install auto-dep.krk to /bin instead of /usr/binbase
: Show some toasts on startup.base
: Wait a bit before starting the wizardbim
: upstream bug fixboot
: Add 1280x800 as a preferred resolutionboot
: Add a shortcut to toggle video/text modeboot
: Clean up editor redraw, shift-arrow input?boot
: Don't clear lines before printing on them when drawing bannersboot
: Fall back to 24bpp modesboot
: Make sure menu displays if an unrecognized key is pressedboot
: Prettifyboot
: VBE modesettingboot
: fixup returning from editor to menuboot
: generalize video mode selection to work on BIOSboot
: retain last mode when toggle to text modebuild
: Remove C++ support, stop including libstdcxx on the ramdiskcalculator
: set binpath so we can at least import 'math'compositor
: Add a new OVERLAY layer, specifically for toastscompositor
: Add another layer above overlays for menus so they show in front of toastscompositor
: Animate bottom and top windows normally if they aren't marked ALT_ANIMATIONcompositor
: Hack to support 24bpp framebufferscompositor
: Restructure 'advertise' messages to provide window buffer, sizecompositor
: correctly set next focused window when a window closescpuwidget
: Cap graphs bettercpuwidget
: Legend cleanupcpuwidget
: Shoddily add interface names to network legendcpuwidget
: fix file descriptor leakdhclient
: Skip things that don't have hardware addressesfbterm
: Move log to center, set bg to blackfbterm
: Support 24bpp framebuffersfile-browser
: Don't restart when wallpaper changesfile-browser
: Show a different context menu when no files are selectedglogin-provider
: cleanup, remove animationi965
: Don't load if mode wasn't already setirq
: Mark isr_common as global so it shows up in symbol tablekernel
: Export sys_ functions so they appear in symbol tablekernel
: Fix gdt install clobbering symbol table, or whatever else ends up after itkernel
: Print gs alongside other registers in panickernel
: Put codename string in quotes for stylistic reasonskernel
: exclude serial ports from pts numbering; start numbering at 1kmalloc
: Use existing assertion infrastructurekuroko
: Bump for sendto() supportkuroko
: Sync with upstreamkuroko
: sync with upstreamlfbvideo
: Don't map EGA/VGA text mode range as WC as apparently things don't like thatlfbvideo
: Keep resolution set by loader if none specified by argslibc
: Update wcwidth with latest datamake
: Clean more stuffmake
: Default SMP=4 for qemu targets because why notmeta
: A note on licensesmeta
: Add .mailmapmeta
: Add more screenshotsmeta
: Cleanup Makefile, add some commentsmeta
: Cleanup, rewrite parts of the READMEmeta
: Describe filesystem structure in READMEmeta
: Fix typo in READMEmeta
: I really should not have to keep doing this. Please stop stealing my free code.meta
: Some README updatesmeta
: Update README, new screenshotmmu
: Be more clear about what's happening when we run out of RAMmmu
: Fixup mapping for physical memory address >4GiBmsk
: Fixup local manifest file resolutionmsk
: Fixup support for multiple remotes, add a few optionsmsk
: Switch back to using tar/gunzip with pipesmsk
: Switch package source to CDNmsk
: Use 192.168.11.* for local repo as it bails faster in vmwaremultiboot
: Correctly pass bits-per-pixel from framebuffer datanet
: initial loopback interface supportnet
: net_udp_send() should return size of data sentnet
: try to actually track received packet sizes...package-manager
: Spin up a thread to run 'msk'panel
: Add icon, update less oftenpanel
: Don't display loopback in network status widgetpanel
: Keep ticking the clock when receiving other eventspanel
: New volume slider menu widgetpanel
: Visual adjustments to sliderpipe
: Embiggen pipe bufferspipe
: Make pipes more direct with ring buffer usagereadelf
: Fix missing -d optionringbuffer
: don't use heap allocator if buffer size is one pagesocket
: Purge rx queue when socket closes?splash-log
: Cleanup, disable log if 'debug' is not specified, unless we take too longsplash-log
: Retain last message to print it if we switch out of quiet modesysinfo
: Update, add CPU, re-add Fontterminal
: make scrollback more efficient?toastd
: Adjust spacing, try to vertically center textvbox
: Minor cleanup, don't process events we didn't get an IRQ forx86_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
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 correctlyata
: fix bad timeout on ATAPI initialization, fixes vbox seeing the CDbase
: Accept QEMU IDE controller for ata driver autoloadbase
: Load ATA drivers on vbox if IDE is detectedbase
: Load iso9660 and add a desktop icon when mounting CD at bootbase
: Load the piix4 remapper if we see the ISA bridge; fixes OVFM under qemu without -M q35base
: Only show tutorial once on first graphical login for 'local'base
: Print message when loading drivers on startupbase
: Update README.mdbase
: update package repository on startupbim
: Update gas highlighterboot
: Cleanup strings; spot-check memory on startupboot
: Jump back to real mode to load sectors?boot
: MBR / disk boot stubboot
: Set a kcmdline flag when debug is set in menuboot
: Support AOUT_KLUDGE kernelsboot
: recommend 1GiB of RAMcalculator
: Don't let the window get too tinycompositor
: refuse to initiate dragging when currently resizingcpuwidget
: Add to menu as 'System Monitor'cpuwidget
: Complete revampdbg
: add backtrace commandes1371
: Audio driver for vmwarefbterm
: Only enable scrolling by default on vga terminalfbterm
: VGA backend, enable scrolling by defaultfetch
: Parse https and bail betterfile-browser
: Icons, identification of PDFs, little launcher wrapperfile-browser
: fix up scroll dimensions for desktop, though we really do need to make that multi-columnglogin-provider
: Fixup animation to not smear on slow systemsgraphics
: fixup aa line rasterizerhda
: stub moduleinsmod
: Support passing arguments to modulesiso9660
: try to catch some potential mount errorskernel
: Better fault reportskernel
: Fixup bad lock ordering in process_awaken_signalkernel
: Initial pass at new debug printf interfacekernel
: Initial try at actual user buffer validationkernel
: Print tracebacks for more fatal errorskernel
: Use 'Misaka' as the system named presented by the kernelkernel
: make_process_ready may be called with sleep_lock already acquired?kernel
: oopslfbvideo
: recalculate vmware memory size on display changelibc
: Fix bad logic when looking for IP addresslibm
: Add missing M_, INFINITY, NAN constantslibm
: Add two missing functionslogin
: Return 2 when 'disconnect' is provided as a usernamemake
: /usr/lib/ libs (from gcc) should come from TOOLCHAINmake
: Give write access to docker container's bin dirmake
: Replace update-extents.py with a Kuroko equivalentmake
: Why are we trying to echo PATH here?make
: bail if make fails?net
: Add stats countersnet
: Oops, we broke UDP sendsnet
: don't explode without a networknetty
: Fixup the reverse shell host for socket connectionssh
: Recommend 'ifconfig' in place of 'ip'/'ipconfig'smp
: Don't just fatal() if there's too many cores; initialize up to 32smp
: allow command line override for where to scan for RSDPsplash-log, migrate
: Cleanuptcp
: Fixup socket receive buffersterminal-vga
: Backport selection improvements from graphical terminalterminal
: Minor improvements to text selectionterminal
: bind Ctrl Shift +, Ctrl -, Ctrl 0 to modify scalingtext
: Expose method for brute-force path stroketutorial
: Add a page about the live CDutil
: Move ISO, FAT stuff to a libraryx86_64
: Cleanup boot messages to fit in vga text mode betterx86_64
: Mark kernel with AOUT_KLUDGE address parameters so the 64-bit ELF can be booted directlyx86_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
ToaruOS v1.99.7
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 filesbim
: syntax highlighter for /etc/issue filescompositor
: Close stale windows that were lost in the stackdate
: change default formatdbg
: Try to figure out symbol names, library locationsdbg
: add 'print' commanddbg
: make sure debugged process terminates on exitdbg
: show signal number if name is not availablefile-browser
: Use object icon for kernel moduleskernel
: Acquire a lock around waitpid condition changesld.so
: Expose some internal data for use by debuggerld.so
: Link for 4K pagesld.so
: Set values in dynamic symbol tables when linkinglogin-loop
: Linefeed before issue textlogin-loop
: Use a simple, 'modern' /etc/issuelogin
: Support /etc/issue through login-loopmore
: add simple pager utilitymore
: add space bindingptrace
: Allow separate tracing of signals and syscallsptrace
: Catch signals, start work on debuggerptrace
: Inform non-parent tracer when tracee exitsptrace
: POKEDATA, permission fixes for PEEKDATAptrace
: PTRACE_SINGLESTEPptrace
: Update status before setting suspended flagptrace
: avoid suggesting process terminated when continuing from ptrace_signalptrace
: support tracing from non-parent processreadelf
: Show dynamic symbol tablessh
: use return code from last process in pipeline, and wait for everyone properlystrace
: Initial support for a ptrace() mechanism, strace toolstrace
: fix-up bad signal name tablestrace
: initial -e trace=... supportstrace
: more syscall groupings from the real stracestrace
: support -o optionstrace
: support more syscalls, output values, errnosyscall
: PTR_VALIDATE explicitly does not check null...terminal-vga
: Fixup upper left cell appearing selectedterminal
: Launch without animation when running fullscreentest-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
ToaruOS v1.99.6
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
andmupdf
. - 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 emptyata
: identify disk before checking its size...base
: Land new assets for 2.0boot
: Rewrite READMEboot
: merge retooled EFI loaderchown
: fixup semantics, support names in commandcompositor
: Add I-beam cursor; logic in terminal, file-browsercompositor
: fixup tiling sizes for one pixel of overlap, not twocompositor
: realign pointing hand cursorcpuwidget
: CPU usage graphdecorations
: Use a single spritesheet for window bordersdecorations
: try to be a bit smarter about drawing titlebar elementsdhclient
: fallback to /var/resolv.conf if /etc is read-onlye1000
: Don't print that messagee1000
: More driver rewritese1000
: More transmit changes...e1000
: Receive SRPD irqs?e1000
: add ref linke1000
: remove printe1000
: rewrite tx a bitext2
: Recover (experimental) ext2 filesystem driverext2
: report ROFSfetch
: print total time when done, instead of 0.0 remainingfile-browser
: Add picker modegraphics
: actually fix that off-by-one in draw_sprite_alphagraphics
: off-by-one on scanline width in draw_sprite_alphahelp-browser
: viably display the AGPL text for the mupdf packageimgviewer
: small improvementsipv4
: Don't wait so long for initial arp responseipv4
: try to arp local stuff?julia
: change defaultsjulia
: completely retooled julia set explorerjulia
: fixupskernel
: Higher resolution CpuPermillekernel
: Should not need to use temporary buffer for fxsave/rstrkernel
: Track relative CPU usage over one-second spanskernel
: more sensible idle trackingkernel
: times() can take NULLkernel
: track idle task usagelfbvideo
: Fallback to port-IO driver if MMIO isn't availablelibc
: cleanup, some missing thingslibm
: Hyperolibc trig functionslocaltime
: rudimentary, incorrect support for timezone offsetsmake
: Default to 2 SMP cores so we're consistently testing with SMP enabledmake
: Ensure we're creating /usr/bin so we can put auto-dep.krk in itmmu
: Actually read multiboot mmap datammu
: Reserve a few more initial PTs so we can support 64GiB of memorymsk
: clean up after ourselvesmsk
: keep using an intermediary file for gunzip as it's still way faster than the pipenet
: Handle signalsnet
: Maybe allow udp binds?net
: add missing declarationnet
: another batch of rewritesnet
: e1000 receive fixes?net
: ongoing network worknproc
: Expose processor count and use it to pick between yielding and non-yielding spin lockspanel
: Show icon of current window at full opacitypci
: Implement PIIX4 PIRQ remappingpex
: Actually try to close server endpointspex
: Cleanup pipes?piix4
: move to module, only load in virtualboxping
: Keep pinging, show summary on ^Cping
: fancier sub-ms printing (I think %Ng is supposed to do this, but mine might be broken?)ping
: shoddy implementationprocfs
: cleanup /proc/idle formatprocfs
: quick-and-dirty /proc/kallsyms, missing modulesps
: Include thread CPU usage in parent when not queried with -Treadelf
: fix typo in usagereadme
: Update references to EFI loadersmp
: Co-opt Multiboot's config_table member to sneak ACPI tables to kernelsmp
: Force userspace preemption on other cores.tcp
: Time out connection after 3 attempts, reduce time between resendstcp
: handle connection refusedterminal
: fix bad bounds in mouse position checkterminal
: various cleanupstime
: Try to figure out some sensible timezone names from the TZ offset, and collect that from ip-apitimes
: rudimentary support for process timestmpfs
: Make total block allocations available through a procfs entrytmpfs
: finer-grained locks, use global mmu mappingtop
: Differentiate general memory from memory used for tmpfstop
: Track multiple slices of usage, show averagestop
: code cleanuptop
: fixup memory leakstop
: process monitortouch
: don't segfault when unable to touchtouch
: don't segfault when unable to touchtutorial
: Adjust spacings, fix centeringudp
: add bind() and recv() test toolutil
: 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.