CRUX
CRUX is a lightweight Linux distribution for the x86-64 architecture targeted at experienced Linux users.[1] It is designed with simplicity in mind, following the KISS principle, and is not based on any other distribution. The base system includes around 200 trimmed packages installed via a straightforward tar.gz-based package system, along with BSD-style initscripts for service management.[1] CRUX features a ports collection that allows users to easily build and install additional software from source, emphasizing transparency and up-to-date tools without unnecessary automation.[1] The project was founded in 2001 by Per Lidén and remains actively maintained by a volunteer team.[2] As of April 2025, the latest stable release is version 3.8.[3]History
Founding and Early Development
CRUX was founded in 2001 by Per Lidén, a Swedish software developer, as a personal hobby project aimed at creating a lightweight and customizable Linux distribution from scratch.[4] Dissatisfied with the complexity of existing distributions, Lidén sought to build a simple system that emphasized transparency, ease of maintenance, and user control, drawing inspiration from minimalist approaches seen in distributions like Slackware.[4] The project began as an experimental effort to learn Linux internals through repeated bootstrapping and manual builds, with Lidén announcing the first version on Freshmeat in June 2001.[2] The initial public release, CRUX 0.5, arrived in January 2001, targeting the i686 architecture and providing a bootable ISO with core components including Linux kernel 2.4.1, glibc 2.2.1, and gcc 2.95.3.[2] This version focused on simplicity for experienced users, featuring a tar.gz-based packaging system for straightforward installation and removal of software via tools like pkgadd and pkgrm.[4] Early development emphasized BSD-style initscripts to manage services in a clean, script-based manner, differentiating CRUX from RPM- and DEB-centric systems prevalent at the time.[2] Subsequent updates, such as CRUX 0.9 in July 2001 and 0.9.1 in October 2001, refined the base system with updated kernels and libraries while maintaining the minimalist ethos.[2] By late 2001, the project gained traction, leading to the formation of the CRUX Linux Community (CLC) in December to support collaborative development.[2] The release of CRUX 1.0 in December 2002 marked a stable milestone, incorporating Linux 2.4.20, glibc 2.3.1, and gcc 3.2.1, along with the introduction of a ports collection system in early 2002 to facilitate source-based package building.[2] This shift from a solo endeavor to a community-driven effort by 2002 allowed for broader contributions while preserving Lidén's vision of a streamlined distribution for advanced users.[4] Further refinements continued through 2003 with versions 1.1 to 1.3, solidifying CRUX's foundation before architectural expansions like x86-64 support in later years.[2]Major Milestones
In 2004, at CruxCon 2004, the CRUX Linux Community (CLC) and the main CRUX project merged, leading to the establishment of an official contrib ports collection. This collection, modeled after the FreeBSD Ports system, provided a centralized repository for source-based package builds, replacing earlier unmaintained efforts and enhancing community-driven software availability while preserving CRUX's emphasis on simplicity and user control.[5][6] On April 9, 2006, original developer Per Lidén announced his retirement from the project due to personal time constraints, marking a pivotal shift in CRUX's governance. The distribution transitioned to a community-led effort under the former CLC team, ensuring continued development through collaborative releases and maintenance without a single lead maintainer.[7][8] CRUX 3.0, released on January 18, 2013, introduced support for the x86-64 architecture, expanding from its original i686 focus to enable 64-bit computing while retaining a minimalistic design with Linux kernel 3.6.11, glibc 2.16, and gcc 4.7.2. This upgrade broadened hardware compatibility for modern systems without compromising the distribution's lightweight footprint.[2] The adoption of the Linux 5.x kernel series occurred with CRUX 3.6 on December 8, 2020, incorporating kernel 5.4.80 alongside glibc 2.32 and gcc 10.2.0, with optimizations focused on minimalism such as streamlined configurations and reduced dependencies to align with CRUX's KISS (Keep It Simple, Stupid) philosophy.[2] CRUX 3.7, released on September 26, 2022, updated to Linux kernel 5.15.55, glibc 2.36, and gcc 12.2.0, further enhancing stability and support for contemporary hardware while maintaining the distribution's core principles.[2] CRUX 3.8, released on April 21, 2025, introduced the Linux 6.x kernel series with kernel 6.12.23, glibc 2.40, and gcc 14.2.0, continuing the focus on lightweight, customizable computing for advanced users as of November 2025.[2]Features
Core Design Principles
CRUX embodies the KISS (Keep It Simple, Stupid) principle as its foundational philosophy, prioritizing simplicity in design and implementation to create a lightweight and maintainable Linux distribution. This approach manifests in a base system that occupies approximately 500 MB to 1 GB of disk space after installation, enabling users to build a functional environment without unnecessary bloat.[9] By focusing on essential components, CRUX avoids the inclusion of extraneous software, allowing for a streamlined setup that emphasizes efficiency and ease of understanding.[10] The distribution targets experienced Linux users who value manual control and customization, eschewing automated tools in favor of deliberate configuration to foster a deeper understanding of the system. This user-centric design encourages hands-on management, such as compiling the kernel and tailoring packages to specific needs, rather than relying on pre-configured defaults that might obscure underlying mechanics.[10] Configuration is handled through plain text files, such as/etc/rc.conf for system-wide settings, which promotes transparency and editability without proprietary formats or graphical interfaces.[10] By default, CRUX omits complex desktop environments, opting instead for lightweight window managers or none at all, to maintain a minimal footprint and support resource-constrained setups.[10]
Further reinforcing simplicity, CRUX employs BSD-style rc scripts located in /etc/rc.d/ for its initialization system, providing a straightforward, script-based method to manage services and boot processes. These scripts are human-readable and modifiable, aligning with the distribution's ethos of user empowerment and avoiding the opacity of more intricate init systems.[10] This commitment to unadorned tools ensures that system administration remains accessible and predictable for proficient users seeking full control.[10]
System Components
CRUX employs the Linux kernel as its core, with version 6.12.23 (a long-term support release) included in the 3.8 distribution, compiled specifically for the x86-64 architecture to support modern processors such as AMD Athlon 64, Intel Core, and Intel Atom or newer.[3][11] The kernel configuration provided during installation includes essential drivers built directly into the monolithic base, with additional modules available for loading, emphasizing a minimal set to align with the distribution's lightweight design while allowing customization for hardware needs.[12] The base system relies on GNU core utilities for essential command-line tools, providing full-featured implementations rather than compact alternatives, alongside glibc as the primary C standard library to ensure compatibility with standard Linux applications.[13][14] No initramfs is generated or required by default for basic installations where root filesystem drivers (such as ext4) are compiled into the kernel, though tools like dracut from the optional ports collection can be used to create one for modular or complex setups.[15] Booting follows a modular process supported by the GRUB bootloader, which is installed by default in either legacy BIOS or UEFI modes, enabling flexible configuration for multi-boot environments.[15] System initialization uses SysVinit, adapted with BSD-style rc scripts in /etc/rc.d/, for straightforward service management without advanced dependencies.[12] While no graphical user interface is pre-installed, reflecting the KISS principle of simplicity, lightweight window managers such as Openbox are readily available through the optional ports for users seeking a minimal desktop.[16]Installation
Prerequisites
CRUX installation requires hardware compatible with the x86-64 architecture, such as AMD Athlon 64, Intel Core, or newer processors; support for i686 (32-bit) was deprecated starting with version 3.0, which shifted focus to x86-64 as the primary target.[17][15] A minimum of 2 GB system memory is needed to install from DVD or USB flash drive, though custom chroot installations may work with less.[15] Disk space recommendations include at least 5 GB for the root partition, with additional space for swap depending on usage like hibernation or package building.[15] Users must possess familiarity with Linux command-line operations, disk partitioning tools like fdisk, filesystem creation with mkfs, and manual system configuration, as CRUX targets experienced administrators without graphical installers.[11][15] The official ISO image, crux-3.8.iso, is available for download from CRUX mirrors such as ftp.spline.inf.fu-berlin.de/pub/crux/ or ftp.cc.uoc.gr/mirrors/linux/crux, with a file size of approximately 1.6 GB.[18][19] Integrity should be verified using SHA256 checksums provided alongside the ISO on the mirrors, via commands like shasum -a 256 crux-3.8.iso.[15] Preparation involves backing up all important data on the target system, creating bootable media by writing the ISO to a USB drive or burning to DVD, and ensuring network access for fetching post-installation packages from repositories.[15] CRUX's minimalist design contributes to these modest hardware demands compared to more feature-heavy distributions.[11]Step-by-Step Guide
To begin the CRUX installation, download the official ISO image from the CRUX website and verify its integrity usingshasum -a 256 crux-3.8.iso to ensure it matches the provided checksum. Burn the ISO to a DVD or create a bootable USB flash drive, then boot the target system from this media by adjusting the BIOS or UEFI firmware settings to prioritize the optical drive or USB device. At the boot prompt, press Enter to load the live environment.[15]
Upon booting, the system enters a live environment where you log in as the root user on tty1 (virtual terminal 1) without requiring a password; this provides immediate access to a minimal Linux shell for performing the installation tasks. No graphical interface is available in this environment, emphasizing CRUX's lightweight and command-line-focused design.[15]
Next, prepare the disk for installation by partitioning it to suit your needs, typically using tools like [fdisk](/page/Fdisk) or cfdisk on the target device (e.g., fdisk /dev/sda). Create at least a root partition (e.g., /dev/sda1) and optionally a swap partition (e.g., /dev/sda2); for UEFI systems, use GPT partitioning and include a 100 MiB FAT32 EFI system partition (e.g., /dev/sda1). After partitioning, format the filesystems—for example, use mkfs.ext4 /dev/sda1 for the root partition and mkfs.swap /dev/sda2 for swap—then activate swap with swapon /dev/sda2. Mount the root partition to /mnt via [mount](/page/Mount) /dev/sda1 /mnt, and mount any additional partitions (e.g., /dev/sda3 to /mnt/var if separate).[15]
Extract the base system by running the setup script, which prompts for selection of core packages (opt/essential); choose the appropriate options and confirm extraction, ensuring the process completes with "0 error(s)" as indicated in the log file. This installs the minimal base system, including essential binaries and libraries, directly to the mounted root filesystem.[15]
Configure the system files within the new environment. Edit /etc/fstab to define mount points for all partitions, including entries like devpts /dev/pts devpts noexec,nosuid,gid=tty,mode=0620 0 0 for pseudo-terminals and the root filesystem (e.g., /dev/sda1 / ext4 defaults 0 1). For networking, edit /etc/rc.d/net to set interface details (e.g., ifconfig eth0 up and IP configuration), update /etc/hosts with the hostname and localhost mappings, and configure /etc/resolv.conf with nameserver addresses. Create a regular user account with useradd -m -G wheel username and set passwords for both root and the new user using passwd.[15]
To enable booting, enter the chroot environment for final setup: first mount necessary host filesystems with commands like mount --bind /dev /mnt/dev, mount --bind /proc /mnt/proc, mount --bind /sys /mnt/sys, and mount --bind /run /mnt/run, then execute chroot /mnt /bin/bash --login. Inside chroot, compile and install the kernel from /usr/src/linux-6.12.23 by running cd /usr/src/linux-6.12.23, make mrproper && make clean, make menuconfig to configure options, make all for compilation, make modules_install, cp arch/x86/boot/bzImage /boot/vmlinuz-6.12.23, and cp System.map /boot. Install the GRUB bootloader: for UEFI systems, mount the EFI partition to /boot/efi and run grub-install /boot/efi, then generate the config with grub-mkconfig > /boot/grub/grub.cfg; for legacy BIOS, use grub-install /dev/sda and the same grub-mkconfig command. Exit chroot with exit, unmount all filesystems (e.g., umount -R /mnt), and reboot the system by removing the installation media and issuing reboot.[15]
Package Management
Core Tools
The core package management in CRUX relies on the pkgutils suite, a set of lightweight utilities designed for handling binary packages with minimal overhead.[20] Developed by Per Lidén and licensed under the GNU GPL, pkgutils emphasizes simplicity by treating packages as plain archives without embedded metadata, aligning with CRUX's KISS principle of keeping interfaces small and straightforward.[21] The suite includes three primary tools: pkgadd for installation, pkgrm for removal, and pkginfo for querying package information.[20] pkgadd installs packages from tarball archives, such aspkgadd [bash](/page/Bash)#5.2.37-1.pkg.tar.gz, by extracting files to the filesystem while checking for conflicts to prevent overwrites; the -f flag forces installation if needed, and -u enables upgrades while preserving configuration files as defined in /etc/pkgadd.conf.[20] pkgrm removes installed packages, for example pkgrm [bash](/page/Bash), by deleting all files owned by the package without prompting for confirmation, ensuring a clean uninstallation.[20] pkginfo provides database queries, with options like -i to list all installed packages, -l to display files in a specific package, or -r to show reverse dependencies, aiding in system inspection.[20]
CRUX packages are simple tar.gz archives (also supporting bz2, lz, xz, or zst compression), named in the format <name>#<version>-<release>.pkg.tar.gz, containing the software files directly without proprietary formats.[20] Each package is accompanied by a .footprint file generated during creation with pkgmk, which lists expected files and permissions for integrity verification during installation or upgrades.[20]
For higher-level operations, prt-get serves as an official frontend to pkgutils, extending its capabilities with dependency awareness and update management while maintaining the underlying simplicity.[22] Key commands include prt-get install <package> for direct installation without resolving dependencies, and prt-get depinst <package> (e.g., prt-get depinst [xterm](/page/Xterm)) which automatically identifies and installs required dependencies from the ports tree.[22] The prt-get diff command compares installed packages against the ports tree to list outdated ones, facilitating targeted updates via prt-get update <package> or system-wide refreshes with prt-get sysup.[22]
Dependency resolution in CRUX remains manual at the pkgutils level, lacking an automated solver like APT's, where unmet dependencies cause build-time errors during package creation with pkgmk.[20] prt-get addresses this by providing tools such as prt-get depends <package> to view required libraries (e.g., bash depends on ncurses and readline) and prt-get quickdep for recursive dependency trees, allowing users to install prerequisites explicitly before proceeding.[22] This approach promotes user control but requires careful verification, such as checking for new dependencies after port updates.[22]
Ports Collection
The CRUX Ports Collection serves as the primary mechanism for building and installing software from source code, emphasizing user control and integration with upstream projects. It consists of a centralized directory at/usr/ports, which houses port definitions organized into distinct categories such as core (essential system utilities), opt (optional applications and libraries), xorg (X Window System components), and compat-32 (32-bit compatibility packages).[23] Each port is represented by a subdirectory named after the software package, containing essential files that guide the build process.[23]
At the heart of each port is the Pkgfile, a simple script that provides detailed build instructions, including the package name, version, source URL, download verification (via checksums), extraction commands, configuration options, compilation steps, and installation directives. This file enables precise control over the build environment, allowing users to apply custom patches, enable or disable features, and optimize for specific hardware through variables like CFLAGS or CXXFLAGS.[20] The pkgmk tool automates the package creation workflow by parsing the Pkgfile: it downloads the source archive if not present, unpacks it, executes the build steps in a temporary directory, and generates a relocatable binary package in the standard .pkg.tar.gz format, complete with metadata and integrity checks.[20]
This source-based approach offers several key advantages over binary distribution methods. Users can customize builds extensively—for instance, by setting compiler flags to enable optimizations or security hardening—ensuring packages align closely with system requirements and personal preferences. Reproducibility is enhanced, as identical Pkgfile instructions and source tarballs yield consistent results across machines, facilitating debugging and auditing. Additionally, ports allow CRUX systems to remain current with upstream developments by simply updating the port definitions and rebuilding, without relying on pre-compiled binaries that may lag behind.[23] In contrast to binary installations managed via tools like prt-get, the ports system prioritizes flexibility in source compilation.[23]
As of 2025, the Ports Collection encompasses over 1,000 ports across its official and contrib repositories, all maintained voluntarily by the CRUX development team and community contributors to ensure ongoing relevance and quality.[24]
Releases
Version Timeline
CRUX has maintained a deliberate release cadence, focusing on stability and integration of upstream advancements in the Linux ecosystem. Each version introduces targeted improvements to the toolchain, kernel, and ports system, reflecting the distribution's emphasis on lightweight, user-configurable design for experienced users. The following outlines the primary releases since the shift to x86-64 architecture, emphasizing seminal updates that enhanced performance, compatibility, and security.| Version | Release Date | Key Changes |
|---|---|---|
| 3.8 | April 21, 2025 | Updated to Linux kernel 6.12.23 (LTS) for improved hardware support and stability; multilib toolchain upgraded to glibc 2.40, GCC 14.2.0, and Binutils 2.43.1, with general x86-64 optimizations through updated libraries like libxcrypt and libbsd; enhancements to prt-get via integration with revdep for dependency resolution and sysup for system updates, alongside new rootfs repository support.[3] |
| 3.7 | September 26, 2022 | Linux kernel updated to 5.15.55 (LTS), providing long-term support and better driver integration; toolchain refreshed to glibc 2.36, GCC 12.2.0, and Binutils 2.39, with tools like cmake and meson moved to core for streamlined development workflows.[25] |
| 3.6 | December 8, 2020 | Security enhancements through updated libraries and removal of deprecated components like rpc/nsl in glibc; glibc upgraded to 2.32, now dependent on Python 3 in core; Xorg 7.7 and xorg-server 1.20.9 updates; kernel advanced to 5.4.80 (LTS) with multilib toolchain including GCC 10.2.0.[26] |
| 3.5 | June 11, 2019 | Linux kernel updated to 4.19.48, introducing improved scheduling and filesystem support; toolchain to glibc 2.28, GCC 8.3.0, and Binutils 2.32; addition of Linux-PAM to core ports for enhanced authentication, alongside UEFI boot improvements in the ISO image.[27] |
| 3.0 | January 18, 2013 | Introduced x86-64 architecture support, marking the transition from i686 and enabling 64-bit optimizations for modern hardware; kernel to Linux 3.6.11; multilib toolchain with glibc 2.16.0 and GCC 4.7.2, including a new compat-32 repository for legacy 32-bit applications.[17] |
Support and Upgrades
CRUX follows a release cycle of approximately every 2-3 years for major versions, as evidenced by the timeline from CRUX 3.5 in June 2019 to CRUX 3.8 in April 2025.[2] Security updates are provided through the ports system following each release, allowing users to build and install patched packages without a full system upgrade. Ports trees for older releases remain available and receive updates via the official repository.[10] Upgrading to a new major version of CRUX typically requires a full reinstallation, involving booting from the latest ISO, mounting the root partition, and running the setup script to rebuild essential packages and the kernel.[10] For minor updates or package refreshes within the same major version, users can perform incremental upgrades using theprt-get sync command to update the local ports tree and rebuild affected software.[28]
Community members occasionally provide backports for critical security fixes to older releases via the contrib ports collection, though these are not officially endorsed and require manual integration.[29]