Theseus is a modern OS written from scratch in Rust that explores ๐ข๐ง๐ญ๐ซ๐š๐ฅ๐ข๐ง๐ ๐ฎ๐š๐ฅ ๐๐ž๐ฌ๐ข๐ ๐ง, novel OS structure, and state management. It strives to close the semantic gap between compiler and hardware in order to maximally leverage the power of language safety, and thus shift OS responsibilities (resource management) into the compiler.

Overview

Theseus OS

Theseus is a new OS written from scratch in Rust to experiment with novel OS structure, better state management, and how to shift OS responsibilities like resource management into the compiler.

We are continually working to improve the OS, including its fault recovery abilities for higher system availability without redundancy, as well as easier and more arbitrary live evolution and runtime flexbility. Though still an incomplete prototype, we envision that Theseus will be useful for high-end embedded systems or edge datacenter environments. See our published papers for more information about Theseus's design principles and implementation philosophy, as well as our goal to avoid the phenomenon of state spill or mitigate its effects as much as possible. Also, see Theseus's documentation for more.

Building Theseus

When you first check out the project, don't forget to checkout all the submodule repositories too:
git submodule update --init --recursive

Currently, we support building and running Theseus on the following host OSes:

  • Linux, 64-bit Debian-based distributions like Ubuntu, tested on Ubuntu 16.04, 18.04, 20.04.
    • Arch Linux has also been reported to work correctly.
  • Windows, using the Windows Subsystem for Linux (WSL), tested on the Ubuntu version of WSL and WSL2.
  • MacOS, tested on versions High Sierra (10.13) and Catalina (10.15.2).
  • Docker, atop any host OS that can run a Docker container.

Setting up the build environment

Linux or WSL (Windows Subsystem for Linux)

  • Update your system's package list:
    sudo apt-get update.
  • Install the following packages:
    sudo apt-get install nasm pkg-config grub-pc-bin mtools xorriso qemu qemu-kvm
    • Or on Arch Linux:
      sudo pacman -S nasm pkg-config grub mtools xorriso qemu

If you're on WSL, also do the following:

  • Install an X Server for Windows; we suggest using Xming.

  • Setup an X display as follows:

    • on WSL (version 1), run:
      export DISPLAY=:0.
    • on WSL2, run:
      export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.

    You'll need to do this each time you open up a new WSL terminal, so it's best to add it to the end of your .bashrc file.

  • If you get this error:
    Could not initialize SDL(No available video device) - exiting
    then make sure that your X Server is running and that you have set the DISPLAY environment variable above.

  • Install a C compiler and linker toolchain, such as gcc.

  • NOTE: WSL and WSL2 do not currently support using KVM.

MacOS

  • Install MacPorts and HomeBrew.
  • run the MacOS build setup script:
    ./scripts/mac_os_build_setup.sh
  • If things later go wrong, run
    rm -rf $HOME/theseus_tools_src $HOME/theseus_tools_opt /opt/local/bin/make
    and then start over.

Docker

Note: building and running Theseus within a Docker container may be slower than on a native host OS (e.g., QEMU+KVM).

  • Install Docker Engine. (Skip this if docker is already installed).
    We provide a convenience script for this on Ubuntu x86_64. Simply run:
    ./docker/install_docker_ubuntu.sh.
    • After docker installs, enable your user account to run docker without root privileges:
      sudo groupadd docker; sudo usermod -aG docker $USER
      Then, log out and log back in (or restart your computer) for the user/group changes to take effet.
  • Build the docker image:
    ./docker/build_docker.sh.
    This does not build Theseus, but rather only creates a docker image that contains all the necessary dependencies to build and run Theseus.
  • Run docker image locally as a container:
    ./docker/run_docker.sh.
    Now you can run make run or other Theseus-specific build/run commands from within the docker container's shell.

