三层架构,九款自带应用,五个定制矢量图标,一行第三方代码都没用。当你启动IONA OS的图形界面,看到的每一个像素,都是从内核地址空间里用Rust一行行画出来的——没有Qt,没有GTK,更没有WebView。整个桌面环境,完全是手搓。
大多数人做操作系统,会直接抱走现成的图形工具包。Linux生态有GTK和Qt,Windows有Win32、WPF那套,macOS守着AppKit和SwiftUI。这些库经过多年打磨,能省掉成吨的开发时间。但IONA OS的开发者偏偏一条都没选。他要的是“像素级主权”——不引入外部依赖,不受任何许可证限制,不携带一行用不到的逻辑,也不必替历史债务买单。当然,更直白的理由是这个挑战本身就“让人极度舒适”。
这种从头开荒式的做法,决定了整个GUI要分成泾渭分明的三层。最底层是合成器,位于src/gui/compositor.rs,管着所有窗口的生死、输入事件的分发,还负责把桌面画出来。它走的是“玻璃”风格,窗口带着模糊和透明效果,用双缓冲机制消除闪烁,所有输入事件都会精准派发给当前活跃窗口。
第二层是控件库,代码集中在src/gui/widgets目录下。按钮、文本框、滚动条、标签页……每个界面元件都是一个实现了Widget特质的结构体。这个特质定义了draw和handle_event两个方法,前者负责把自己画到像素缓冲区里,后者处理交互。有了统一的接口,再复杂的界面也能用这些基础积木搭出来。
再往上是应用程序层,直接调用控件系统来干实际的活。目前IONA OS已经塞进了九款自带应用:一个带导航和滚动条的简易浏览器,一个支持回滚和可视化滚动条的终端,一个能滚动、能多选的邮件客户端,一个朴素便签,一个月视图可前后翻的日历,一个用来盯CPU、内存和进程的系统监控,一个蓝牙设备管理工具,一个同时具备计时器和秒表功能的时钟,还有一个专门跑性能测试的基准程序。每一款都不是摆设,确实都能交互。
直到不久前,桌面停靠栏和启动器里的图标长得还像一坨坨模糊的色块。现在不一样了,每个应用都有了自己独立的矢量形状——便签是带横线的记事本,备份是软盘,保险库是钥匙,蓝牙是连接中的节点,文本编辑器则是一支铅笔。这些图标全部靠抗锯齿的矢量基础图形(圆、圆环、矩形、线条)组合而成,没有动用任何图片文件,也没有依赖字体,纯代码直出。
还有件看起来不大、实际很解渴的事:滚动条终于有了。以前好几个应用虽然内容能滚动,但用户根本看不到自己滚到了哪里。如今所有需要滚动的界面都共享了一个draw_scrollbar_buf辅助函数,统一在右侧画出滑块,把位置、总长度、可见区域这些逻辑全收拢到一起。一行调用,视觉反馈立刻到位。
从合成器的透明模糊,到每个控件的手写特质,再到九个应用和一套纯代码矢量图标,IONA OS走了一条没人拦着、但也很少人愿意走的路:把所有“拿来就用”的轮子扔掉,自己重新发明一遍。结果就是一个完全由自己掌控的桌面环境——不臃肿,不欠任何人的技术债,每一个像素都清清楚楚归开发者所有。
热门跟贴