# V0.2.0

> 发布日期: 2025-08-22

> 版本定位: 0.2.0 是 DragonOS 在「可用性、可观测性、可扩展性」三个维度的里程碑版本——引入 **ext4、动态链接、eBPF、虚拟化、命名空间 (PID/Mount/User 初步)、多体系结构 (x86_64 / RISC-V64 / LoongArch64)** 支持，以及系统调用子系统、内存/文件缓存子系统的大幅重构，为后续 0.3.x 的容器化、网络与调度增强打下基础。

---

## 📌 概览摘要 (Executive Summary)

**核心亮点：**

1. **文件系统与存储**: 新增 ext4；完成 mount/umount2；实现 gendisk/分区扫描；`/proc/mounts`；页面缓存与文件映射体系化；支持实验性 overlayfs；改进 FAT & VFS 元数据 (statx / newfstatat)。
2. **进程与命名空间**: 引入 PID Namespace、Mount Namespace、Namespace Proxy；实现 `unshare()`；改进进程组 / Session / TTY 作业控制；增强 `/proc` 进程信息。
3. **内存与虚拟内存**: mmap 延迟分配、`msync`、私有/共享文件映射；PageCache 脏页同步/回收；多处栈使用优化与爆栈修复；SLAB 与 buddy 回收改进。
4. **可观测性与可扩展**: 初步 eBPF 支持（rbpf → 主线 / kprobe / tracepoint / Aya 生态）；tracepoint 框架化；静态键 (static-keys)。
5. **虚拟化**: 引入 KVM/VMX 基础框架与 EPT；清理旧 KVM 代码；改进启动稳定性。
6. **体系结构**: 新增 LoongArch64 引导 & 异常处理早期实现；RISC-V64 改进；多引导协议抽象 (Multiboot2 / HVM / Serial Console / Framebuffer)。
7. **系统调用与内核结构**: 统一 syscall table；大量子系统模块化迁移；`ERESTARTSYS` 机制；补齐/新增大批系统调用（poll/epoll/select、eventfd、execveat、unshare、msync 等）。
8. **安全与权限**: Cred 框架 (UID/GID/FSUID/权限判定)；`set*id / setres*`；`chown/chmod` 迁移与修复。
9. **设备与 I/O**: virtio console、virtio blk 分区识别、loopback 网卡、TTY + epoll、HVC、PCI 配置空间访问、网络设备 sysfs 注册。
10. **工具链与生态**: 动态链接 (ELF 解释器)；Dadk 0.2.0 加速构建；统一用户态程序构建；实验接入 Tokio 单线程运行时；文档自动翻译与版本化。
11. **稳定性与质量**: 大量栈帧/死锁/内存越界/竞态/信号/等待语义/PageCache 修复；改进 backtrace/unwind；日志系统统一化。

---

## ⚠️ 重大变化与潜在不兼容 (Breaking / Important Changes)

- Dadk 升级到 0.2.0：旧版配置不兼容，需按新文档迁移。
- Syscall 结构重排：各子系统迁移到表驱动架构；自定义补丁需适配。
- 内核栈默认 16K → 32K，并引入 Guard Pages / 写保护 (x86_64)。
- PageCache 语义升级：`mmap` + 直接读写需结合 `msync`；旧行为假设需调整。
- Namespace 架构初步：接口未来可能调整（仍属实验状态）。
- eBPF 接口为早期形态：Map / Helper / 类型限制后续可能变化。

---

## ✨ 新增 / 增强特性 (Features & Enhancements)

