Systemsite/content/apps.md

Apps included

Everything fits 8 MB RAM and 16 MB flash with no MMU. Romfs text runs execute-in-place and costs no RAM; SD card binaries are loaded whole before main(). The set is meant to be usable: shell, editor, file manager, browser, mail, and a C compiler on the board.

Screenshots below are HDMI captures at native 640×480, the same signal the master scans out.

top on FRANK Linux

Shell and editing #

AppWhereRole
mkshflashLogin shell — NOMMU port with arrays, [[ ]], brace expansion, PIPESTATUS, namerefs
BusyBoxflashCoreutils and networking helpers (hush remains available)
nanoflashFull editor (not the tiny build), patched for NOMMU

You log in as root to mksh on the HDMI console (USB CDC stays up for debug). Edit with nano; navigate the tree with mc.

Files and the console UI #

Midnight Commander lives on the SD card (/data/apps) with a /bin/mc wrapper. It is shipped whole rather than split: mc compares widget callback pointers, and FDPIC descriptors are not unique across libraries. With the kernel execute-in-place, the 512 kB allocation it needs is affordable.

Midnight Commander on the HDMI console

glib stays in flash and is shared execute-in-place, so mc pays for its own text only.

Web, mail and scripting #

AppWhereRole
lynxcardText web browser over HTTPS (wolfSSL + CA bundle)
muttcardMail client with IMAP/POP — split into small FDPIC objects for NOMMU load
perlcardFull perl 5.40 — split; largest Unicode table stays XIP in flash
Lua 5.4flashInterpreter (32-bit), with lua-cjson and luafilesystem on the card
MicroPythonflashInterpreter

Large card programs are sized for a busy machine, not a fresh boot. Wrappers in /bin exec them from /data/apps and fail clearly if the card is missing.

Compile on the board #

AppWhereRole
tccflashThumb-2 Tiny C Compiler — tcc -run compiles and runs in memory
makeflashOn-target builds with tcc
frankmancard (/data/opt)Pac-Man clone shipped as source; the board builds it with tcc

tcc -run sidesteps writing an FDPIC ELF the loader would accept: it compiles into RAM and calls the code. Floating point goes through AEABI soft-float helpers.

frankman — board-built framebuffer game

Login banner

The framebuffer path (/dev/fb0, 320×240 8-bit) is what frankman and other graphics programs use; closing the device returns the text console with scrollback intact.

Networking and transfer #

AppWhereRole
pppdflashPPP client for the ESP-01 netcard (NOMMU package)
DropbearflashSmall SSH client
wolfSSLflashTLS (OpenSSL-compat API) for lynx and friends
ca-certificatesflashSo SSL_VERIFY_PEER can succeed
iperf3card optLink throughput
lrzszcard optrz / sz (X/Y/ZMODEM) down the console
pvcard optProgress for long transfers

Storage tools (/data/opt) #

Unpacked at install; on PATH via profile.d.

PackageProvides
exfatprogsfsck.exfat, mkfs.exfat
dosfstoolsfsck.fat, mkfs.fat
e2fsprogse2fsck (boot repair for /data)
filefile(1) with a trimmed magic set
bzip2Compression (BZIP2=-1 default)
tcc libc headersBehind /usr/share/tcc/libc

Sizing rule of thumb #

Without an MMU, every loadable segment is one physically contiguous allocation. Cap is effectively ~512 kB per object. Prefer flash (XIP) for large read-only text; split card programs into smaller shared objects; leave huge read-only tables in the image. Details: docs/apps-on-the-card.md in the repository.