Notes on Docker usage

  • The docker-based workflow should only require you to re-run the run_docker.sh script multiple times (e.g., to re-build or run Theseus modifying its code). The docker installation and docker build steps are one-time only (though it won't hurt to run them again).
  • KVM doesn't currently work in docker. To run Theseus in QEMU using KVM, you can build Theseus within docker, exit the container, and then run make orun host=yes on your host machine.
  • When using docker, you can ignore the following section about installing Rust because our Dockerfile and scripts do it automatically.

Installing Rust

(Not needed if using Docker)

Install the current Rust compiler and toolchain by following the setup instructions here, which is just this command:
curl https://sh.rustup.rs -sSf | sh

Building and Running

To build and run Theseus in QEMU, simply run:
make run

Run make help to see other make targets and the various options that can be passed to make.

Note: Rust compiler versions

Because we use the Rust nightly compiler (not stable), the Theseus Makefile checks to make sure that you're using the same version of Rust that we are. We were inspired to add this safety check when we failed to build other Rust projects put out there on Github because they used an earlier version of the nightly Rust compiler than what we had installed on our systems. To avoid this undiagnosable problem, we force you to use a specific version of rustc that is known to properly build Theseus; we also use the standard rust-toolchain file to ensure this. The Rust version is upgraded as often as possible to align with the latest Rust nightly, but this is a best-effort policy.

As such, if you see a build error about the improper version of rustc, follow the instructions displayed after the error message.

Using QEMU

QEMU allows us to run Theseus quickly and easily in its own virtual machine. To exit Theseus in QEMU, press Ctrl+Alt+G (or Ctrl+Alt on some systems), which releases your keyboard and mouse focus from the QEMU window. Then press Ctrl+C in the terminal window that you ran make run from originally to kill QEMU, or you can also quit QEMU using the GUI (x) button.

To investigate the hardware/machine state of the running QEMU VM, you can switch to the QEMU console by pressing Ctrl+Alt+2. Switch back to the main window with Ctrl+Alt+1. On Mac, manually select VGA or compact_monitor0 under View from the QEMU menu bar.

To access/expose a PCI device in QEMU using PCI passthrough via VFIO, see these instructions.

KVM Support

While not strictly required, KVM will speed up the execution of QEMU. To install KVM, run the following command:
sudo apt-get install kvm.
To enable KVM support, add host=yes to your make command, e.g.,
make run host=yes
This option is only supported on Linux hosts.

Debugging

GDB has built-in support for QEMU, but it doesn't play nicely with OSes that run in long mode. In order to get it working properly with our OS in Rust, we need to patch it and build it locally. The hard part has already been done for us (details here), so we can just quickly set it up with the following commands.

First, install the following packages:
sudo apt-get install texinfo flex bison python-dev ncurses-dev

Then, from the base directory of the Theseus project, run this command to easily download and build it from an existing patched repo:
curl -sf https://raw.githubusercontent.com/phil-opp/binutils-gdb/rust-os/build-rust-os-gdb.sh | sh

After that, you should have a rust-os-gdb directory that contains the gdb executables and scripts.

Then, simply run make run_pause to build and run Theseus in QEMU, which will pause the OS's execution until we attach our patched GDB instance.
To attach the debugger to our paused QEMU instance, run make gdb in another terminal. QEMU will be paused until we move the debugger forward, with n to step through or c to continue running the debugger.
Try setting a breakpoint at the kernel's entry function using b nano_core::nano_core_start or at a specific file/line, e.g., b scheduler.rs:40.

Documentation

Theseus, like the Rust language itself, includes two forms of documentation: the main source-level documentation within the code itself, and a "book" for high-level overviews of design concepts. The latter is a work in progress but may still be useful, while the former is more useful for developing on Theseus.

Documentation is currently hosted online here, but may be out of date. It's best to build it yourself, as detailed below.

Once your build environment is fully set up, you can generate Theseus's documentation in standard Rust docs.rs format. To do so, simply run:
make doc

Or to view the documentation in a browser on your local machine:
make view-doc

There are similar commands for building the Theseus book:
make book

IDE Setup

Our personal preference is to use Visual Studio Code (VS Code), which has excellent cross-platform support for Rust. Other options are available here, but we don't recommend them.

For VS Code, recommended plugins are:

  • One of the following Rust language plugins. Disable the "all targets" option in either plugin's settings, such that the test target isn't used.
    • rust-analyzer, by matklad
    • Rust (RLS), by rust-lang
  • Better TOML, by bungcip
  • x86 and x86_64 Assembly, by 13xforever

Fixing Rustup, Rust Toolchain, or RLS Problems

Sometimes things just don't want to behave, especially if there were issues with the currently-chosen Rust nightly version. In that case, try the following steps to fix it:

  • Set your default Rust toolchain to the one version in the rust-toolchain file, for example:
    rustup default $(cat rust-toolchain).
  • With your newly-set default toolchain, add the necessary components:
    rustup component add rls rust-analysis rust-src.
  • In VS Code (or whatever IDE you're using), uninstall and reinstall the RLS extension, reloading the IDE each time.
  • Check your IDE's settings to make sure that no weird rust or RLS settings have been set; building Theseus doesn't require any special RLS settings.
  • If you're still having lots of issues, remove all other toolchains besides the default one and try again.
    You can see other installed toolchains with rustup toolchain list.

Other

Booting on Real Hardware

We have tested Theseus on a variety of real machines, including Intel NUC devices, various Thinkpad laptops, and Supermicro servers. Currently, the only limiting factor is that the device support booting via USB or PXE using traditional BIOS rather than UEFI; support for UEFI is a work-in-progress.

To boot over USB, simply run make boot usb=sdc, in which sdc is the device node for the USB disk itself (not a partition like sdc2) to which you want to write the OS image. On WSL or other host environments where /dev device nodes don't exist, you can simply run make iso and burn the .iso file in the build/ directory to a USB, e.g., using Rufus on Windows.

To boot Theseus over PXE (network boot), see this set of separate instructions.

Acknowledgements

We would like to express our thanks to the OS Dev wiki and its community and to Philipp Oppermann's blog_os for serving as excellent starting points for Theseus. The early days of Theseus's development progress are indebted to these resources.

License

Theseus's source code is licensed under the MIT License. See the LICENSE-MIT file for more.

Contributing

We adhere to similar development and style guidelines as the main Rust project.

PRs and issues are welcome from anyone; because Theseus is an experimental OS, certain features may be deprioritized or excluded from the main branch. Don't hesitate to ask or mention something though! ๐Ÿ˜„

More details to come.

Comments
  • Use (de)serialization to shift nano_core symbol parsing to build time

    Use (de)serialization to shift nano_core symbol parsing to build time

    As mentioned in #425 readelf should be replaced with a proper "handmade" tool. One aspect of the proposed solution is serialization/deserialization, which can be addressed by the serde crate. Other than that, vendoring serde might help in the future with similar problems.

    As you may know, serde does not support any serialization format. There are different paths to consider:

    • Vendor a textual format serializer/deserializer like serde_json;
    • Vendor a binary format serializer/deserializer like postcard;
    • Implement and have our own.

    Every crate mentioned supports no_std.

    enhancement help wanted major 
    opened by ZetaNumbers 24
  • Parsing the nano_core symbol file does not work for non-`en_US` locales

    Parsing the nano_core symbol file does not work for non-`en_US` locales

    Invoked command: make run host=yes

    stdout
    =================== BUILDING ALL CRATES ===================
    	 TARGET: "x86_64-theseus"
    	 KERNEL_PREFIX: "k#"
    	 APP_PREFIX: "a#"
    	 THESEUS_CONFIG (before build.rs script): ""
    RUST_TARGET_PATH="/home/zeta0/Projects/Theseus/cfg" RUSTFLAGS="--emit=obj -C debuginfo=2 -C code-model=large -C relocation-model=static -D unused-must-use -Z merge-functions=disabled -Z share-generics=no" cargo build --release -Z unstable-options -Z build-std=core,alloc -Z build-std-features=compiler-builtins-mem  --all --target x86_64-theseus
    ld -n -T /home/zeta0/Projects/Theseus/kernel/nano_core/src/boot/arch_x86_64/linker_higher_half.ld -o /home/zeta0/Projects/Theseus/build/nano_core/nano_core-x86_64.bin  /home/zeta0/Projects/Theseus/build/nano_core/boot/x86_64/ap_boot.o  /home/zeta0/Projects/Theseus/build/nano_core/boot/x86_64/ap_realmode.o  /home/zeta0/Projects/Theseus/build/nano_core/boot/x86_64/boot.o  /home/zeta0/Projects/Theseus/build/nano_core/boot/x86_64/common.o  /home/zeta0/Projects/Theseus/build/nano_core/boot/x86_64/defines.o  /home/zeta0/Projects/Theseus/build/nano_core/boot/x86_64/multiboot_header.o /home/zeta0/Projects/Theseus/target/x86_64-theseus/release/libnano_core.a
    '/home/zeta0/Projects/Theseus/cfg/x86_64-theseus.json' -> '/home/zeta0/Projects/Theseus/build/deps/x86_64-theseus.json'
    make grub
    make[1]: ะฒั…ะพะด ะฒ ะบะฐั‚ะฐะปะพะณ ยซ/home/zeta0/Projects/Theseusยป
    make[1]: ะฒั‹ั…ะพะด ะธะท ะบะฐั‚ะฐะปะพะณะฐ ยซ/home/zeta0/Projects/Theseusยป
    qemu-system-x86_64 -cdrom /home/zeta0/Projects/Theseus/build/theseus-x86_64.iso -boot d -no-reboot -no-shutdown -s -serial stdio  -m 512M  -smp 4 -net none -cpu host -accel kvm
    [I] kernel/nano_core/src/lib.rs:106: Logger initialized.
    
    nano_core_start(): initialized logger.
    
    exceptions_early(): double_fault_stack_top_unusable: Some(v0xFFFFFFFF80612000)
    
    exceptions_early(): Created TSS: TaskStateSegment { reserved_1: 0, privilege_stack_table: [0x0, 0x0, 0x0], reserved_2: 0, interrupt_stack_table: [0xffffffff80612000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0], reserved_3: 0, reserved_4: 0, iomap_base: 0 }
    
    nano_core_start(): initialized early IDT with exception handlers.
    
    nano_core_start(): booted via multiboot2 with info at 0xFFFFFFFF816D58A0.
    
    [D] kernel/memory/src/lib.rs:156: bootloader info memory: p0x16D58A0 to p0x16D93B8, bootloader modules: p0x4D4000 to p0x16D5898
    
    [D] kernel/memory/src/lib.rs:159: kernel_phys_start: p0x100000, kernel_phys_end: p0x612000 kernel_virt_end = v0xffffffff80612000
    
    [D] kernel/memory/src/lib.rs:207: Initialized new frame allocator!
    
    [D] kernel/frame_allocator/src/lib.rs:922: ----------------- FREE GENERAL FRAMES ---------------
    
    [D] kernel/frame_allocator/src/lib.rs:923: 	 Chunk { typ: Free, frames: Frame(p0x16DA000)..=Frame(p0x1FFDF000) }
    
    [D] kernel/frame_allocator/src/lib.rs:924: -----------------------------------------------------
    
    [D] kernel/frame_allocator/src/lib.rs:925: ----------------- FREE RESERVED FRAMES --------------
    
    [D] kernel/frame_allocator/src/lib.rs:926: 	 Chunk { typ: Reserved, frames: Frame(p0x0)..=Frame(p0xFF000) }
    
    [D] kernel/frame_allocator/src/lib.rs:926: 	 Chunk { typ: Reserved, frames: Frame(p0x100000)..=Frame(p0x16D9000) }
    
    [D] kernel/frame_allocator/src/lib.rs:926: 	 Chunk { typ: Reserved, frames: Frame(p0x1FFE0000)..=Frame(p0x1FFFF000) }
    
    [D] kernel/frame_allocator/src/lib.rs:926: 	 Chunk { typ: Reserved, frames: Frame(p0xFEFFC000)..=Frame(p0xFEFFF000) }
    
    [D] kernel/frame_allocator/src/lib.rs:926: 	 Chunk { typ: Reserved, frames: Frame(p0xFFFC0000)..=Frame(p0xFFFFF000) }
    
    [D] kernel/frame_allocator/src/lib.rs:927: -----------------------------------------------------
    
    [D] kernel/frame_allocator/src/lib.rs:928: ------------------ RESERVED REGIONS -----------------
    
    [D] kernel/frame_allocator/src/lib.rs:929: 	 Chunk { typ: Reserved, frames: Frame(p0x0)..=Frame(p0xFF000) }
    
    [D] kernel/frame_allocator/src/lib.rs:929: 	 Chunk { typ: Reserved, frames: Frame(p0x100000)..=Frame(p0x16D9000) }
    
    [D] kernel/frame_allocator/src/lib.rs:929: 	 Chunk { typ: Reserved, frames: Frame(p0x1FFE0000)..=Frame(p0x1FFFF000) }
    
    [D] kernel/frame_allocator/src/lib.rs:929: 	 Chunk { typ: Reserved, frames: Frame(p0xFEFFC000)..=Frame(p0xFEFFF000) }
    
    [D] kernel/frame_allocator/src/lib.rs:929: 	 Chunk { typ: Reserved, frames: Frame(p0xFFFC0000)..=Frame(p0xFFFFF000) }
    
    [D] kernel/frame_allocator/src/lib.rs:930: -----------------------------------------------------
    
    [D] kernel/memory/src/lib.rs:211: Initialized new page allocator!
    
    [D] kernel/page_allocator/src/lib.rs:682: --------------- FREE PAGES LIST ---------------
    
    [D] kernel/page_allocator/src/lib.rs:684: Chunk { pages: Page(v0x0)..=Page(v0x612000) }
    
    [D] kernel/page_allocator/src/lib.rs:684: Chunk { pages: Page(v0x613000)..=Page(v0xFFFFFE7FFFFFF000) }
    
    [D] kernel/page_allocator/src/lib.rs:684: Chunk { pages: Page(v0xFFFFFE8000000000)..=Page(v0xFFFFFEFFFFFFF000) }
    
    [D] kernel/page_allocator/src/lib.rs:684: Chunk { pages: Page(v0xFFFFFF8000000000)..=Page(v0xFFFFFFFFFFFFF000) }
    
    [D] kernel/page_allocator/src/lib.rs:686: ---------------------------------------------------
    
    [D] kernel/memory_x86_64/src/lib.rs:134: Looking at loaded section .init at 0x100000, size 0x526
    
    [D] kernel/memory_x86_64/src/lib.rs:229:      will map kernel section ".init" as "nano_core .init" at vaddr: 0xFFFFFFFF80100000, size 0x526 bytes
    
    [D] kernel/memory_x86_64/src/lib.rs:134: Looking at loaded section .text at 0xFFFFFFFF80101000, size 0x1FF97A
    
    [D] kernel/memory_x86_64/src/lib.rs:229:      will map kernel section ".text" as "nano_core .text" at vaddr: 0xFFFFFFFF80101000, size 0x1FF97A bytes
    
    [D] kernel/memory_x86_64/src/lib.rs:134: Looking at loaded section .rodata at 0xFFFFFFFF80301000, size 0x6C494
    
    [D] kernel/memory_x86_64/src/lib.rs:229:      will map kernel section ".rodata" as "nano_core .rodata" at vaddr: 0xFFFFFFFF80301000, size 0x6C494 bytes
    
    [D] kernel/memory_x86_64/src/lib.rs:134: Looking at loaded section .eh_frame at 0xFFFFFFFF8036E000, size 0x61684
    
    [D] kernel/memory_x86_64/src/lib.rs:229:      will map kernel section ".eh_frame" as "nano_core .eh_frame" at vaddr: 0xFFFFFFFF8036E000, size 0x61684 bytes
    
    [D] kernel/memory_x86_64/src/lib.rs:134: Looking at loaded section .gcc_except_table at 0xFFFFFFFF803D0000, size 0xAD20
    
    [D] kernel/memory_x86_64/src/lib.rs:229:      will map kernel section ".gcc_except_table" as "nano_core .gcc_except_table" at vaddr: 0xFFFFFFFF803D0000, size 0xAD20 bytes
    
    [D] kernel/memory_x86_64/src/lib.rs:134: Looking at loaded section .data at 0xFFFFFFFF803DB000, size 0x3040
    
    [D] kernel/memory_x86_64/src/lib.rs:229:      will map kernel section ".data" as "nano_core .data" at vaddr: 0xFFFFFFFF803DB000, size 0x3040 bytes
    
    [D] kernel/memory_x86_64/src/lib.rs:134: Looking at loaded section .bss at 0xFFFFFFFF803DF000, size 0x69E0
    
    [D] kernel/memory_x86_64/src/lib.rs:229:      will map kernel section ".bss" as "nano_core .bss" at vaddr: 0xFFFFFFFF803DF000, size 0x69E0 bytes
    
    [D] kernel/memory_x86_64/src/lib.rs:134: Looking at loaded section .page_table at 0xFFFFFFFF803E6000, size 0x1000
    
    [D] kernel/memory_x86_64/src/lib.rs:229:      will map kernel section ".page_table" as "initial page_table" at vaddr: 0xFFFFFFFF803E6000, size 0x1000 bytes
    
    [D] kernel/memory_x86_64/src/lib.rs:134: Looking at loaded section .stack at 0xFFFFFFFF80600000, size 0x12000
    
    [D] kernel/memory_x86_64/src/lib.rs:229:      will map kernel section ".stack" as "initial stack" at vaddr: 0xFFFFFFFF80600000, size 0x12000 bytes
    
    [D] kernel/memory/src/paging/mod.rs:211: AggregatedSectionMemoryBounds { text: SectionMemoryBounds { start: (v0xFFFFFFFF80100000, p0x100000), end: (v0xFFFFFFFF8030097A, p0x30097A), flags: PRESENT }, rodata: SectionMemoryBounds { start: (v0xFFFFFFFF80301000, p0x301000), end: (v0xFFFFFFFF803DAD20, p0x3DAD20), flags: PRESENT | NO_EXECUTE }, data: SectionMemoryBounds { start: (v0xFFFFFFFF803DB000, p0x3DB000), end: (v0xFFFFFFFF803E59E0, p0x3E59E0), flags: PRESENT | WRITABLE | NO_EXECUTE }, page_table: SectionMemoryBounds { start: (v0xFFFFFFFF803E6000, p0x3E6000), end: (v0xFFFFFFFF803E7000, p0x3E7000), flags: PRESENT | WRITABLE | NO_EXECUTE }, stack: SectionMemoryBounds { start: (v0xFFFFFFFF80600000, p0x600000), end: (v0xFFFFFFFF80612000, p0x612000), flags: PRESENT | WRITABLE | NO_EXECUTE } }
    
    [Some(SectionMemoryBounds { start: (v0xFFFFFFFF80100000, p0x100000), end: (v0xFFFFFFFF80100526, p0x100526), flags: PRESENT }), Some(SectionMemoryBounds { start: (v0xFFFFFFFF80101000, p0x101000), end: (v0xFFFFFFFF8030097A, p0x30097A), flags: PRESENT }), Some(SectionMemoryBounds { start: (v0xFFFFFFFF80301000, p0x301000), end: (v0xFFFFFFFF8036D494, p0x36D494), flags: PRESENT | NO_EXECUTE }), Some(SectionMemoryBounds { start: (v0xFFFFFFFF8036E000, p0x36E000), end: (v0xFFFFFFFF803CF684, p0x3CF684), flags: PRESENT | NO_EXECUTE }), Some(SectionMemoryBounds { start: (v0xFFFFFFFF803D0000, p0x3D0000), end: (v0xFFFFFFFF803DAD20, p0x3DAD20), flags: PRESENT | NO_EXECUTE }), Some(SectionMemoryBounds { start: (v0xFFFFFFFF803DB000, p0x3DB000), end: (v0xFFFFFFFF803DE040, p0x3DE040), flags: PRESENT | WRITABLE | NO_EXECUTE }), Some(SectionMemoryBounds { start: (v0xFFFFFFFF803DF000, p0x3DF000), end: (v0xFFFFFFFF803E59E0, p0x3E59E0), flags: PRESENT | WRITABLE | NO_EXECUTE }), Some(SectionMemoryBounds { start: (v0xFFFFFFFF803E6000, p0x3E6000), end: (v0xFFFFFFFF803E7000, p0x3E7000), flags: PRESENT | WRITABLE | NO_EXECUTE }), Some(SectionMemoryBounds { start: (v0xFFFFFFFF80600000, p0x600000), end: (v0xFFFFFFFF80612000, p0x612000), flags: PRESENT | WRITABLE | NO_EXECUTE }), None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]
    
    [D] kernel/memory/src/paging/mod.rs:216: Bootstrapped initial PageTable(p4: 0x3E6000)
    
    [D] kernel/memory/src/paging/mod.rs:221: multiboot vaddr: 0xFFFFFFFF816D58A0, multiboot paddr: 0x16D58A0, size: 0x3B18
    
    
    
    [D] kernel/memory/src/paging/mod.rs:248: AggregatedSectionMemoryBounds { text: SectionMemoryBounds { start: (v0xFFFFFFFF80100000, p0x100000), end: (v0xFFFFFFFF8030097A, p0x30097A), flags: PRESENT }, rodata: SectionMemoryBounds { start: (v0xFFFFFFFF80301000, p0x301000), end: (v0xFFFFFFFF803DAD20, p0x3DAD20), flags: PRESENT | NO_EXECUTE }, data: SectionMemoryBounds { start: (v0xFFFFFFFF803DB000, p0x3DB000), end: (v0xFFFFFFFF803E59E0, p0x3E59E0), flags: PRESENT | WRITABLE | NO_EXECUTE }, page_table: SectionMemoryBounds { start: (v0xFFFFFFFF803E6000, p0x3E6000), end: (v0xFFFFFFFF803E7000, p0x3E7000), flags: PRESENT | WRITABLE | NO_EXECUTE }, stack: SectionMemoryBounds { start: (v0xFFFFFFFF80600000, p0x600000), end: (v0xFFFFFFFF80612000, p0x612000), flags: PRESENT | WRITABLE | NO_EXECUTE } }
    
    [D] kernel/memory/src/paging/mod.rs:337: identity_mapped_pages: [Some(MappedPages { page_table_p4: Frame(p0x16DA000), pages: AllocatedPages(Page(v0x100000)..=Page(v0x300000)), flags: PRESENT }), Some(MappedPages { page_table_p4: Frame(p0x16DA000), pages: AllocatedPages(Page(v0x301000)..=Page(v0x3DA000)), flags: PRESENT | NO_EXECUTE }), Some(MappedPages { page_table_p4: Frame(p0x16DA000), pages: AllocatedPages(Page(v0x3DB000)..=Page(v0x3E5000)), flags: PRESENT | WRITABLE | NO_EXECUTE }), Some(MappedPages { page_table_p4: Frame(p0x16DA000), pages: AllocatedPages(Page(v0xA0000)..=Page(v0xBF000)), flags: PRESENT | WRITABLE | NO_CACHE })]
    
    [D] kernel/memory/src/paging/mod.rs:338: higher_half_mapped_pages: [None, None, None, Some(MappedPages { page_table_p4: Frame(p0x16DA000), pages: AllocatedPages(Page(v0xFFFFFFFF800A0000)..=Page(v0xFFFFFFFF800BF000)), flags: PRESENT | WRITABLE | NO_CACHE | EXCLUSIVE })]
    
    [D] kernel/memory/src/paging/mod.rs:351: switching from old page table PageTable(p4: 0x3E6000) to new page table PageTable(p4: 0x16DA000)
    
    [D] kernel/memory/src/paging/mod.rs:353: switched to new page table PageTable(p4: 0x16DA000).
    
    [D] kernel/memory/src/lib.rs:226: Done with paging::init(). new page_table: PageTable(p4: 0x16DA000)
    
    [D] kernel/memory_initialization/src/lib.rs:96: Initial heap starts at: 0xFFFFFE8000000000, size: 0x1400000, pages: AllocatedPages(Page(v0xFFFFFE8000000000)..=Page(v0xFFFFFE80013FF000))
    
    [D] kernel/memory_initialization/src/lib.rs:111: Mapped and initialized the initial heap
    
    nano_core_start(): initialized memory subsystem.
    
    [T] kernel/nano_core/src/lib.rs:137: state_store initialized.
    
    nano_core_start(): initialized state store.
    
    [D] kernel/mod_mgmt/src/lib.rs:172: Created namespace directories: "_applications, _kernel"
    
    nano_core_start(): initialized crate namespace subsystem.
    
    nano_core_start(): parsing nano_core crate, please wait ...
    
    [D] kernel/mod_mgmt/src/parse_nano_core.rs:83: parse_nano_core: trying to load and parse the nano_core file: Path { path: "/namespaces/_kernel/nano_core.sym" }
    
    [D] kernel/mod_mgmt/src/parse_nano_core.rs:152: Parsing nano_core symbol file: size 0x12e56f(1238383), mapped_pages: MappedPages { page_table_p4: Frame(p0x16DA000), pages: AllocatedPages(Page(v0xF1B000)..=Page(v0x1049000)), flags: PRESENT | EXCLUSIVE }, text_pages: Mutex { data: MappedPages { page_table_p4: Frame(p0x16DA000), pages: AllocatedPages(Page(v0xFFFFFFFF80100000)..=Page(v0xFFFFFFFF80300000)), flags: PRESENT | EXCLUSIVE }}, rodata_pages: Mutex { data: MappedPages { page_table_p4: Frame(p0x16DA000), pages: AllocatedPages(Page(v0xFFFFFFFF80301000)..=Page(v0xFFFFFFFF803DA000)), flags: PRESENT | EXCLUSIVE | NO_EXECUTE }}, data_pages: Mutex { data: MappedPages { page_table_p4: Frame(p0x16DA000), pages: AllocatedPages(Page(v0xFFFFFFFF803DB000)..=Page(v0xFFFFFFFF803E5000)), flags: PRESENT | WRITABLE | EXCLUSIVE | NO_EXECUTE }}
    
    [T] kernel/mod_mgmt/src/parse_nano_core.rs:373: parse_nano_core_symbol_file(): finished looping over symtab.
    
    [T] kernel/mod_mgmt/src/parse_nano_core.rs:120: parse_nano_core(): adding symbols to namespace "_kernel"...
    
    [T] kernel/mod_mgmt/src/parse_nano_core.rs:122: parse_nano_core(): finished adding symbols.
    
    [I] kernel/mod_mgmt/src/parse_nano_core.rs:131: Finished parsing nano_core crate, 0 new symbols.
    
    Theseus is shutting down, msg: Missing/invalid symbol expected from assembly code "ap_start_realmode"
    
    [W] kernel/nano_core/src/lib.rs:66: Theseus is shutting down, msg: Missing/invalid symbol expected from assembly code "ap_start_realmode"
    
    [T] kernel/panic_wrapper/src/lib.rs:32: at top of panic_wrapper: PanicInfo { payload: Any { .. }, message: Some(Missing/invalid symbol expected from assembly code "ap_start_realmode"), location: Location { file: "kernel/nano_core/src/lib.rs", line: 69, col: 5 } }
    
    [D] kernel/fault_log/src/lib.rs:211: panic file nano_core
    
    [E] kernel/panic_wrapper/src/lib.rs:40: ------------------ Stack Trace (DWARF) ---------------------------
    
    [E] kernel/panic_wrapper/src/lib.rs:50:   0xFFFFFFFF801FAEDC in ??
    
    [E] kernel/panic_wrapper/src/lib.rs:50:   0xFFFFFFFF801F32A6 in ??
    
    [E] kernel/panic_wrapper/src/lib.rs:50:   0xFFFFFFFF801F26B5 in ??
    
    [E] kernel/panic_wrapper/src/lib.rs:50:   0xFFFFFFFF802DA43C in ??
    
    [E] kernel/panic_wrapper/src/lib.rs:50:   0xFFFFFFFF80102E8F in ??
    
    [E] kernel/panic_wrapper/src/lib.rs:50:   0xFFFFFFFF80103893 in ??
    
    [E] kernel/unwind/src/lib.rs:639: gimli error: NoUnwindInfoForAddress
    
    [E] kernel/panic_wrapper/src/lib.rs:87:   gimli error while finding FDE for address
    
    [E] kernel/panic_wrapper/src/lib.rs:89: ------------------------------------------------------------------
    
    [D] kernel/panic_wrapper/src/lib.rs:99: No kill handler callback in Task None
    
    [E] kernel/panic_wrapper/src/lib.rs:112: Task None was unable to start unwinding procedure, error: get_my_current_task() failed.
    
    
      PANIC: panicked at 'Missing/invalid symbol expected from assembly code "ap_start_realmode"', kernel/nano_core/src/lib.rs:69:5
    
      [E] kernel/panic_entry/src/lib.rs:64: PANIC: panicked at 'Missing/invalid symbol expected from assembly code "ap_start_realmode"', kernel/nano_core/src/lib.rs:69:5
    
    stderr
    info: component 'rust-src' is up to date
       Compiling compiler_builtins v0.1.43
       Compiling core v0.0.0 (/home/zeta0/.rustup/toolchains/nightly-2021-05-20-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core)
       Compiling proc-macro2 v1.0.24
       Compiling unicode-xid v0.2.1
       Compiling syn v1.0.48
       Compiling bitflags v1.1.0
       Compiling log v0.4.8
       Compiling autocfg v1.0.0
       Compiling kernel_config v0.1.0 (/home/zeta0/Projects/Theseus/kernel/kernel_config)
       Compiling entryflags_x86_64 v0.1.0 (/home/zeta0/Projects/Theseus/kernel/entryflags_x86_64)
       Compiling memory_structs v0.1.0 (/home/zeta0/Projects/Theseus/kernel/memory_structs)
       Compiling convert_case v0.4.0
       Compiling paste v1.0.5
       Compiling page_table_entry v0.1.0 (/home/zeta0/Projects/Theseus/kernel/page_table_entry)
       Compiling memory_x86_64 v0.1.0 (/home/zeta0/Projects/Theseus/kernel/memory_x86_64)
       Compiling page_allocator v0.1.0 (/home/zeta0/Projects/Theseus/kernel/page_allocator)
       Compiling frame_allocator v0.1.0 (/home/zeta0/Projects/Theseus/kernel/frame_allocator)
       Compiling memory v0.1.0 (/home/zeta0/Projects/Theseus/kernel/memory)
       Compiling semver-parser v0.7.0
       Compiling memchr v2.3.4
       Compiling pit_clock v0.1.0 (/home/zeta0/Projects/Theseus/kernel/pit_clock)
       Compiling cc v1.0.28
       Compiling apic v0.1.0 (/home/zeta0/Projects/Theseus/kernel/apic)
       Compiling heap v0.1.0 (/home/zeta0/Projects/Theseus/kernel/heap)
       Compiling crate_metadata v0.1.0 (/home/zeta0/Projects/Theseus/kernel/crate_metadata)
       Compiling stack v0.1.0 (/home/zeta0/Projects/Theseus/kernel/stack)
       Compiling context_switch_regular v0.1.0 (/home/zeta0/Projects/Theseus/kernel/context_switch_regular)
       Compiling mod_mgmt v0.1.0 (/home/zeta0/Projects/Theseus/kernel/mod_mgmt)
       Compiling tss v0.1.0 (/home/zeta0/Projects/Theseus/kernel/tss)
       Compiling context_switch_avx v0.1.0 (/home/zeta0/Projects/Theseus/kernel/context_switch_avx)
       Compiling context_switch_sse v0.1.0 (/home/zeta0/Projects/Theseus/kernel/context_switch_sse)
       Compiling context_switch v0.1.0 (/home/zeta0/Projects/Theseus/kernel/context_switch)
       Compiling task v0.1.0 (/home/zeta0/Projects/Theseus/kernel/task)
       Compiling shapes v0.1.0 (/home/zeta0/Projects/Theseus/kernel/shapes)
       Compiling event_types v0.1.0 (/home/zeta0/Projects/Theseus/kernel/event_types)
       Compiling serial_port v0.1.0 (/home/zeta0/Projects/Theseus/kernel/serial_port)
       Compiling logger v0.1.0 (/home/zeta0/Projects/Theseus/kernel/logger)
       Compiling single_simd_task_optimization v0.1.0 (/home/zeta0/Projects/Theseus/kernel/single_simd_task_optimization)
       Compiling runqueue_priority v0.1.0 (/home/zeta0/Projects/Theseus/kernel/runqueue_priority)
       Compiling runqueue_round_robin v0.1.0 (/home/zeta0/Projects/Theseus/kernel/runqueue_round_robin)
       Compiling runqueue v0.1.0 (/home/zeta0/Projects/Theseus/kernel/runqueue)
       Compiling scheduler_priority v0.1.0 (/home/zeta0/Projects/Theseus/kernel/scheduler_priority)
       Compiling scheduler_round_robin v0.1.0 (/home/zeta0/Projects/Theseus/kernel/scheduler_round_robin)
       Compiling scheduler v0.1.0 (/home/zeta0/Projects/Theseus/kernel/scheduler)
       Compiling sdt v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi/sdt)
       Compiling acpi_table v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi/acpi_table)
       Compiling vga_buffer v0.1.0 (/home/zeta0/Projects/Theseus/kernel/vga_buffer)
       Compiling ps2 v0.1.0 (/home/zeta0/Projects/Theseus/kernel/ps2)
       Compiling pic v0.1.0 (/home/zeta0/Projects/Theseus/kernel/pic)
       Compiling gdt v0.1.0 (/home/zeta0/Projects/Theseus/kernel/gdt)
       Compiling pause v0.1.0 (/home/zeta0/Projects/Theseus/kernel/pause)
       Compiling exceptions_early v0.1.0 (/home/zeta0/Projects/Theseus/kernel/exceptions_early)
       Compiling tlb_shootdown v0.1.0 (/home/zeta0/Projects/Theseus/kernel/tlb_shootdown)
       Compiling mouse v0.1.0 (/home/zeta0/Projects/Theseus/kernel/mouse)
       Compiling hpet v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi/hpet)
       Compiling keyboard v0.1.0 (/home/zeta0/Projects/Theseus/kernel/keyboard)
       Compiling interrupts v0.1.0 (/home/zeta0/Projects/Theseus/kernel/interrupts)
       Compiling arrayvec v0.4.11
       Compiling print v0.1.0 (/home/zeta0/Projects/Theseus/kernel/print)
       Compiling fault_log v0.1.0 (/home/zeta0/Projects/Theseus/kernel/fault_log)
       Compiling unwind v0.1.0 (/home/zeta0/Projects/Theseus/kernel/unwind)
       Compiling crate_swap v0.1.0 (/home/zeta0/Projects/Theseus/kernel/crate_swap)
       Compiling catch_unwind v0.1.0 (/home/zeta0/Projects/Theseus/kernel/catch_unwind)
       Compiling fault_crate_swap v0.1.0 (/home/zeta0/Projects/Theseus/kernel/fault_crate_swap)
       Compiling spawn v0.1.0 (/home/zeta0/Projects/Theseus/kernel/spawn)
       Compiling terminal_print v0.1.0 (/home/zeta0/Projects/Theseus/kernel/terminal_print)
       Compiling ioapic v0.1.0 (/home/zeta0/Projects/Theseus/kernel/ioapic)
       Compiling dmar v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi/dmar)
       Compiling rsdt v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi/rsdt)
       Compiling madt v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi/madt)
       Compiling fadt v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi/fadt)
       Compiling acpi_table_handler v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi/acpi_table_handler)
       Compiling rsdp v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi/rsdp)
       Compiling ap_start v0.1.0 (/home/zeta0/Projects/Theseus/kernel/ap_start)
       Compiling acpi v0.1.0 (/home/zeta0/Projects/Theseus/kernel/acpi)
       Compiling color v0.1.0 (/home/zeta0/Projects/Theseus/kernel/color)
       Compiling multicore_bringup v0.1.0 (/home/zeta0/Projects/Theseus/kernel/multicore_bringup)
       Compiling framebuffer v0.1.0 (/home/zeta0/Projects/Theseus/kernel/framebuffer)
       Compiling nic_buffers v0.1.0 (/home/zeta0/Projects/Theseus/kernel/nic_buffers)
       Compiling intel_ethernet v0.1.0 (/home/zeta0/Projects/Theseus/kernel/intel_ethernet)
       Compiling pci v0.1.0 (/home/zeta0/Projects/Theseus/kernel/pci)
       Compiling nic_queues v0.1.0 (/home/zeta0/Projects/Theseus/kernel/nic_queues)
       Compiling font v0.1.0 (/home/zeta0/Projects/Theseus/kernel/font)
       Compiling nic_initialization v0.1.0 (/home/zeta0/Projects/Theseus/kernel/nic_initialization)
       Compiling compositor v0.1.0 (/home/zeta0/Projects/Theseus/kernel/compositor)
       Compiling framebuffer_compositor v0.1.0 (/home/zeta0/Projects/Theseus/kernel/framebuffer_compositor)
       Compiling window_inner v0.1.0 (/home/zeta0/Projects/Theseus/kernel/window_inner)
       Compiling framebuffer_drawer v0.1.0 (/home/zeta0/Projects/Theseus/kernel/framebuffer_drawer)
       Compiling network_interface_card v0.1.0 (/home/zeta0/Projects/Theseus/kernel/network_interface_card)
       Compiling window_manager v0.1.0 (/home/zeta0/Projects/Theseus/kernel/window_manager)
       Compiling tsc v0.1.0 (/home/zeta0/Projects/Theseus/kernel/tsc)
       Compiling e1000 v0.1.0 (/home/zeta0/Projects/Theseus/kernel/e1000)
       Compiling window v0.1.0 (/home/zeta0/Projects/Theseus/kernel/window)
       Compiling pmu_x86 v0.1.0 (/home/zeta0/Projects/Theseus/kernel/pmu_x86)
       Compiling framebuffer_printer v0.1.0 (/home/zeta0/Projects/Theseus/kernel/framebuffer_printer)
       Compiling io v0.1.0 (/home/zeta0/Projects/Theseus/kernel/io)
       Compiling displayable v0.1.0 (/home/zeta0/Projects/Theseus/kernel/displayable)
       Compiling wait_queue v0.1.0 (/home/zeta0/Projects/Theseus/kernel/wait_queue)
       Compiling network_manager v0.1.0 (/home/zeta0/Projects/Theseus/kernel/network_manager)
       Compiling libm v0.2.1
       Compiling typenum v1.10.0
       Compiling text_display v0.1.0 (/home/zeta0/Projects/Theseus/kernel/displayable/text_display)
       Compiling libterm v0.1.0 (/home/zeta0/Projects/Theseus/kernel/libterm)
       Compiling stdio v0.1.0 (/home/zeta0/Projects/Theseus/libs/stdio)
       Compiling storage_device v0.1.0 (/home/zeta0/Projects/Theseus/kernel/storage_device)
       Compiling smoltcp_helper v0.1.0 (/home/zeta0/Projects/Theseus/kernel/smoltcp_helper)
       Compiling app_io v0.1.0 (/home/zeta0/Projects/Theseus/applications/app_io)
       Compiling httparse v1.3.3
       Compiling ata v0.1.0 (/home/zeta0/Projects/Theseus/kernel/ata)
       Compiling rendezvous v0.1.0 (/home/zeta0/Projects/Theseus/kernel/rendezvous)
       Compiling http_client v0.1.0 (/home/zeta0/Projects/Theseus/kernel/http_client)
       Compiling physical_nic v0.1.0 (/home/zeta0/Projects/Theseus/kernel/physical_nic)
       Compiling stack_trace v0.1.0 (/home/zeta0/Projects/Theseus/kernel/stack_trace)
       Compiling async_channel v0.1.0 (/home/zeta0/Projects/Theseus/kernel/async_channel)
       Compiling mlx_ethernet v0.1.0 (/home/zeta0/Projects/Theseus/kernel/mlx_ethernet)
       Compiling ota_update_client v0.1.0 (/home/zeta0/Projects/Theseus/kernel/ota_update_client)
       Compiling storage_manager v0.1.0 (/home/zeta0/Projects/Theseus/kernel/storage_manager)
       Compiling virtual_nic v0.1.0 (/home/zeta0/Projects/Theseus/kernel/virtual_nic)
       Compiling mlx5 v0.1.0 (/home/zeta0/Projects/Theseus/kernel/mlx5)
       Compiling ethernet_smoltcp_device v0.1.0 (/home/zeta0/Projects/Theseus/kernel/ethernet_smoltcp_device)
       Compiling libtest v0.1.0 (/home/zeta0/Projects/Theseus/kernel/libtest)
       Compiling debug_info v0.1.0 (/home/zeta0/Projects/Theseus/kernel/debug_info)
       Compiling stack_trace_frame_pointers v0.1.0 (/home/zeta0/Projects/Theseus/kernel/stack_trace_frame_pointers)
       Compiling state_store v0.1.0 (/home/zeta0/Projects/Theseus/kernel/state_store)
       Compiling unified_channel v0.1.0 (/home/zeta0/Projects/Theseus/kernel/unified_channel)
       Compiling panic_wrapper v0.1.0 (/home/zeta0/Projects/Theseus/kernel/panic_wrapper)
       Compiling exceptions_full v0.1.0 (/home/zeta0/Projects/Theseus/kernel/exceptions_full)
       Compiling device_manager v0.1.0 (/home/zeta0/Projects/Theseus/kernel/device_manager)
       Compiling simd_personality v0.1.0 (/home/zeta0/Projects/Theseus/kernel/simd_personality)
       Compiling multiple_heaps v0.1.0 (/home/zeta0/Projects/Theseus/kernel/multiple_heaps)
       Compiling first_application v0.1.0 (/home/zeta0/Projects/Theseus/kernel/first_application)
       Compiling libc v0.2.93
       Compiling rtc v0.1.0 (/home/zeta0/Projects/Theseus/kernel/rtc)
       Compiling captain v0.1.0 (/home/zeta0/Projects/Theseus/kernel/captain)
       Compiling upd v0.1.0 (/home/zeta0/Projects/Theseus/applications/upd)
       Compiling mapper_spillful v0.1.0 (/home/zeta0/Projects/Theseus/kernel/mapper_spillful)
       Compiling simple_ipc v0.1.0 (/home/zeta0/Projects/Theseus/kernel/simple_ipc)
       Compiling panic_entry v0.1.0 (/home/zeta0/Projects/Theseus/kernel/panic_entry)
       Compiling simd_test v0.1.0 (/home/zeta0/Projects/Theseus/kernel/simd_test)
       Compiling wait_condition v0.1.0 (/home/zeta0/Projects/Theseus/kernel/wait_condition)
       Compiling date v0.1.0 (/home/zeta0/Projects/Theseus/applications/date)
       Compiling test_serial_echo v0.1.0 (/home/zeta0/Projects/Theseus/applications/test_serial_echo)
       Compiling ps v0.1.0 (/home/zeta0/Projects/Theseus/applications/ps)
       Compiling swap v0.1.0 (/home/zeta0/Projects/Theseus/applications/swap)
       Compiling test_downtime v0.1.0 (/home/zeta0/Projects/Theseus/applications/test_downtime)
       Compiling mm_eval v0.1.0 (/home/zeta0/Projects/Theseus/applications/mm_eval)
       Compiling test_channel v0.1.0 (/home/zeta0/Projects/Theseus/applications/test_channel)
       Compiling less v0.1.0 (/home/zeta0/Projects/Theseus/applications/less)
       Compiling test_block_io v0.1.0 (/home/zeta0/Projects/Theseus/applications/test_block_io)
       Compiling bm v0.1.0 (/home/zeta0/Projects/Theseus/applications/bm)
       Compiling pmu_sample_stop v0.1.0 (/home/zeta0/Projects/Theseus/applications/pmu_sample_stop)
       Compiling deps v0.1.0 (/home/zeta0/Projects/Theseus/applications/deps)
       Compiling nano_core v0.1.0 (/home/zeta0/Projects/Theseus/kernel/nano_core)
       Compiling hello v0.1.0 (/home/zeta0/Projects/Theseus/applications/hello)
       Compiling cpu v0.1.0 (/home/zeta0/Projects/Theseus/applications/cpu)
       Compiling rq_eval v0.1.0 (/home/zeta0/Projects/Theseus/applications/rq_eval)
       Compiling ping v0.1.0 (/home/zeta0/Projects/Theseus/applications/ping)
       Compiling rm v0.1.0 (/home/zeta0/Projects/Theseus/applications/rm)
       Compiling cat v0.1.0 (/home/zeta0/Projects/Theseus/applications/cat)
       Compiling input_echo v0.1.0 (/home/zeta0/Projects/Theseus/applications/input_echo)
       Compiling keyboard_echo v0.1.0 (/home/zeta0/Projects/Theseus/applications/keyboard_echo)
       Compiling channel_app v0.1.0 (/home/zeta0/Projects/Theseus/applications/channel_app)
       Compiling scheduler_eval v0.1.0 (/home/zeta0/Projects/Theseus/applications/scheduler_eval)
       Compiling mutex_sleep v0.1.0 (/home/zeta0/Projects/Theseus/kernel/mutex_sleep)
       Compiling immediate_input_echo v0.1.0 (/home/zeta0/Projects/Theseus/applications/immediate_input_echo)
       Compiling example v0.1.0 (/home/zeta0/Projects/Theseus/applications/example)
       Compiling ns v0.1.0 (/home/zeta0/Projects/Theseus/applications/ns)
       Compiling state_transfer v0.1.0 (/home/zeta0/Projects/Theseus/kernel/state_transfer)
       Compiling shell v0.1.0 (/home/zeta0/Projects/Theseus/applications/shell)
       Compiling unwind_test v0.1.0 (/home/zeta0/Projects/Theseus/applications/unwind_test)
       Compiling pmu_sample_start v0.1.0 (/home/zeta0/Projects/Theseus/applications/pmu_sample_start)
       Compiling kill v0.1.0 (/home/zeta0/Projects/Theseus/applications/kill)
       Compiling loadc v0.1.0 (/home/zeta0/Projects/Theseus/applications/loadc)
       Compiling test_restartable v0.1.0 (/home/zeta0/Projects/Theseus/applications/test_restartable)
       Compiling block_cache v0.1.0 (/home/zeta0/Projects/Theseus/kernel/block_cache)
       Compiling test_panic v0.1.0 (/home/zeta0/Projects/Theseus/applications/test_panic)
       Compiling memoffset v0.5.6
       Compiling atomic v0.5.0
       Compiling semver v0.9.0
       Compiling rustc-std-workspace-core v1.99.0 (/home/zeta0/.rustup/toolchains/nightly-2021-05-20-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rustc-std-workspace-core)
       Compiling rustc_version v0.2.3
       Compiling quote v1.0.7
       Compiling raw-cpuid v7.0.3
       Compiling scroll v0.9.2
       Compiling rand_pcg v0.1.1
       Compiling rand_chacha v0.1.0
       Compiling rand v0.6.1
       Compiling alloc v0.0.0 (/home/zeta0/.rustup/toolchains/nightly-2021-05-20-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc)
       Compiling scopeguard v1.1.0
       Compiling cfg-if v0.1.10
       Compiling byteorder v1.4.3
       Compiling bit_field v0.7.0
       Compiling zero v0.1.3 (https://github.com/theseus-os/zero.git#9fc7ff52)
       Compiling static_assertions v1.1.0
       Compiling spin v0.4.10
       Compiling atomic_linked_list v0.1.0 (/home/zeta0/Projects/Theseus/libs/atomic_linked_list)
       Compiling port_io v0.2.1 (/home/zeta0/Projects/Theseus/libs/port_io)
       Compiling ahash v0.4.7
       Compiling linked_list_allocator v0.8.6
       Compiling void v1.0.2
       Compiling plain v0.2.3
       Compiling either v1.5.0
       Compiling cty v0.2.1
       Compiling rustc-demangle v0.1.19
       Compiling util v0.1.0 (/home/zeta0/Projects/Theseus/libs/util)
       Compiling mouse_data v0.1.0 (/home/zeta0/Projects/Theseus/libs/mouse_data)
       Compiling dfqueue v0.1.0 (/home/zeta0/Projects/Theseus/libs/dfqueue)
       Compiling mpmc v0.1.6-pre (/home/zeta0/Projects/Theseus/libs/mpmc)
       Compiling nodrop v0.1.13
       Compiling fallible-iterator v0.2.0
       Compiling stable_deref_trait v1.1.1
       Compiling by_address v1.0.4
       Compiling debugit v0.1.0 (/home/zeta0/Projects/Theseus/libs/debugit)
       Compiling unicode-width v0.1.5
       Compiling rand_core v0.3.0
       Compiling managed v0.7.1
       Compiling bit_field v0.10.0
       Compiling downcast-rs v1.2.0
       Compiling byte-tools v0.3.0
       Compiling opaque-debug v0.2.1
       Compiling percent-encoding v1.0.2 (/home/zeta0/Projects/Theseus/libs/percent_encoding)
       Compiling keccak v0.1.0
       Compiling lock_api v0.4.2
       Compiling multiboot2 v0.10.1
       Compiling keycodes_ascii v0.1.0 (/home/zeta0/Projects/Theseus/libs/keycodes_ascii)
       Compiling xmas-elf v0.6.2 (https://github.com/theseus-os/xmas-elf.git#635d55f6)
       Compiling lazy_static v1.2.0
       Compiling intrusive-collections v0.9.0
       Compiling bare-io v0.2.1
       Compiling hashbrown v0.9.1
       Compiling block_allocator v0.1.0 (/home/zeta0/Projects/Theseus/kernel/block_allocator)
       Compiling unreachable v1.0.0
       Compiling goblin v0.0.19
       Compiling itertools v0.7.11
       Compiling cstr_core v0.2.3
       Compiling synstructure v0.12.4
       Compiling getopts v0.2.21 (https://github.com/theseus-os/getopts#da1e0482)
       Compiling rand_isaac v0.1.1
       Compiling rand_xorshift v0.1.0
       Compiling rand_hc v0.1.0
       Compiling smoltcp v0.5.0 (https://github.com/m-labs/smoltcp#0fedb1db)
       Compiling block-padding v0.1.2
       Compiling generic-array v0.12.0
       Compiling slabmalloc_unsafe v0.7.0 (/home/zeta0/Projects/Theseus/kernel/slabmalloc_unsafe)
       Compiling fatfs v0.4.0 (https://github.com/theseus-os/rust-fatfs?branch=config_log_features#cf9fa6a5)
       Compiling rbtree v0.1.5 (https://github.com/theseus-os/rbtree-rs.git#45aa9e94)
       Compiling spin v0.9.0 (https://github.com/theseus-os/spin-rs#8770942b)
       Compiling new_debug_unreachable v1.0.1
       Compiling derive_more v0.99.14
       Compiling delegate v0.6.0
       Compiling num_enum_derive v0.5.2
       Compiling derivative v2.2.0
       Compiling gimli v0.19.0
       Compiling zerocopy-derive v0.3.0
       Compiling digest v0.8.0
       Compiling block-buffer v0.7.0
       Compiling stable_deref_trait v1.1.1 (https://github.com/theseus-os/stable_deref_trait.git?branch=spin#e006c792)
       Compiling qp-trie v0.7.3 (https://github.com/theseus-os/qp-trie-rs#84792356)
       Compiling num_enum v0.5.2
       Compiling sha3 v0.8.1
       Compiling owning_ref v0.4.1 (https://github.com/theseus-os/owning-ref-rs#0d2dcdcf)
       Compiling zerocopy v0.5.0
       Compiling irq_safety v0.1.1 (https://github.com/theseus-os/irq_safety#598d7144)
       Compiling cow_arc v0.1.0 (/home/zeta0/Projects/Theseus/libs/cow_arc)
       Compiling x86_64 v0.1.2 (/home/zeta0/Projects/Theseus/libs/x86_64)
       Compiling lockable v0.1.0 (/home/zeta0/Projects/Theseus/libs/lockable)
       Compiling volatile v0.2.7 (https://github.com/theseus-os/volatile#73a307a2)
       Compiling fs_node v0.1.0 (/home/zeta0/Projects/Theseus/kernel/fs_node)
       Compiling slabmalloc v0.7.0 (/home/zeta0/Projects/Theseus/kernel/slabmalloc)
       Compiling slabmalloc_safe v0.7.0 (/home/zeta0/Projects/Theseus/kernel/slabmalloc_safe)
       Compiling root v0.1.0 (/home/zeta0/Projects/Theseus/kernel/root)
       Compiling vfs_node v0.1.0 (/home/zeta0/Projects/Theseus/kernel/vfs_node)
       Compiling memfs v0.1.0 (/home/zeta0/Projects/Theseus/kernel/memfs)
       Compiling heapfile v0.1.0 (/home/zeta0/Projects/Theseus/kernel/heapfile)
       Compiling memory_initialization v0.1.0 (/home/zeta0/Projects/Theseus/kernel/memory_initialization)
       Compiling path v0.1.0 (/home/zeta0/Projects/Theseus/kernel/path)
       Compiling environment v0.1.0 (/home/zeta0/Projects/Theseus/kernel/environment)
       Compiling crate_name_utils v0.1.0 (/home/zeta0/Projects/Theseus/kernel/crate_name_utils)
       Compiling task_fs v0.1.0 (/home/zeta0/Projects/Theseus/kernel/task_fs)
       Compiling print_fault_log v0.1.0 (/home/zeta0/Projects/Theseus/applications/print_fault_log)
       Compiling mkdir v0.1.0 (/home/zeta0/Projects/Theseus/applications/mkdir)
       Compiling cd v0.1.0 (/home/zeta0/Projects/Theseus/applications/cd)
       Compiling ls v0.1.0 (/home/zeta0/Projects/Theseus/applications/ls)
       Compiling pwd v0.1.0 (/home/zeta0/Projects/Theseus/applications/pwd)
       Compiling ixgbe v0.1.0 (/home/zeta0/Projects/Theseus/kernel/ixgbe)
        Finished release [optimized] target(s) in 1m 46s
       Compiling getopts v0.2.17
       Compiling rustc-demangle v0.1.14
       Compiling demangle_symbol v0.1.0 (/home/zeta0/Projects/Theseus/tools/demangle_readelf_file)
        Finished release [optimized] target(s) in 2.09s
         Running `tools/demangle_readelf_file/target/release/demangle_symbol /dev/fd/63`
       Compiling same-file v1.0.6
       Compiling getopts v0.2.17
       Compiling walkdir v2.3.1
       Compiling copy_latest_crate_objects v0.1.0 (/home/zeta0/Projects/Theseus/tools/copy_latest_crate_objects)
        Finished release [optimized] target(s) in 2.88s
         Running `tools/copy_latest_crate_objects/target/release/copy_latest_crate_objects -i ./target/x86_64-theseus/release/deps --output-objects /home/zeta0/Projects/Theseus/build/grub-isofiles/modules --output-deps /home/zeta0/Projects/Theseus/build/deps --output-sysroot /home/zeta0/Projects/Theseus/build/deps/sysroot/lib/rustlib/x86_64-theseus/lib -k ./kernel -a ./applications --kernel-prefix 'k#' --app-prefix 'a#' -e 'getopts unicode_width libtheseus'`
       Compiling getopts v0.2.17
       Compiling grub_cfg_generation v0.1.0 (/home/zeta0/Projects/Theseus/tools/grub_cfg_generation)
        Finished release [optimized] target(s) in 1.87s
         Running `tools/grub_cfg_generation/target/release/grub_cfg_generation /home/zeta0/Projects/Theseus/build/grub-isofiles/modules/ -o /home/zeta0/Projects/Theseus/build/grub-isofiles/boot/grub/grub.cfg`
    

    system info:

    ---
    host:
      name: Arch Linux
      os version: rolling
      kernel version: 5.13.9-arch1-1
    cpu:
      - Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
      - Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
      - Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
      - Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
    
    opened by ZetaNumbers 20
  • PS/2 Overhaul

    PS/2 Overhaul

    No more magic values, less errors, more docs, simpler functions, structs for all the response-bits, so no bit ops. In general, saner code.

    Some notes/questions:

    • error handling is still not very good, this seems to be because the Error trait is not no_std and some other problems, so for now we have strings, which ~~I would still like to improve a bit~~ I have improved a bit
    • why is there a pattern of .map_err(|_| { warn!("..."); "disable mouse streaming failed"})? it might make sense because it shows a kind of backtrace-like route up the error stack, but still seems/feels bad? I have read the recommended reading, but maybe I should look into some error-handling/logging crates (though I dislike the topic) -> some map_err calls were obsolete, but I'm still not comfortable with some of the error handling, again because we can't impl Error and I wonder in what cases we should just shutdown the system or reset the device/s
    • how should I improve my commit messages?
    • I chose modular-bitfield because it comes closest to what I would want, this, or this -> feedback: I think this is more approachable than bitflags and some others
    • not sure if I did KBD_MODIFIERS right -> there is a note about "remove unsafe static mut" on it, not sure what to do about it (access is unsafe but there also is a note on access like "it should never race"
    • there's a lot of code in the ps2 crate now, any thoughts on where/how to split it up? some functions could also be enum/struct methods instead -> I wasted a lot of time scrolling up and down, still not sure how to divide it up (mod mouse, keyboard, controller?)

    Feel free to critique!

    opened by hecatia-elegua 16
  • Add GitHub Actions workflow to build and deploy documentation.

    Add GitHub Actions workflow to build and deploy documentation.

    Added a workflow to build the book documentation on every push or pull request.

    The documentation is deployed to the github_pages branch on a push to the theseus_main branch.

    This pull request is a draft because the source documentation build is commented out. Building the source documentation fails when attempting to compile packed_simd_2.

    Errors:

    • error[E0557] feature has been removed const_fn
    • error: attributes starting with rustc are reserved for use by the rustc compiler #[rustc_args_required_const(2)]

    If the workflow is used as is (with the source documentation build commented out) and merged into theseus_main the GitHub Pages website will not include the source documentation. This can be resolved by either fixing the build errors, or as a temporary workaround manually including the old source documentation.

    Partial fix of #379

    opened by apogeeoak 15
  • Preliminary Intel VT-d IOMMU support

    Preliminary Intel VT-d IOMMU support

    Overview

    Adds preliminary driver support for an Intel IOMMU implementing Intel VT-d (Intel Virtualization for Directed I/O). Currently all we do is detect the IOMMU, and if detected, print out some useful information. This sets the groundwork for the rest of the IOMMU implementation.

    This preliminary driver performs the following:

    • Initialize the kernel IOMMU object if it is detected in the ACPI DMAR table (see acpi::init() and iommu::early_init())
      • Map the IOMMU's memory-mapped registers into virtual memory
    • Output the interpreted contents of the following IOMMU registers to the log:
      • Version Register
      • Capability Register
      • Extended Capability Register
      • Global Status Register
    • Further initialization will be performed by calling iommu::init() from device_manager::init() - although currently iommu::init() doesn't do anything useful.

    Additionally, the driver provides a mechanism for sending commands to the IOMMU Global Command Register (and waiting until the command is complete).

    Testing

    To test IOMMU support, pass IOMMU=yes when invoking the Makefile QEMU target (orun etc). Details about the IOMMU will be printed to the log.

    Please test with and without IOMMU=yes.

    Outstanding issues:

    • Printing to the log the interpreted contents of the Capability Register and Extended Capability Register produces multiple lines, of which only the first line has the log prefix (e.g. [I] ...)
    • Only a single IOMMU is supported. Support for multiple IOMMUs can be added in the future.
    • Further initialization in device_manager::init() currently doesn't do anything useful but is there because I anticipate it will be needed in the future.
    opened by NicholasLindsay 14
  • Use structs for all/most PS/2 functions to prevent arbitrary invocation

    Use structs for all/most PS/2 functions to prevent arbitrary invocation

    is it potentially a problem if this is called randomly by another crate? e.g., before the ps/2 port or mouse has been initialized? If so, we should make it a member method of some PS/2 struct or something else that prevents it from being arbitrarily invoked.

    Originally posted by @kevinaboos in https://github.com/theseus-os/Theseus/pull/667#discussion_r1012377006

    opened by hecatia-elegua 13
  • Simplify view-book makefile target.

    Simplify view-book makefile target.

    Utilize the functionality of mdbook to open the Theseus book. The make dependency on book can be removed as the book is rebuild before opening. The check for a mdbook install would also be removed in this case. A somewhat useful error is still printed if mdbook cannot be found.

    The build command could also be replaced with a watch command which rebuilds the book whenever the source changes.

    @(&> /dev/null mdbook watch --open $(BOOK_SRC) -d $(BOOK_OUT) &)
    

    The method used to suppress the output may not be portable.

    opened by apogeeoak 13
  • Failed in MacOS catalina

    Failed in MacOS catalina

    Hi . I've tried several times in MacOS . rustc (nightly-2020-11-10) and xargo (0.3.13) are already match with requirement . seems like failed during run/boot process . Finished release [optimized] target(s) in 1.22s /Users/newmac/Theseus/kernel/nano_core/src/boot/arch_x86_64/boot.asm:446: error: symbol `INITIAL_STACK_SIZE' not defined make: *** [Makefile:274: /Users/Loomycute/Theseus/build/nano_core/boot/x86_64/boot.o] Error 1

    opened by virtuehive 13
  • Upgrade spin crate to 0.9.0

    Upgrade spin crate to 0.9.0

    This builds on #346 and additionally upgrades spin, so the r#try syntax isn't needed anymore.

    I choose to vendor @kevinaboos forks of owning_ref and stable_deref_trait, because they are quite specialized and it might be nice to just have them in tree? I'm not sure about this, let me know if I should make PRs in those repos instead.

    Also I have a question, could stable_deref_trait be replaced by the newly introduced Pin trait or is that a totally different thing? I'm not sure I understand the purpose correctly haha

    opened by pingiun 12
  • Shift `nano-core` symbol parsing to compile time

    Shift `nano-core` symbol parsing to compile time

    Closes #431.

    I'm not sure about the naming of the offset field on SerializedSection. Also, I didn't correctly rebase onto the upstream repository, and so the GitHub diff viewer is playing up. E.g. it's showing that I made changes to the README, but I didn't.

    opened by tsoutsman 11
  • VFS improvements

    VFS improvements

    :heavy_check_mark: ~~The ls app has redundant code that has been copy-pasted for two identical cases: when the path is specified, and when there is no path specified. Condense those into one case.~~

    :heavy_check_mark: ~~All file creation should accept a &DirRef rather than a WeakDirRef. This eliminates the potential error of not being able to upgrade the weak ref to the parent.~~

    :heavy_check_mark: ~~Don't use the return keyword at the end of a function, that violates Rust's style conventions.~~

    :heavy_check_mark: ~~TaskFiles are never actually created. Mmi files are pretty worthless at the moment.~~

    opened by kevinaboos 11
  • Remove duplicate reserved memory regions in UEFI

    Remove duplicate reserved memory regions in UEFI

    This is the first step in supporting Theseus loaded at an arbitrary address. The UEFI memory map already reserves the loaded kernel file, boot info, and bootloader modules, so reserving them again is unnecessary.

    The changes to frame_allocator are necessary for the frame allocator to correctly initialise when a reserved memory region overlaps with more than one reserved memory region that came before it. Reshuffling the order that the bootloader info and modules memory regions are added to the reserved memory regions revealed the problem.

    The PR also removes bios as the default feature for nano_core as it makes it impossible to compile for UEFI, as discussed on Discord.

    Signed-off-by: Klim Tsoutsman [email protected]

    opened by tsoutsman 0
  • Support single-core machines

    Support single-core machines

    Running make run QEMU_CPUS=1 currently fails with:

    Theseus is shutting down, msg: Couldn't allocate frames for the final framebuffer
    [E] kernel/nano_core/src/lib.rs:54: Theseus is shutting down, msg: Couldn't allocate frames for the final framebuffer
    [T] kernel/panic_wrapper/src/lib.rs:32: at top of panic_wrapper: PanicInfo { payload: Any { .. }, message: Some(Couldn't allocate frames for the final framebuffer), location: Location { file: "kernel/nano_core/src/lib.rs", line: 57, col: 5 }, can_unwind: true }
    

    Booting APs often complicates things, and so it would be nice to have the option to run Theseus with a single core.

    enhancement 
    opened by tsoutsman 2
  • Factor waker out of `dreadnought` and add `task_join`

    Factor waker out of `dreadnought` and add `task_join`

    The waker model can be used to implement blocking calls (e.g. join), and so it shouldn't be defined in dreadnought.

    I hit a circular dependency problem similar to #766. task_join::join, relies on waker, which in turn relies on scheduler and mutex_sleep, both of which depend on task.

    Signed-off-by: Klim Tsoutsman [email protected]

    opened by tsoutsman 0
Owner
Theseus OS
The Theseus Operating System Maintainers
Theseus OS
Simple utility to backup/sync data between devices to the cloud

RSink Simple utility to backup/sync data between devices to the cloud Features ?? Blazingly Fast โ›ฝ Lightweight ?? Cross-platform, runs everywhere ?? S

Abdulrahman Salah 4 Sep 3, 2022
Temporary directory management for Rust

tempdir A Rust library for creating a temporary directory and deleting its entire contents when the directory is dropped. Documentation Deprecation No

null 132 Jan 7, 2023
Supertag is a tag-based filesystem, written in Rust, for Linux and MacOS

Supertag is a tag-based filesystem, written in Rust, for Linux and MacOS. It provides a tag-based view of your files by removing the hierarchy constraints typically imposed on files and folders. In other words, it allows you to think about your files not as objects stored in folders, but as objects that can be filtered by folders.

Andrew Moffat 539 Dec 24, 2022
Spacedrive is an open source cross-platform file explorer, powered by a virtual distributed filesystem written in Rust.

Spacedrive A file explorer from the future. spacedrive.com ยป Download for macOS ยท Windows ยท Linux ยท iOS ยท watchOS ยท Android ~ Links will be added once

Spacedrive 16.2k Jan 7, 2023
Minty is an amazingly fast file deduplication app built in rust with a rust user interface.

minty Project Minty has a new look and feel!!! Minty is an amazingly fast file deduplication app built in rust with a rust user interface. I say super

null 26 Nov 20, 2022
ergonomic paths and files in rust

path_abs: ergonomic paths and files in rust. This library aims to provide ergonomic path and file operations to rust with reasonable performance. See

Rett Berg 45 Oct 29, 2022
High level FFI binding around the sys mount & umount2 calls, for Rust

sys-mount High level FFI bindings to the mount and umount2 system calls, for Rust. Examples Mount This is how the mount command could be written with

Pop!_OS 31 Dec 9, 2022
Temporary file library for rust

tempfile A secure, cross-platform, temporary file library for Rust. In addition to creating temporary files, this library also allows users to securel

Steven Allen 782 Dec 27, 2022
Extended attribute library for rust.

xattr A small library for setting, getting, and listing extended attributes. Supported Platforms: Linux, MacOS, FreeBSD, and NetBSD. API Documentation

Steven Allen 33 Nov 12, 2022
Rust implemention of Ascon

Ascon Pure Rust implementation of the lightweight Authenticated Encryption and Associated Data (AEAD) Ascon-128 and Ascon-128a. Security Notes This cr

Sebastian Ramacher 4 May 28, 2022
Lightweight Google Cloud Storage sync Rust Client with better performance than gsutil rsync

gcs-rsync Lightweight and efficient Rust gcs rsync for Google Cloud Storage. gcs-sync is faster than gsutil rsync when files change a lot while perfor

@cboudereau 4 Sep 8, 2022
A POSIX select I/O Multiplexing Rust library.

A POSIX select I/O Multiplexing Rust library.

b23r0 4 Jul 6, 2022
๐Ÿฆ€ How to minimize Rust binary size ๐Ÿ“ฆ

Minimizing Rust Binary Size To help this project reach more users, consider upvoting the min-sized-rust Stack Overflow answer. This repository demonst

null 4.9k Jan 8, 2023
ezio offers an easy to use IO API for reading and writing to files and stdio

ezio - a crate for easy IO ezio offers an easy to use IO API for reading and writing to files and stdio. ezio includes utilities for generating random

Nick Cameron 98 Dec 21, 2022
Expanding opportunities standard library std::fs and std::io

fs_extra A Rust library that provides additional functionality not present in std::fs. Documentation Migrations to 1.x.x version Key features: Copy fi

Denis Kurilenko 163 Dec 30, 2022
Merge together and efficiently time-sort compressed .pcap files stored in AWS S3 object storage (or locally) to stdout for pipelined processing.

Merge together and efficiently time-sort compressed .pcap files stored in AWS S3 object storage (or locally) to stdout for pipelined processing. High performance and parallel implementation for > 10 Gbps playback throughput with large numbers of files (~4k).

null 4 Aug 19, 2022
rswatch ๐Ÿ”Ž is simple, efficient and reliable file watcher.

rswatch File watcher rswatch is a simple, reliable and efficient file watcher, it can watch a single file or a directory and run arbitrary commands wh

Eugene 3 Sep 23, 2022
RevonsOs is a new OS written from scratch in Rust to experiment with novel OS structure, better state management

RevonsOs is a new OS written from scratch in Rust to experiment with novel OS structure, better state management, and how to leverage intralingual design principles to shift OS responsibilities like resource management into the compiler.

Revons Community 3 Mar 14, 2022
Revons Os is a new OS written from scratch in Rust to experiment with novel OS structure

Revons Os is a new OS written from scratch in Rust to experiment with novel OS structure, better state management, and how to leverage intralingual design principles to shift OS responsibilities like resource management into the compiler.

Fayssal Chokri 1 Jul 2, 2022
VR Lighthouse power state management in Rust

Lighthouse VR Lighthouse power state management in Rust Windows and Linux binaries available here Usage SteamVR v1: lighthouse [on|off] [BSID] lightho

Shayne Hartford 24 Dec 21, 2022