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