Release notes — 0.4 Beta¶
0.4 Beta turns Equinox from "a kernel that can compile its tools" into a self-installing, package-driven operating system: a real installer wizard, a package manager with a Git-hosted repository, a validated configuration store, a disk tool, and a storage/network driver expansion (AHCI SATA + block layer, Intel E1000).
Regression status: 101 core QEMU checks PASS, plus dedicated 0.4
suites — installer wizard (15), AHCI (17), E1000, .ecf (25), manual
install (23), base image (15), /mnt build (7), eggkg bash build.
Highlights¶
1. equinoxinstall — the in-OS installer wizard¶
Four phases from the running OS: pick a target disk (or build in
place) → format/copy the EQUINOXBASE layout → pick the network driver
(written into system.ecf) → compile the userland onto the target with
live status; optional [5/5] installs the GRUB bootloader so the disk
boots without the CD. Shortcuts: -compile <dir>, -build
<file.ruf|name|*.ruf>. (The v0.3 eqbuild loop lives on inside it as
the compile phase.)
2. eggkg + the Eggkg-l repository¶
Gentoo-style package manager built into the shell: update / install /
remove / list / search / info / sync. Packages are C sources + a ruf
v3 recipe, fetched over HTTPS from
Eggkg-l (local/offline paths
work too), verified with in-kernel SHA-256, compiled with mtcc -make
and installed into /bin with installed.db + boot-time .local
sync. dependencies.bash=true auto-activates the coreutils at boot.
3. The bash package replaces bundled coreutils¶
The base ISO no longer bundles the bash-class tools (ls cat cp mv
mkdir rmdir rm touch stat and friends). The canonical copies live in
Eggkg-l as the bash package; the shell keeps eqbash builtins
(lf, showf, cdir, cfile, ccfile, save, delfile, deldir,
pren, copy, move, del) and bash-name aliases so the thin
base stays fully usable, and eggkg install bash swaps in the full
package. Text filters (grep, wc, sort, …) remain in the base.
4. Storage: block layer + AHCI (SATA)¶
New generic block layer (blk.cpp, 8 fixed slots: PATA 0–3, SATA 4+,
hda–hdh naming, bus-neutral MBR parsing) with a full AHCI 1.x
SATA driver (ahci.cpp): ABAR/BAR5, GHC.AE, engine stop/start with
CR/FR wait, DET/ATAPI checks, command list + FIS receive + PRDT DMA,
READ/WRITE DMA (EXT) + FLUSH CACHE, self-healing port restart.
PATA keeps the classic ATA PIO driver. FAT32 gains an in-kernel
formatter (fat32_mkfs: MBR + type-0x0C whole-disk partition @
LBA 2048, label EQUINOXBASE).
5. Networking: Intel E1000¶
New PCI NIC driver (e1000.c, 8086:100E/100F): EEPROM MAC, RX ring
32×2048 B, TX ring 8×16 B descriptors, read-to-clear ICR — behind the
same nic.c registry as the NE2000 (adding a NIC = one struct + one
registration). Boot-time driver selection via system.ecf
([net] driver = ne2000|e1000|none), wizard step [3/4] writes it;
make run-e1000 / scripts/e1000_test.py.
6. Qfs — the disk tool¶
Qfs -list-disk (hda–hdh with size/label/state), Qfs -t hdX -format
fat32, Qfs -install-boot hdX (GRUB boot.img+core.img staged in
RAMFS /equinox/bootimg/). Paired with the mount/umount builtins and
the recursive copy/del commands this is the manual install path.
7. Configuration: .ecf + set + eqshell scripts¶
INI-lite config store (ecf.c) with the set builtin:
set, set <key> <val>, set list, -a apply, -w write,
-d register system config, -b base pivot, -x run .es script.
system.ecf lives in /equinox/conf/ (legacy boot/ fallback,
active.conf overlay). eqshell scripts start with [Eqshell],
journal to /eqshell.log. Schema keys: net.driver,
dependencies.bash, eggkg.server/mirror/local.
8. Build system: ruf v3 + mtcc -make¶
Recipes gain real variables (name := "bash"), jobs and
copy/move ? to install steps; equinoxinstall -build and eggkg
share the same engine. mtcc itself: line-numbered undefined-reference
errors, %u true unsigned, host/OS byte-identical output.
9. Shell & desktop¶
Shell: pipes, glob, redirection, history; eqbash builtins;
xxd; -> copy syntax; multi-line save. Desktop: EquiX vector
desktop (ThorVG) with dynamic GUI arena (guiarena.cpp), LVGL apps,
desktop/tvgdemo/tvgbench commands.
10. Memory¶
Dynamic RAM top from the GRUB memory map (paging_set_ram_top,
tables clamped 16–128 MB), demand-paged per-task arenas, 256 MB
recommended (-m 256, 64 MB minimum), region above ram_top
deliberately unmapped.
Compatibility notes¶
- Bash tools: if you scripted against
ls/cat/cpyou will see the builtins/aliases untileggkg install bash— behavior-compatible, richer once installed. - eqbuild (0.3): superseded by
equinoxinstall;-compile/-buildcover the old flows. boot/system.ecf→ moved to/equinox/conf/system.ecf(legacy path still read).- Syscall table unchanged (#0–#54, append-only) — userland from 0.3 rebuilds as-is.
Known limitations¶
- ATAPI (CD over AHCI) is detected and skipped, not mounted.
- mtcc remains a C subset (no struct-by-value, no float, no switch).
- ICMP
pingdoes not traverse QEMU slirp; usetcpping. MAX_TASKS= 8; fd table 16/task; single user (root).- The GUI arena assumes ≤128 MB mapped RAM (tables clamp); DMA buffers are identity-mapped BSS — RAM-hungry additions need bounce buffers.
Roadmap (post-0.4)¶
- ATAPI/CDROM over AHCI; NCQ command scheduling.
- Real multi-user + permissions; more packages (games data, toolchain).
- Network: second NIC concurrent, UDP tools, larger TLS suite.
- mtcc: structs by value, float, larger preprocessor.
- Installer: partition-level (non-whole-disk) installs.