stal/IX

This document contains a regularly updated list of differences between stal/IX and regular Linux.

Minimalism

“UNIX is simple and coherent…” - Dennis Ritchie

“GNU’s Not UNIX” - Richard Stallman

stal/IX is not UNIX or Linux in the usual sense of these terms.

stal/IX is an attempt to rethink some fundamentals without touching the Linux API and ABI.

One of the goals of stal/IX is to build the system from the ground up in such a way that it is easy to understand how it works, not just easy to use.

https://wiki.musl-libc.org/alternatives.html
https://github.com/illiliti/libudev-zero
https://busybox.net/tinyutils.html
https://connortumbleson.com/2022/11/28/open-source-saying-no/

No FHS

https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
FS.md

In general, the file system will be familiar to those who know Nix/Guix. Atomic updates, multiversioning - it’s all here!

No systemd

https://blog.darknedgy.net/technology/2020/05/02/0/
https://www.phoronix.com/news/systemd-Git-Stats-2022

Currently, stal/IX uses a custom init as the most lightweight solution. It formerly used runit, but it was too hard with the content-addressable store.

Musl

https://drewdevault.com/2020/09/25/A-story-of-two-libcs.html
https://codebrowser.dev/glibc/glibc/nptl/pthread_cancel.c.html#99
https://www.phoronix.com/news/Glibc-2.36-EAC-Problems https://ariadne.space/2021/12/29/glibc-is-still-not-y2038-compliant-by-default/

Glibc does not fully support static linking. stal/IX uses musl internally and allows userland software to be built with an arbitrary libc of choice.

Non-root package management

IX.md

All files on the system are owned by user IX, and all package management is performed on its behalf.

Consequently, there is not a single suid binary file in the system. Sudo is a thin layer over the local ssh daemon, to increase privileges.

Fully supervised process tree

Every process other than init has a parent other than init. All processes that do not meet this requirement are terminated by a specially designated background process. A custom init is used to manage services, encouraging this behavior.

https://github.com/swaywm/sway/issues/6828
https://github.com/stal-ix/ix/blob/main/pkgs/bin/sched/staleprocs/staleprocs.sh
https://unix.stackexchange.com/questions/250153/what-is-a-subreaper-process

Static linking

No ld.so!

http://ewontfix.com/18/ https://gavinhoward.com/2021/10/static-linking-considered-harmful-considered-harmful/
https://lore.kernel.org/lkml/CAHk-=whs8QZf3YnifdLv57+FhBi5_WeNTG1B-suOES=RcUSmQg@mail.gmail.com/
https://eli.thegreenplace.net/2013/07/09/library-order-in-static-linking
https://habr.com/ru/post/451208
https://lobste.rs/s/adr60v/single_binary_executable_packages
https://nullprogram.com/blog/2018/05/27/

Wayland only

https://drewdevault.com/2021/02/02/Anti-Wayland-horseshit.html

X is dying, and to keep the IX package base efficient, working on X means doing work that will one day have to be thrown away. We don’t have enough resources to do that.

Login shell

No
https://askubuntu.com/questions/866161/setting-path-variable-in-etc-environment-vs-profile

Every user session must start from the login shell, even in the ssh daemon.

Patch for dropbear to launch all processes, including non-interactive ones, with a login shell.

Cross-compilation by default

All packages are compiled as if host platform != target platform, so we achieve that the package base is built for all platforms most of the time. We have cross-compiling CI for aarch64 and riscv!

File associations

Existing mechanisms for associating programs with file types are complex, fragile, and difficult to integrate into IX realms.
https://wiki.archlinux.org/title/XDG_MIME_Applications

Therefore stal/IX has its own mechanism for associating programs with file types. It is based on the xdg-open-dispatch script, and changes in upstream to redirect their mechanisms to xdg-open, such as a patch for the Epiphany web browser.

Interaction with upstream