老鬼看到一个操作系统教学项目,第一反应往往不是“牛不牛”,而是:学生真能读完吗?
很多所谓教学操作系统,打开目录就已经劝退了。内核、驱动、工具链、脚本、文档堆在一起,老师讲得热热闹闹,学生最后只会改几个函数交作业。egos-2000 这个点就挺狠,它直接把目标写死:让每个学生都能读完一个教学操作系统的全部代码。仓库里用 cloc 数了一遍,C、头文件、汇编和 make 加起来,正好 2000 行。啧,这种数字当然有点“表演”,但表演得很有教学价值。
更关键的是,它不是 2000 行玩具 shell。

它把系统拆成三层:earth 贴硬件,处理 tty、disk、timer、memory 这些脏活;grass 做硬件无关抽象,管进程控制块和系统调用;再往上才是文件系统、shell 和用户命令。这个分层名字有点可爱,但思路很直:别一上来就把学生丢进一锅粥里。
我比较喜欢这个设计的地方,是它没有假装“操作系统很优雅”。OS 最烦人的本来就是边界:设备怎么抽象,系统调用怎么穿过去,用户程序到底怎么摸到内核能力。egos-2000 这套 earth / grass / application,至少把几条线画出来了。
当然,先别急着吹。
2000 行代码的代价也很明显:很多工程化细节肯定不会像成熟内核那样完整。真要学异常处理、复杂调度、文件系统可靠性、多设备兼容,那它大概率只是入口,不是终点。但教学项目最怕的不是“不完整”,是完整到没人读。这个取舍,我觉得是对的。
跑起来这块也比较现实。USAGES 里给了 QEMU 路线,make qemu 之后会走 RISC-V 模拟器启动,还能看到内存翻译机制的选择;想折腾真硬件,也支持 Tang Nano 20K、Arty 这类板子。老鬼以前看这类项目,最烦那种 README 只写“支持硬件”,结果工具链、串口、SD 卡全靠猜。这里至少把路径摆出来了。
还有配套的 EGOS book,基于它设计了 9 个课程项目。这个很重要。光有小内核不够,教学还得有一条能走下去的路线,不然学生读完 2000 行,下一步还是懵。
所以 egos-2000 适合谁?我觉得不是已经写过内核的人,而是第一次想把“进程、系统调用、文件系统、shell”连成一条线的人。别指望它替代 xv6 或 Linux 内核阅读,但拿来做 OS 入门课、社团训练、小型课程项目,挺香。

Github地址:yhzhang0128/egos-2000
|