Hobby kernel + userspace, built mostly from scratch. Composited GUI, dynamically linked ELF binaries, networking, Python applications, and more. https://toaruos.org/

K. Lange dfa402b63a local efi install script 2 years ago
apps c210ec4987 tabstops 2 years ago
base 9eda9c53a9 utf8 - 'inline is not at beginning of declaration' 2 years ago
boot d96f52ec93 single-user terminal should start full screen 2 years ago
kernel 864cbdb868 Fix debug shell not being able to start a shell by allowing system() in kernel to take an env 2 years ago
lib ead924b110 support home/end from normal escape sequence 2 years ago
libc 64ae8d07bd fixup environ handling 2 years ago
linker c4ad63ad74 cleanup linker 2 years ago
modules 864cbdb868 Fix debug shell not being able to start a shell by allowing system() in kernel to take an env 2 years ago
util dfa402b63a local efi install script 2 years ago
.gitignore a0528a6c7c Automatically generate util/devtable 2 years ago
LICENSE e145072d11 et al. 2 years ago
Makefile 3301b5b0e5 Allow disabling KVM in Makefile 2 years ago
README.md 40a03e3872 README updates 2 years ago

README.md

ToaruOS-NIH

screenshot

ToaruOS-NIH is a distribution of ToaruOS which contains no third-party components. Its bootloader, kernel, modules, C library, and userspace applications and libraries are all written by the ToaruOS development team and direct contributors.

This distribution aims to eventually replace the core of the mainline ToaruOS, with the various third-party components building against our own C library. This is a long-term project, and developing the C library to the point where it is useful for this purpose is not expected to be completed for quite some time.

Pre-Built Images

Releases are occasionally posted on GitHub, and nightlies are available from toaruos.org.

Running ToaruOS-NIH

It is recommended that you run ToaruOS-NIH in an emulator - specifically Qemu or VirtualBox, though some testing has been done in VMware Workstation (reasonable, but missing driver support) and Bochs (not recommended).

QEMU

1GB of RAM and an Intel AC'97 sound chip are recommended:

qemu-system-i386 -cdrom image.iso -serial mon:stdio -m 1G -soundhw ac97,pcspk -enable-kvm -rtc base=localtime

You may also use OVMF with the appropriate QEMU system target. Our EFI loader supports both IA32 and X64 EFIs:

qemu-system-x86_64 -cdrom image.iso -serial mon:stdio -m 1G -soundhw ac97,pcspk -enable-kvm -rtc base=localtime \
  -bios /usr/share/qemu/OVMF.fd
qemu-system-i386 -cdrom image.iso -serial mon:stdio -m 1G -soundhw ac97,pcspk -enable-kvm -rtc base=localtime \
  -bios /path/to/OVMFia32.fd

VirtualBox

ToaruOS should function either as an "Other/Unknown" guest or an "Other/Uknown 64-bit" guest with EFI.

All network chipset options should work except for virtio-net (work on virtio drivers has not yet begun).

It is highly recommended, due to the existence of Guest Additions drivers, that you provide your VM with at least 32MB of video memory to support larger display resolutions - especially if you are using a 4K display.

Ensure that the audio controller is set to ICH AC97 and that audio output is enabled (as it is disabled by default in some versions of VirtualBox).

Keep the system chipset set to PIIX3 for best compatibility. 1GB of RAM is recommended.

VMWare

Support for VMWare is experimental.

As of writing, the following configuration has been tested as functioning:

  • Create a virtual machine for a 64-bit guest. (ToaruOS-NIH is 32-bit, but this configuration selects some hardware defaults that are desirable)
  • Ensure the VM has 1GB of RAM.
  • Remove the hard disk from the VM.
  • Remove the sound card from the VM. VMWare implements an Ensoniq chipset we do not have drivers for.
  • Manually set the firmware value to efi in the VMX file. The BIOS loader has known issues under VMWare.
  • For network settings, the NAT option is recommended.

Bochs

