userspace 0.2.0

userspace library
Documentation

Userspace

Version License Rust Architecture Status

๐Ÿ“‹ Overview

Userspace is a Rust implementation of a standard library for userspace applications, designed to work without depending on the Rust standard library (no_std). It provides safe abstractions for low-level operations, architecture-specific functionality, memory management, and executable file format handling.

Key Features

  • ๐Ÿ”’ Memory Safety: Leverage Rust's ownership model for secure systems programming
  • ๐Ÿงฉ Modular Architecture: Well-defined components with clear interfaces
  • ๐Ÿ”„ Cross-Platform: Architecture abstractions for portability (currently x86_64)
  • ๐Ÿ“ฆ No Standard Library: Works in no_std environments
  • ๐Ÿ“„ ELF Support: Parse and work with Executable and Linkable Format files
  • ๐Ÿง  Memory Management: Stack manipulation and memory allocation utilities

๐Ÿ” Project Structure

userspace/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ file/         # File format handling
โ”‚   โ”œโ”€โ”€ macros/       # Utility macros
โ”‚   โ”œโ”€โ”€ memory/       # Memory management
โ”‚   โ”‚   โ”œโ”€โ”€ alloc/    # Allocation functionality
โ”‚   โ”‚   โ”œโ”€โ”€ page/     # Page management
โ”‚   โ”‚   โ””โ”€โ”€ stack/    # Stack handling
โ”‚   โ”œโ”€โ”€ target/       # Architecture abstractions
โ”‚   โ”‚   โ”œโ”€โ”€ architecture/   # CPU architecture specifics
โ”‚   โ”‚   โ””โ”€โ”€ operating_system/  # OS abstractions
โ”‚   โ”œโ”€โ”€ traits/       # Common interfaces
โ”‚   โ”œโ”€โ”€ types/        # Library-specific types
โ”‚   โ”œโ”€โ”€ entry.rs      # Binary entry point
โ”‚   โ”œโ”€โ”€ library.rs    # Main library definition
โ”‚   โ”œโ”€โ”€ panic.rs      # Panic handler
โ”‚   โ””โ”€โ”€ result.rs     # Error handling
โ”œโ”€โ”€ Cargo.toml        # Project configuration
โ””โ”€โ”€ build.rs         # Build script

๐Ÿš€ Getting Started

Prerequisites

  • Rust 2024 Edition or newer
  • Cargo and Rustup

Usage

rustup toolchain install nightly
cargo new usespace_sample
cd userspace_sample
rustup override set nightly

With standard library

Add this to your Cargo.toml:

[dependencies]
userspace = { version="*", features=["with_std"] }
Usage Example
use userspace;

fn main() {
    userspace::info!("Hello, world!\n");
    userspace::file::print(file!());
}

๐Ÿ› ๏ธ Architecture

Userspace is designed with a layered architecture:

  1. Core Layer: Basic types, traits and utilities
  2. Target Layer: Architecture and OS abstractions
  3. Memory Layer: Stack, pages, and allocation
  4. File Layer: File format parsing and manipulation

Each layer builds upon the previous ones, providing increasingly higher-level abstractions while maintaining safety and performance.

Memory Management

The memory subsystem provides:

  • Safe stack traversal and argument extraction
  • Page allocation primitives
  • Basic heap allocation in no_std environments

Architecture Abstraction

The target subsystem abstracts architecture details:

  • Pointer types and operations
  • Register access patterns
  • CPU-specific features
  • OS-specific functionality

Currently focused on x86_64, but designed to be extensible to other architectures.

๐Ÿงช Experimental Features

Userspace uses several experimental Rust features:

#![feature(generic_const_exprs)]
#![feature(generic_const_items)]

These enable advanced type-level programming required for zero-cost abstractions across architectures.

๐Ÿ“š Documentation

For more detailed documentation:

cargo doc --open

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -am 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“œ License

This project is licensed under the terms found in the LICENSE file.

๐Ÿ”ฎ Future Work

  • Support for additional architectures (ARM, RISC-V)
  • Enhanced file system abstractions
  • Networking capabilities
  • Threading and concurrency primitives
  • Comprehensive test suite