code wiki / _hdl_build / nx_pkg.nx

nx_pkg.nx source

↩ module page · 99 lines · 7213 B

1// nx_pkg.nx -- SOVEREIGN PACKAGE MANAGER (OS gap: PACKAGE-MGMT). Composes what we built: dependency RESOLUTION via 2// topological sort (Kahn, as nx_init) + per-package INTEGRITY via sha/checksum (as nx_blockfs/the publisher). 3// install(target) = transitive-dep closure -> dep-ordered install order -> verify each package's sha -> install. 4// T1 install 'shell' -> needed set = only its transitive deps, order deps-before-dependents. 5// T2 every package verifies (sha matches the manifest). T3 teeth: a sha MISMATCH is rejected (supply-chain integrity). 6// T4 teeth: a dependency CYCLE is detected. 7// HONEST BEHIND vs apt/npm/pip: no version-constraint solving / remote repos / scale (asterisk). 8// expect_exit: 0 Sovereign: nx_syscalls. NEVER-BRICK: installs userspace packages, writes 0 firmware. 9import "nx_syscalls.nx" 10import "nx_itoa_lib.nx" // shared MSB-first emitter (zero-alloc) 11import "nx_g_puts_lib.nx" 12 13// MIGRATED to the shared emitter (debt 1785563586). The old body mmapped a scratch buffer 14// per call and never freed it. At PAGE granularity that is 4096B leaked PER CALL -- the 15// defect that took 28.5GB of a 36GB host in nx_ts_lumadiff (2MB input, ~3.66M calls). 16// nxi_* is MSB-first, allocates NOTHING, and emits identical bytes including the sign. 17func g_pn(v: i64) -> i64 { nxi_out(v); return 0 } 18func ck(name: *u8, c: i64) -> i64 { if c==1 { g_puts(" PASS " as *u8) } else { g_puts(" FAIL " as *u8) } g_puts(name); g_puts("\n" as *u8); return c } 19func slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 20func psum(s: *u8) -> i64 { var acc: i64=0; var i: i64=0; while s[i]!=(0 as u8){ acc=acc+(s[i] as i64); i=i+1 } return acc } // content checksum 21 22const MAXD: i64 = 4 23 24// transitive-dependency closure of `target` (fixpoint mark). fills needed[]. 25func pkg_needed(target: i64, ndep: *i64, dep: *i64, N: i64, needed: *i64) -> i64 { 26 var i: i64=0; while i<N { needed[i]=0; i=i+1 } 27 needed[target]=1; var changed: i64=1 28 while changed==1 { changed=0; var u: i64=0; while u<N { if needed[u]==1 { var k: i64=0; while k<ndep[u] { let dpk: i64=dep[u*MAXD+k]; if needed[dpk]==0 { needed[dpk]=1; changed=1 } k=k+1 } } u=u+1 } } 29 return 0 30} 31// topo-sort (Kahn) over all N; returns count ordered (==N if acyclic). order[] = global dependency order. 32func pkg_topo(ndep: *i64, dep: *i64, N: i64, order: *i64) -> i64 { 33 let indeg: *i64 = sys_mmap(N*8) as *i64; let done: *i64 = sys_mmap(N*8) as *i64 34 var i: i64=0; while i<N { indeg[i]=ndep[i]; done[i]=0; i=i+1 } 35 var oc: i64=0; var changed: i64=1 36 while changed==1 { changed=0; var u: i64=0 37 while u<N { if done[u]==0 { if indeg[u]==0 { 38 order[oc]=u; oc=oc+1; done[u]=1; changed=1 39 var v: i64=0; while v<N { if done[v]==0 { var k: i64=0; while k<ndep[v] { if dep[v*MAXD+k]==u { indeg[v]=indeg[v]-1 } k=k+1 } } v=v+1 } } } 40 u=u+1 } } 41 return oc 42} 43func pkg_verify(content: *u8, expected: i64) -> i64 { if psum(content)==expected { return 1 } return 0 } 44 45func main() -> i64 { 46 g_puts("nx_pkg (SOVEREIGN package manager: dep-resolved + sha-verified install)\n" as *u8) 47 var pass: i64=0; var total: i64=0 48 // registry: 0 syscalls | 1 alloc<-0 | 2 net<-0 | 3 blockfs<-1,0 | 4 tls<-2 | 5 shell<-3,1 49 let N: i64=6 50 let ndep: *i64 = sys_mmap(N*8) as *i64; let dep: *i64 = sys_mmap(N*MAXD*8) as *i64 51 let nm: *i64 = sys_mmap(N*8) as *i64; let ct: *i64 = sys_mmap(N*8) as *i64; let sha: *i64 = sys_mmap(N*8) as *i64 52 nm[0]=("syscalls" as *u8) as i64; nm[1]=("alloc" as *u8) as i64; nm[2]=("net" as *u8) as i64; nm[3]=("blockfs" as *u8) as i64; nm[4]=("tls" as *u8) as i64; nm[5]=("shell" as *u8) as i64 53 ct[0]=("pkg:syscalls:v1:payload" as *u8) as i64; ct[1]=("pkg:alloc:v1:payload" as *u8) as i64; ct[2]=("pkg:net:v1:payload" as *u8) as i64; ct[3]=("pkg:blockfs:v1:payload" as *u8) as i64; ct[4]=("pkg:tls:v1:payload" as *u8) as i64; ct[5]=("pkg:shell:v1:payload" as *u8) as i64 54 ndep[0]=0 55 ndep[1]=1; dep[1*MAXD+0]=0 56 ndep[2]=1; dep[2*MAXD+0]=0 57 ndep[3]=2; dep[3*MAXD+0]=1; dep[3*MAXD+1]=0 58 ndep[4]=1; dep[4*MAXD+0]=2 59 ndep[5]=2; dep[5*MAXD+0]=3; dep[5*MAXD+1]=1 60 var i: i64=0; while i<N { sha[i]=psum(ct[i] as *u8); i=i+1 } // manifest sha = trusted content checksum 61 62 // install "shell" (index 5): needed closure + dep-ordered install 63 let needed: *i64 = sys_mmap(N*8) as *i64; pkg_needed(5, ndep, dep, N, needed) 64 let order: *i64 = sys_mmap(N*8) as *i64; let oc: i64 = pkg_topo(ndep, dep, N, order) 65 g_puts(" install shell -> order: "); var nneed: i64=0; var ii: i64=0 66 while ii<oc { if needed[order[ii]]==1 { g_puts(nm[order[ii]] as *u8); g_puts(" " as *u8); nneed=nneed+1 } ii=ii+1 } g_puts("\n" as *u8) 67 // verify: needed = {syscalls,alloc,blockfs,shell}=4 (NOT net,tls); deps precede in the filtered order 68 let posneeded: *i64 = sys_mmap(N*8) as *i64; var pp: i64=0; var seq: i64=0 69 while pp<oc { if needed[order[pp]]==1 { posneeded[order[pp]]=seq; seq=seq+1 } pp=pp+1 } 70 var depok: i64=1; var u: i64=0 71 while u<N { if needed[u]==1 { var k: i64=0; while k<ndep[u] { if posneeded[dep[u*MAXD+k]] >= posneeded[u] { depok=0 } k=k+1 } } u=u+1 } 72 var t1: i64=0; if nneed==4 { if needed[2]==0 { if needed[4]==0 { if depok==1 { t1=1 } } } } 73 pass=pass+ck("T1: install 'shell' -> only transitive deps needed (4: syscalls/alloc/blockfs/shell), deps-ordered" as *u8, t1); total=total+1 74 75 // T2: every package verifies against its manifest sha 76 var allok: i64=1; i=0; while i<N { if pkg_verify(ct[i] as *u8, sha[i])==0 { allok=0 } i=i+1 } 77 var t2: i64=0; if allok==1 { t2=1 } 78 pass=pass+ck("T2: every package verifies (content sha == manifest sha)" as *u8, t2); total=total+1 79 80 // T3 teeth: a sha MISMATCH (tampered manifest/content) is rejected 81 var t3: i64=0; if pkg_verify(ct[3] as *u8, sha[3] ^ 0x55)==0 { if pkg_verify(ct[3] as *u8, sha[3])==1 { t3=1 } } 82 pass=pass+ck("T3 (teeth): a sha MISMATCH is rejected (supply-chain integrity) while the true sha passes" as *u8, t3); total=total+1 83 84 // T4 teeth: a dependency cycle is detected 85 let cn: i64=2; let cnd: *i64 = sys_mmap(cn*8) as *i64; let cdp: *i64 = sys_mmap(cn*MAXD*8) as *i64; let cord: *i64 = sys_mmap(cn*8) as *i64 86 cnd[0]=1; cdp[0*MAXD+0]=1; cnd[1]=1; cdp[1*MAXD+0]=0 87 let coc: i64 = pkg_topo(cnd, cdp, cn, cord) 88 var t4: i64=0; if coc<cn { t4=1 } 89 pass=pass+ck("T4 (teeth): a dependency cycle is detected (cannot resolve install order)" as *u8, t4); total=total+1 90 91 var okall: i64=0; if pass==total { okall=1 } 92 g_puts("---- nx_pkg: passed "); g_pn(pass); g_puts(" / "); g_pn(total); g_puts(" ----\n" as *u8) 93 if okall==1 { 94 let logf: i64=sys_openat_append("knowledge/status/pkg.log" as *u8, 420) 95 if logf>=0 { let z: i64=sys_write(logf,"NXPKG GREEN: dep-resolved (transitive closure + topo) + sha-verified install; mismatch+cycle rejected\n" as *u8,98); sys_close(logf) } 96 g_puts("verdict=GREEN (sovereign package manager: dep-resolved transitive install order, sha-verified integrity, mismatch+cycle rejected; the PACKAGE-MGMT gap)\n" as *u8); sys_exit(0); return 0 97 } 98 g_puts("verdict=RED\n" as *u8); sys_exit(1); return 1 99}