Veda: Het Agentic-Native Besturingssysteem

Alles is vanaf nul geschreven in Rust en bevindt zich in deze repository: de UEFI-bootloader, een capability-based microkernel, de drivers, de systeemdiensten, het venstersysteem, de toolkit en de applicaties. Een aantal volwassen crates verzorgt de TCP/IP-engine, TLS en cryptografie (smoltcp, rustls, RustCrypto). Veda draait op x86-64 PC's en in QEMU.

Waarom agentic-native?

Besturingssystemen zijn ontworpen voor een persoon achter een toetsenbord. Een assistent die later wordt toegevoegd, moet meestal het scherm lezen, klikken imiteren of genoegen nemen met de weinige applicaties die een API bieden, waarbij het systeem zelf geen controle heeft over wat er gebeurt. Veda draait dit om: de agent is een eersteklas gebruiker van het systeem, en het systeem is zo gebouwd dat het werk van de agent betrouwbaar, zichtbaar en veilig is.

Integratie van de agent

De agent is onderdeel van het systeem. Het is een systeemdienst die start bij het opstarten en herstart als hij vastloopt. De agent is zichtbaar als een kleine ring op de taakbalk en blijft in slaapstand tot je hem oproept via zijn naam, door op de ring te klikken of met Super+Spatie.

Native applicatie-ondersteuning

Elke applicatie communiceert native met de agent. Agent-ondersteuning is onderdeel van het applicatieplatform: een applicatie beschrijft zijn acties (met getypeerde parameters en een risiconiveau), rapporteert de huidige status als gestructureerde data en voert acties uit via dezelfde code als het toetsenbord en de muis. Hierdoor toont het venster het resultaat precies zo alsof de gebruiker het zelf had gedaan, zonder screen scraping of gesimuleerde klikken. De ingebouwde applicaties bieden gezamenlijk meer dan 70 acties, van het schrijven in een document tot het starten van een race.

Toestemming en veiligheid

Het systeem dwingt de toestemming van de gebruiker af. Elke actie wordt geclassificeerd als routine, gevoelig of destructief:

  • Routine-acties: Worden direct uitgevoerd.
  • Gevoelige en destructieve acties: Wachten op goedkeuring.

De agent-dienst handhaaft dit, niet het taalmodel. De aanroep wordt vastgehouden tot de gebruiker antwoordt; alleen de desktop-shell kan dit antwoord geven. Het systeem herkent elk programma via de identiteit die init aan de verbindingen koppelt. Niets wat de agent in een document of applicatie leest, kan toestemming verlenen voor een actie.

Context en Geheugen

De agent werkt vanuit echte context. Elk gesprek begint met de informatie die de agent nodig heeft om te helpen: de tijd, de openstaande vensters op het scherm, de acties van elke applicatie, persoonlijke voorkeuren en de uitkomst van het vorige gesprek. Tijdens het werk leest de agent de status van applicaties om acties te baseren op de actuele situatie.

Het geheugen blijft van de gebruiker. Veda onthoudt alleen wat expliciet wordt verteld (bijvoorbeeld naam of voorkeuren) en doet geen eigen aannames. Dit geheugen wordt lokaal op de computer bewaard; in de Instellingen kan dit geheugen worden ingezien of gewist.

Spraakgestuurd

Conversaties vinden in real-time plaats; als je de agent onderbreekt, stopt hij en luistert hij. Het audiosysteem is hiervoor specifiek gebouwd met echo-annulering en een echo-gate, zodat de agent zichzelf niet hoort. Terwijl de agent slaapt, luistert een voice-detector op de computer naar spraak, zodat er niets de computer verlaat zolang er niet wordt gesproken.

Configuratie van intelligentie

De intelligentie is een instelling. Spraakherkenning, het taalmodel en de stem komen van het Voice Agent-platform van Deepgram. De audio is geopt-out voor modelverbetering door Deepgram. Het model, de stem en zelfs de naam van de agent kunnen worden gekozen in de Instellingen.

Hoe de agent werkt

De architectuur is als volgt opgebouwd:

  • Gebruiker: Interactie via spraak, toetsenbord en muis.
  • Agent Service: Beheert conversaties (Deepgram Voice Agent), de naam-listener, het geheugen en de worker voor functies en toestemming.
  • Desktop Shell: Beheert de ring, het venster van de agent, toestemmingsverzoeken en notificaties.
  • Applicaties: Bieden acties, status en invoke-mogelijkheden via het agentapp-protocol.
  • Services: Beheren vensters, bestanden, audio, netwerk, Wi-Fi en de launcher.
  • vkernel: Beheert capabilities, IPC, isolatie en scheduling.