Using Bochs to run ToaruOS is not advised; however the following configuration options are recommended if you wish to try it:

  • Attach the CD and set it as a boot device.
  • Ensure that the pcivga device is enabled or ToaruOS will not be able to find the video card through PCI.
  • Provide at least 512MB of RAM to the guest.
  • If available, enable the e1000 network device (this has never been tested).
  • Clock settings of sync=realtime, time0=local, rtc_sync=1 are recommended.

Implementation Details

All source code for the entire operating system is included in this repository.

Kernel

The NIH kernel is essentially the same as the mainline kernel, though the PCI vendor and device ID list has been replaced with our own slimmed down version. This was the only third-party element of the ToaruOS kernel. Additionally, the headers for the kernel have been relocated from their original directories to facilitate a cleaner build. The NIH kernel should be considered the latest version of the ToaruOS kernel.

Bootloader

Mainline ToaruOS shipped with GRUB, which provided a multiboot-compatible ELF loader. To that end, our native bootloader also implements multiboot. However, as writing a feature-complete bootloader is not a goal of this project, the native bootloader is very limited, supporting only ATAPI CDs on systems with El Torito "no-emulation" support. It is not guaranteed to work on real hardware, but has been tested in QEMU, Bochs, VirtualBox, and VMware Player.

Userspace

The userspace includes a work-in-progress C standard library, the ToaruOS native libraries, the compositor (using only in-house graphics routines), and various other first-party utilities and applications.

Building

First, ensure you have the necessary build tools, which are mostly the same as mainline ToaruOS: yasm, xorriso, genext2fs (with Debian patches), python, mtools (for building FAT EFI payloads) and gnu-efi to build the EFI bootloader (I'll explore implementing necessary headers and functionality myself in the future, but for now just pull in gnu-efi and make my life easier).

Run make and you will be prompted to build a toolchain. Reply y and allow the toolchain to build.

Backwards Compatibility Notes

No ABI or API compatibility is guaranteed through the development of ToaruOS-NIH. Until a larger corpus of third-party software is ported to our new C library, APIs may change to improve or simplify library use, or to fix bugs. Even kernel ABI compatibility is not guaranteed as system calls are improved or made more compliant with expectations of POSIX or the C standard.

Rationale

ToaruOS's kernel is entirely in-house. Its userspace, however, is built on several third-party libraries and tools, such as the Newlib C library, Freetype, Cairo, libpng, and most notably Python. While the decision to build ToaruOS on these technologies is not at all considered a mistake, the possibility remains to build a userspace entirely from scratch.

Goals

Many of our initial goals have been met, including sufficient C library support to port Python 3.6.

Our current unmet goals include:

  • Enough C library support to port binutils/gcc (needs enough C to get libstdc++ working)
  • Plugin systems for the compositor and general graphics APIs to support third-party libraries in the future (including support for Cairo as a backend for the compositor, PNG support in the graphics sprite API, Truetype rendering support through FreeType in the text rendering engine).
  • Porting the complete native desktop experience from ToaruOS mainline (which mostly means porting Python prototype applications and libraries to C).

Project Layout

  • apps - Userspace applications, all first-party.
  • base - Ramdisk root filesystem staging directory. Includes C headers in base/usr/include, as well as graphical resources for the compositor and window decorator.
  • boot - Bootloader, including BIOS and EFI IA32 and X64 support.
  • cdrom - Staging area for ISO9660 CD image, containing mostly blank shadow files for the FAT image.
  • fatbase - Staging area for FAT image used by EFI.
  • kernel - The ToaruOS kernel.
  • lib - Userspace libraries.
  • libc - C standard library implementation.
  • linker - Userspace dynamic linker/loader, implements shared library support.
  • modules - Kernel modules/drivers.
  • util - Utility scripts, staging directory for the toolchain (binutils/gcc).
  • .make - Generated Makefiles.

Mirrors

ToaruOS-NIH is regularly mirrored to multiple Git hosting sites. The recommended source is Gitlab.