### 1. 文件系统 & VFS
- **ext4**：基于 another_ext4 集成，可从块设备挂载。
- **mount/umount2**：真实块设备挂载链路 + 分区扫描 (MBR)；支持 MountFlags；`/proc/mounts`。
- **overlayfs (实验)**：多层只读 + 顶层写 copy-up + whiteout。
- gendisk 抽象；virtio 磁盘作为根文件系统；块设备自动注册 devfs。
- FAT/vfat：`rename/move` 重构；`statx` 创建时间 (btime)；文件映射；page cache 同步修复。
- VFS：`statx/newfstatat`、`faccessat2`、`linkat/renameat2`、`readlinkat` 等；open/close/stat/ioctl 拆分；LookUpFlags；`/proc` 扩展（kthread 标记 / FD 占用 / exe 链接 / 运行/启动时间 / tty 信息）。

### 2. 进程 / 命名空间 / 会话
- PID Namespace：ID 映射与隔离；nsproxy 统一挂载。
- Mount Namespace：根挂载树隔离。
- `unshare()`：新建 namespace（现覆盖 PID/Mount 基础）。
- Session / Process Group：完整作业控制；TTY 前台进程组信号 (SIGINT 等)；`wait4` 修复。
- reboot 流程增强（magic 校验 / 多 cmd 预留）。

### 3. 内存管理 (MM)
- `mmap` 延迟分配 / `msync` / `mprotect` 修复 / `madvise` / `msync` 表接入。
- PageCache：ID 管理、页面回写、脏页清理、回收线程、多次映射一致性修复。
- SLAB → buddy 释放路径补全；爆栈检测 (clippy)；拆分大函数降低栈占用。
- `mincore()` 占位返回 `ENOSYS`；`truncate_inode_pages` 框架。

### 4. 可观测 & eBPF
- `bpf()`：初始 Map / kprobe / 统计样例；rbpf 升级 → 主线；Aya 兼容模板。
- tracepoint 框架化；静态键支持热点条件启用。

### 5. 虚拟化 & 平台
- 初步 KVM/VMX + EPT；旧 KVM 清理。
- HVM / Multiboot2 / 启动命令行解析 (Arg/KV/EarlyKV)。
- LoongArch64：引导进入 `kernel_main` + 异常处理；RISC-V64 运行 Rust HelloWorld；多平台串口/控制台抽象；Serial Console + nographic。

### 6. 设备与 I/O
- virtio console (HVC)；virtio blk/网/控制台中断命名改进；PCI 配置空间访问 (portio)。
- Loopback 网卡；网络设备 sysfs 节点与属性；DHCP 稳定性。
- `eventfd` / `epoll` / `poll` / `ppoll` / `select` / `pselect6`：等待/超时/信号一致性。
- TTY：适配 epoll；控制字符解析；波特率/termios；tab/erase 修复；SIGINT 广播。

### 7. 安全 & 账户
- Cred 框架：UID/EUID/FSUID/GID/组列表；`seteuid/setegid/setres*`；`chown/chmod/fchownat/lchown`。
- `get/setgroups`；`umask` 类型改造；`/proc` status 名称精确化。

### 8. 系统调用子系统
- 统一 syscall table；`ERESTARTSYS`；批量迁移(process/mm/vfs/ipc)。
- 新增/补齐：`mount`, `umount2`, `eventfd`, `poll/ppoll/select/pselect6`, `epoll` 重构, `fchdir`, `mkdirat/mkdirat2`, `utimensat/utimes`, `newfstatat/statx`, `execveat`, `unshare`, `set|getgroups`, `msync`, `madvise`, `mremap`, `mprotect`, `brk/sbrk`, `reboot` 增强, `rt_sigpending`, `mincore(ENOSYS)` 等。

### 9. 工具链 / 构建 / 文档
- Dadk 0.2.0：镜像生命周期管理 / 构建加速 / profiling。
- 统一用户程序构建：Rust + C；示例 Rust 应用。
- 动态链接 ELF 解释器；busybox 引导模式 & NovaShell/DragonReach 演进。
- 自动文档翻译，多语言，多版本 Sphinx；页脚显示 commit；README / Q&A / namespace 文档更新。
- CI：Docker 构建缓存、按分支触发、镜像自动推送、MinIO/S3 分发、loongarch64 QEMU 构建、工具链 nightly 锁定、backtrace/unwind 升级、栈溢出测试。

