{% extends "base.html" %} {% block title %}Wiki{% endblock %} {% block content %}

Overview

Buckos (Greek for "iron") is a modern Linux distribution written entirely in Rust. It draws inspiration from Gentoo Linux, particularly its powerful Portage package management system, while providing a clean, modern implementation.

Design Goals

  • Memory Safety: Leverage Rust's guarantees to eliminate entire classes of bugs
  • Performance: Compile-time optimizations and efficient runtime behavior
  • Simplicity: Clean, understandable codebase without legacy cruft
  • Flexibility: Source-based with fine-grained configuration options

System Architecture

Buckos is organized as a Rust workspace with several specialized crates:

Crate Purpose
buckos-package Package management, dependency resolution, and installation
buckos-boss Init system (PID 1) and service management
buckos-config System configuration parsing and management
buckos-model Data structures for packages, dependencies, and metadata
buckos-assist Help system and user documentation
buckos-tools Utility functions and common tools
buckos-web Website and documentation server

Package Manager

The Buckos package manager is inspired by Gentoo's Portage and provides similar functionality:

Key Features

  • Dependency Resolution: Advanced SAT-based dependency solving
  • USE Flags: Fine-grained control over package features
  • Slots: Multiple versions of packages installed simultaneously
  • Overlays: Custom package repositories
  • World Set: Track explicitly installed packages

Commands

# Emerge (install/update) packages
buckos-package emerge category/package

# Search packages
buckos-package search keyword

# Show package info
buckos-package info category/package

# Update world
buckos-package emerge --update --deep @world

# Unmerge (remove) packages
buckos-package unmerge category/package

# Dependency tree
buckos-package deptree category/package

Init System (boss)

The boss daemon serves as Buckos's init system, running as PID 1 and managing system services.

Features

  • Fast parallel service startup
  • Dependency-based service ordering
  • Simple service definition format
  • Socket activation support
  • Process supervision and restart

Service Files

Services are defined in /etc/buckos/services/:

# /etc/buckos/services/nginx.toml
[service]
name = "nginx"
description = "NGINX HTTP Server"
command = "/usr/sbin/nginx"
type = "forking"

[dependencies]
after = ["network"]
wants = ["network"]

Configuration System

Buckos uses a layered configuration system:

Configuration Hierarchy

  1. /etc/buckos/make.conf - Main system configuration
  2. /etc/buckos/package.*/ - Per-package overrides
  3. Environment variables - Runtime overrides

make.conf Options

# Compiler flags
CFLAGS="-O2 -pipe -march=native"
CXXFLAGS="${CFLAGS}"

# Number of parallel jobs
MAKEOPTS="-j8"

# Global USE flags
USE="X wayland pulseaudio -systemd"

# Video cards
VIDEO_CARDS="amdgpu radeonsi"

# Input devices
INPUT_DEVICES="libinput"

# Language support
LINGUAS="en en_US"

Package Format

Buckos packages follow a format similar to Gentoo ebuilds, but written in a TOML-based format:

Package Structure

# category/package/package-1.0.0.toml
[package]
name = "example"
version = "1.0.0"
slot = "0"
description = "An example package"
homepage = "https://example.com"
license = "MIT"

[source]
uri = "https://example.com/example-1.0.0.tar.gz"
checksum = "sha256:..."

[dependencies]
build = ["dev-util/cmake"]
runtime = ["sys-libs/glibc"]
optional = { feature = ["x11-libs/gtk"] }

[use_flags]
default = ["unicode"]
available = ["debug", "unicode", "feature"]

USE Flags

USE flags control which features are enabled when building packages:

Common USE Flags

Flag Description
X Enable X11 support
wayland Enable Wayland support
gtk Enable GTK+ toolkit support
qt5 Enable Qt5 toolkit support
systemd Enable systemd support (off by default)
debug Build with debug symbols
doc Build and install documentation

Setting USE Flags

# Global (in make.conf)
USE="X wayland gtk -systemd"

# Per-package (in /etc/buckos/package.use/custom)
www-client/firefox wayland geckodriver
media-video/mpv lua wayland

Contributing

We welcome contributions to Buckos! Here's how to get started:

Development Setup

# Clone the repository
git clone https://github.com/hodgesds/buckos.git
cd buckos

# Build in development mode
cargo build

# Run tests
cargo test

# Run clippy for linting
cargo clippy

Contribution Guidelines

  • Follow Rust coding conventions
  • Write tests for new functionality
  • Update documentation as needed
  • Keep commits focused and well-described
  • Open issues for discussion before major changes

Areas for Contribution

  • Package definitions
  • Documentation improvements
  • Bug fixes and testing
  • Performance optimizations
  • New features and enhancements

See our GitHub repository for more information.

{% endblock %}