# Chym **Repository Path**: ChimChym/chym ## Basic Information - **Project Name**: Chym - **Description**: chym是用chim写的类似Asterinas的框内核Framekernel架构的多核操作系统. - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-02 - **Last Updated**: 2025-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Chym 操作系统(中文名:启程操作系统) **基于框内核架构的安全操作系统** ## 项目简介 Chym (中文名:启程操作系统)是一个基于**框内核(Frame Kernel)架构**的实验性操作系统,使用 Chim 语言实现。项目借鉴了 Asterinas 的设计理念,通过将 unsafe 代码限制在最小的受信任计算基础(TCB)中,实现了内核的内存安全性,同时保持了与传统宏内核相当的性能。 ### 核心特性 - **框内核架构**:分离受信任代码(OSTD)和安全框架代码(kernel) - **能力化安全**:基于Capability-Based Security的权限管理系统 - **内存安全**:大部分内核代码使用安全 Chim 编写,拒绝 unsafe 代码 - **每核绑定**:支持Per-Core任务队列和工作窃取调度 - **事件队列**:优先级、超时和每核绑定的异步消息传递 - **驱动中心**:安全的驱动管理框架,支持能力校验和审计日志 - **中英双轨**:支持中英文关键字,便于中文开发者使用 - **零成本抽象**:高层抽象不引入运行时开销 - **组生命周期**:Chim 语言独特的内存管理机制 ## 架构设计 Chym 采用两层架构设计: ``` Chym ├── ChymTD/ # 操作系统标准库(受信任计算基础) │ ├── arch/ # 架构特定代码 │ ├── boot/ # 引导支持 │ ├── mm/ # 内存管理 │ ├── mem/ # Epoch回收、危险指针、无锁数据结构 │ ├── task/ # 任务管理 │ ├── sync/ # 同步原语(自旋锁、互斥锁、读写锁) │ ├── sched/ # 每核绑定机制 │ ├── security/ # 能力化安全模型 │ └── concurrent/ # 并发原语(MPMC队列、SeqLock) ├── kernel/ # 内核框架层(完全安全代码) │ ├── process/ # 进程管理 │ ├── sched/ # 调度器 │ ├── fs/ # 文件系统 │ ├── net/ # 网络栈 │ ├── syscall/ # 系统调用 │ ├── events/ # 事件队列系统 │ └── driver/ # 驱动中心框架 └── ChymDK/ # 开发工具包 ``` ## 许可证 本项目采用 **Mulan PSL 2.0** 开源许可证。 ## 目录结构 ``` chym ├── apps/ # 应用程序 │ └── winboat/ # WinBoat - Windows 应用集成工具 ├── dist/ # 构建输出目录 ├── kernel/ # 内核框架层(完全安全代码) ├── limine/ # Limine 引导加载器 ├── ChymDK/ # 开发工具包 ├── ChymTD/ # 操作系统标准库(受信任计算基础) ├── scripts/ # 构建脚本 ├── tests/ # 测试文件 ├── tools/ # 开发工具 ├── 桌面环境/ # 桌面环境相关文件 ├── chymde_demo.chim # ChymDE 演示文件 ├── chym教育价值分析报告.md # 教育价值分析报告 ├── LICENSE # 许可证文件 ├── linker.ld # 链接脚本 ├── README.md # 项目说明文档 ├── test_simple.chim # 简单测试文件 ├── 内核入口.chim # 内核入口文件 └── 汇编.chim # 汇编代码文件 ``` ## 兼容性说明 ### Linux 兼容性 Chym 操作系统提供了 Linux 兼容性层,允许在 Chym 上运行部分 Linux 程序。该兼容层通过模拟 Linux 系统调用和提供 POSIX API 接口来实现。 #### 已实现的核心功能 - **系统调用实现**:已实现 sys_write、sys_read、sys_open、sys_close、sys_mmap、sys_munmap、sys_execve 和 sys_pause 等基础系统调用 - **ELF 加载器**:支持解析和加载 ELF 格式的可执行文件,包括文件头解析、程序段加载和基本重定位处理 - **POSIX API 兼容**:提供了标准 POSIX 接口,包括: - 线程管理:pthread_create、pthread_join - 线程同步:pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock - 信号处理:signal 及常见信号支持(SIGINT、SIGTERM、SIGKILL 等) - 网络编程:socket、bind、listen、accept、poll - 环境变量:getenv、setenv - 文件操作:flock #### 兼容性目录结构 ``` kernel/src/compat/ ├── linux_abi.chim # Linux 系统调用实现 ├── linux_api.chim # POSIX API 兼容层 ├── elf_loader.chim # ELF 文件加载器 └── linux_compat_test.chim # 兼容性测试 ``` ### Windows 兼容性 Chym 操作系统通过 WinBoat 模块实现对 Windows 应用的兼容支持,这是一个创新的跨平台应用集成方案。 #### WinBoat 核心功能 - **应用管理**:支持 Windows 应用列表同步和自定义应用管理 - **容器管理**:提供应用容器化运行环境,支持 QEMU/KVM、Docker、Podman 等多种容器运行时 - **RDP 客户端**:集成远程桌面协议支持,实现 Windows 应用的图形界面显示 - **系统监控**:提供 CPU、内存、磁盘等系统资源监控功能 - **健康检查**:应用状态监控和自动恢复机制 #### 集成特性 - **文件系统共享**:支持 Windows 应用与 Chym 系统间的文件共享 - **剪贴板同步**:实现 Windows 应用与 Chym 系统间的剪贴板内容共享 - **窗口管理集成**:Windows 应用窗口无缝集成到 Chym 桌面环境 - **注册表配置**:使用 Chym 的注册表系统管理 Windows 应用配置 ## 核心模块 ### ChymTD(操作系统标准库) OSTD 是受信任的计算基础,提供底层抽象: - **架构层(arch)**:硬件抽象和平台特定功能 - x86_64 支持 - RISC-V 支持(计划中) - ARM64 支持(计划中) - **引导(boot)**:系统引导和初始化 - 引导信息管理 - SMP(多核)支持 - AP(应用处理器)初始化 - **内存管理(mm)**:物理和虚拟内存管理 - 物理帧分配器 - 页表管理 - 堆分配器 - DMA 内存管理 - **任务管理(task)**:任务和线程基础 - 任务抽象 - CPU 管理 - Per-CPU 数据结构 - **同步原语(sync)**:并发控制 - Mutex(互斥锁) - RwLock(读写锁) - Spinlock(自旋锁) - Once(一次性初始化) - **并发原语(concurrent)**:无锁数据结构 - MPMC队列(多生产者多消费者) - SeqLock(顺序锁) - 读写锁(无锁实现) - **内存管理(mem)**:高级内存管理 - Epoch回收机制(EBR) - 危险指针(Hazard Pointers) - 带版本指针(Versioned Pointers) - **安全模块(security)**:能力化安全模型 - 基于Capability-Based Security - 细粒度权限管理(内存、设备、网络等) - 能力委托和过期机制 - 审计日志支持 - **调度模块(sched)**:每核绑定机制 - Per-Core任务队列 - 工作窃取调度 - CPU亲和性管理 - 每核统计信息 ### 2. 内核框架层 内核框架层完全使用安全 Chim 代码实现: - **进程管理(process)**:完整的进程生命周期 - 进程创建和销毁 - 进程克隆(fork) - 程序执行(exec) - 权限凭证管理 - 命名空间支持 - 信号处理 - **调度器(sched)**:多种调度策略 - 完全公平调度器(CFS) - 实时调度器 - 空闲调度器 - CPU 亲和性支持 - **文件系统(fs)**:虚拟文件系统 - VFS 抽象层 - RamFS(内存文件系统) - ProcFS(/proc) - DevFS(/dev) - Ext2 支持(计划中) - **网络栈(net)**:网络协议支持 - TCP/IP 协议栈(计划中) - Socket 接口 - 网络设备抽象 - **系统调用(syscall)**:用户态接口 - 标准 POSIX 系统调用 - 文件操作 - 进程控制 - 内存管理 - **事件系统(events)**:异步消息传递 - 三级优先级队列(高/中/低) - 超时和消息降级 - 每核绑定的事件端点 - 配额控制和回压管理 - 基于名称的端点路由 - **驱动框架(driver)**:安全驱动管理 - 驱动生命周期管理(注册/加载/启动/停止/卸载) - 能力校验和权限检查 - 驱动依赖管理 - API调用计数和错误跟踪 - 完整的审计日志 - 支持多种驱动类型(字符/块/网络/文件系统等) ### 3. ChymDK(开发工具包) 为 Chim 语言开发者提供的工具链: - 项目创建和管理 - 构建和编译 - 运行和调试 - 测试支持 - **ISO 构建工具**(新增) - 多引导加载器支持(Limine, GRUB2, Multiboot2) - Bundle 管理 - 自动化构建流程 ### 4. WinBoat(Windows 应用集成) **WinBoat** 是一个允许在 Chym 操作系统上运行 Windows 应用程序的集成工具,通过容器化和远程桌面技术实现无缝的 Windows 应用访问。 #### 核心特性 - **Windows 应用管理**: - 自动获取和管理 Windows 应用列表 - 应用使用统计和追踪 - 支持自定义应用配置 - 快速搜索和分类 - **容器化支持**: - Docker 容器集成 - 资源限制和隔离 - 容器生命周期管理 - 实时状态监控 - **远程桌面连接**: - FreeRDP 集成 - 多会话管理 - 剪贴板共享 - 文件传输支持 - **系统集成**: - 与 Chym 桌面环境深度集成 - 统一的应用启动器 - 系统资源监控 - 配置持久化 #### WinBoat 架构 ``` WinBoat ├── 应用管理器 (app_manager.chim) │ ├── 应用列表管理 │ ├── 使用统计 │ └── 自定义应用 ├── 容器管理器 (container_manager.chim) │ ├── Docker 集成 │ ├── 容器生命周期 │ └── 资源监控 ├── RDP 客户端 (rdp_client.chim) │ ├── 会话管理 │ ├── 连接配置 │ └── 状态监控 ├── Windows 服务 (windows_service.chim) │ ├── 服务通信 │ ├── 应用列表获取 │ └── 系统指标收集 └── 主程序 (main.chim) ├── 初始化和配置 ├── 模块协调 └── Chym 集成接口 ``` #### 使用 WinBoat **启动 WinBoat 服务:** ```chim safe // 导入 WinBoat 模块 use apps::winboat::* // 初始化 WinBoat initialize_winboat() // 启动 WinBoat 服务 start_service() ``` **管理应用:** ```chim safe // 获取所有 Windows 应用 令 apps := get_application_list() // 启动应用 launch_app("microsoft-word") // 停止应用 stop_app("microsoft-excel") // 获取最常用应用 令 most_used := get_most_used_apps(10) ``` **容器管理:** ```chim safe use apps::winboat::container::* // 创建容器配置 令 config := ContainerConfig( name: "windows-app-1", image: "windows/servercore", cpu_limit: 2.0, memory_limit: 4096, // 4GB port_mappings: 数组( PortMapping(host_port: 3389, container_port: 3389) ) ) // 创建并启动容器 令 container := create_container(config) start_container(container.id) ``` **远程桌面连接:** ```chim safe use apps::winboat::rdp::* // 创建 RDP 配置 令 rdp_config := RdpConfig( host: "192.168.1.100", port: 3389, username: "user", password: "password", resolution: (1920, 1080), color_depth: 32 ) // 建立 RDP 会话 令 session := create_session(rdp_config) // 断开会话 disconnect_session(session.id) ``` #### WinBoat 配置 配置文件位置:`~/.config/winboat/config.json` 主要配置项: ```json { "dataDirectory": "~/.local/share/winboat", "logDirectory": "~/.local/share/winboat/logs", "containerRuntime": "docker", "rdpClientPath": "/usr/bin/xfreerdp", "defaultWindowsHost": "192.168.1.100", "defaultWindowsPort": 3389, "autoStart": true, "maxConcurrentSessions": 5, "resourceLimits": { "maxCpuPerContainer": 4.0, "maxMemoryPerContainer": 8192 } } ``` #### 系统要求 - **Chym 操作系统**:最新版本 - **Docker**:用于容器化应用(可选) - **FreeRDP**:用于远程桌面连接 - **网络连接**:用于访问 Windows 服务 - **系统资源**: - 最低:2GB RAM,20GB 存储空间 - 推荐:8GB RAM,50GB 存储空间 #### 安装 WinBoat **通过 Chym 应用商店(推荐):** ```bash # 打开应用商店 chym-store search winboat # 安装 chym-store install winboat ``` **手动安装:** ```bash cd /apps/winboat ./install.sh ``` #### 文档资源 - **用户指南**:[apps/winboat/USER_GUIDE.md](apps/winboat/USER_GUIDE.md) - **开发者文档**:[apps/winboat/DEVELOPMENT.md](apps/winboat/DEVELOPMENT.md) - **API 参考**:[apps/winboat/README.md](apps/winboat/README.md) #### WinBoat 功能模块 | 模块 | 文件 | 行数 | 功能描述 | |------|------|------|----------| | 类型定义 | `types.chim` | 3.6KB | 核心数据结构和类型 | | 应用管理 | `app_manager.chim` | 7.0KB | 应用列表和使用统计 | | 容器管理 | `container_manager.chim` | 11.9KB | Docker 容器集成 | | RDP 客户端 | `rdp_client.chim` | 8.9KB | 远程桌面连接 | | Windows 服务 | `windows_service.chim` | 10.5KB | Windows 系统通信 | | 主程序 | `main.chim` | 18.8KB | 服务入口和协调 | | 测试 | `test_winboat.chim` | 10.3KB | 功能测试 | #### 许可证 WinBoat 使用 **木兰宽松许可证 v2(Mulan PSL v2)**,与 Chym 项目保持一致。 ## 快速开始 ### 环境要求 - **Chim 编译器**:Chim 语言编译器 - **QEMU**:用于运行和测试内核 - **PowerShell**:Windows 下的脚本执行环境 - **操作系统**:Windows 10/11,Linux,或 macOS ### 构建和运行 #### 方法 1:使用 PowerShell 脚本(推荐) ```powershell # 克隆仓库 cd d:\PROJECT\Chym # 构建并运行内核 .\scripts\build_and_run.ps1 # 或者分步执行: # 1. 生成 ISO 镜像 .\scripts\make_iso.ps1 # 2. 在 QEMU 中运行 .\scripts\qemu.ps1 ``` #### 方法 2:使用 ISO 构建工具(新增) ```powershell # 使用新的 ISO 构建工具 .\tools\iso_builder\build-iso.ps1 ` -KernelPath build\kernel.bin ` -OutputPath dist\chym.iso ` -BootMethod limine # 带 initramfs .\tools\iso_builder\build-iso.ps1 ` -KernelPath build\kernel.bin ` -OutputPath dist\chym.iso ` -BootMethod grub2 ` -Initramfs build\initramfs.cpio ``` #### 方法 2:使用 ChymDK(计划中) ```bash # 创建新项目 chim-osdk new --kernel my-os # 进入项目目录 cd my-os # 构建内核 chim-osdk build # 运行内核 chim-osdk run ``` ### 配置选项 可以通过环境变量或命令行参数配置构建选项: ```powershell # 设置虚拟机内存大小(4GB) $env:QEMU_MEM = "4G" # 设置 CPU 核心数(4核) $env:QEMU_SMP = "4" # 启用 KVM 加速 $env:ENABLE_KVM = "true" # 运行 .\scripts\qemu.ps1 ``` ## 语言特性 ### Chim 语言核心特性 - **强类型系统**:静态类型检查,编译时发现错误 - **中英双轨关键字**:支持中文和英文关键字 - `令` / `let`:不可变变量 - `设` / `var`:可变变量 - `函数` / `fn`:函数定义 - `匹配` / `match`:模式匹配 - `返回` / `return`:返回语句 - **缩进式语法**:Python/Nim 风格,使用缩进表示代码块 - 无花括号 `{}` - 无 `end` 关键字 - 使用冒号 `:` + 缩进 - **组生命周期**:类 June 语言的内存管理 - LOCAL:不逃离当前函数 - PARAM:通过参数传递 - RETURN:作为返回值传递 - GROUP:属于某个组 - SNAPSHOT:快照(只读) - HANDLE:句柄(轻量引用) - **多方言系统**:不同安全级别 - `安全` / `safe`:默认安全模式 - `系统` / `system`:系统编程模式 - `兼容` / `compat`:兼容模式 - **Swift 风格模式匹配**: - 值匹配:`案例 1 ->` - 元组模式:`案例 (0, 0) ->` - 范围匹配:`案例 90..100 ->` - Guard 条件:`案例 x 当 x > 0 ->` - **并发支持**:CSP 模型 - `通道` / `chan`:通道类型 - `<-` 运算符:发送/接收消息 ## 示例代码 ### Hello World (安全模式) ```chim afe // 使用中文关键字 fn 主函数() -> 整数: 输出("你好,Chym 操作系统!") 返回 0 // 或使用英文关键字 fn main() -> i32: println!("Hello, Chym OS!") return 0 ``` ### 进程管理示例 ```chim system use ostd::prelude::* use kernel::process::Process fn create_process(name: String, entry: fn()) -> Result>: // 创建新进程 令 process := Process::new(name, entry)? // 启动进程 process.start() // 返回进程引用 返回 Ok(process) ``` ### 内存管理示例 ```chim system use ostd::mm::{PageTable, PageFlags, PAGE_SIZE} fn map_page(vaddr: Vaddr, paddr: Paddr) -> Result<()>: // 检查地址对齐 匹配 (!is_page_aligned(vaddr) || !is_page_aligned(paddr)): 案例 真 -> 返回 Err(Error::InvalidAddress) _ -> pass // 创建页表项 令 flags := PageFlags::PRESENT | PageFlags::WRITABLE 令 entry := PageTableEntry::new(paddr, flags) // 映射页面 不安全: PageTable::map(vaddr, entry) 返回 Ok(()) ``` ### 组生命周期示例 ```chim system fn process_data(): // 创建组 组 data_group: 令 buffer := allocate_buffer(4096) // 在组内使用数据 fill_buffer(buffer, 0) // 创建快照传递给其他函数 令 snapshot := 快照(buffer) print_buffer(snapshot) // 组结束,自动释放 buffer ``` ### 模式匹配示例 ```chim safe fn classify_number(n: i32) -> String: 匹配 n: 案例 0 -> 返回 "零" 案例 x 当 x > 0 -> 返回 "正数" 案例 x 当 x < 0 -> 返回 "负数" _ -> 返回 "未知" fn check_point(point: (i32, i32)) -> String: 匹配 point: 案例 (0, 0) -> 返回 "原点" 案例 (x, 0) -> 返回 "在X轴上" 案例 (0, y) -> 返回 "在Y轴上" 案例 (x, y) 当 x == y -> 返回 "在对角线上" _ -> 返回 "普通点" ``` ## 贡献指南 欢迎贡献代码、报告问题或提出建议! ### 开发流程 1. Fork 本仓库 2. 创建功能分支 ```bash git checkout -b feature/amazing-feature ``` 3. 提交更改 ```bash git commit -m '添加了令人惊叹的功能' ``` 4. 推送到分支 ```bash git push origin feature/amazing-feature ``` 5. 开启 Pull Request ### 代码规范 - **安全第一**:优先使用安全代码,最小化 `unsafe` 使用 - **类型安全**:充分利用 Chim 的类型系统 - **中文注释**:使用中文编写注释和文档 - **测试覆盖**:为新功能编写测试 - **性能意识**:注意零成本抽象 ### 模块开发 参考 Asterinas 的设计模式: 1. **OSTD 层开发**(需要 `unsafe`) - 提供安全的公开 API - 在边界进行验证 - 文档说明安全性保证 2. **内核层开发**(完全安全) - 拒绝 `unsafe` 代码 - 使用 OSTD 提供的抽象 - 保持模块化设计 ## 参考资源 ### 相关项目 - **Asterinas**:框内核架构的灵感来源 - GitHub: https://github.com/asterinas/asterinas - 文档: https://asterinas.github.io/book/ - **Chim 编译器**:Chim 语言实现 - 路径: `d:\PROJECT\Chim` - **Uya 操作系统**:参考的另一个 OS 项目 - 路径: `d:\PROJECT\Uya` ### 文档 - [框内核架构设计](文档/框内核架构设计.md) - [开发者指南](文档/开发者指南.md) - [语言规范](文档/语言规范.md) - [Chym完善方案](Chym完善方案_基于Asterinas.md) ## 项目状态 ### 已完成 - ✅ ChymTD 核心模块设计 - 预导入模块 - 错误处理系统 - 引导支持 - 内存管理框架 - 任务管理框架 - ✅ 内核框架层设计 - 初始化流程 - 进程管理接口 - 调度器接口 - 文件系统接口 - ✅ 框内核架构文档 - ✅ **WinBoat 集成** - Windows 应用管理器 - 容器管理系统 - RDP 远程桌面客户端 - Windows 服务通信模块 - 完整的用户和开发文档 ### 进行中 - 🚧 ChymTD 实现 - 物理帧分配器 - 页表管理 - 堆分配器 - 同步原语 - 🚧 x86_64 架构支持 - CPU 初始化 - 中断处理 - 页表操作 ### 计划中 - ⏳ 内核子系统实现 - 进程管理核心 - CFS 调度器 - VFS 实现 - 系统调用框架 - ⏳ 高级特性 - 网络栈 - 设备驱动框架 - IPC 机制 - 安全模块 - **WinBoat 增强功能** - 多节点 Windows 服务支持 - 应用性能优化 - GPU 加速支持 - 高级网络配置 ## 许可证 本项目采用 **木兰宽松许可证 v2(Mulan PSL v2)** 开源。 详情请参见:https://license.coscl.org.cn/MulanPSL2 ## 致谢 - **Asterinas**:感谢提供框内核架构的设计灵感 - **Chim 语言**:感谢提供强大的类型系统和安全特性 - **WinBoat 项目**:感谢为 Chym 提供 Windows 应用集成解决方案 - **FreeRDP**:感谢提供开源的远程桌面协议实现 - **Docker**:感谢提供容器化技术支持 - **所有贡献者**:感谢为 Chym 操作系统做出贡献的开发者 ## 联系方式 如有问题或建议,请通过以下方式联系: - 提交 Issue:在 GitHub 仓库中创建 Issue - Pull Request:欢迎提交代码贡献 - 讨论区:参与项目讨论 --- **Chym - 基于框内核架构的安全操作系统** *使用 Chim 语言,构建更安全的内核*