跳到正文
Hacker News· vahmohh·· 23 天前精选AI 评分36

Veda 开源:首个面向爱好者的智能体原生操作系统

Veda: The First Agentic Hobby Operating System

AI 导读

Veda 是一个用 Rust 从零写成的开源操作系统,把 AI 智能体作为系统一等用户而非桌面外挂。

推荐理由

把智能体作为系统一等用户而非桌面外挂,给出了原生权限分级、可见性、记忆管理与语音优先的系统级设计参考

正文 · AI 翻译

Veda 是一个内置 AI 智能体的操作系统——不是后来加在桌面上的助手,而是系统本身的一部分,所有应用程序都被设计成与它协作。你可以用和在房间里跟人说话一样的方式与它交流——"嘿 Veda,把我的壁纸换成沙丘"——它就会通过与你的键盘和鼠标相同的操作来完成工作,适用于任何应用程序,并且在做任何难以撤销的操作前都会先征求你的同意。

一切都是用 Rust 从头编写的,并放在这个代码仓库中:UEFI 引导程序、一个基于能力(capability)的微内核、驱动程序、系统服务、窗口系统、工具包以及应用程序。有几个成熟的 crate 提供了 TCP/IP 引擎、TLS 和加密功能(smoltcp、rustls、RustCrypto)。Veda 运行在 x86-64 PC 上以及 QEMU 中。

The Veda desktop, with the agent's window open

为什么要做 agentic-native

操作系统是为坐在键盘前的人设计的。后来才加入的助手通常不得不读取屏幕、模拟点击,或者勉强使用那些提供 API 的少数应用,而系统对它所做的事情毫无发言权。Veda 反其道而行之:智能体是系统的一等用户,系统被构建得让它的工作可靠、透明且安全。

  • 智能体是系统的一部分。它是一项系统服务,在启动时启动,失败后会重启,以任务栏上的一个小环的形式存在,在你呼叫它之前一直处于休眠状态——通过它的名字、点击小环或使用 Super+Space 来唤醒它。
  • 每个应用程序都原生与它对话。智能体支持是应用平台的一部分:应用程序会描述自己的操作,包括类型化的参数和风险等级,把显示的内容作为结构化的状态上报,并通过与键盘和鼠标相同的代码来执行操作——这样窗口所呈现的结果就和你亲手操作完全一致。没有屏幕抓取,没有模拟点击。内置的应用程序总共提供了超过 70 个操作,从在文档中书写到开始一场比赛。
  • 系统让智能体服从你的同意。每个操作都被划分为常规、敏感或破坏性。常规操作会直接执行;其他操作则会等待你的确认。执行这一规则的是智能体服务,而不是语言模型:调用会被挂起直到你作答,只有桌面 shell 能够作答(系统通过 init 附加到其连接上的身份来识别每个程序),并且智能体在文档或应用程序中读到的任何内容都不能批准任何操作。
  • 它从真实上下文中工作。每次对话都以智能体所需的辅助信息开始:时间、屏幕上的窗口、每个应用程序的操作、你已经告诉它的关于你自己的信息,以及上一次对话是如何结束的。在工作过程中,它会读取应用程序的状态,因此它所操作的就是真实存在的内容。
  • 你的记忆只属于你。它会原原本本地记住你告诉它的事情——你的名字、你生命中的那些人、你喜欢的做事方式——而不是它自己的猜测。这些记忆保存在你自己的电脑上,设置(Settings)会展示所有的记忆,也能忘掉其中任何一条。
  • 语音优先。对话是实时进行的:你可以打断智能体,它就会停下来听你说话。音频系统是为它量身打造的——包括回声消除和一个回声门,确保智能体永远不会听到自己的声音,而在它与你交谈时其他声音会被调低。在它休眠时,计算机上的一个语音检测器会监听语音,这样在没有人说话时不会有任何声音被传出计算机。
  • 智能是一种设置。语音识别、语言模型和语音来自 Deepgram 的 Voice Agent 平台,音频已选择不参与 Deepgram 的模型改进;模型、语音甚至智能体的名称都在“设置”中选择。

