This document contains a regularly updated list of differences between stal/IX and regular Linux.
“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/
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!
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.
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.
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.
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
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/
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.
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.
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!
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.