{"version": 2, "width": 100, "height": 36, "timestamp": 1791139965, "idle_time_limit": 2.0, "env": {"SHELL": "/bin/bash", "TERM": "linux"}}
[0.015201, "o", "booting iron-kernel under qemu-system-x86_64 (tcg, -m 1024M; host :8080 -> guest :80)\r\n\r\n"]
[10.276534, "o", "  iron-kernel v0.1.0 - x86_64\r\n"]
[10.283144, "o", "Physical memory: 257187 frames free (1004 MB)\r\n"]
[11.387495, "o", "Heap initialized: 256000 KB at 0xffffc00000000000\r\n"]
[11.522846, "o", "virtio-blk: device 0 initialized, 512 sectors \r\n"]
[11.524188, "o", "virtio-net: MAC 52:54:00:12:34:56\r\n"]
[11.557977, "o", "TCP/IP: stack initialized (10.0.2.15, gw 10.0.2.2, + lo 127.0.0.1)\r\n"]
[11.628692, "o", "Hardware initialized.\r\n"]
[11.644953, "o", "root: cpio initramfs\r\n"]
[11.812417, "o", "datadisk: virtio-blk 0 mounted RW at /data: ext2 \r\n"]
[11.838971, "o", "Init process created (pid 1).\r\n"]
[12.157147, "o", "\r\r\n"]
[12.2001, "o", "==============================================================================\r\r\n"]
[12.242705, "o", "   iron-kernel: an OS kernel written from scratch in Rust, speaking Linux\r\r\n"]
[12.285289, "o", "   x86_64 . no_std . GRUB/Multiboot2 . QEMU . BusyBox initramfs . Go init\r\r\n"]
[12.327904, "o", "==============================================================================\r\r\n"]
[14.152789, "o", "\r\r\n"]
[14.195706, "o", ">>> 1. It is a real kernel presenting the Linux system-call ABI\r\r\n"]
[14.238109, "o", "\r\r\n"]
[14.280473, "o", "  $ uname -a\r\r\n"]
[14.322805, "o", "Linux iron-kernel 6.1.0 #1 SMP iron-kernel x86_64 GNU/Linux\r\r\n"]
[14.365025, "o", "\r\r\n"]
[14.408274, "o", "  $ grep -E 'MemTotal|MemFree' /proc/meminfo; echo nproc=$(nproc)\r\r\n"]
[14.452832, "o", "MemTotal:      1048048 kB\r\r\n"]
[14.495241, "o", "MemFree:       749724 kB\r\r\n"]
[14.537704, "o", "nproc=1\r\r\n"]
[16.222054, "o", "\r\r\n"]
[16.264642, "o", ">>> 2. Unmodified binaries run on it: static musl C, then the Go runtime\r\r\n"]
[16.306942, "o", "\r\r\n"]
[16.349409, "o", "  $ /musl-hello\r\r\n"]
[16.392494, "o", "Hello from musl libc on iron-kernel!\r\r\n"]
[16.434789, "o", "System: Linux iron-kernel 6.1.0\r\r\n"]
[16.477776, "o", "PID: 10\r\r\n"]
[16.520212, "o", "\r\r\n"]
[16.563211, "o", "  $ /go-hello\r\r\n"]
[16.606058, "o", "uts: pid 12 sethostname 'iron-kernel' in utsns 0\r\n"]
[16.648568, "o", "[OK] 1. Goroutines: 16 goroutines, counter=16\r\r\n"]
[16.691042, "o", "[OK] 2. Runtime: CPUs=1 procs=1 goroutines=1\r\r\n"]
[16.733986, "o", "[OK] 3. Hostname: iron-kernel\r\r\n"]
[16.776917, "o", "[OK] 4. Time: 1791139980 sec since boot\r\r\n"]
[16.819407, "o", "[OK] 5. File I/O: write+read\r\r\n"]
[16.862043, "o", "[OK] 6. File append: iron-kernel! appended\r\r\n"]
[16.905176, "o", "[OK] 7. Directory: 3 entries: [sub a.txt b.txt]\r\r\n"]
[16.947572, "o", "[OK] 8. procfs meminfo\r\r\n"]
[16.990903, "o", "[OK] 9. procfs cpuinfo\r\r\n"]
[17.034134, "o", "[OK] 10. Cgroups: memory.max=1GB\r\r\n"]
[17.076671, "o", "[OK] 11. ext2: Hello from ext2 filesystem!\r\r\n"]
[17.119157, "o", "[OK] 12. Unix socket\r\r\n"]
[17.163052, "o", "[OK] 13. TCP loopback\r\r\n"]
[17.205638, "o", "[OK] 14. eBPF: map+prog\r\r\n"]
[17.248393, "o", "[OK] 15. Readdir /: etc,hello,go-init,dev,go-hello,usr,init,tmp,memhog,testhelper,demo-tour.sh,o\r\r\n"]
[17.291151, "o", "[OK] 16. PID: pid=12\r\r\n"]
[17.334203, "o", "[OK] 17. Pipe: pipe!\r\r\n"]
[17.376731, "o", "[OK] 18. Env\r\r\n"]
[17.419158, "o", "[OK] 19. Stat: size=21\r\r\n"]
[17.461944, "o", "[OK] 20. Seek: read 'kernel!' after seek(5)\r\r\n"]
[17.505244, "o", "[OK] 21. PTY: pts/0: 'hello pty!'\r\r\n"]
[17.548193, "o", "  Results: 21/21 tests passed\r\r\n"]
[18.681929, "o", "\r\r\n"]
[18.724617, "o", ">>> 3. Processes: pipelines, signals, and 100 fork+execve cycles\r\r\n"]
[18.767524, "o", "\r\r\n"]
[18.810126, "o", "  $ seq 1 100000 | awk '{ s += $1 } END { print \"sum of 1..100000 =\", s }'\r\r\n"]
[20.052996, "o", "sum of 1..100000 = 5000050000\r\r\n"]
[20.096371, "o", "\r\r\n"]
[20.139527, "o", "  $ sleep 30 & P=$!; kill -TERM $P; wait $P; echo \"sleep exited with $? (128+15 = SIGTERM)\"\r\r\n"]
[20.184067, "o", "sleep exited with 143 (128+15 = SIGTERM)\r\r\n"]
[20.22639, "o", "\r\r\n"]
[20.269012, "o", "  $ time sh -c 'for i in $(seq 100); do /bin/true; done'\r\r\n"]
[23.33496, "o", "real\t0m 3.20s\r\r\n"]
[25.341675, "o", "\r\r\n"]
[25.385969, "o", ">>> 4. A real disk: ext2 over virtio-blk, writable, persistent across boots\r\r\n"]
[25.42929, "o", "\r\r\n"]
[25.47384, "o", "  $ grep ' /data ' /proc/mounts\r\r\n"]
[25.516541, "o", "/dev/vda /data ext2 rw,relatime 0 0\r\r\n"]
[25.55919, "o", "\r\r\n"]
[25.601755, "o", "  $ echo \"booted $(date)\" >> /data/visits.log && sync && cat /data/visits.log\r\r\n"]
[25.644395, "o", "booted Sun Oct  4 17:42:41 UTC 2026\r\r\n"]
[25.687118, "o", "booted Sun Oct  4 17:44:22 UTC 2026\r\r\n"]
[25.729931, "o", "booted Sun Oct  4 18:48:56 UTC 2026\r\r\n"]
[25.772784, "o", "booted Sun Oct  4 18:50:18 UTC 2026\r\r\n"]
[25.816035, "o", "booted Sun Oct  4 18:51:46 UTC 2026\r\r\n"]
[25.858894, "o", "booted Sun Oct  4 18:53:10 UTC 2026\r\r\n"]
[25.901722, "o", "\r\r\n"]
[25.944589, "o", "  $ dd if=/dev/urandom of=/tmp/blob bs=1M count=16 2>/dev/null; cp /tmp/blob /data/blob; sync\r\r\n"]
[26.251279, "o", "\r\r\n"]
[26.293961, "o", "  $ md5sum /tmp/blob /data/blob\r\r\n"]
[26.526433, "o", "5656ac2f34670ec59ab46a111dcf8371  /tmp/blob\r\r\n"]
[26.785857, "o", "5656ac2f34670ec59ab46a111dcf8371  /data/blob\r\r\n"]
[29.331332, "o", "\r\r\n"]
[29.374399, "o", ">>> 5. Container primitives: namespaces, and a cgroup v2 memory limit enforced\r\r\n"]
[29.417074, "o", "\r\r\n"]
[29.459665, "o", "  $ unshare -u sh -c 'hostname pod-a; echo \"in a new UTS namespace: $(hostname)\"'\r\r\n"]
[29.50275, "o", "uts: pid 146 sethostname 'pod-a' in utsns 1\r\n"]
[29.545257, "o", "in a new UTS namespace: pod-a\r\r\n"]
[29.587904, "o", "\r\r\n"]
[29.630615, "o", "  $ echo \"outside it, still: $(hostname)\"\r\r\n"]
[29.673256, "o", "outside it, still: iron-kernel\r\r\n"]
[29.715956, "o", "\r\r\n"]
[29.758786, "o", "  $ unshare -p -f sh -c 'echo \"in a new PID namespace: the shell is pid $$\"'\r\r\n"]
[29.801494, "o", "in a new PID namespace: the shell is pid 1\r\r\n"]
[29.84418, "o", "\r\r\n"]
[29.887158, "o", "  $ mkdir /sys/fs/cgroup/oomtest; echo 33554432 > /sys/fs/cgroup/oomtest/memory.max  # 32 MiB\r\r\n"]
[29.929704, "o", "  $ /memhog   # joins the cgroup, then mmaps and touches 1 MiB chunks forever\r\r\n"]
[29.972613, "o", "OOM: killing pid 152 (/memhog), every thread of it, from tid 152: out of physical memory [SIGKILL]\r\n"]
[30.015361, "o", "memhog exited with 137  (137 = SIGKILL from the OOM killer at the cgroup limit)\r\r\n"]
[31.77118, "o", "\r\r\n"]
[31.814168, "o", ">>> 6. Its own TCP/IP stack on virtio-net: ping out, serve HTTP in\r\r\n"]
[31.857079, "o", "\r\r\n"]
[31.899849, "o", "  $ ping -c 2 10.0.2.2 | tail -2\r\r\n"]
[32.825254, "o", "2 packets transmitted, 2 packets received, 0% packet loss\r\r\n"]
[32.868711, "o", "round-trip min/avg/max = 0.718/3.510/6.303 ms\r\r\n"]
[32.911954, "o", "\r\r\n"]
[32.954646, "o", "  $ httpd -p 80 -h /www && wget -q -O - http://127.0.0.1/ | head -1\r\r\n"]
[32.997296, "o", "<html><body><h1>Hello from iron-kernel</h1>\r\r\n"]
[33.040577, "o", "\r\r\n"]
[33.083838, "o", ">>> and now the HOST fetches that page through QEMU's port forward (127.0.0.1:8080 -> :80):\r\r\n"]
[33.126822, "o", "### HTTPD READY ###\r\r\n"]
[33.169733, "o", "\r\n  host$ curl -i http://127.0.0.1:8080/\r\n"]
[33.186332, "o", "  HTTP/1.1 200 OK\r\n  Date: Sun, 04 Oct 2026 18:53:17 GMT\r\n  Connection: close\r\n  Content-type: text/html\r\n  Accept-Ranges: bytes\r\n  Last-Modified: Sun, 04 Oct 2026 18:53:17 GMT\r\n  ETag: \"6ac2a09d-cd\"\r\n  Content-Length: 205\r\n  \r\n  <html><body><h1>Hello from iron-kernel</h1>\r\n  <p>Served by BusyBox httpd on a kernel written from scratch in Rust:\r\n  its own virtio-net driver, TCP/IP stack, sockets, poll, fork and execve.</p>\r\n  </body></html>\r\n"]
[40.930441, "o", "\r\r\n"]
[40.973861, "o", "------------------------------------------------------------------------------\r\r\n"]
[41.017089, "o", "   iron-kernel: 0 lines of Linux.  Everything above ran on code written from scratch.\r\r\n"]
[41.060093, "o", "\r\r\n"]
[41.103609, "o", "   Linux ABI, procfs, BusyBox userland                  PASS\r\r\n"]
[41.146443, "o", "   Go runtime checks (21/21)                            PASS\r\r\n"]
[41.189578, "o", "   Signals: SIGTERM -> exit 143                         PASS\r\r\n"]
[41.232595, "o", "   ext2 on virtio-blk: boot #6 logged, 16 MiB verified  PASS\r\r\n"]
[41.275408, "o", "   cgroup memory.max: OOM kill -> exit 137              PASS\r\r\n"]
[41.318071, "o", "   TCP/IP: HTTP served to localhost and the host        PASS\r\r\n"]
[41.3606, "o", "\r\r\n"]
[41.404346, "o", "   The Kubernetes capstone (CRI-O + kubelet + kube-proxy on this kernel): demo/demo.sh\r\r\n"]
[41.446902, "o", "------------------------------------------------------------------------------\r\r\n"]
[41.940703, "o", "\r\r\n"]
[41.9839, "o", "### DEMO COMPLETE ###\r\r\n"]