智能体的工作原理

 ┌───────────────────────────────────────────────────────────────────────┐
 │ You: voice, keyboard, mouse                                           │
 ├───────────────────────────────────┬───────────────────────────────────┤
 │ Agent service                     │ Desktop shell                     │
 │  conversation (Deepgram Voice     │  the ring and the agent's window  │
 │  Agent) · name listener · memory  │  consent requests · notifications │
 │  worker: functions and consent    │                                   │
 ├───────────────────────────────────┴───────────────────────────────────┤
 │ Applications: actions · state · invoke (the agentapp protocol)        │
 ├───────────────────────────────────────────────────────────────────────┤
 │ Services: windows · files · audio · network · Wi-Fi · launcher        │
 ├───────────────────────────────────────────────────────────────────────┤
 │ vkernel: capabilities · IPC · isolation · scheduling                  │
 └───────────────────────────────────────────────────────────────────────┘
  1. 监听。待机时,智能体在电脑上运行语音检测器。当有人说话时,语音会送到一个识别器,该识别器知道智能体的名称;一句呼唤它的话("Hey Veda,…"、"…,Veda?")会唤醒它,而与名称一起说出的内容就是它听到的第一句话。
  2. 对话。唤醒后会开启一个 Deepgram Voice Agent 会话,其中包含智能体的指令、上述上下文及其功能。Deepgram 负责轮次管理、语言模型和语音;Veda 的音频服务负责双向传输声音。
  3. 行动。模型调用智能体自身的函数——窗口、文件、音量、Wi-Fi、壁纸、通知、计时器与提醒、记忆、系统及其运行的程序——并通过 use_app 和 read_app 调用每个应用程序的动作与状态。智能体服务运行每次调用,并以结构化结果回应。
  4. 同意。需要你许可的调用会被挂起,并显示在智能体窗口中(若窗口已关闭则显示为通知),其中明确说明将发生什么以及对什么发生。允许则运行;拒绝或让其过期,则不执行。敏感动作可以永久允许;破坏性动作每次都会询问。

智能体详细描述了其设计:协议、语音流水线、同意、记忆以及智能体的测试方式。

