stal/IX

This document contains a regularly replenishing list of stal/IX and conventional Linux differences.

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 - an attempt to rethink some fundamentals without touching Linux API and ABI.

One of the stal/IX goals - from the very beginning to build the system in such a way that it’s possible to understand how it works, and not only use it conveniently.

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

Overall, the file system will be familiar to those who know Nix/Guix. Atomic updates, multi-versioning - all here!

No systemd

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

stal/IX currently uses runit as the most lightweight solution, perhaps, this will change in the future.

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 for internal needs, and allows to build custom soft with an arbitrary libc on a choice.

Non-root package management

IX.md

All files on the system are IX user-owned, and all package management is done on his behalf.

Consequence - there is not a single suid binary on the system. Sudo - the thin layer over local ssh daemon, for privilege escalation.

Fully supervised process tree

Every process different from init has a parent different from init. All processes that fail to meet this requirement are killed by a specially dedicated background process. To manage services used runit, 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 maintain the efficiency of the IX package base running with X means doing work that one day will have to be thrown out. We don’t have enough resources for 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 ssh daemon.

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

Cross-compile by default

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

File associations

The existing mechanisms for associating programs to 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 linking programs to file types. It is based on the xdg-open-dispatch script, and changes in upstream to redirect their mechanisms to xdg-open, patch for epiphany WEB browser.

Interaction with upstream