Sortix cross-volatile manual
This manual documents Sortix cross-volatile. You can instead view this document in the latest official manual.
NAME
following-development — instructions for following developmentDESCRIPTION
This document is a list of changes that affect the ability to build and run the latest Sortix source code, when doing native development(7) or cross-development(7). The list is in reverse chronological order. The system has policies that handle incompatible changes gracefully.cd /src # system source code location man share/man/man7/following-development.7
CHANGES
Move system and ports from /etc/upgrade.conf to /tix/collection.conf
The system and ports variables in /etc/upgrade.conf (upgrade.conf(5)) has been moved to the /tix/collection.conf (collection.conf(5)) configuration file in the tix-vars(8) format and renamed to SYSTEM and PORTS.Add tix-repository(8)
The new tix-repository(8) program is used to generate repository metadata in releases. The new EDITION and RENAMES variables in port(5) are used to rename and split packages and requires a new tix-build(8).cd /src/tix && make clean && make install
Add init groups
The setinit(2) and getinit(2) system calls have been added for nested init groups. The TIOCSCTTY ioctl(2) for acquiring a controlling terminal has gained a force flag essential to transferring terminals into nested sessions, and the new TIOCUCTTY ioctl(2) releases a controlling terminal. This is a minor compatible ABI change.Update to gcc-14.2.0 and binutils-2.43.1
The toolchain has been updated to gcc 14.2.0 and binutils 2.43.1 and must be rebuilt before building the operating system per development(7) and cross-development(7):cd /src && make clean-cross-toolchain && make PREFIX="$CROSS_PREFIX" TARGET=$SORTIX_PLATFORM install-cross-toolchain
Support combining CONFIGURE_USE_BUILD_DIRECTORY and SUBDIR
tix-build(8) now supports combining CONFIGURE_USE_BUILD_DIRECTORY and SUBDIR port(5) variables to do an out-of-directory build in a subdirectory.cd /src/tix && make clean && make install
Support system upgrades and configuration in GRUB
The GRUB configuration now implements the /etc and /etc/default configuration split per hier(7) and sysmerge(8) now collaborates with system upgrades to boot them correctly. Installations with manually configured bootloaders may need updating.Third generation Tix
The tix binary package format has upgraded from generation 2 to 3 and has a new internal layout that can be directly extracted into the filesystem. The metatdata in /tix is now using the tix-vars(8) format in the style of port(5).cd /src/tix && make clean && make install
Add include and comment support to passwd(5) and group(5)
The passwd(5) and group(5) files have gained support for include statements via libc support. Installations must now include /etc/default/passwd.d/* and /etc/default/group.d/* respectively in order to have system users and groups.Add memory statistics to struct psctl_stat
The psctl(2) now provides per-process memory statistics in struct psctl_stat via the new members pss, rss, uss, and vms.Add memusage(2)
The memusage(2) system call has been added, which provides detailed system memory statistics. This is a minor compatible ABI change.Add networking stack
The network stack has been implemented in the kernel and exposed through additions to the system call interface.Add daemon support to init(8)
init(8) has gained daemon(7) support with the new init(5) configuration format.Add ports to the Sortix repository
The ports have been moved from the porttix/srctix repositories into the ports/ subdirectory in the main repository. The upstream releases are downloaded from the appropriate mirror when built and patched with the patches in the ports/ subdirectory.cd /src/tix && make clean && make install
Implement file descriptor passing
The SCM_RIGHTS control message have been implemented, allowing file descriptors to be passed over AF_UNIX sockets. This is a minor compatible ABI change.Implement threading primitives that truly sleep
The futex(2) system system call for efficient thread waiting has been added. The exit_thread(2) system call has gained a EXIT_THREAD_FUTEX_WAKE flag for waking a single waiter on a futex. This is a minor compatible ABI change.Fix system upgrade leaking files
sysupgrade(8) and sysmerge(8) will now delete files that no longer exist in the new system and ports. However, files may already have leaked if a 1.0 installation was upgraded to a development build prior to this change. An upgrade hook will delete any well known leaked files.Fix /tix/manifest permissions in installations
The /tix/manifest directory was accidentally installed by sysinstall(8) as mode 6603 instead of 7555. This problem is fixed with an upgrade hook.Add socket(2)
The /dev/net virtual filesystem for socket creation has been removed in favor of adding an actual socket(2) system call. This is a major incompatible ABI change. Only Unix sockets were exposed this way. In the base system, sf(1) is the only program with Unix socket capabilities. Ports using Unix sockets must be updated. Otherwise the system is compatible except accessing Unix sockets fails with ENOENT.Add split packages and cross-bootstrapping support to tix-build(8)
tix-build(8) has gained a number of features that will soon be required in order to build certain ports. In particular, it now supports the pkg.use-bootstrap, pkg.source-package, and pkg.alias-of variables; bugs in the pkg.subdir variable have been fixed; and a --source-directory option has been added. tix-build(8) must be upgraded before building ports using any of those features.cd /src/tix && make clean && make install
Add German keyboard layout
The kblayout-compiler(1) build tool has gained support for modifier combinations used by the German keyboard layout, and the new German keyboard layout relies on this. kblayout-compiler(1) must be upgraded before building the system.cd /src/kblayout-compiler && make clean && make install
Seed kernel entropy with randomness from the previous boot
Entropy from the previous boot is now stored in /boot/random.seed. The bootloader is supposed to load this file as a multiboot module with the command line option --random-seed. The kernel will issue a security warning if it was booted without a random seed, unless the kernel command line contains --no-random-seed. The GRUB port has been updated with an improved /etc/default/grub.d/10_sortix script that will automatically emit the appropriate GRUB commands.module /boot/random.seed --random-seed
Modernize carray(1) and fix missing allocation checks
The carray(1) build tool has gained the -EGHot options and the build system now relies on this. carray(1) must be upgraded before building the system.cd /src/carray && make clean && make install