操作系统

  • 微内核。vkernel 只做隔离、调度、内存和 IPC:带权限的能力句柄、传递句柄的通道、VMO、事件、futex、中断对象。支持 SMP 与 x2APIC、无滴答定时器以及 XSAVE。驱动程序、文件系统、窗口系统和智能体都是用户空间进程,由 init 监管:如果窗口系统崩溃,它会被重启,桌面会自动恢复。
  • 桌面。启动序列在显示器就绪后从黑屏淡入启动画面(光环周围的呼吸光、名称与标语渐入),在桌面准备就绪后溶入桌面,启动音随之开始;一个带服务端装饰、阴影、动画、窗口吸附以及支持实时缩略图的 Alt+Tab 切换器的合成窗口管理器,在配备 Intel 显卡的 PC 上使用 OpenGL ES 在 GPU 上合成,每一帧在垂直消隐期整体翻页,其他地方则由处理器合成;一个带壁纸、桌面图标(回收站居首)、任务栏、可搜索的开始菜单、日历和通知的外壳;vui 工具包(控件、菜单、对话框、矢量图标、使用 Inter 和 JetBrains Mono 字体进行抗锯齿文本渲染),其应用程序与智能体兼容。
  • 网络与 Wi-Fi。 一个用户态网络服务(IPv4 和 IPv6,DHCP,DNS,路由,TCP,UDP,ICMP),以及一个 Wi-Fi 服务,可扫描、加入支持管理帧保护的 WPA2、WPA3 和开放网络,自动记忆网络、断线重连和漫游。驱动由 Linux 在驱动虚拟机中提供,只负责收发数据帧以及加入 Wi-Fi 服务所选定的网络。应用程序(包括智能体)通过 vtls 获得 TLS 1.3 和 1.2(HTTPS、安全的 WebSockets),证书通过 Mozilla 根证书进行校验。在 QEMU 下,一个模拟的 Wi-Fi 环境提供桥接到互联网的接入点。参见 网络。
  • 音频。 一个支持回声消除采集和闪避处理的混音音频服务,既为智能体对话而构建,也为音乐而生。
  • Linux 的驱动,位于虚拟机中。 Veda 自行驱动其磁盘(音频暂在其内),其余部分由 Linux 提供,Linux 运行在 Veda 自有的虚拟机(驱动虚拟机)中,使用 Veda 自有的虚拟机监控器(带 EPT 的 VMX,一个无模拟硬件的半虚拟化平台)。设备整体交给它,其 DMA 被限制于自身内存之中,其中断由 Veda 的 IOMMU 驱动重新映射,其程序通过 Veda 自有的系统调用访问 Veda 的服务,这些调用被跨边界传递。那里的 Linux 驱动为 Veda 的键盘、鼠标与手写板、USB、有线与 Wi-Fi 网络、显示器及 GPU 提供支持;当虚拟机出现故障时,Veda 会复位其设备并重新启动它。参见 驱动虚拟机。
  • 存储。 virtio-blk、AHCI(SATA)和 NVMe 驱动,以及一个文件系统服务,将主目录保存在独立磁盘上并提供崩溃安全的快照,使文件在重启后依然存在。智能体的记忆和密钥存放在只有它自己能够打开的私有目录中。
  • 应用程序。 文本编辑器、相册、音乐、文件、终端、任务管理器、设置和关于,以及两款 3D 游戏:Velocity(竞速)和 Starfall(太空射击),由 v3d 软件 3D 引擎渲染。
  • 3D 图形。 OpenGL ES 3.0,支持 GLSL ES 1.00 和 3.00(vgl、vglsl),每次调用均按规范要求进行校验。它通过 Veda 在驱动虚拟机中的渲染器利用 GPU 进行渲染:若存在 GPU,则使用 Linux 上 Mesa 的 GPU 驱动(Intel 的 iris;在 QEMU 下,使用宿主 GPU 上的 virgl);若无 GPU,则使用多线程的软件渲染器。Prism 展示了它的能力:一个反射的环面、用实例化绘制并带阴影映射的水晶,以及一个使用变换反馈模拟的火花喷泉,在 QEMU 下达到每秒 75 帧。
  • C 语言,以及 Veda 内置的 GCC。 在终端或文本编辑器中编写 C 程序,使用 GCC 16 编译并运行,无论在模拟器还是 PC 上都一样。C 程序是 musl C 库上的静态 ELF 可执行文件,其系统调用进入 vposix——一个用 Rust 编写的 POSIX 层:文件、目录、管道、带行编辑与 termios 的终端、线程、mmap、posix_spawn、时钟以及由线程自身发起的信号。工具链由上游版本加少量补丁(ports/)构建而成,配套的交叉编译器可在开发机上为 Veda 构建 C 和 C++ 程序。参见 在 Veda 上使用 C。
  • 工具链。 一条命令即可构建可启动的磁盘镜像并在 QEMU 中运行;脚本化的无头运行可驱动 GUI 和智能体,并检查截图与日志。

截图

The Text Editor with a Rust program Photos with the picture library
文本编辑器 相册
Music Files
音乐 文件
Velocity Starfall
Velocity Starfall
GCC in the Terminal, naming an undeclared variable in a C program Prism: a reflective knot, shadowed crystals and sparks in OpenGL ES 3.0
终端中的 GCC Prism(OpenGL ES 3.0)

所有截图均由 cargo xtask script docs/screenshots.vts 在 QEMU 中拍摄 (智能体与 Deepgram 的替身对话)。

快速开始

环境要求

