Userspace
๐ 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_stdenvironments - ๐ 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 (ELF)
โ โโโ 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
Installation
Add this to your Cargo.toml:
[]
= { = "https://github.com/ze-gois/rust_userspace" }
Usage Example
// Create a no_std binary
use userspace;
pub extern "C" !
๐ ๏ธ Architecture
Userspace is designed with a layered architecture:
- Core Layer: Basic types, traits and utilities
- Target Layer: Architecture and OS abstractions
- Memory Layer: Stack, pages, and allocation
- 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:
These enable advanced type-level programming required for zero-cost abstractions across architectures.
๐ Documentation
For more detailed documentation:
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -am 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - 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