blog add UNIVERSE OS: KehittC$jC$n Opas
UNIVERSE OS on tC$ysin hajautettu, Zero-Trust -periaatteeseen ja ilmarakoihin
(Airgap) sopeutuva mesh-kC$yttC6jC$rjestelmC$. Se ei kC$ytC$ keskitettyjC$
IP-osoitteita sovellusten reititykseen, vaan kryptografisia NodeID-tunnuksia
(Ed25519) ja viivC$styssietoista DTN (Delay-Tolerant Networking) -reititystC$.
1. Ydinarkkitehtuuri lyhyesti
Identiteetti (NodeID): Jokainen laite tai sovellus generoi itselleen
Ed25519-avaimet. Tunnus nC$yttC$C$ tC$ltC$: node:z6Mk...
Envelopes (Kirjekuoret): Kaikki viestintC$ kC$C$ritC$C$n tiukasti validoituun,
CBOR-koodattuun ja allekirjoitettuun kirjekuoreen.
Intents (WASM/JS): Viestin hyC6tykuorma ei ole vain dataa, vaan usein
ajettavaa koodia (Intent), joka suoritetaan vastaanottajan turvallisessa
hiekkalaatikossa (QuickJS).
Reititys (Gossip & Airgap): Viestit tallennetaan lokaaliin SQLite-kantaan. Kun
kaksi solmua kohtaa (TCP:n yli tai USB-tikulla), ne synkronoivat puuttuvat
viestit Merkle Mountain Range (MMR) -puita vertailemalla.
2. API-rajapinta (Stand-alone sovellusten rakentaminen)
Rakentaaksesi itsenC$isen sovelluksen, tarvitset helpon "Julkisivun" (Facade),
joka piilottaa kryptografian ja reitittimen monimutkaisuuden. Oletamme, ettC$
ydinkirjasto tarjoaa luokan UniverseNode.
Esimerkki: Yksinkertaisen sovelluksen kC$ynnistC$minen
import { UniverseNode } from './universe'; // JC$rjestelmC$n Facade-luokka
async function startApp() { // 1. Luodaan uusi solmu (generoi avaimet ja
SQLite-kannan muistiin tai levylle) const app = await UniverseNode.create("SC$C
$-Sensori-X"); // 2. KC$ynnistetC$C$n kuunteleva TCP Gossip -palvelin
app.startServer(8081); console.log(`Sovellus kC$ynnissC$. Oma ID:
${app.nodeId}`); // 3. MC$C$ritellC$C$n, mitC$ laite osaa tehdC$
hiekkalaatikossaan (Manifest) app.registerState('temperature', '22.5 C');
app.registerState('humidity', '45 %'); }
3. Dynaaminen reititys (Peer Discovery)
Miten sovellus reagoi, kun se saa tietC$C$ toisesta sovelluksesta verkon yli
(esim. mDNS, Bluetooth LE -beacon tai kC$yttC$jC$n manuaalinen syC6te)?
UniverseNode tarjoaa tapahtumakuuntelijan ja yhdistC$misrutiinin. Kun ohjelma
saa tietC$C$ IP:n ja portin, se voi kutsua connectToPeer -metodia.
Gossip-protokolla hoitaa loput (kC$ttelyn, MMR-synkronoinnin ja yhteyden
purkamisen).
Esimerkki: Tuntemattoman host:port -yhdistelmC$n kC$sittely
Huom: Gossip-protokolla on asynkroninen. YhdistC$misen jC$lkeen solmut
vaihtavat automaattisesti taustalla ne kryptografiset kirjekuoret, joita
toiselta puuttuu.
4. Intentien (WASM/JS) lC$hettC$minen toiselle solmulle
Kun haluat pyytC$C$ toista laitetta tekemC$C$n jotain, luot lennosta
JIT-moduulin (koodia) ja lC$hetC$t sen kirjekuoressa.
/ Haluamme kysyC$ kohdelaitteen lC$mpC6tilan const targetNodeId =
"node:z6MkKohdelaiteID..."; const code = ` const temp = universe.readState('tem
perature'); // LC$hetetC$C$n tulos takaisin kysyjC$lle universe.send('${app.nod
eId}', 'LC$mpC6tila on: ' + temp); `; // Paketoi koodi Intentiksi ja tallenna
omaan SQLite-jonoon. // Kun TCPGossiper seuraavan kerran kohtaa solmun
(suoraan tai vC$likC$den kautta), se siirtC$C$ tC$mC$n. await
app.sendIntent(targetNodeId, code);
/ Haluamme kysyC$ kohdelaitteen lC$mpC6tilan const targetNodeId =
"node:z6MkKohdelaiteID..."; const code = ` const temp = universe.readState('tem
perature'); // LC$hetetC$C$n tulos takaisin kysyjC$lle universe.send('${app.nod
eId}', 'LC$mpC6tila on: ' + temp); `; // Paketoi koodi Intentiksi ja tallenna
omaan SQLite-jonoon. // Kun TCPGossiper seuraavan kerran kohtaa solmun
(suoraan tai vC$likC$den kautta), se siirtC$C$ tC$mC$n. await
app.sendIntent(targetNodeId, code); $ Ohjeet toisille tekoC$lyille (Kopioi
tC$mC$ Promptiksi)
Jos haluat kokeilla uusia ideoita toisessa LLM-chatissa (esim. pyytC$C$ sitC$
koodaamaan C$lykodin sensorisovelluksen tC$lle alustalle), kopioi ja liitC$
alla oleva teksti uuden chatin ensimmC$iseksi viestiksi:
System Prompt / Context for AI: I am building applications for "UNIVERSE OS",
a distributed, Zero-Trust mesh operating system.
Core Architecture Rules you must follow:
Nodes do not use IP addresses for identity or routing. They use Ed25519-based
multicodec NodeIDs (node:z6Mk...).
Communication is entirely Delay-Tolerant (DTN). Messages are encapsulated in
cryptographic CBOR Envelopes and saved to a local SQLite queue.
Nodes sync their queues using a TCP Gossip protocol and Merkle Mountain Ranges
(MMR). If my app discovers a peer's host:port (e.g. via mDNS), I can sync with
them by calling app.connectToPeer(host, port).
Execution is intent-based. Instead of REST APIs, nodes send small
WASM/JavaScript snippets that execute in the receiver's secure QuickJS
Sandbox.
The Facade API available to you:
class UniverseNode { static create(name: string): Promise<UniverseNode>;
readonly nodeId: string; startServer(port: number): void; connectToPeer(host:
string, port: number): Promise<void>; registerState(key: string, value:
string): void; sendIntent(targetNodeId: string, jsCode: string):
Promise<void>; onEnvelopeReceived(callback: (senderId: string, data: string)
=> void): void; }
Your Task: Please act as a UNIVERSE OS app developer. I will ask you to build
standalone Node.js scripts using this API. Keep in mind that networking is
asynchronous and delay-tolerant. Be ready to write dynamic discovery routines
that trigger connectToPeer when a new host is found.