Veda 在装有 Linux 的 x64 PC 上构建。

  • Rust(稳定版)。rust-toolchain.toml 让 rustup 在首次使用时安装额外的目标。用户态程序是 PE 可执行文件,由 Rust 自带的 LLVM 链接器(rust-lld)进行链接。
  • QEMU 和 OVMF UEFI 固件:发行版的软件包(在 Debian 和 Ubuntu 上是 qemu-system-x86、 qemu-system-gui、qemu-system-modules-opengl 和 ovmf),以及对 /dev/kvm 的访问权限(kvm 组成员拥有此权限),QEMU 用它在处理器硬件虚拟化上运行 Veda。
  • 对于智能体:在 Veda 的设置中输入一个 Deepgram API 密钥。
  • 对于镜像中的 C 和 GCC(可选):发行版的构建工具,用于 cargo xtask toolchain 一次性构建的工具链(参见 Veda 上的 C)。
  • 对于驱动虚拟机(其 Linux 驱动除磁盘和声音外的所有设备):Linux 内核的构建工具,以及用于交叉编译器和 Mesa 的发行版构建工具,用于 cargo xtask linux,以及 KVM 的嵌套虚拟化(kvm_intel nested=1),QEMU 在此基础上将处理器的 VMX 提供给 Veda(参见 驱动虚拟机)。

检查环境:

cargo xtask doctor

构建与运行

cargo xtask run

这会构建所有组件,写入磁盘镜像 target/veda/veda.img,并在 QEMU 窗口中启动它。第一次构建还会构建驱动虚拟机的 Linux(其内核、用于其程序的交叉编译器以及 Mesa),这需要一些时间,并渲染示例图片和音乐;后续构建是增量式的,cargo xtask linux 在端口更改后会重新构建 Linux。常用选项:

cargo xtask run --resolution 1920x1080 --smp 4 --memory 2048
cargo xtask run --cmdline "run=editor"

--cmdline "run=NAME" 在启动后启动 /system/bin/NAME.exe。默认情况下,机器通过有线网卡连接到 QEMU 的 NAT;若要使用 Wi-Fi:

cargo xtask run --net wifi

这还会启动 airsim,一个模拟的 Wi-Fi 环境,其网络("Veda Home"、"Veda WPA3" 等;密码 veda-wifi)连接到互联网。--net both 会添加有线网卡。有关所有命令和选项,请参见 cargo xtask help。

从 U 盘在真正的 PC 上运行

cargo xtask iso

写入 target/veda/veda.iso,一个实时系统。使用 Rufus(分区方案 GPT,目标系统 UEFI,ISO 模式)将其写入 U 盘,或使用任何镜像写入器按原样写入,然后在 UEFI 模式下从 U 盘启动 PC(通常从固件的启动菜单:开机时按 F12、F11 或 Esc),并关闭安全启动,因为 Veda 的加载程序未签名。Veda 在内存中运行,不打扰 PC:不启动磁盘驱动程序,因此它从不读取或写入 PC 的磁盘或安装在磁盘上的系统,其主目录在 PC 关闭前一直存在。U 盘保留每次启动的系统日志,位于 VEDA/LOGS 中(最新启动位于编号最大的目录中:VEDA.TXT,Veda 的日志,以及 LINUX.TXT,驱动虚拟机 Linux 的日志),每秒同步一次:无论发生了什么,即使屏幕上没有任何显示,之后都可以在任何计算机上读取。要先在 QEMU 中试用 U 盘:

cargo xtask run --live

