MnemOS (mnɛːmos) is a hobby-grade, experimental operating system for small computers (and bigger ones, too). The MnemOS kernel and userspace use a design based on asynchronous message passing, inspired by Erlang and microkernels, although MnemOS is not a true microkernel.

To learn more about MnemOS, you can:

To get involved in MnemOS development, you can:

The following pages summarize various components of MnemOS:

  • Mnemos Project Overview

    This page provides an overview of the entire MnemOS project. The other boxes on this page provide an overview of the individual crates that make up MnemOS.
  • kernel

    The MnemOS Kernel. Built around asynchronous kernel tasks which use message passing as the primary means of interaction. Provided as a no_std library crate.
  • melpomene

    A desktop simulator, suitable for experimenting with MnemOS without any external hardware requirements.
  • pomelo

    Pomelo is a browser-based simulator for MnemOS, compiled as a WASM binary.
  • mnemos-d1

    A hardware abstraction library for the Allwinner D1, targeted at use in the mnemos operating system.
  • mnemos-esp32c3-buddy

  • My Oranda Project

  • crowtty

    crowtty is a host tool, aimed at speaking the sermux protocol with a simulator or physical target. It allows for receiving tracing messages, as well as mapping multiplexed "ports" as TCP sockets on the host.
  • mnemos-alloc

    An async allocator wrapper. This crate provides collection types and helper functions to allow for async handling of allocations, including turning allocation async.
  • forth3

    forth3 is a forth-inspired scripting language runtime. It can be used on targets without an allocator, and supports native builtins written in Rust, either as async or blocking functions.
  • mnemos-abi

    Data structures and definitions shared between the kernel and userspace.
  • spitebuf

    Spitebuf is an async MPSC queue, based on the Vyukov algorithm originally implemented in the heapless crate. It can be used on targets with or without an allocator.
  • sermux-proto

    Wire types used by the `SerialMuxService` in the mnemos kernel. Extracted as a separate crate to allow external decoders (like `crowtty`) to share protocol definitions
  • mnemos-trace-proto

    Wire types used by the binary tracing subscriber used on hardware targets. Extracted as a separate crate to allow external decoders (like `crowtty`) to share protocol definitions.
  • mnemos-beepy

    Hardware support specific to the SQFMI Beepy development board
  • f3repl

    f3repl is a host tool that provides a REPL of the forth3 VM. It is used for testing and development of forth3.