---

## 🚀 性能与资源占用 (Performance & Footprint)

- 减少多处大栈帧：IRQ 初始化拆分、ACPI 表读取宏化、process create/内存池结构重写 (Vec 替换大数组)。
- PageCache 二次映射写入 panic 修复 → 提升 mmap IO 连贯性；减少 copy。
- SLAB 空闲页回收 → buddy，降低驻留内存。
- 通过写保护 + Guard Pages 早期发现非法写入。

---

## 🛠 稳定性 & 关键修复 (Stability & Fixes)

代表性修复：

- 等待/进程：`wait/wait4` 语义、`do_wait` 锁释放、Blocked 子进程处理。
- I/O 多路复用：epoll inode 引用释放、epoll 超时/唤醒广播、poll 边界/RestartBlock。
- 管道/信号：pipe/FIFO 非阻塞 + 信号/kill 语义；阻塞 pipe 可被 kill；命名管道 POSIX 行为。
- PageCache：mmap 多实例一致性；回写已 drop address space panic；`unlink` 后脏页处理。
- futex：用户态地址安全 `safe_read/safe_write`；robust list。
- 信号：默认 handler 恢复；SIGINT 分发；KILL pid=1 反馈；pending not masked 检查；`execve` 错误传播。
- TTY：前台进程组置空错误；init 早期字符输入崩溃；tab 展开越界。
- Timer：插入边界；`sleep` 被信号打断 `ERESTARTSYS`。
- 竞争/内存：slab UAF/越界；nttyData 栈溢出；buddy 构造大栈帧；内核地址错误 RIP 输出。
- 文件系统：`getcwd` 语义；`read O_PATH` 校验；`unlink` 后 dirty 清理；remount 错误；`mprotect vm_flags`。
- ELF：解释器路径读取越界；`execve` 失败错误码。
- 多路复用：`select/pselect6` 初期编译问题。
- virtio/PCI：多设备中断冲突；PCI 初始化顺序；virtio net 中断处理。
- 网络：DHCP 网卡顺序；loopback / poll listen 状态。

---

## 🧾 新系统调用清单 (部分)

`mount`, `umount2`, `fchdir`, `mkdirat/mkdirat2`, `linkat/renameat/renameat2`, `newfstatat`, `statx`, `readlinkat`, `faccessat/faccessat2`, `eventfd`, `poll`, `ppoll`, `select`, `pselect6`, `epoll` (重构), `utimensat`, `utimes`, `msync`, `madvise`, `mremap`, `mprotect`, `brk/sbrk` (表化), `execveat`, `unshare`, `setgroups/getgroups`, `rt_sigpending`, `reboot` (增强), `mincore(ENOSYS)` ...

---

## 🧪 开发与构建体验 (Dev Experience)

- Dadk 0.2.0：镜像创建 / 挂载 / 卸载统一；构建加速；profiling。
- 用户程序：Rust + C 统一构建流水线；Rust 示例。
- 工具链：固定 nightly 版本 & 升级脚本；多架构交叉工具链脚本。
- 文档：自动翻译 & 失效清理；中英双语；FAQ / 构建问题指引。

---

## 🙌 贡献者 (部分, 按提交活跃度 / 首字母)

感谢所有贡献者在内核子系统、文件系统、虚拟化、文档与工具链方面的持续投入。

特别感谢以下核心贡献者：

- **longjin** - 项目负责人，大量核心功能实现与重构
- **chenlinfeng (Godones)** - eBPF、网络、文件系统等
- **sparkzky** - TTY、进程管理、系统调用重构
- **MemoryShore** - 文件系统、内存管理、VFS
- **Samuel Dai** - KVM、网络、驱动
- **黄铭涛** - PCI、驱动、内核优化
- 以及所有其他贡献者！

