A modular system for deploying macOS virtual machines using QEMU/KVM.
Gini is a modular system built on an "Everything is a Plugin" architecture that enables flexible, customizable deployment of macOS virtual machines on Linux systems using QEMU/KVM. The system is designed to be extensible, allowing for easy creation of custom plugins to modify or enhance functionality.
graph TD
A[Gini Kernel] --> B[Plugin Manager]
A --> C[Stage Manager]
A --> D[UI Bridge]
A --> E[Storage Manager]
A --> F[Event System]
B --> G[Core Plugins]
B --> H[Third-Party Plugins]
style A fill:#f96,stroke:#333,stroke-width:2px
style B fill:#9cf,stroke:#333,stroke-width:2px
- Kernel: Core application lifecycle and component management system
- Plugin System: Manages loading, registration, and initialization of plugins
- Event System: Provides asynchronous event dispatching and handling
- Stage Manager: Orchestrates execution of stages in the correct order with dependency resolution
- Storage System: Abstract interface for working with file system
- UI Bridge: Minimal abstraction layer for interfacing with user interfaces
- A functional Linux system
- QEMU/KVM properly configured
- (Optional) VFIO configured for GPU passthrough
- LVM for VM storage
See the setup guide for detailed instructions on setting up your development environment.
- Architecture Overview
- Kernel System
- Event System
- Plugin System
- Stage Manager
- Storage System
- UI Bridge
- Implementation Status
Check our Implementation Status Tracker for detailed information about the current state of implementation, planned features, and development timeline.
gini/ # Project Root
├── crates/ # Workspace members
│ ├── gini-core/ # Core library crate
│ │ └── src/
│ │ ├── event/ # Event system
│ │ ├── kernel/ # Core application kernel
│ │ ├── plugin_system/ # Plugin infrastructure
│ │ ├── stage_manager/ # Stage management system
│ │ ├── storage/ # Storage management
│ │ ├── ui_bridge/ # Minimal UI abstraction layer
│ │ └── utils/ # Core utilities
│ └── gini/ # Binary crate
│ └── src/
│ └── main.rs # Application entry point
├── docs/ # Documentation
└── plugins/ # Plugin directory
└── examples/ # Example plugins