在真实硬件上,桌面以固件提供的屏幕模式显示(1920x1080,或低于它的最大分辨率),绘制到固件的帧缓冲区中;通过驱动 VM,Linux 的显示驱动程序完整地显示每一帧,在屏幕的垂直消隐期间翻转,因此动画在虚拟机中也能流畅运行。驱动 VM 需要处理器的虚拟化(VT-x),其设备需要 IOMMU(VT-d),过去十年的 PC 都具备这些功能,需在固件设置中开启:没有它们,Veda 只能驱动磁盘(仅有 VT-x 时还可驱动 PS/2 键盘和鼠标)。通过它,USB 键盘、鼠标和集线器可在 PC 自约 2012 年以来配备的 USB 3(xHCI)控制器上工作,PS/2 键盘、鼠标和触摸板、USB 网络适配器以及 Intel 和 Realtek 的以太网网卡和 Intel 的 Wi-Fi 网卡也同样工作;USB 磁盘(含 U 盘)则被留空。声音也通过 Linux 驱动程序播放:HD Audio(自 2005 年以来几乎所有 PC 的声音硬件)通过扬声器播放(其中包括笔记本电脑的放大器:Cirrus Logic 的 CS35L41,使用固件为其保存的校准数据),或在插入耳机时通过耳机播放,以及线路输出,编解码器上的麦克风(内置或在插孔上)为智能体所用。在许多新款笔记本中,内置麦克风连接到音频 DSP 而非编解码器,通过 Linux 的 Sound Open Firmware 在 Intel 从 Tiger Lake 到 Raptor Lake(11 代到 13 代 Core)的 PC 上进行录制;更晚型号的麦克风暂时无法录音。Intel 的集成显卡也使用 Linux 的驱动(i915,以及用于 GPU 的 Mesa 的 iris),以及 HDMI 和 DisplayPort 音频。要在 QEMU 中尝试 USB 输入或 HD Audio:

cargo xtask run --input usb
cargo xtask run --sound hda

与 Veda 对话

  1. 打开 设置 → 智能体 并添加你的 Deepgram API 密钥。智能体的名称、语音、语言模型、监听和记忆都在同一页面。
  2. 说 "Hey Veda",点击任务栏右侧的小圆环,或按 Super+Space。
  3. 自然地对话,随时追问、随时打断,完成后说再见。它会回到休眠状态,监听自己的名字。

Veda 通过你 PC 的麦克风收听你的声音,并通过扬声器回答,在 QEMU 下也是如此。

可以问的事情:

  • "把我的壁纸换成沙丘。"
  • "播放 Neon Horizon。"
  • "写一份购物清单,包含鸡蛋、牛奶和咖啡。"
  • "全屏显示灯塔照片。"
  • "二十分钟后提醒我伸展一下。"
  • "什么占用的内存最多?"
  • "在 Velocity 中开始一场比赛。"
  • "删除 City Lights 照片"——并看它先询问你。
  • "你知道关于我的哪些信息?"

使用桌面

  • 点击图标(任务栏中间的圆环),或按 Super 键打开开始菜单;键入以搜索应用程序。
  • 点击任务栏按钮可打开、聚焦或最小化应用程序;中键单击可打开另一个窗口。点击时钟可打开日历。
  • 双击桌面图标。右键单击桌面可更改壁纸。
  • 你删除的内容会进入 回收站(桌面上的第一个图标):打开它可将项目恢复到原来的位置,或将其清空。将项目从桌面拖到回收站上,或在文件管理器中按 Delete 键(Ctrl+Z 可恢复;Shift+Delete 永久删除)。
  • 将窗口拖到屏幕顶部可最大化,或拖到一侧可填充该半屏(或使用 Super+左/右/上/下)。Super+D 显示桌面,Alt+Tab 切换窗口,Alt+F4 关闭活动窗口。
  • 任务栏上的扬声器图标可打开音量控制(将鼠标悬停其上并滚动可调节音量)。旁边的网络图标显示 Wi-Fi 信号,并打开可加入的网络列表。

你的文件存放在 /home/user 中,由 target/veda/home.img 在重启和重建后保留(--fresh-home 会从头开始)。

应用程序

每个应用程序都兼容代理:你用鼠标和键盘能做的操作,代理也可以通过应用程序自身的操作来完成。