### 本版本贡献者清单

LoGin <longjin@DragonOS.org>, <jinlong@tencent.com><br>
linfeng: <chenlinfeng25@outlook.com>, <1925466036@qq.com><br>
火花 <sparkhhhhhhhhhh@outlook.com>, <146502758+sparkzky@users.noreply.github.com><br>
MemoryShore: <1353318529@qq.com>, <105195940+MemoryShore@users.noreply.github.com><br>
黄铭涛: <1037827920@qq.com>, <114841534+1037827920@users.noreply.github.com><br>
Jomo <xuzihao@dragonos.org><br>
Samuel Dai: <samuka007@dragonos.org>, <dailvchen@dragonos.org><br>
曾俊 <110876916+ZZJJWarth@users.noreply.github.com><br>
kaleidoscope416 <2448956191@qq.com><br>
github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com><br>
DoL <1240800466@qq.com><br>
donjuanplatinum <113148619+donjuanplatinum@users.noreply.github.com><br>
chiichen <chiichen@qq.com><br>
BrahmaMantra <140599389+BrahmaMantra@users.noreply.github.com><br>
Vitus: <zhzvitus@gmail.com>, <144411726+Vitus213@users.noreply.github.com><br>
YJwu2023 <yujianwu2019@gmail.com><br>
GnoCiYeH <heyicong@dragonos.org><br>
LIU Yuwei <22045841+Marsman1996@users.noreply.github.com><br>
yuyi2439 <68320855+yuyi2439@users.noreply.github.com><br>
codeironman <1553389239@qq.com><br>
EMasi <1176949486@qq.com><br>
SMALLC <121806694+smallcjy@users.noreply.github.com><br>
laokengwt <143977175+laokengwt@users.noreply.github.com><br>
Godones <chenlinfeng25@outlook.com><br>
oeasy1412 <oeasy1412@gmail.com><br>
dragonosbot <bot@dragonos.org><br>
xiaolin2004 <1553367438@qq.com>, <109840258+xiaolin2004@users.noreply.github.com>

---

## ✅ 验证建议 (Smoke Test Checklist)

- 基础启动：x86_64 / riscv64 / loongarch64 (串口/图形)；检查 `/proc/mounts` `/proc/*/status`。
- 动态链接：运行动态链接 busybox / Rust 程序。
- 文件系统：挂载 ext4 & vfat；创建/删除/rename；`mmap` + 直接写 + `msync`。
- 进程控制：多 shell / Ctrl+C / 前后台切换。
- 网络：loopback ping / DHCP 初始化日志。
- eBPF：加载示例 kprobe 统计程序；读取 `trace_pipe`。
- poll/epoll：运行 `test_poll` / `test_epoll`。
- reboot：执行 reboot 系统调用（模拟）。
- Namespace：测试 `unshare`（挂载隔离 / PID 观察）。

---

## 🙏 致谢 (Acknowledgements)

感谢所有开发者、测试者、文档贡献者及社区用户的反馈。DragonOS 0.2.0 站在前序版本的实验与积累之上，也为后续容器化、资源隔离与性能优化奠定结构基础。欢迎通过 Issue / PR / 讨论区持续参与。

---

## 🔎 附录: 关键词索引 (便于检索)

`ext4` `overlayfs` `PageCache` `mmap` `PID namespace` `mount namespace` `unshare` `syscall table` `eBPF` `kprobe` `tracepoint` `Aya` `KVM` `VMX` `EPT` `LoongArch64` `RISC-V` `virtio console` `loopback` `eventfd` `poll` `epoll` `select` `pselect6` `ppoll` `statx` `newfstatat` `execveat` `dynamic linking` `Dadk 0.2.0` `Cred` `chown` `msync` `mprotect` `utimensat` `reboot` `slab` `buddy` `Guard Page` `WP` `Tokio` `groupprocess/session`

-- END OF DragonOS 0.2.0 Release Notes --