Het proces

  1. Luisteren: In slaapstand draait de agent een voice-detector. Wanneer iemand spreekt, gaat de spraak naar een herkenner die de naam van de agent herkent. Een zin die de agent aanroept ("Hé Veda, ...") wekt hem.
  2. Conversatie: Het ontwaken opent een Deepgram Voice Agent-sessie met instructies, context en functies. Deepgram regelt de beurtwisseling, het taalmodel en de stem; de audio-service van Veda transporteert het geluid.
  3. Actie: Het model roept functies van de agent aan (vensters, bestanden, volume, Wi-Fi, etc.) en via useapp en readapp de acties en status van applicaties.
  4. Toestemming: Aanvragen die goedkeuring behoeven, worden getoond in het venster van de agent of als notificatie. De gebruiker kan de actie toestaan, weigeren of laten verlopen. Gevoelige acties kunnen permanent worden goedgekeurd; destructieve acties worden altijd opnieuw gevraagd.

Het besturingssysteem

Microkernel (vkernel)

vkernel richt zich uitsluitend op isolatie, scheduling, geheugen en IPC (Inter-Process Communication). Het maakt gebruik van capability handles met rechten, kanalen voor handles, VMO's, events, futexes en interrupt-objecten. Het ondersteunt SMP met x2APIC, tickless timers en XSAVE. Drivers, het bestandssysteem, het venstersysteem en de agent zijn user-space processen die worden gesuperviseerd door init. Als het venstersysteem crasht, wordt het automatisch herstart.

Desktop

De desktop start met een splash-screen die overgaat in de desktopomgeving. Het systeem bevat:

  • Een compositing window manager met server-side decoraties, schaduwen, animaties, window snapping en een Alt+Tab-switcher met live thumbnails. Rendering gebeurt op de GPU met OpenGL ES (op Intel graphics) of op de processor.
  • Een shell met wallpaper, desktop-pictogrammen (waaronder de Prullenbak), een taakbalk, een doorzoekbaar startmenu, een kalender en notificaties.
  • De vui toolkit (widgets, menu's, dialogen, vector-iconen, anti-aliased tekst met de lettertypen Inter en JetBrains Mono), waarvan de applicaties agent-compatibel zijn.

Netwerken en Wi-Fi

Er is een user-space netwerkdienst (IPv4/IPv6, DHCP, DNS, routing, TCP, UDP, ICMP) en een Wi-Fi-dienst die scans uitvoert en verbinding maakt met WPA2, WPA3 en open netwerken. De drivers (Linux-drivers in de driver VM) verplaatsen enkel frames. Applicaties krijgen TLS 1.3 en 1.2 via vtls, waarbij certificaten worden gecontroleerd tegen de Mozilla-roots.

Audio

Een mixende audioservice met echo-geannuleerde capture en ducking, specifiek gebouwd voor conversaties met de agent en muziek.

Driver VM

Veda beheert disks en geluid zelf, maar gebruikt voor de rest een virtuele machine (de driver VM) waarin Linux draait op een eigen hypervisor (VMX met EPT). Apparaten worden volledig aan deze VM toegewezen; DMA is beperkt tot het geheugen van de VM en interrupts worden hersteld door de IOMMU-driver van Veda. Programma's in de VM bereiken Veda's services via systeemoproepen. Wanneer de VM faalt, reset Veda de apparaten en start de VM opnieuw.

Opslag

Veda gebruikt virtio-blk, AHCI (SATA) en NVMe drivers. Een bestandssysteem-service houdt de home-directory op een eigen disk met crash-safe snapshots. Het geheugen en de sleutels van de agent bevinden zich in een private directory die alleen door de agent geopend kan worden.

Applicaties

De standaard applicaties zijn: Text Editor, Photos, Music, Files, Terminal, Task Manager, Settings en About, plus twee 3D-games: Velocity (racing) en Starfall (space shooter).

3D-graphics

Ondersteuning voor OpenGL ES 3.0 met GLSL ES 1.00 en 3.00. Rendering vindt plaats via de GPU in de driver VM (via Mesa/Intel iris of virgl in QEMU) of via een multi-threaded software renderer.

C en GCC in Veda

Het is mogelijk om C-programma's te schrijven en te compileren binnen Veda met GCC 16. C-programma's zijn statische ELF-executables op de musl C-bibliotheek. Systeemoproepen gaan naar vposix, een in Rust geschreven POSIX-laag.

Snelstart

Vereisten

  • x64 PC met Linux.
  • Rust (stable).
  • QEMU en OVMF UEFI firmware.
  • Toegang tot /dev/kvm.
  • Voor de agent: een Deepgram API-sleutel.
  • Voor de driver VM: Linux kernel build tools, cross-compiler en Mesa, plus KVM nested virtualization (kvm_intel nested=1).

Omgeving controleren: cargo xtask doctor

Bouwen en Uitvoeren

cargo xtask run Dit bouwt alle componenten, schrijft het disk-image (target/veda/veda.img) en start dit in QEMU.

Handige opties:

  • cargo xtask run --resolution 1920x1080 --smp 4 --memory 2048
  • cargo xtask run --cmdline "run=editor" (start de editor na boot).
  • cargo xtask run --net wifi (start met gesimuleerde Wi-Fi via airsim).

Installatie op een echte PC via USB

cargo xtask iso schrijft een live-systeem naar target/veda/veda.iso. Deze kan met Rufus (GPT, UEFI, ISO-modus) op een USB-stick worden gezet. Start de PC in UEFI-modus met Secure Boot uitgeschakeld. Veda draait vanuit het geheugen en schrijft niet naar de lokale disks.

Interactie met Veda

Praten met Veda

Voeg de Deepgram API-sleutel toe via Settings → Agent. Roep Veda op door "Hé Veda" te zeggen, op de ring in de taakbalk te klikken of Super+Spatie te drukken.

Voorbeelden van opdrachten:

  • "Verander mijn achtergrond naar de duinen."
  • "Speel Neon Horizon."
  • "Schrijf een boodschappenlijst met eieren, melk en koffie."
  • "Toon de foto van de vuurtoren op volledig scherm."
  • "Herinner me er over twintig minuten aan om te stretchen."
  • "Welk programma gebruikt de meeste geheugen?"
  • "Start een race in Velocity."
  • "Verwijder de foto City Lights" (waarna Veda om bevestiging zal vragen).
  • "Wat weet je over mij?"

Gebruik van de Desktop

  • Startmenu: Klik op het logo (de ring) of gebruik de Super-toets.
  • Taakbalk: Klik op knoppen om applicaties te openen of te minimaliseren; middenklik opent een nieuw venster.
  • Bestanden: Verwijderde items gaan naar de Prullenbak. Gebruik Ctrl+Z om items te herstellen of Shift+Delete voor definitieve verwijdering.
  • Vensterbeheer: Sleep een venster naar boven voor maximaal scherm, of naar de zijkant voor half scherm (Super+Pijltjestoetsen). Super+D toont het bureaublad, Alt+Tab wisselt tussen vensters en Alt+F4 sluit het actieve venster.

Applicaties Overzicht

ApplicatieFunctionaliteitMogelijkheden van de Agent
Text EditorTabs, syntax highlighting, zoeken/vervangen, onbeperkte undo.Documenten maken, openen, lezen, schrijven, zoeken, opslaan.
PhotosBibliotheek van ~/Pictures, viewer met zoom, rotatie en diavoorstellingen.Foto's tonen, zoomen, roteren, diavoorstelling starten, achtergrond instellen.
MusicBibliotheek van ~/Music, spectrum visualisator, shuffle en repeat.Nummers afspelen via naam, pauzeren, stoppen, skippen, volume aanpassen.
FilesBestandsexplorer met thumbnails, zoeken, kopiëren/plakken, Prullenbak.Mappen/bestanden openen, zoeken, eigenschappen tonen, verplaatsen, verwijderen.
TerminalShell met ~50 commando's, ondersteuning voor C-programma's en pipes.Commando's uitvoeren (na goedkeuring), output lezen, processen onderbreken.
Task ManagerCPU/geheugengebruik per proces, prestatiegrafieken, "eindig taak".Processen oplijsten, grafieken lezen, programma's beëindigen.
SettingsWallpaper, Agent-configuratie, Netwerk/Wi-Fi, Systeemdetails.Pagina's openen, stem/snelheid/taalmodel van de agent wijzigen.
Velocity3D arcade racing game op procedurele circuits.Race starten, pauzeren, hervatten of herstarten; track en tegenstanders wijzigen.
Starfall3D space shooter door asteroïdevelden.Game starten, pauzeren, hervatten of herstarten.

Agent-compatibele applicaties bouwen

Agent-ondersteuning is onderdeel van het vui applicatieplatform. Een applicatie beschrijft wat hij kan doen, rapporteert de status en voert acties uit.

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}")),
        }
    }
}

