UNIX konečně i pro ZX Spectrum: Fuzix OS

Napsáno pro diskmag RESTORE 1.

Fuzix byl světu představen na konci října roku 2014. Štve vás SystemD? Kdbus je poslední kapka? Linuxová komunita je moc velká a ukřičená? Přemítáte o starých časech, kdy jste každého přispěvatele znali jménem a zdrojové kódy se vešly na jednu disketu?

Tak těmito slovy začal Alan Cox propagaci nového operačního systému původně určenému pro procesorovou architekturu Zilog Z80 (ale už jsou dostupné i porty na 68000, 6809, 8080, 8085 a z těch novějších např Raspberry Pi Pico s Arm Cortex-M0+ nebo ESP8266). Linuxovým uživatelům, alespoň těm trochu starším, není třeba Alana Coxe představovat, odvedl spoustu práce na linuxovém kernelu 2.2, síťovém subsystému a do roku 2009 spravoval i vrstvu TTY, tedy to, co se stará o výstup na obrazovku terminálu.

Fuzix je multiuživatelský, více úlohový systém, který implementuje vlastní správu paměti pro maximální možnou izolaci běžících procesů. Poslední stabilní verze je 0.3, ale už se chystá i O.4, které by měla zefektivnit kód odstraněním některých starších neduhů v návrhu, ale ABI (aplikační binární intefejs) přestane být kompatibilní.

Fuzix vychází z operačního systému UNIX System V, jehož vývoj začal v 70. letech v Bellových laboratořích firmy AT&T. Ta jeho zdrojové kódy začala licencovat a tak se SysV stal populárním pro řadu komerčních UNIXů, ale také v akademické sféře.

Fuzix není napsán úplně od píky, ale je to následovník UZI180 (Unix Z80 Implementation for the Z-180), který vznikl v polovině 90. let pod svobodnou licencí GPL a během let se objevilo několik forků. Většina původního systému vznikla s pomocí jazyka C v systému CP/M 2.2. Alan dal zdrojové kódu dohromady, vylepšil a přizpůsobil pro modernější ANSI C kompilátor (sdcc) a podporu pro některé klasické Z80 mikropočítače, později i s pomocí dalších přispěvatelů.

Sám jsem Fuzix vyzkoušel na ZX Spectru +128k se starším divIDE revize 57b. Jádro systému zabírá okolo 40 kB a na ZXS+128k pak zbývá jen okolo 32 kB na uživatelský prostor. Díky tomu systém nabootuje, spustí se shell, ale pro některé aplikace už je paměti málo a pokus o jejich spuštění končí chybovou hláškou. Bootuje se tak, že se nejprve spustí esxDOS na jehož oddíl se předtím umístí utilitky FUZIX a FUZIX.BIN a příkaz .fuzix nabootuje OS (podobně jako loadlin dokázal spustit Linux z DOSu). Fuzix pak běží v MAPRAM režimu. Systém se zeptá z jakého oddílu se má spustit (já jsem zadal hda3, jak se dozvíte dále), kvůli nepřítomnosti RTC i na přesné datum a čas. Po chvilce se objeví textové logo:

^ ^
n n   Fuzix 0.3rc1
>@<
      Welcome to Fuzix.
m m

login:

Stačí se pak zalogovat jako root, bez hesla, a je to! Disk je v mém případě slouží CF karta, která za dvěma FAT32 oddíly obsahuje ještě 3. a 4. oddíl. Třetí oddíl (hda3) je systémový o velikosti 32 MB a za ním je 4MB swap. Konzole je tradičně bílá na černém pozadí (tedy pro UNIX, nikoliv pro nás uživatele Spekter). Protože je odezva systému pomalá, tak při spuštění a nahrávání aplikací v borderu problikává červeno-modrý proužek, takže jako uživatel máte pocit, že se něco děje a nemáte strach, že se třeba systém zakousl. Signály z klávesnice, které na PC posíláte kombinací s klávesou Ctrl, se na ZXS posílají přes Extended. Takže třeba Ctrl-c/SIGINT se vyvolá jako kombinace Extended-c. Jinak je vše hodně podobné tomu, na co jsme zvyklí z jiných s UNIXem kombitibilních OS.

Osobně se těším na to, až vyzkouším Fuzix na moderním klonu ZX, v mém případě je to ZX Evolution a se 4 MB RAM a 14 MHz Z80 (kompatibilní s Pentagonem a NemoIDE). To už by mohlo být o poznání svižnější a také případná podpora síťování se ZXUSBNET není v UNIXu k zahození (ovšem podpora TCP/IP je zatím ve stádiu vývoje).

Zpátky k tomu jak Fuzix zkompilovat. Jako za starých časů je potřeba si nejprve sestavit kompilátor jazyka C a pak i systém samotný. K tomu budete potřebovat počítač s Linuxem, *BSD, apod. Vše potřebné je k nalezení na Alanově GitHubu. Kompilátor sdcc280 je upravený sdcc s řadou patchů potřebných pro Fuzix, důležité je např. zhušťování binárek pro 16kB stránkování. S takto upraveným kompilátorem se pak naklonuje repozitář Fuzixu a upraví cíl kompilace definovaný v hlavním Makefile, v mém případě TARGET=zxdiv.

Zdrojové kódy Fuzixu jsou malé, ale hezoučké. Obsahují jak jádro OS, tak i zdrojáky ke standardní knihovně. Kdo se někdy vrtal ve zdrojácích jiných kernelů nebo GNU mi dá za pravdu, že se v nich člověk dokáže velice rychle ztratit, portabilita a různé vymoženosti jako lokalizace, podpora Unicode nebo finty pro preprocesor a kompilátor totiž zdrojové kódy nabobtnaly a značně znepřehlednily. To ovšem není případ Fuzixu, tady se totiž na serepetičky nehledí, ale jde se rovnou k věci.

Pokud vás Fuzix OS zaujal jeho domovská stránka: www.fuzix.org.