This commit is contained in:
2026-10-16 02:32:24 +02:00
commit bb99c3001d
79 changed files with 995 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/target

135
Cargo.lock generated Normal file
View File

@@ -0,0 +1,135 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "accessibility-server"
version = "0.1.0"
[[package]]
name = "alarm-server"
version = "0.1.0"
[[package]]
name = "audio-capture-server"
version = "0.1.0"
[[package]]
name = "audio-playback-server"
version = "0.1.0"
[[package]]
name = "bluetooth-server"
version = "0.1.0"
[[package]]
name = "calendar-server"
version = "0.1.0"
[[package]]
name = "camera-server"
version = "0.1.0"
[[package]]
name = "clipboard-server"
version = "0.1.0"
[[package]]
name = "contacts-server"
version = "0.1.0"
[[package]]
name = "display-server"
version = "0.1.0"
[[package]]
name = "domain"
version = "0.1.0"
[[package]]
name = "gatekeeper"
version = "0.1.0"
[[package]]
name = "gps-server"
version = "0.1.0"
[[package]]
name = "input-server"
version = "0.1.0"
[[package]]
name = "kernel"
version = "0.1.0"
[[package]]
name = "keychain-server"
version = "0.1.0"
[[package]]
name = "media-index-server"
version = "0.1.0"
[[package]]
name = "network-server"
version = "0.1.0"
[[package]]
name = "notification-server"
version = "0.1.0"
[[package]]
name = "package-manager"
version = "0.1.0"
[[package]]
name = "permission-manager"
version = "0.1.0"
[[package]]
name = "platform"
version = "0.1.0"
[[package]]
name = "power-server"
version = "0.1.0"
[[package]]
name = "print-server"
version = "0.1.0"
[[package]]
name = "server-framework"
version = "0.1.0"
[[package]]
name = "snake"
version = "0.1.0"
[[package]]
name = "storage-server"
version = "0.1.0"
[[package]]
name = "sync-server"
version = "0.1.0"
[[package]]
name = "telephony-server"
version = "0.1.0"
[[package]]
name = "types"
version = "0.1.0"
[[package]]
name = "usb-server"
version = "0.1.0"
[[package]]
name = "user-manager"
version = "0.1.0"
[[package]]
name = "userspace"
version = "0.1.0"

83
Cargo.toml Normal file
View File

@@ -0,0 +1,83 @@
[workspace]
members = [
"crates/apps/snake",
"crates/domain",
"crates/kernel",
"crates/platform",
"crates/server-framework",
"crates/servers/accessibility-server",
"crates/servers/alarm-server",
"crates/servers/audio-capture-server",
"crates/servers/audio-playback-server",
"crates/servers/bluetooth-server",
"crates/servers/calendar-server",
"crates/servers/camera-server",
"crates/servers/clipboard-server",
"crates/servers/contacts-server",
"crates/servers/display-server",
"crates/servers/gatekeeper",
"crates/servers/gps-server",
"crates/servers/input-server",
"crates/servers/keychain-server",
"crates/servers/media-index-server",
"crates/servers/network-server",
"crates/servers/notification-server",
"crates/servers/package-manager",
"crates/servers/permission-manager",
"crates/servers/power-server",
"crates/servers/print-server",
"crates/servers/storage-server",
"crates/servers/sync-server",
"crates/servers/telephony-server",
"crates/servers/usb-server",
"crates/servers/user-manager",
"crates/types",
"crates/userspace",
]
resolver = "2"
[workspace.dependencies]
# kernel
types = { path = "crates/types" }
domain = { path = "crates/domain" }
platform = { path = "crates/platform" }
kernel = { path = "crates/kernel" }
server-framework = { path = "crates/server-framework" }
userspace = { path = "crates/userspace" }
# servers
accessibility-server = { path = "crates/servers/accessibility-server" }
alarm-server = { path = "crates/servers/alarm-server" }
audio-capture-server = { path = "crates/servers/audio-capture-server" }
audio-playback-server = { path = "crates/servers/audio-playback-server" }
bluetooth-server = { path = "crates/servers/bluetooth-server" }
calendar-server = { path = "crates/servers/calendar-server" }
camera-server = { path = "crates/servers/camera-server" }
clipboard-server = { path = "crates/servers/clipboard-server" }
contacts-server = { path = "crates/servers/contacts-server" }
display-server = { path = "crates/servers/display-server" }
gatekeeper = { path = "crates/servers/gatekeeper" }
gps-server = { path = "crates/servers/gps-server" }
input-server = { path = "crates/servers/input-server" }
keychain-server = { path = "crates/servers/keychain-server" }
media-index-server = { path = "crates/servers/media-index-server" }
network-server = { path = "crates/servers/network-server" }
notification-server = { path = "crates/servers/notification-server" }
package-manager = { path = "crates/servers/package-manager" }
permission-manager = { path = "crates/servers/permission-manager" }
power-server = { path = "crates/servers/power-server" }
print-server = { path = "crates/servers/print-server" }
storage-server = { path = "crates/servers/storage-server" }
sync-server = { path = "crates/servers/sync-server" }
telephony-server = { path = "crates/servers/telephony-server" }
usb-server = { path = "crates/servers/usb-server" }
user-manager = { path = "crates/servers/user-manager" }
# apps
snake = { path = "crates/apps/snake" }
[profile.release]
strip = true
lto = true
opt-level = "z"

