# kuya **Repository Path**: iloverust/kuya ## Basic Information - **Project Name**: kuya - **Description**: Kuya(酷雅)是一个创新的操作系统框架项目,旨在结合多种先进架构思想,提供既安全又高效的系统平台。项目采用框内核架构设计,将系统分为两个主要部分:使用Zig语言实现的exokernel框架和使用Rust语言安全部分实现的服务层,确保系统的高性能与内存安全。kuya的可信基比Asterinas的要小得多,只有100行代码左右。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-09-28 - **Last Updated**: 2025-10-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: 酷雅 ## README # Kuya 项目 基于框内核架构的安全操作系统框架,融合Zig语言的exokernel和Rust语言的安全服务层,提供高性能与内存安全保障。 ## 项目概述 Kuya(酷雅)是一个创新的操作系统框架项目,旨在结合多种先进架构思想,提供既安全又高效的系统平台。项目采用框内核架构设计,将系统分为两个主要部分:使用Zig语言实现的exokernel框架和使用Rust语言安全部分实现的服务层,确保系统的高性能与内存安全。 ## 架构设计 ### 框内核架构 Kuya系统采用类似Asterinas(星绽OS)的框内核架构,这种架构结合了宏内核和微内核的优势: 1. **OS框架部分**:使用Zig语言实现的exokernel,提供底层硬件抽象和核心功能,允许有限使用unsafe代码以获取最高性能 2. **OS服务部分**:使用Rust语言安全部分实现的各种系统服务,必须完全基于safe Rust编写,确保内存安全和可靠性 这种设计使得系统的内存安全性仅需依赖于一个极小范围内的代码(可信基),同时无需引入额外的硬件隔离和性能开销。kuya的可信基比Asterinas的要小得多,只有100行代码左右。 ### 核心组件 - **bootloader**:基于Rust语言的系统引导加载器,负责系统初始化和硬件驱动管理 - **exokernel**:基于Zig语言的底层内核框架,提供原始硬件访问和核心功能 - **safe_ffi**:安全的FFI接口库,实现Zig和Rust之间的安全通信 - **safe_services**:使用Rust语言实现的系统服务集合,包括内存、进程、文件系统等多种服务 - **kuikly_UI**:用户界面系统,提供图形交互能力 ## 项目结构 ``` kuya/ ├── README.md # 项目说明文档 ├── Cargo.toml # Rust工作空间配置文件 ├── Cargo.lock # Rust依赖锁定文件 ├── zoi.yaml # Zoi包管理器配置文件 ├── bootloader/ # 系统引导加载器 │ ├── Cargo.toml # bootloader项目配置 │ ├── main.rs # 引导程序主入口 │ ├── allocator.rs # 内存分配器实现 │ ├── linker.ld # 链接器脚本 │ └── drivers/ # 硬件驱动程序 │ ├── mod.rs # 驱动模块定义 │ ├── audio.rs # 音频驱动 │ ├── battery.rs # 电池管理驱动 │ ├── clocks.rs # 时钟驱动 │ ├── communication.rs # 通信驱动 │ ├── display.rs # 显示驱动 │ ├── gpio.rs # GPIO驱动 │ ├── sensors.rs # 传感器驱动 │ ├── storage.rs # 存储驱动 │ └── touchscreen.rs # 触摸屏驱动 ├── exokernel/ # 使用Zig语言实现的exokernel框架 │ ├── build.zig # Zig构建脚本 │ └── src/ # exokernel源代码 ├── kuikly_UI/ # 用户界面系统 │ ├── .gitignore # Git忽略文件配置 │ ├── build.gradle.kts # 构建脚本 │ ├── icons/ # 图标资源 │ └── src/ # UI源代码 ├── safe_ffi/ # 安全FFI实现库 │ ├── .gitignore # Git忽略文件配置 │ ├── Cargo.toml # Rust项目配置 │ ├── mk.deps # 依赖管理文件 │ └── src/ # FFI接口源代码 │ ├── callback/ # 回调机制实现 │ ├── core/ # 核心FFI功能 │ ├── drivers/ # 驱动接口 │ ├── exokernel/ # exokernel接口 │ ├── memory/ # 内存管理接口 │ └── utils/ # 工具函数 ├── safe_services/ # Rust安全服务层 │ ├── Cargo.toml # Rust项目配置 │ ├── examples/ # 使用示例代码 │ │ ├── zoi_integration_example.rs # Zoi集成示例 │ │ └── unigetui_integration_example.rs # UniGetUI集成示例 │ └── src/ # 服务实现源代码 │ ├── lib.rs # 服务管理器和核心功能 │ ├── zoi_service.rs # Zoi服务实现 │ └── unigetui_service.rs # UniGetUI服务实现 └── target/ # Rust编译输出目录 └── debug/ # 调试版本输出 ├── build/ # 构建缓存 ├── examples/ # 示例程序输出 └── incremental/ # 增量编译缓存 ``` ## Bootloader组件 Kuya系统的bootloader是基于Rust语言实现的系统引导加载器,负责系统的初始化和硬件抽象层的建立。 ### 主要功能 - **系统初始化**:负责系统启动时的基础环境设置 - **内存管理**:提供早期内存分配器实现(allocator.rs) - **硬件驱动管理**:集成多种硬件驱动程序,为上层系统提供硬件抽象 - **链接器配置**:通过linker.ld定义内存布局和启动流程 ### 硬件驱动支持 bootloader集成了丰富的硬件驱动程序: - **音频驱动(audio.rs)**:音频设备控制和音频流处理 - **电池管理(battery.rs)**:电源管理和电池状态监控 - **时钟驱动(clocks.rs)**:系统时钟和定时器管理 - **通信驱动(communication.rs)**:串口、I2C、SPI等通信接口 - **显示驱动(display.rs)**:显示设备控制和图形输出 - **GPIO驱动(gpio.rs)**:通用输入输出引脚控制 - **传感器驱动(sensors.rs)**:各类传感器数据采集 - **存储驱动(storage.rs)**:存储设备访问和文件系统支持 - **触摸屏驱动(touchscreen.rs)**:触摸输入设备支持 ### 工作空间配置 项目根目录的Cargo.toml定义了Rust工作空间配置,将safe_ffi和safe_services作为工作空间成员,实现统一的依赖管理和构建流程。工作空间配置包括: - **开发配置**:启用调试信息,优化级别为0 - **发布配置**:最高优化级别,启用LTO和符号剥离 - **项目元数据**:包含项目名称、描述、版本和许可证信息 ## 系统服务 Kuya系统包含多种核心服务,所有服务均通过能力系统进行资源访问控制: ### 基础服务 - **内存服务(MemoryService)**:管理系统内存资源,提供安全的内存分配和释放功能 - **进程服务(ProcessService)**:负责进程创建、调度和管理 - **文件系统服务(FileSystemService)**:提供文件和目录操作功能 - **网络服务(NetworkService)**:处理网络通信和协议栈 ### 图形与用户界面服务 - **图形服务(GraphicsService)**:提供基础图形渲染功能 - **Vulkan服务(VulkanService)**:GPU加速图形渲染服务 - **Skia服务(SkiaService)**:2D图形绘制服务 - **Wayland服务(WaylandService)**:窗口系统协议实现 - **Kuikly UI服务(KuiklyUIService)**:高级UI组件和交互服务 - **图形子系统(GraphicsSubsystem)**:整合图形相关服务,提供统一接口 ### 扩展服务 - **Shell服务(ShellService)**:提供zsh集成功能 - **Zed服务(ZedService)**:文本编辑器服务 - **RustFS服务(RustFSService)**:基于Rust的文件系统实现 - **IPC服务(IPCService)**:进程间通信机制,提供高性能与可靠性的双IPC通信框架 - 实现了共享内存通道(SharedMemoryChannel)和消息队列通道(MessageQueueChannel)双机制 - 支持系统内存和GPU内存分配管理,通过混合内存管理器(HybridMemoryManager)优化性能 - 提供信号量(Semaphore)和管道(Pipe)等同步原语 - 集成完整的IPC统计系统,包括通道创建/关闭计数、消息发送/接收统计、错误计数和性能监控 - 支持同步和异步通信模式,支持基于事件的通信机制 - 支持基于Capability的访问控制,确保只有授权进程能够访问特定通信通道 - 支持内存隔离和边界检查,防止缓冲区溢出攻击 - **Zoi服务(ZoiService)**:包管理器服务,支持多种包管理器 - 支持Zoi包管理器(Zoi)和UniGetUI包管理器(UniGetUI) - **UniGetUI服务(UniGetUIService)**:统一包管理接口服务,支持管理多种包管理器 - **驱动服务(DriverService)**:设备驱动管理 ## IPC服务详细说明 ### 架构设计 Kuya项目的IPC服务采用了分层架构设计,主要包含以下核心组件: - **接口层**:定义了`IPCChannel`和`MessagePort`两个核心trait,为上层应用提供统一的通信接口 - **实现层**:提供了共享内存和消息队列两种通信实现,分别适用于不同场景 - **内存管理层**:实现了多种内存分配策略,包括`RadixTreeMemoryManager`和`HybridMemoryManager` - **同步原语层**:提供信号量和管道等基础同步机制 ### 双IPC机制实现 #### 共享内存通道 共享内存通道是Kuya IPC服务的高性能通信机制,主要特点包括: - 基于环形缓冲区(RingBuffer)实现,支持高效的数据传输 - 通过`SharedMemoryRegion`管理跨进程共享内存 - 提供零拷贝数据传输能力,最大限度减少数据复制开销 - 适用于高频、大数据量的进程间通信场景 #### 消息队列通道 消息队列通道提供了更可靠的通信保障,主要特点包括: - 实现了消息的排队、优先级处理和确认机制 - 确保消息的可靠投递,支持消息持久化 - 提供更灵活的消息格式支持 - 适用于需要高可靠性、消息顺序保证的通信场景 ### 内存管理设计 Kuya IPC服务实现了灵活高效的内存管理机制: - **混合内存管理**:通过`HybridMemoryManager`智能管理系统内存和GPU内存 - **内存偏好设置**:支持根据应用需求设置内存分配偏好 - **内存统计与监控**:集成内存使用量、分配/释放次数等统计信息 ### 安全特性 IPC服务集成了多重安全保障机制: - 基于Capability的访问控制,确保只有授权进程能够访问特定通信通道 - 实现了内存隔离和边界检查,防止缓冲区溢出攻击 - 支持加密通信选项,保障数据传输安全 ### 性能监控 为帮助开发者优化应用性能,IPC服务提供了全面的性能监控能力: - **通道统计**:记录通道创建、连接、关闭等生命周期事件 - **消息统计**:统计消息发送、接收的数量、大小和延迟 - **错误统计**:跟踪各类IPC错误的发生频率和分布 - **资源使用监控**:监控内存、CPU等资源使用情况 ### 核心API接口 IPC服务提供了丰富的API接口,主要包括: #### 通道管理 - `create_shared_memory_channel()`:创建共享内存通信通道 - `create_message_queue_channel()`:创建消息队列通信通道 - `connect_channel()`:连接到已存在的通信通道 - `close_channel()`:关闭通信通道 - `list_channels()`:列出所有活动的通信通道 #### 数据传输 - `send()`:同步发送数据 - `send_async()`:异步发送数据 - `receive()`:同步接收数据 - `receive_async()`:异步接收数据 #### 资源管理 - `allocate_memory()`:分配IPC通信所需的内存 - `free_memory()`:释放已分配的内存 - `set_memory_preference()`:设置内存分配偏好 ### 与安全服务层集成 IPC服务作为安全服务层的核心组件,通过以下方式与其他组件集成: - 通过`ServiceManager`进行统一管理,与其他系统服务协同工作 - 利用`CapabilityWrapper`实现与exokernel的安全交互 - 支持从初始能力(`get_initial_capabilities`)获取必要的系统资源访问权限 ## 技术栈 ### 编程语言 - **Rust**:用于bootloader、safe_ffi和safe_services实现,提供内存安全保证和现代语言特性 - **Zig**:用于exokernel框架实现,提供接近C的性能和更好的内存安全性 - **Kotlin**:用于kuikly_UI模块开发 ### 核心依赖 #### 构建与包管理 - **Zoi**:提供跨平台包管理和环境设置功能(版本:5.0.2-beta) ## Zoi集成 Kuya项目已集成Zoi包管理器,提供了完整的项目环境管理和自动化工作流支持。通过Zoi,您可以轻松管理项目依赖、构建环境和开发工作流。 ### Zoi服务功能 Kuya的Zoi服务提供以下核心功能: - **包管理**:安装、更新、卸载和管理各种包依赖 - **依赖解析**:自动处理复杂的依赖关系图 - **环境设置**:配置和管理项目开发环境 - **构建自动化**:提供统一的构建命令和工作流 - **工作流编排**:定义和执行复杂的开发工作流 ### Zoi配置文件 项目根目录下的`zoi.yaml`文件定义了完整的项目环境配置: - **系统依赖**:确保开发环境中的基础软件已安装 - **自定义命令**:提供便捷的开发命令(构建、测试、格式化等) - **开发环境**:预定义的开发环境配置(完整构建、快速开发等) - **项目组件关系**:定义各组件之间的依赖关系 ### 使用Zoi命令 在项目根目录下,您可以使用以下Zoi命令: ```bash # 通用开发命令 zoi run clean # 清理项目构建文件 zoi run build # 构建整个项目 zoi run build-release # 构建发布版本 zoi run test # 运行项目测试 zoi run fmt # 格式化代码 zoi run lint # 运行代码检查 # 组件构建命令 zoi run build-exokernel # 构建exokernel组件 zoi run build-ui # 构建UI组件 zoi run run-services # 运行服务管理器 # 预定义环境命令 zoi run full-build # 执行完整构建环境 zoi run fast-dev # 快速开发环境 zoi run cleanup # 清理项目环境 ``` ### Zoi API集成 除了命令行工具外,Kuya还在`safe_services`模块中集成了Zoi API,允许程序直接使用Zoi的功能: ```rust // 获取Zoi服务 ezoi_service = service_manager.get_zoi_service(); // 安装包 zoi_service.lock().unwrap().install_package("package_name", false).await; // 获取已安装包列表 let packages = zoi_service.lock().unwrap().get_installed_packages().await; ``` 详细使用示例请参考`safe_services/examples/zoi_integration_example.rs`文件。 #### safe_ffi 依赖 - **lazy_static**:静态变量延迟初始化 - **thiserror**:错误处理 - **log**:日志系统 - **tokio**:异步运行时 - **arc-swap**:原子引用交换 - **serde/serde_json**:序列化和反序列化 - **sync_wrapper**:同步包装器 - **spin**:自旋锁 - **num_cpus**:CPU核心数检测 - **slab**:内存分配器 #### safe_services 依赖 - **libc**:C标准库接口 - **log/env_logger**:日志系统 - **serde/serde_json/bincode/toml**:数据序列化 - **tokio/futures**:异步编程支持 - **sysinfo**:系统信息获取 - **safe_ffi**:内部依赖,提供FFI接口 ## 安全设计 ### 能力系统 Kuya系统采用能力系统(Capability System)进行资源访问控制,确保每个服务只能访问其被授权的资源: 1. **能力包装器(CapabilityWrapper)**:安全地管理exokernel能力 2. **线程安全能力(ThreadSafeCapability)**:确保多线程环境下的能力安全访问 3. **获取与释放机制**:明确定义资源访问的生命周期 ### 内存安全 通过框内核架构和Rust语言的安全特性,Kuya系统实现了多层次的内存安全保障: 1. **OS框架隔离**:只有极小部分代码(exokernel)允许使用unsafe操作 2. **Rust安全保证**:服务层完全基于safe Rust实现,杜绝内存安全问题 3. **类型安全**:严格的类型系统确保资源访问的正确性 4. **内存管理抽象**:提供高级内存管理API,隐藏底层复杂性 ## 开发与构建 ### 构建前提条件 - **Rust工具链**:用于构建bootloader、safe_ffi和safe_services组件 - **Zig编译器**:用于构建exokernel组件 - **Kotlin编译器**:用于kuikly_UI组件开发 - **Gradle**:用于构建kuikly_UI组件 ### 构建步骤 1. 构建bootloader: ```bash cd bootloader cargo build ``` 2. 构建exokernel框架: ```bash cd ../exokernel zig build ``` 3. 构建safe_ffi库: ```bash cd ../safe_ffi cargo build ``` 4. 构建safe_services服务: ```bash cd ../safe_services cargo build ``` 5. 构建kuikly_UI: ```bash cd ../kuikly_UI gradle build ``` 或者使用工作空间统一构建(推荐): ```bash # 在项目根目录执行 cargo build --workspace ``` ## 示例用法 Kuya系统提供了多种示例,展示如何使用系统的各项功能: - **内存管理示例**:演示安全内存分配和释放 - **进程创建示例**:展示如何创建和管理进程 - **文件操作示例**:演示文件系统服务的使用方法 - **图形渲染示例**:展示如何使用图形服务进行渲染 - **Zoi集成示例**:演示如何使用集成的Zoi服务进行包管理操作(位于`safe_services/examples/zoi_integration_example.rs`) - **UniGetUI集成示例**:演示如何使用集成的UniGetUI服务进行统一包管理操作(位于`safe_services/examples/unigetui_integration_example.rs`) ## 未来规划 Kuya项目计划在未来实现以下功能和改进: 1. **完善驱动支持**:增加更多设备驱动程序 2. **网络协议栈增强**:实现完整的TCP/IP协议栈 3. **安全增强**:添加更多安全特性和防护机制 4. **分布式扩展**:支持分布式系统功能 5. **虚拟化支持**:添加虚拟化功能 6. **更多应用示例**:提供更多应用场景的示例代码 ## 许可证 本项目采用木兰宽松许可证(MulanPSL)。 ## 贡献指南 欢迎对Kuya项目进行贡献!请遵循以下流程: 1. Fork项目仓库 2. 创建特性分支 3. 提交更改 4. 推送到远程分支 5. 创建Pull Request ## 免责声明 本项目目前处于开发阶段,不建议在生产环境中使用。 --- Kuya - 安全高效的框内核操作系统框架