应用程序 功能 代理能做什么
文本编辑器 选项卡、语法高亮(Rust、C、TOML、Markdown)、查找替换、自动换行、行号、缩放、无限撤销、打开/保存对话框。 创建、打开、读取和写入文档;查找替换、选择、撤销、保存;另存为或放弃修改(需经你同意)。
照片 ~/Pictures 的缩略图库,以及一个支持缩放、平移、旋转、全屏、幻灯片放映、详细信息查看和"设为壁纸"的查看器;支持 PNG、JPEG(包括渐进式)、BMP 和 QOI 格式。 显示任意图片,缩放、旋转、进入全屏、播放幻灯片、显示详细信息、将图片设为壁纸。
音乐 ~/Music 的音乐库,正在播放界面带有封面和实时频谱可视化,支持进度跳转、随机播放和循环播放;通过音频服务播放 QOA 和 WAV 格式。 按名称播放歌曲、暂停、停止、跳过、跳转、随机播放、循环播放、设置音量。
文件 位置侧边栏、面包屑导航、带缩略图的列表和图标视图、搜索、复制/剪切/粘贴、重命名、新建文件夹和文档、属性、可用空间;删除至回收站(可撤销),其中列出每个项目的来源及时间,并可还原或清空。 打开文件夹和文件、搜索、显示属性、创建文件夹;复制、移动、重命名和删除至回收站(需经你同意);从回收站还原;清空回收站(每次都会询问)。
终端 一个命令行 shell,内置约五十条命令,涵盖文件、进程、网络(wifi、ifconfig、ping、nslookup、curl、……)和系统,并提供历史记录和 Tab 自动补全。像 Unix 终端一样运行程序——包括 C 程序和 GCC:行编辑、termios、Ctrl+C、管道和重定向。 运行命令(需经你同意)、读取其输出、中断它。
任务管理器 显示 CPU 和内存使用情况的进程、"结束任务"以及实时性能图表。 列出进程、显示并查看性能图表、结束程序(每次都会询问)。
设置 壁纸库、代理设置(Deepgram 密钥、名称、语音、语言和语音模型、聆听、内存、权限)、网络与 Wi-Fi(连接、范围内的网络、已保存的网络、接口、诊断)、显示信息和系统详细信息。 打开页面、更改代理的语音和语速;重命名代理或更改其语言模型(需经你同意)。但绝不能修改密钥。
Velocity 一款街机风格的 3D 竞速游戏,在程序化生成的赛道上与电脑对手对战。 开始、暂停、继续或重新开始比赛;更改赛道、圈数或对手数量。
Starfall 一款穿越小行星带和敌方波次的 3D 太空射击游戏。 开始、暂停、继续或重新开始游戏。

游戏由 v3d——一款多线程定点数软件 3D 渲染器——以及基于 OpenGL ES 的 Prism 进行绘制。除了应用程序之外,代理自身的功能还涵盖窗口、文件、声音、Wi-Fi、壁纸、通知、计时器和提醒、其内存以及系统。

构建兼容代理的应用程序

智能体支持是 vui 应用平台的一部分。一个应用描述它能做什么,报告它显示什么并执行操作;vui::run 将其注册到智能体服务,并在帧之间响应智能体:

use vui::agent::{self, Action, AppAgentInfo, Risk, Value, arg_path, arg_str, object, show_path};

impl vui::App for Notes {
    fn update(&mut self, ui: &mut vui::Ui) { /* ... */ }

    fn agent_info(&self) -> Option<AppAgentInfo> {
        Some(agent::info(
            "A notes app: one note per file in ~/Notes.",
            vec![
                Action::new("add_line", "Adds a line at the end of the note shown")
                    .param("text", "string", "The line", true)
                    .build(),
                Action::new("delete_note", "Deletes a note for good")
                    .param("path", "string", "The note's file, such as ~/Notes/Ideas.txt", true)
                    .risk(Risk::Destructive)
                    .build(),
            ],
        ))
    }