Acties zijn geschreven voor een taalmodel (korte imperatieve beschrijvingen) en verklaren hun eigen risico. De toestemming, het geheugen en de conversatie worden afgehandeld door het systeem, niet door de applicatie zelf.

Repository-indeling

PadInhoud
services/agent/De agent: conversaties, naam-listener, functies, toestemming, geheugen.
lib/agent/Logica van de agent: Deepgram-protocol, instructies, wake word, echo-gate.
boot/vboot, de UEFI-bootloader.
kernel/vkernel, de microkernel.
lib/Gedeelde bibliotheken: ABI, runtime, POSIX-laag, ELF, IPC, graphics, netwerk, audio, etc.
services/init, vfs, devmgr, compositor, audio, agent, netd, wlan, drivervm.
drivers/Eigen drivers: virtio-blk, ahci, nvme. Overige drivers bevinden zich in de driver VM.
apps/Desktop shell en applicaties, inclusief Velocity en Starfall.
ports/C-toolchain (GCC, binutils, musl) en de Linux-kernel voor de driver VM.
guest/Linux-programma's voor de driver VM: init, drivers, renderer, logkeeper.
tests/Agent-scripts, systest, nettest, C/C++ testprogramma's, GUI-automatisering.
tools/Host-programma's voor wallpapers, sample-content en airsim.
third_party/Vendored crates met Veda-patches (bijv. smoltcp).
xtask/Bouwsysteem: cross-compilatie, disk-image, QEMU en automatisering.

Licentie

Copyright © 2026 Vahid Mohammadi. Veda is vrije software: het kan worden herdistribueerd en/of gewijzigd onder de voorwaarden van de GNU General Public License, versie 3.