Files
zosbuilder/docs/MINIMAL-DESIGN.md

3.2 KiB

Minimal Embedded Initramfs Design

🎯 Requirements: Ultra-Minimal Embedded CPIO

  • Size Target: 50-100MB (not 700MB!)
  • Network drivers + essential firmware only
  • eudev for module loading
  • btrfs and vfat filesystem support
  • Embedded in kernel for fastest boot

📦 Minimal Package List

Core System (Essential Only)

alpine-baselayout     # Basic filesystem structure
busybox              # Essential utilities
musl                 # C library

Module Loading & Hardware Detection

eudev                # Hardware detection and module loading
kmod                 # Module management

Filesystem Support (Minimal)

btrfs-progs          # btrfs filesystem support  
dosfstools           # vfat filesystem support

Network Essentials (Minimal)

# NO full linux-firmware (600MB!)
# Only essential network drivers via selective firmware

🗂️ Firmware Strategy: Selective Loading

Instead of 600MB linux-firmware package:

Essential Network Firmware Only

intel/          # Intel ethernet (e1000e, ixgbe, i40e)
realtek/        # Realtek ethernet (r8169)  
broadcom/       # Broadcom ethernet (bnx2, tg3)

Load via Kernel Modules (Not Initramfs)

  • WiFi firmware (loaded later from RFS)
  • GPU firmware (not needed for initramfs)
  • Sound firmware (not needed)

🎯 Size Optimization Strategy

What to EXCLUDE from Initramfs

  • SSH tools (700KB) - load from RFS
  • Debugging tools (gdb, strace, etc. - 50MB)
  • Development tools (python, etc. - 50MB)
  • Full linux-firmware (600MB) - selective only
  • Compression tools (load from RFS)
  • Network utilities (curl, wget, etc.)

What to INCLUDE in Initramfs

  • Core Alpine base (~10MB)
  • eudev + kmod (~5MB)
  • Essential network drivers (~20MB firmware)
  • btrfs-progs + dosfstools (~10MB)
  • GitHub components (zinit, etc. ~5MB)

Target: ~50MB total

🔧 Implementation Changes Needed

1. Create Minimal Package List

Replace packages.txt with ultra-minimal version

2. Selective Firmware Installation

Custom script to install only essential network firmware:

  • /lib/firmware/intel/
  • /lib/firmware/realtek/
  • /lib/firmware/broadcom/

3. Build Process Changes

  • Skip massive firmware installation
  • Strip unnecessary files aggressively
  • Optimize cpio compression

4. Two-Stage Loading

  1. Initramfs: Minimal (network + filesystems)
  2. RFS: Full tooling loaded after network

📊 Expected Size Breakdown

Component Size Notes
Alpine base ~10MB Core system
eudev + kmod ~5MB Module loading
Filesystems ~10MB btrfs + vfat
Network firmware ~20MB Essential only
GitHub tools ~5MB zinit, core-x, etc
Total ~50MB 10x smaller!

🚀 Benefits of Minimal Approach

  • Fast boot: 50MB vs 700MB embedded
  • Memory efficient: Less RAM usage
  • Network focused: Only what's needed for connectivity
  • Scalable: Load additional tools from RFS after network

This aligns with the original Zero-OS philosophy: minimal initramfs + network-loaded tools.