    fn agent_state(&self) -> Value {
        object! { "note" => self.title.as_str(), "lines" => self.lines.len() }
    }

    fn agent_invoke(&mut self, action: &str, args: &Value) -> Result<Value, String> {
        match action {
            "add_line" => { self.append(arg_str(args, "text")?); Ok(object! { "lines" => self.lines.len() }) }
            "delete_note" => {
                let path = arg_path(args, "path")?;
                self.delete(&path).map_err(|e| format!("{} could not be deleted: {e}", show_path(&path)))?;
                Ok(object! { "deleted" => show_path(&path) })
            }
            other => Err(format!("Notes has no action called {other}")),
        }
    }
}

操作为语言模型编写(简短的祈使式描述,单位与默认值均完整拼写),声明其风险,显式命名其目标,并走与键盘和鼠标相同的代码路径。同意、记忆与对话是系统的工作,而非应用的。参见 使应用兼容智能体。

测试

cargo xtask test

运行各个库的主机单元测试(智能体的协议、工具、提示、记忆、唤醒词与回声门控;内核 ABI、堆、IPC、服务协议;数学、光栅化器、字体、图像编解码器、二维图形、文本编辑、路径与文件类型;音频、ELF 加载、POSIX 层、构建工具),然后使用 systest 集成测试无头启动 Veda(IPC、套接字、内存、线程、文件系统、启动器、崩溃报告、窗口系统被终止后的恢复,以及检查 C 库与 POSIX 层的 C 程序),任何 panic 即失败。

智能体端到端地针对运行于主机的 Deepgram 替代品(tests/agent/)进行测试:对话、函数调用、中断、回声、窗口与通知中的同意、播放音乐时按名称唤醒、各应用的操作与重启——确定性、离线且免费。tests/real/agent-*.vts 以合成语音对虚拟麦克风讲话,并使用 DEEPGRAM_API_KEY 中的密钥与真实的 Deepgram 对话。

网络有自己独立的主机测试(基于已发布测试向量的 802.11 协议与密码学、站点对接入点、模拟线缆上的 TCP/IP 协议栈、Wi-Fi 模拟器、针对 rustls 服务器与真实证书链的 TLS 握手),nettest 在 Veda 内部检查 DNS、TCP、HTTP、HTTPS 和 ping。

tests/ui/ 中的 GUI 自动化脚本会依次点击桌面与各应用,检查日志并保存截图;其中有两个在终端中运行 C 程序,并使用 GCC 在 Veda 内部编译其中一个(它们需要工具链,没有则跳过)。Wi-Fi 脚本通过桌面加入网络,并以多种方式破坏模拟网络(接入点消失、断连、中断、无线电或 Wi-Fi 服务消失)以检验 Veda 能否自行恢复。将它们(含智能体的)与单元及集成测试一起运行,或一次运行一个:

cargo xtask test --ui
cargo xtask script tests/agent/wake-name.vts
cargo xtask shot --wait 20

(shot 无头启动并保存 target/veda/screen.png。)

串行控制台(内核日志及每个程序的输出)保存到 target/veda/serial.log。

代码仓库布局