0
LICENSE Normal file
View File

2
README.md Normal file
View File

@@ -0,0 +1,2 @@
# K-Os
my operating system.

View File

@@ -0,0 +1,6 @@
[package]
name = "snake"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,3 @@
fn main() {
println!("Hello, world!");
}

6
crates/domain/Cargo.toml Normal file
View File

@@ -0,0 +1,6 @@
[package]
name = "domain"
version = "0.1.0"
edition = "2024"
[dependencies]

14
crates/domain/src/lib.rs Normal file
View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

6
crates/kernel/Cargo.toml Normal file
View File

@@ -0,0 +1,6 @@
[package]
name = "kernel"
version = "0.1.0"
edition = "2024"
[dependencies]

14
crates/kernel/src/lib.rs Normal file
View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "platform"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "server-framework"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "accessibility-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "alarm-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "audio-capture-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "audio-playback-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "bluetooth-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "calendar-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "camera-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "clipboard-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "contacts-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "display-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "gatekeeper"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "gps-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "input-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "keychain-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "media-index-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "network-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "notification-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "package-manager"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "permission-manager"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "power-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "print-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "storage-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "sync-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "telephony-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "usb-server"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@@ -0,0 +1,6 @@
[package]
name = "user-manager"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

6
crates/types/Cargo.toml Normal file
View File

@@ -0,0 +1,6 @@
[package]
name = "types"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,5 @@
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct EntryPoint(usize);
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct StackPointer(usize);

View File

@@ -0,0 +1,4 @@
use crate::macros::bounded;
bounded!(CapSlot, u8, 0, 63);
bounded!(Priority, u8, 0, 31);

View File

@@ -0,0 +1,16 @@
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Generation(u32);
impl Generation {
pub fn initial() -> Self {
Self(0)
}
pub fn next(&self) -> Self {
Self(self.0.wrapping_add(1))
}
pub fn is_valid_against(&self, current: &Generation) -> bool {
self == current
}
}

8
crates/types/src/id.rs Normal file
View File

@@ -0,0 +1,8 @@
use crate::macros::kernel_id;
kernel_id!(ProcessId, u16);
kernel_id!(ThreadId, u16);
kernel_id!(EndpointId, u16);
kernel_id!(RegionId, u16);
kernel_id!(IrqId, u16);
kernel_id!(CoreId, u8);

9
crates/types/src/lib.rs Normal file
View File

@@ -0,0 +1,9 @@
#![no_std]
pub mod address;
pub mod bounded;
pub mod generation;
pub mod id;
pub mod macros;
pub mod permission;
pub mod time;

View File

@@ -0,0 +1,43 @@
macro_rules! kernel_id {
($name:ident, $inner:ty) => {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct $name($inner);
impl $name {
pub fn from_raw(value: $inner) -> Self {
Self(value)
}
pub fn raw(&self) -> $inner {
self.0
}
}
};
}
macro_rules! bounded {
($name:ident, $inner:ty, $min:expr, $max:expr) => {
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct $name($inner);
impl $name {
pub const MIN: $inner = $min;
pub const MAX: $inner = $max;
pub fn new(value: $inner) -> Option<Self> {
if value >= Self::MIN && value <= Self::MAX {
Some(Self(value))
} else {
None
}
}
pub fn value(&self) -> $inner {
self.0
}
}
};
}
pub(crate) use bounded;
pub(crate) use kernel_id;

View File

@@ -0,0 +1,43 @@
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Permission {
Read,
Write,
Execute,
Delegate,
Revoke,
}
impl Permission {
fn bit(&self) -> u8 {
1 << (*self as u8)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct PermissionSet(u8);
impl PermissionSet {
pub fn empty() -> Self {
Self(0)
}
pub fn with(self, p: Permission) -> Self {
Self(self.0 | p.bit())
}
pub fn without(self, p: Permission) -> Self {
Self(self.0 & !p.bit())
}
pub fn allows(&self, p: Permission) -> bool {
self.0 & p.bit() != 0
}
pub fn restrict_to(&self, other: &PermissionSet) -> Self {
Self(self.0 & other.0)
}
pub fn is_subset_of(&self, other: &PermissionSet) -> bool {
self.0 & other.0 == self.0
}
}

11
crates/types/src/time.rs Normal file
View File

@@ -0,0 +1,11 @@
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct Ticks(u64);
impl Ticks {
pub fn elapsed_since(&self, earlier: &Ticks) -> Ticks {
Ticks(self.0.saturating_sub(earlier.0))
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct TimerDuration(u32);

View File

@@ -0,0 +1,6 @@
[package]
name = "userspace"
version = "0.1.0"
edition = "2024"
[dependencies]

View File

@@ -0,0 +1,14 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}