路径 内容
services/agent/ 智能体:对话、名称监听器、函数、同意、记忆
lib/agent/ 智能体的逻辑:Deepgram 协议、函数、指令、唤醒词、回声门控、记忆、配置
boot/ vboot,UEFI 引导加载程序
kernel/ vkernel,微内核
lib/ 共享库:abi(系统调用 ABI)、rt(运行时)、posix(C 库下层的 POSIX 层)、elf(ELF 可执行文件)、ipc(消息编解码与协议宏)、proto(服务协议,含智能体的)、gfx/raster/font/image(二维图形)、ui(工具包及其智能体支持)、v3d(三维引擎)、glsl 与 gl(GLSL ES 编译器与 OpenGL ES 3.0)、net 与 tls(面向应用的网络与 TLS)、web(HTTP 与 WebSocket)、json、audio(混音、回声消除、语音检测、合成)、hv 与 iommu(虚拟机管理程序与 IOMMU 的逻辑)、text、math、……
services/ init(服务注册中心、启动器、进程标识),vfs,devmgr(PCI),compositor,audio,agent,netd(网络),wlan(Wi-Fi),drivervm(驱动虚拟机中的监视器)
drivers/ Veda 自己的驱动程序:virtio-blk,ahci(SATA),nvme(NVM Express);其余皆为 Linux 的驱动程序,位于驱动虚拟机中
apps/ 桌面 shell(代理的环、窗口与同意请求)以及应用程序,包括 racer(Velocity)和 starfall
ports/ 从源码构建的 C 工具链:GCC、binutils、GMP、MPFR、MPC 和 musl,每一项均为上游版本并附带 Veda 的补丁;以及驱动虚拟机所用的 Linux
guest/ 驱动虚拟机中的 Linux 程序:其 init、Veda 为 Linux 编写的驱动程序(input、alsa、net、wifi、kms)、渲染器(基于 Mesa 驱动的 OpenGL ES)、logkeeper(实时系统 U 盘上的系统日志)、airlink(QEMU 的虚拟无线电,作为 Linux 的无线电设备)以及其测试程序
tests/ 代理的脚本(agent/,以及针对真实服务的 real/)、systest 和 nettest(系统内测试)、C 与 C++ 测试程序(c/)、GUI 自动化脚本
tools/ 在构建时生成壁纸、示例图片与音乐的主机程序,以及 airsim(模拟的 Wi-Fi 环境)
third_party/ 附带 Veda 补丁的 vendored crate(smoltcp)
xtask/ 构建系统:交叉编译、磁盘镜像、QEMU、自动化、Deepgram 的替代实现
assets/ 字体与应用程序清单
docs/ 文档、自述文件中的截图,以及图标和社交预览图(docs/icon/)

文档

  • 代理:语音代理、其功能、同意与记忆,以及应用程序如何成为代理兼容的。
  • 架构:系统如何组合在一起。
  • 网络:网络与 Wi-Fi 服务、模拟的 Wi-Fi 环境、安全性与测试。
  • C 语言在 Veda 上:编写、编译与运行 C 程序、POSIX 层,以及工具链的构建方式。
  • 驱动虚拟机:虚拟机中的 Linux 驱动程序:虚拟机监控器、平台、桥接、IOMMU 与各设备。
  • 开发:构建命令、系统镜像、应用程序编写、性能说明。
  • 编码规范。

许可证

版权所有 © 2026 Vahid Mohammadi。

Veda 是自由软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证第 3 版(参见 LICENSE)的条款再分发或修改它。本软件的发布是希望它能发挥作用,但不作任何担保;甚至不包含对适销性或特定用途适用性的默示担保。

随附的字体(Inter、Lato、JetBrains Mono)遵循 SIL 开放字体许可证 1.1;参见 assets/fonts/。驱动虚拟机中 Linux 加载到设备上的固件(ports/linux/firmware.txt)未经修改,来自 Linux 固件集合,依据其 WHENCE 为每个文件制作者所规定的条款(制作者允许再分发),同时来源于 Sound Open Firmware 的发布版本(sof-bin:Intel 签发的音频 DSP 固件构建,遵循 BSD 许可证及 Intel 对其 LICENCE.Intel 的专利许可);该固件在设备上运行,而非在 Veda 中运行。Vendored 的第三方代码保留各自许可;参见 third_party/。镜像可能包含的 C 工具链也保留各自许可:GCC 与 binutils 遵循 GPL 第 3 版或更高版本(GCC 运行库附带运行时库例外,因此 GCC 构建的程序保留自身许可),GMP、MPFR 与 MPC 遵循 LGPL 第 3 版或更高版本,musl 遵循 MIT 许可;其源代码为 ports/*/port.toml 中所列的上游发布版本,补丁位于其旁。

来源:Hacker News · github.com