<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Chimera Linux news</title>
<subtitle>Follow Chimera Linux news</subtitle>
<link href="https://chimera-linux.org"/>
<link type="application/atom+xml" rel="self" href="https://chimera-linux.org/atom.xml"/>
<updated>2026-10-07T22:05:57+00:00</updated>
<author>
    <name>Chimera Linux team</name>
</author>
<id>https://chimera-linux.org/</id>

<entry>
    <title>Creating distro build tooling for a small community</title>
    <link href="https://chimera-linux.org/news/2026/10/the-case-for-cbuild.html"/>
    <id>https://chimera-linux.org/news/2026/10/the-case-for-cbuild</id>
    <published>2026-10-07T00:00:00+00:00</published>
    <updated>2026-10-07T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>A lot of people have been commenting on this over time so I figured I would
put together a little post summarizing my thoughts on the matter and everything
else.</p>

<p>The post is going to be quite large. Every section can be read more or less
separately, but they are all connected to each other.</p>

<!--more-->

<h2 id="catering-to-the-community">Catering to the community</h2>

<p>Chimera is a small project. It exists primarily to serve its community and not
any external entity.</p>

<p>Making sure the maintenance cost is as low as possible is crucial. Chimera
and its tooling are designed to automate away most of the boring stuff and
make sure the packager’s job is pleasant and not bothersome. In a way, we
aim to empower every user to be a packager. The barrier of entry is meant
to be very low.</p>

<p>Some things that implies (I will try really hard to make this reasonable to
follow, unfortunately the years have left their mark and I might be taking
some assumptions for granted, so please bear with me; this also applies in
the later sections):</p>

<ol>
  <li>Everyone uses the same tools. Inefficient UX patterns are identified,
and either fixed, or <code class="language-plaintext highlighter-rouge">cbuild</code> is extended to mitigate them. Feedback is
taken into account.</li>
  <li>Everything is <code class="language-plaintext highlighter-rouge">cbuild</code>. One tool does everything, in a streamlined way.
Managing the repository, the build environment, the repo generation
and signing, even parts of the VCS handling and common maintenance tasks.
No external helper stuff.</li>
  <li>The remote build infrastructure just runs <code class="language-plaintext highlighter-rouge">cbuild</code> and not much else.</li>
  <li>The tooling does much of the bulk of making sure your packaging is
correct and clean, most issues are hard errors. Heavy sandboxing,
build environment consistency, unit tests by default, etc.</li>
  <li>You can run it on any Linux. If you run it on Chimera, you can immediately
test your work. You can take the repo and bring it somewhere else. That
also means the builder machines in the remote infra can run anything.</li>
  <li>Chimera is a collective effort. You are expected to share the stuff you
make, and get it upstreamed to us. The tooling is not intended for local
things that won’t get shared, and it provides no guarantees or obligations
for such usage; <code class="language-plaintext highlighter-rouge">cbuild</code> is a developer tool, not a user tool. But every
user can be a developer.</li>
  <li>The tooling should easy and straightforward to use, and fun. It should not
make things hard for you. Every user can be a maintainer. It shouldn’t
be unnceessarily intimidating. We don’t gatekeep here when possible.
You should also be having fun using the system and being here.</li>
  <li>You can replicate the entire remote infrastructure of the project on your
machine in an hour or something. You can replicate the heavy bulk of things
in like 5 minutes.</li>
  <li>The way things work is supposed to steer you towards implicitly doing the
right thing, and punish incorrect patterns by making them harder than the
correct ones. E.g. it’s really difficult or impossible to manually patch
files with regex, or to do internet-reaching stuff during the build, or to
touch the build environment filesystem. It’s really easy to manage patches
though, there are build styles for common build systems, there are fine
grained utility modules for doing all sorts of common annoying things,
etc.; the tooling also automatically checks your stuff for correct
formatting and other lint issues, validates your dependencies, validates
your metadata including minor things like whether your build dependencies
are sorted correctly and whether the SPDX license expression is correct
and lost of other nits, and so on.</li>
  <li>Extensive documentation for the build system and packaging.</li>
</ol>

<p>A common workflow setting up everything from scratch would look like so:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ # set up environment with your cports fork
$ git clone https://github.com/my-user/cports
$ cd cports
$ # prepare a signing key
$ ./cbuild keygen
$ # prepare a build environment
$ ./cbuild bootstrap
$ # write your template here; then build it
$ ./cbuild pkg user/my-cool-program
$ # make a branch for submission
$ git checkout -b my-cool-program
$ # automatically makes a commit with the correct message and all files included
$ ./cbuild commit user/my-cool-program
$ # push and publish PR with the link
$ git push origin my-cool-program
</code></pre></div></div>

<p>An update would be done like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ./cbuild bump-pkgver user/my-program 4.20.69
$ ./cbuild prepare-upgrade user/my-program
$ ./cbuild pkg user/my-program
$ ./cbuild commit user/my-program
$ git push
</code></pre></div></div>

<p>The tooling provides common utilities for keeping your local repository clean,
e.g. pruning packages and so on; it provides maintenance tools for bumping
versions and revisions, checking dependency graphs, checking for new versions
via update-check (which for most things distributed e.g. via common git forges
requires no extra effort or specialized code), checking if your local repository
can be unstaged against the remote one (verifying if you really rebuilt
everything that needs it), updating sha256 checksums in templates. It even
supports custom template-specific actions, such as building bootstrap tarballs
for compilers. It supports aliases for less typing.</p>

<p>Checking for if a package has an update:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ./cbuild update-check main/firefox
main/firefox: 157.0 -&gt; 157.0.1
</code></pre></div></div>

<p>It supports fun things when it comes to packaging bulk batches. For instance,
it integrates git:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ # build everything changed in your local commits
$ ./cbuild bulk-pkg git:origin/master..HEAD
$ # build a specific commit
$ ./cbuild bulk-pkg git:commithash
$ # build a range of commits but skipping stuff that has "test" in commit message
$ ./cbuild bulk-pkg git:from..to+!test
</code></pre></div></div>

<p>It supports common stuff, like</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ # build everything you have in your local repo that has a newer cports version
$ ./cbuild bulk-pkg status:outdated
</code></pre></div></div>

<p>There is a lot more that I could mention. I also wanted to talk about how
we got here, how we started, and how our infra works.</p>

<h2 id="personal-history">Personal history</h2>

<p>I started using Linux in 2006/7 and soon ended up on Debian as my long-term
operating system. Around the same time I started to seriously get into
programming and the intersection of that ended up being packaging for Debian.
Debian has a large bunch of tooling to deal with packaging and particularly the
community-driven approach really appealed to me so I maintained a bunch of
packages for a while. That lasted for some time until I drifted away towards
other things and eventually settled on FreeBSD.</p>

<p>During that time I didn’t do any work for the FreeBSD project itself but
I did experiment with various things that were adjacent, none of them going
anywhere in the end, but I did gain a lot of helpful experience on the way.</p>

<p>In 2016 I started messing around with Void Linux (particularly as I had to use
Linux on work computers) and around 2018 I ended up using the ppc64le (POWER)
platform for my workstation, which FreeBSD did not support at all at the time.
I was already familiar with Void and decided to start a ppc64le port, which
I maintained downstream until 2023 and gradually it expanded to support the
big endian ppc64 as well as the classic PowerPC. Doing the downstream work
led to me becoming an upstream Void maintainer as well and I took care of
the compiler toolchains among other things for several years and became
interested in improving the build tooling.</p>

<p>In 2021 I started the Chimera Linux project, which gradually got better and
more usable, and that led to me shifting entirely to that, deprecating the
POWER port of Void and resigning from the Void team in 2023.</p>

<h2 id="void-linux">Void Linux</h2>

<p>When I started using Void in 2016, it mainly caught my attention as a system
with a fairly low barrier of entry that did not get in my way, while still
being “normal” enough to act as a regular Linux system. Initially I found the
way e.g. runit worked in there interesting and in many ways fresh over classic
distros particularly in the pre-systemd era, while I found the post-systemd
era rather unfun and daunting in general.</p>

<p>This was also why I ended up picking Void for the ppc64le port, as it felt small
scope and approachable enough to give me a chance to reasonably maintain it by
myself, while also having a compact and easily reachable community that wasn’t
aligned with any particular commercial entity.</p>

<p>When I started the ppc64le port, I was already marginally familiar with the
build tooling of Void but only really properly picked it up for the port.</p>

<h2 id="getting-started-with-xbps-src">Getting started with xbps-src</h2>

<p>For someone coming from most other Unix-like systems, xbps-src is really nice.
In Void, all the packaging of the distro, along with the build tools, exists
in a singular Git repository (<code class="language-plaintext highlighter-rouge">void-packages</code>). In a way, this mirrors the
ports systems as they exist on the BSDs. However, the ports systems are based
around Makefiles and you interact with ports individually using <code class="language-plaintext highlighter-rouge">make</code> (with
various external ports management tools existing to simplify that, working
on top of that).</p>

<p>In Void, software is packaged using “templates”. Every piece of software
consists of a template containing metadata fields (you know, package name,
version, dependencies, source URLs, etc.) plus (optionally) functions that
define the logic of how a template is built, along with extra files that are
necessary for the build (not always) and patches (not always). The tooling
for building templates (<code class="language-plaintext highlighter-rouge">xbps-src</code> itself) also exists in this tree.</p>

<p>Unlike most other systems, when you build a package, the build process does
not run in the system you are running the build on. Instead, <code class="language-plaintext highlighter-rouge">xbps-src</code>
constructs a small container (using Linux namespaces) that represents a
minimized Void system, puts stuff in it according to the template metadata
(build dependencies and whatnot) and then runs the build. At the end, you
get a local repository of <code class="language-plaintext highlighter-rouge">xbps</code> packages that you can install from.</p>

<p>The general workflow looks like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git clone https://github.com/void-linux/void-packages
$ cd void-packages
$ # create the build container
$ ./xbps-src binary-bootstrap
...
$ # build the thing you want
$ ./xbps-src pkg some-program
...
</code></pre></div></div>

<p>The templates are similar to e.g. <code class="language-plaintext highlighter-rouge">PKGBUILD</code> format of Arch Linux or
<code class="language-plaintext highlighter-rouge">APKBUILD</code> format of Alpine, but those do not use the containerized
approach (at least not always).</p>

<p>The <code class="language-plaintext highlighter-rouge">xbps-src</code> system is a collection of Bash scripts, and technically
the templates are also just Bash scripts, but with a set of expectations
so they in general do not utilize the full extent of the syntax and features.</p>

<p>When working as a packager, you basically just create a new directory in the
<code class="language-plaintext highlighter-rouge">srcpkgs</code>, put your template in it along with other stuff, build it, and
then you have a repo you can install it from. If you wish to submit it
upstream, you create a branch, commit it, and create a pull request.
Someone will take a look at it, and if it gets merged, the central build
infrastructure picks it up and shortly it becomes available in the central
repository.</p>

<p>The system neatly decouples build dependencies and runtime dependencies, with
runtime dependencies typically scanned automatically from ELF files and their
metadata as well as other file types, so the template specifies whatever it
needs in the build environment but the runtime dependency list is largely
automatic.</p>

<p>The system supports “build styles” so you can e.g. declare that a template
uses the GNU Autotools, or Meson, or Cargo, or whatever, and it takes care
of most of the groundwork, allowing for templates that are often declarative
without any build logic, lowering that barrier of entry.</p>

<p>It also supports cross-compiling really well, letting you cross-build most
of the repository to any other architecture. That’s neat, but often sloppy,
and cross-built packages end up with subtle brokenness that native packages
would not have, due to build systems subtly not passing certain checks and
so on. You also can’t run unit tests for projects when cross compiling them,
in most cases.</p>

<p>The system also has a really handy <code class="language-plaintext highlighter-rouge">update-check</code> mechanism which will scrape
upstream URLs and find version infos in them, then present you with any updates
that may have happened since the last template version update. The project has
a nightly job which generates a summary once per day, letting packagers stay
on top of things.</p>

<h2 id="upstream-build-infrastructure-of-void">Upstream build infrastructure of Void</h2>

<p>The build infrastructure of Void consists of several computers (each handling
a different architecture port) that are plugged as workers into the central
orchestrator, using the <a href="https://buildbot.net/">Buildbot</a> software. It will
receive updates from the Git repository (<code class="language-plaintext highlighter-rouge">void-packages</code>), collect a batch
from the changes, figure out the correct order, and use <code class="language-plaintext highlighter-rouge">xbps-src</code> to build
the packages.</p>

<p>It will also sign the packages with the right keys. This is a separate step
that <code class="language-plaintext highlighter-rouge">xbps-src</code> does not handle (the output is unsigned). Eventually, things
make it in the upstream repository and get mirrored.</p>

<p>The way the Buildbot is managed I can’t tell you much because I never saw
much into it. The admins have an infrastructure that is based on Ansible,
Terraform, and a bunch of other pieces that are put together in ways unfamiliar
to me. Additionally, <code class="language-plaintext highlighter-rouge">xbps-src</code> does not do the batch sorting for you, so
other pieces of the process have to do it. Things outside the <code class="language-plaintext highlighter-rouge">void-packages</code>
repository itself are relatively opaque.</p>

<p>When I maintained the POWER port, I had my own set of scripts to keep things
going and did not reuse any of the Void infrastructure at all. This was likewise
opaque and purpose-built for my port.</p>

<h2 id="starting-chimera">Starting Chimera</h2>

<p>In early summer of 2021, I started Chimera. The initial push for me was that
I wanted to experiment with a different userland setup, as well as have a more
personal project to work on without having to deal with others’ efforts and
pre-existing work, but also I wanted to try out my own take on the build system.</p>

<p>There were some initial points I was unhappy with in <code class="language-plaintext highlighter-rouge">xbps-src</code> while
maintaining the POWER port.</p>

<ol>
  <li>The shell-based system was way too slow. Parsing the complete collection
of templates in the repository would take potentially as much as half an
hour, and there weren’t other ways to introspect the templates. Therefore,
my tooling would call into <code class="language-plaintext highlighter-rouge">xbps-src</code> and employ various caching tricks
to make things manageable.</li>
  <li>The shell-based system was very often fairly sloppy, letting various wrong
behaviors through. For instance, network access is permitted through the
whole build, there is nothing ensuring consistency of the build container
after the build is done (the entire thing is read-write and the template
can do whatever it wants), the correctness lints for the resulting packages
are fairly slim, the ELF scan step and other things would take an eternity
due to slow shell code, and limited opportunities for doing more due to
shell being excessively slow.</li>
  <li>A lot of useful tooling is separate from the main system and maintained
in the <code class="language-plaintext highlighter-rouge">xtools</code> repository, including extra lints and so on. This is not
mandatory or anyhow verified however.</li>
  <li>Lots of sloppy templates resulting from the prior points. E.g. the templates
are often littered from manual in-place <code class="language-plaintext highlighter-rouge">sed</code> calls and similar rather than
using proper patches (which leaves in calls that eventually no longer do
anything due to upstreams changing), patches are applied very fuzzily which
occasionally results in subtly mispatched things, and so on.</li>
  <li>The Void project does not run per-template unit tests (typically the test
suite of the software being packaged) on builders, which would catch a lot
of errors, particularly on <code class="language-plaintext highlighter-rouge">musl</code> targets and so on. It does run them in
pull request CI, but I do not see this as enough. Often the check runs of
templates are poorly maintained and broken.</li>
  <li>The Void project cross-compiles all architectures other than <code class="language-plaintext highlighter-rouge">x86_64</code> and
<code class="language-plaintext highlighter-rouge">i686</code>, resulting in the other-arch ports being notably lower quality.</li>
  <li>Void has a wonky staging system. When large batch changes are being done,
the repos may end up in a strange state for a while and users are advised
to avoid upgrading until everything is finished. It has a rudimentary
staging system which prevents the repos from being changed while a big
batch is being rebuilt for changes shared library SONAMEs, this works only
for shared libraries however, which means packagers will often forcibly
stage the repo for a batch rebuild, then do stuff in several commits,
wait for everything to clear, then unstage the repos. Various parts of
the related infrastructure are also lacking, such as clearing obsolete
and removed packages from the repos, which is/was done manually.</li>
</ol>

<p>There are others but these were my main gripes.</p>

<p>Chimera started with its build system. Many experiments were done. Initially,
<code class="language-plaintext highlighter-rouge">cbuild</code> was a ground-up rewrite of <code class="language-plaintext highlighter-rouge">xbps-src</code>, using Python. In <code class="language-plaintext highlighter-rouge">cbuild</code>,
the templates are also Python scripts, but through low-level bits that Python
allows, don’t always look as such. It came with a very minimal set of initial
packages that was basically a basic Void-like <code class="language-plaintext highlighter-rouge">chroot</code>, using <code class="language-plaintext highlighter-rouge">xbps</code> as its
package manager. Thus <code class="language-plaintext highlighter-rouge">cports</code> was born.</p>

<p>There were two initial goals:</p>

<ol>
  <li>Make it fast. I should be able to parse several thousands of build templates
and dump all their metadata in under a second, rather than many minutes.
Chimera currently achieves this.</li>
  <li>Make it strict. No network starting with configure step. Read-write access
only in the build directory (and destination directory for install step)
and full consistency of the build container guaranteed at all times.
Heavy linting and straight up denying various misbehaviors at all times.
Sandboxing done with namespaces only, using Bubblewrap (<code class="language-plaintext highlighter-rouge">bwrap</code>). The
<code class="language-plaintext highlighter-rouge">cbuild</code> system runs outside the sandbox (in your host environment) while
any calls to the build system of the project being built are sandboxed.</li>
  <li>Make it highly portable, with Python (no external modules), Bubblewrap,
and Git, along with the package manager binary, being the only dependencies.
You can use <code class="language-plaintext highlighter-rouge">cports</code> on any Linux system with the basic dependencies.</li>
  <li>Make it able to do everything <code class="language-plaintext highlighter-rouge">xbps-src</code> can do, but better.</li>
</ol>

<p>Chimera started with the <code class="language-plaintext highlighter-rouge">ppc64le</code> target only, being developed on a POWER
workstation. Over time, as things cleared up more, more targets were added,
along with additional goals and other changes.</p>

<p>Over the next months, the core packaging started to become more defined,
settling on the userland tooling and other things, as well as transitioning
from <code class="language-plaintext highlighter-rouge">xbps</code> to <code class="language-plaintext highlighter-rouge">apk</code>. The original idea was to use <code class="language-plaintext highlighter-rouge">pkg</code> from FreeBSD, but
this proved to not be ready for our style of use at the time, and upstream
suggested that we’re best off using something else.</p>

<p>Fundamentally, using <code class="language-plaintext highlighter-rouge">cbuild</code> in the basic sense feels similar to <code class="language-plaintext highlighter-rouge">xbps-src</code>.
The big difference is that <code class="language-plaintext highlighter-rouge">cbuild</code> signs everything, not needing a separate
step, and no unsigned packages are allowed. Therefore, initial setup looks
more like</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ # generate your signing key
$ ./cbuild keygen
$ # bring up the container
$ ./cbuild bootstrap
$ # package whatever you want
$ ./cbuild pkg main/firefox
</code></pre></div></div>

<h2 id="settling-on-apk">Settling on apk</h2>

<p>We didn’t stay on <code class="language-plaintext highlighter-rouge">xbps</code> for very long. Soon, the switch happened to <code class="language-plaintext highlighter-rouge">apk</code>.</p>

<p>Using <code class="language-plaintext highlighter-rouge">apk</code> brought over various benefits.</p>

<ol>
  <li>Unlike <code class="language-plaintext highlighter-rouge">xbps</code> which is driven by ad-hoc logic, <code class="language-plaintext highlighter-rouge">apk</code> has a real dependency
solver. This means way fewer surprising behaviors and way fewer workarounds
and less effort needed from packagers to make sure that users’ systems do
not break in surprising ways.</li>
  <li>Handling of stuff like shared libraries is way nicer in <code class="language-plaintext highlighter-rouge">apk</code>. In <code class="language-plaintext highlighter-rouge">xbps</code>,
dependencies are driven purely by name, and shared library providers and
requires have separate metadata fields. These will get checked and <code class="language-plaintext highlighter-rouge">xbps</code>
will not permit things to proceed if unmatched, but dependencies are done
by name. When a package is being built, the system will consult this massive
central file (<code class="language-plaintext highlighter-rouge">common/shlibs</code>) matching SONAMEs to package names to generate
dependencies on top of the shlib metadata. This results in poor UX (you
cannot match the shlib providers etc. in the same way as names when e.g.
installing) and is inflexible as it’s limited to shared libraries. In <code class="language-plaintext highlighter-rouge">apk</code>,
virtual packages are used instead, so you e.g. provide <code class="language-plaintext highlighter-rouge">so:libfoo.so.1=1</code>
as a virtual package name. You can then search by this name, install by
this name, etc. and it can be used for other types as well, e.g. <code class="language-plaintext highlighter-rouge">cmd:foo</code>
(<code class="language-plaintext highlighter-rouge">apk add cmd:i-know-command-name-but-not-package-name</code>) and others.
That also means more things can participate in the staging system on the
build system side. And no central mappings, as the build system can easily
query things from the repository.</li>
  <li>Unlike <code class="language-plaintext highlighter-rouge">xbps</code>, <code class="language-plaintext highlighter-rouge">apk</code> has real support for triggers. Triggers in <code class="language-plaintext highlighter-rouge">xbps-src</code>
are emulated with package scripts. As an example, consider e.g. updating
fonts cache. The <code class="language-plaintext highlighter-rouge">fontconfig</code> package has a trigger (which is a script) and
metadata to run the cache update when <code class="language-plaintext highlighter-rouge">/usr/share/fonts</code> is modified in any
way. Then when something modifies the directory, the trigger will run at the
end of the transaction, after all filesystem changes are done. In <code class="language-plaintext highlighter-rouge">xbps</code>,
you can only have scripts that run before or after a package changes and
are owned by the package; <code class="language-plaintext highlighter-rouge">xbps-src</code> emulates triggers by checking if the
package contains a directory that would drive the trigger and if it does,
insert a call in its package script; that means if several packages change
the fonts, each of them contains a cache update script, which will run
several times (and not at the end). This means things become quite slow
for large triggers and the transaction breaks atomicity (because the shell
script run in the middle of the transaction, rather than at the end, needs
all prior things committed to the final filesystem location).</li>
</ol>

<p>There were others, but these are notable.</p>

<h2 id="building-an-infrastructure-and-a-new-core-tenet">Building an infrastructure and a new core tenet</h2>

<p>Building the infrastructure was interesting. We ended up using Buildbot again,
after some deliberation and original intent to build a new orchestrator from
scratch. There is an important distinction in our buildbot, however.</p>

<p>I wasn’t happy with the opaqueness of Void’s infrastructure, and with the way
it does so much work beyond <code class="language-plaintext highlighter-rouge">xbps-src</code>. I declared an entire new rule that goes:</p>

<p><strong>What the packager runs exactly matches what the remote build machine runs.</strong></p>

<p>The build steps of Chimera’s infrastructure go approximately like this:</p>

<ol>
  <li>Central orchestrator is poked by a webhook that a change in <code class="language-plaintext highlighter-rouge">cports</code> has
happened. It does not matter what change.</li>
  <li>Central orchestrator tells worker machines in the fleet (one per arch)
that <code class="language-plaintext highlighter-rouge">cports</code> has changed. It does not tell them what.</li>
  <li>Worker machines pull their copy of <code class="language-plaintext highlighter-rouge">cports</code>. It does not matter what
has changed.</li>
  <li>Worker machines update the build container (<code class="language-plaintext highlighter-rouge">./cbuild bootstrap-update</code>).
This updates the core packages of the container to match the repository.</li>
  <li>Worker machines run <code class="language-plaintext highlighter-rouge">./cbuild bulk-print-ver status:unbuilt</code>. This generates
a list of all packages along with their versions that are present in <code class="language-plaintext highlighter-rouge">cports</code>,
can be built, and are not already built in the repository. This step is
separate only for the purpose of presenting it to packagers in the Buildbot
UI, so that you can have a separate view for each package being built and
so on. This list is correctly sorted. Each entry is saved in a Buildbot
variable, again for the purpose of presentation mainly.</li>
  <li>Each entry in the list from the prior step is built. The result is already
signed and ready to be used, but for now remains in stage area.</li>
  <li>An unstage step is attempted. If any provider is removed in the new
packages (e.g. something rebuilds and stage provides <code class="language-plaintext highlighter-rouge">so:libfoo.so.2</code>
while the original provider was <code class="language-plaintext highlighter-rouge">so:libfoo.so.1</code>) and there is still any
package depending on the old name, the unstage will fail. That ensures that
all reverse dependencies are always rebuilt as necessary before publishing.
On successful unstage, the staging area is merged into the repository.</li>
  <li>Repository is pruned for outdated stuff.</li>
  <li>Repository syncs to the final primary mirror. First, changed packages get
uploaded in one step, then indexes are replaced, and only then old packages
are deleted. This is to ensure that users don’t end up with any index that
contains packages not present yet.</li>
</ol>

<p>Steps 4, 5, 6 can be condensed together into a single <code class="language-plaintext highlighter-rouge">cbuild</code> command:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ ./cbuild bulk-pkg status:unbuilt
</code></pre></div></div>

<p>The main tricky part with batch builds like that is correct sorting. Imagine
having packages A and B in the bulk that you want to build. There is a package
C, which A depends on, and which depends on B. Since that makes B in the
dependency tree of A (through A-&gt;C-&gt;B), B needs to be built first. You do not
know this by knowing only A and B, since C is not in the batch.</p>

<p>Since <code class="language-plaintext highlighter-rouge">cbuild</code> is very fast and can parse the entire collection very quickly
without caching, it can consider all the intermediates and do a proper sorted
graph trivially. It can also simply parse every template to consider whether
it’s buildable, and match it against the repo state. Therefore, on every build,
it can always do that from scratch and the orchestrator has to do nothing,
with each step being largely independent of the other.</p>

<p>The build fleet doesn’t do anything else. There is other auxiliary infra, such
as our IRC commit bot (which announces changes driven by a webhook) and our
nightly update-check equivalent to Void, letting packagers stay on top of
things.</p>

<p>In general, <strong>everything</strong> that any piece of our infrastructure does can be
easily done locally.</p>

<p>Our fleet is self-hosted. The orchestrator and most builders run on Chimera
host systems, but they don’t have to. Currently these are:</p>

<ol>
  <li>The <code class="language-plaintext highlighter-rouge">x86_64</code> machine, which is a 16-core EPYC root server at Netcup,
running Chimera.</li>
  <li>The <code class="language-plaintext highlighter-rouge">aarch64</code> machine, which is an 80-core Ampere Altra, running Chimera,
owned by me.</li>
  <li>The <code class="language-plaintext highlighter-rouge">ppc64le</code> machine, which is an 18-core/72-thread POWER9, running Chimera,
owned by me.</li>
  <li>The <code class="language-plaintext highlighter-rouge">loongarch64</code> machine, which is a Loongson 3A6000 4-core/8-thread,
likewise running Chimera, owned by me.</li>
  <li>The <code class="language-plaintext highlighter-rouge">riscv64</code> machine, which is a Milk-V Pioneer 64-core machine kindly
provided to us by Zach van Rijn of Adélie Linux, running Fedora.</li>
</ol>

<p>The builders do not publicly face the Internet, the orchestrator does, on
its own machine. The primary repository is also on its own separate machine.
Each architecture has its own signing key.</p>

<h2 id="final-words">Final words</h2>

<p>All of this may possibly even be a bit too long and too much to take in.
Therefore, I will end it here and hope that I have not forgotten anything.
I hope this was interesting to read and I didn’t bore you to death, and
that it wasn’t unnecessarily difficult to follow.</p>

<p>As always, you can ask anything on our IRC.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>Plans to possibly retire the big-endian PowerPC/POWER platforms</title>
    <link href="https://chimera-linux.org/news/2026/03/retiring-powerpc.html"/>
    <id>https://chimera-linux.org/news/2026/03/retiring-powerpc</id>
    <published>2026-03-13T00:00:00+00:00</published>
    <updated>2026-03-13T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>Unless circumstances change, we are planning to retire support for the
big-endian 32-bit PowerPC and 64-bit POWER platforms. Read below for
when and why and how you can potentially change this.</p>

<p>Note that this is not about ppc64le, which is not affected by this.</p>

<!--more-->

<h2 id="reasons">Reasons</h2>

<p>We’ve been supporting these platforms in Chimera since a while back,
with ppc64 being suppported in repos since the middle of 2023 and 32-bit
ppc a while later.</p>

<p>We brought up the platform support to give people interested in the platform
a base to bring the platform towards greater usability and fix the long-standing
bugs that plague it. This has not happened, and so far things have been getting
very slowly worse instead.</p>

<p>Occasionally users come in looking to test it and often expect a fully working
platform but generally quickly lose interest when faced with various issues
and in the end nothing gets fixed.</p>

<p>For instance, it has not been possible to run a working GPU either platform
for several years, due to unfixed regressions in Mesa, requiring use of the
old Amber branch to get these working (which most people opt for and which
also ends up counter-productive for fixing things upstream).</p>

<p>Likewise, there has not been an up to date web browser, and things are looking
to regress further e.g. with WebKit having adopted Skia for rendering (WebKit
was the sole web engine left where rendering didn’t have broken colors).</p>

<p>We don’t have a dedicated maintainer for the platform and so far I (q66) have
been working on keeping things at least building but I don’t have the resources
or motivation or real interest in keeping this going.</p>

<p>Our build infrastructure for this is also lacking, with both platforms being
built on a single virtual machine hosted at OSUOSL. The performance is for most
part acceptable but e.g. we’re frequently running out of disk space as the
repos grow as the machine is barely capable of hosting two sets of repos.</p>

<p>I have some POWER9 hardware that could be set up as a build machine to fix
this but I’m not sure if this is worth running if I’m going to be the only
person giving this attention, so for now this is not going to happen.</p>

<h2 id="timeframe">Timeframe</h2>

<p>Therefore, in order to lighten my workload I plan to retire the repositories
and builders by July 2026.</p>

<p>In the meantime, if someone steps up and is willing to dedicate time and
resources to maintaining things well, actually using it, and fixing the
issues that make it unusable for most people, I am willing to retract this
decision and set up a better builder, but only if it actually seems like there
is a future for the platform in the distro.</p>

<p>If not, the repositories will be removed after the middle of the year, along
with packaging only relevant for these platforms (such as mesa-amber).</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images</title>
    <link href="https://chimera-linux.org/news/2025/12/new-images.html"/>
    <id>https://chimera-linux.org/news/2025/12/new-images</id>
    <published>2025-12-20T00:00:00+00:00</published>
    <updated>2025-12-20T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>The 20251220 set of images is now published.</p>

<p>This is an incremental refresh.</p>

<!--more-->

<h2 id="changes">Changes</h2>

<p>This set has been overdue for a while so it mainly comes as
an update with new versions.</p>

<p>This set is based on kernel 6.18 and comes with latest versions
of desktop environments and most other software.</p>

<p>Newly, the live images will not automatically import LVMs and
ZFS pools, as that was found to be unintuitive and sometimes
system-breaking (with ZFS-on-root setups).</p>

<p>Additionally, the images now come with an experimental TUI
installer. It can be invoked as <code class="language-plaintext highlighter-rouge">chimera-installer</code> from the
command line.</p>

<p>The installer supports the following:</p>

<ul>
  <li>Local and remote installs</li>
  <li>APK mirror setup, with up to date mirror list fetched from the repo</li>
  <li>Basic setup (hostname, timezone, root password, user account)</li>
  <li>Installing extra packages</li>
  <li>Kernel version selection</li>
  <li>Bootloader setup (GRUB and systemd-boot, including BIOS/EFI/OF)</li>
</ul>

<p>It does not support the following:</p>

<ul>
  <li>Disk partitioning and formatting</li>
  <li>And probably a lot of other things</li>
</ul>

<p>You are expected to partition, format, and mount your filesystem
layout beforehand and then point the installer to the mounted root.
This is by design and will remain that way, however a separate tool
for simplified disk setup may be provided later on.</p>

<p>However, it does validate your mounted filesystem tree for baseline
correctness, performs detection of system-specific things (like ESP)
and automatically generates <code class="language-plaintext highlighter-rouge">crypttab</code> for encrypted setups (this is
rudimentary so if you use keyfiles or other advanced things you need
to tweak it afterwards).</p>

<h2 id="next-images">Next images</h2>

<p>The next set will come early next year with some more major changes.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images</title>
    <link href="https://chimera-linux.org/news/2025/04/new-images.html"/>
    <id>https://chimera-linux.org/news/2025/04/new-images</id>
    <published>2025-04-20T00:00:00+00:00</published>
    <updated>2025-04-20T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>The 20250420 set of images is now published.</p>

<p>This is an incremental refresh with some major changes.</p>

<!--more-->

<h2 id="changes">Changes</h2>

<p>There are some major changes in how the images are set up.</p>

<p>One is that EFI/BIOS images now use the Limine bootloader for the
image itself, instead of GRUB. This does not affect what bootloader
is used for the installed system (that is the user’s choice) but
it’s the first step towards moving GRUB to the <code class="language-plaintext highlighter-rouge">user</code> repository
eventually.</p>

<p>The PowerPC/POWER images still use GRUB. For installed systems,
the recommended choice is <code class="language-plaintext highlighter-rouge">systemd-boot</code> on EFI and GRUB elsewhere,
Limine does not yet have distro integration.</p>

<p>The x86 images newly use MBR for best compatibility with all hardware.</p>

<p>Architecture support has been expanded. On top of the existing archs
from before (AArch64, PowerPC, POWER LE/BE, RISC-V, x86_64) we now
ship images for the LoongArch64 architecture.</p>

<p>The AArch64 image list has been expanded, with Rock64 and QuartzPro64
being added.</p>

<p>Various fixes have been made; notably, issues with cross-device links
and local installs with separate <code class="language-plaintext highlighter-rouge">/boot</code> should be gone, and <code class="language-plaintext highlighter-rouge">apk</code>
will no longer segfault when network connection is unavailable.</p>

<p>Everything has been updated and the images come with kernel 6.14,
GNOME 48, Plasma 6.3.4, and a variety of updated software.</p>

<h2 id="planned-changes">Planned changes</h2>

<p>For the next image set we plan to provide images for mobile phones
and generally more mobile packaging.</p>

<p>Additionally, the ARMv7 architecture will be introduced to the builders
and then to release images.</p>

<p>Device SD images will automatically grow their root partition and
filesystem on first boot from next time but this has not yet been
deployed.</p>

<p>Additionally, Limine will get distro integration and will become a
convenient option for installation.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>Not dropping RISC-V support after all (maybe)</title>
    <link href="https://chimera-linux.org/news/2025/03/new-riscv-server.html"/>
    <id>https://chimera-linux.org/news/2025/03/new-riscv-server</id>
    <published>2025-03-20T00:00:00+00:00</published>
    <updated>2025-03-20T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>As circumstances have changed, we are not dropping RISC-V repos
for the time being. Instead, newly rebuilt repositories are introduced,
built on hardware, with tests.</p>

<p>This support is provisional for now, with the new builder still being
evaluated to see how it holds up in the long term.</p>

<!--more-->

<h2 id="the-situation-now">The situation now</h2>

<p>Shortly after announcing the drop, we were offered remote access to
a Milk-V Pioneer machine by <a href="https://zv.io">Zach van Rijn</a> of Adélie
Linux. This machine was originally intended for another purpose which
never ended up materializing.</p>

<p>I proceeded to do a full world rebuild on this machine, after some
environment setup to allow our infra bits to run. This world rebuild
is now finished, and makes up the new repository.</p>

<p>For most part, it was relatively stable during the build (we had to
build our own kernel to prevent the draft RVV 0.7 in the CPU from
interfering, and there were two crashes but it was also under total
continuous load the whole time).</p>

<p>The performance is fairly acceptable, though nowhere near my original
idea of being similar to Cortex-A72; the cores are more comparable
to Cortex-A55 in practical performance, especially since we have to
disable vectors. As there is still 64 of them, most of the large
projects build fairly fast (anything written in Rust builds very
slowly, however).</p>

<p>By now, the original repositories have been replaced, and the new
machine is plugged into the infrastructure. Do keep this in mind when
upgrading existing installations, and use the <code class="language-plaintext highlighter-rouge">--available</code> flag with
<code class="language-plaintext highlighter-rouge">apk</code> (every package in your system will be reinstalled).</p>

<p>Either way, we will continue to monitor the builds and see how the
new machine holds up. If it works well, it will stay; if significant
issues arise, we might end up dropping the architecture after all,
at least until something significantly better is available.</p>

<p>The current repository is in the same tier as the LoongArch64 repo.
The specifics are very similar - i.e. no LTO, tests on and enforced.
The overall coverage is also fairly equivalent.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>Dropping RISC-V support</title>
    <link href="https://chimera-linux.org/news/2025/03/dropping-riscv.html"/>
    <id>https://chimera-linux.org/news/2025/03/dropping-riscv</id>
    <published>2025-03-12T00:00:00+00:00</published>
    <updated>2025-03-12T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p><strong>UPDATE March 20 2025:</strong> The architecture is not being dropped
for now after all. See the newer article for details.</p>

<p>The next set of images will drop RISC-V support. The builder is
currently still going but within the next few days it will stop,
and the repositories will stay in place but frozen.</p>

<p>Nothing will change in packaging (the build profile will remain,
template support where present will remain, cross-toolchains will
remain) but there will be no more updates to the repo for the
foreseeable future.</p>

<!--more-->

<h2 id="the-situation">The situation</h2>

<p>The initial plumbing for RISC-V was added in the distro in July 2021
and repos later in the year, i.e. it has been there almost from the
start. During all this time, the builds have been supported by doing
so on an x86_64 machine with <code class="language-plaintext highlighter-rouge">qemu-user</code> binfmt emulation coupled with
transparent <code class="language-plaintext highlighter-rouge">cbuild</code> support for this.</p>

<p>The reason for doing it this way was that there wasn’t any hardware
we could use for performance reasons; I had obtained a SiFive HiFive
Unmatched board in October 2021 and this proved to be useless for
builds as the performance of this board is similar to Raspberry Pi 3.
Other boards came later, but none of them improved on that front
significantly enough.</p>

<p>This was expected to be a temporary state that would resolve itself
within 2-3 year time; it is Q1 2025, and the options are the following:</p>

<ul>
  <li>HiFive P550 that was released recently has performance similar to
Raspberry Pi 4 and is unsuitable for the task; this board was originally
supposed to be released several years ago as part of the SiFive and Intel
collaboration (Horse Creek) but now got released with a Chinese SoC instead</li>
  <li>Milk-V Pioneer is a board with 64 out-of-order cores; it is the only of
its kind, with the cores being supposedly similar to something like ARM
Cortex-A72. This would be enough in theory, however these boards are hard
to get here (especially with Sophgon having some trouble, new US sanctions,
and Mouser pulling all the Milk-V products) and from the information that
is available to me, it is rather unstable, receives very little support,
and is ridden with various hardware problems.</li>
  <li>Things based on Spacemit K1 (e.g. Milk-V Jupiter) have an 8-core SoC that
is technically an out-of-order design, but in practice the per-core
performance is reportedly even worse than the JH7110, so it is unsuitable.</li>
  <li>Boards based on JH7110 (e.g. VisionFive 2, the new Framework board etc.)
utilitze 4 U74 cores (same configuration as my HiFive unmatched) that are
simple in-order designs and therefore are unsuitable (similar to RPi3).</li>
  <li>My HiFive Unmatched, which is the same situation as above.</li>
  <li>Other available cores are usually much worse than any of the above.</li>
</ul>

<p>The promising option (Milk-V Oasis with 16 SiFive P670 cores) that was
first announced in 2023 ultimately ended up being canned due to issues
the SoC vendor has, and nobody has ever seen a single production chip,
let alone a board. As far as I can tell, no other options are coming up.</p>

<p>It is unsustainable to stick with the current situation with the emulator.
Doing so has numerous problems:</p>

<ul>
  <li>We could never actually run tests on the packages being built, because
the emulator is unreliable and will result in false positive failures.
Disabling stuff conditionally for RISC-V is not a viable option because
they are not RISC-V issues and will always happen with emulation, so
all the RISC-V packages were being built without tests.</li>
  <li>It is very slow, being by far the slowest builder in our fleet. It is
still several times faster than e.g. the JH7110 would build things. The
performance is actually rather variable; things that can parallelize
really well run at a fairly reasonable speed due to being able to spawn
many emulators, while things like configure scripts that are single
thread and fork a lot run very slowly. Either way, overall, it is much
slower than any of the other builders, despite RISC-V being until the
introduction of LoongArch64 builds the only architecture with no LTO.</li>
  <li>Most importantly, it is unreliable. The <code class="language-plaintext highlighter-rouge">qemu</code> emulator likes to hang
during various workloads, with the emulator going into sleep state and
remaining there forever. When that happens, the builds have to be
manually canceled and restarted (it is not deterministic). This used
to be worse before before some fixes, but even with latest version of
the emulator it still happens, particularly during Go builds (since
we rebuild every Go program upon toolchain updates for secfixes,
any such rebuild can require many manual cancelations and restarts).</li>
  <li>It burns a ton of power for how slow it is, because it fully loads
a beefy x86 machine, and I’m not happy at all about that.</li>
</ul>

<p>At this point, to have a relatively sustainable base, we’d need a board
that is at least as powerful as Raspberry Pi 5. This would still make
the slowest builder in the fleet, but it would likely be faster than
the current emulation arrangement while also being more reliable.</p>

<p>However, the industry does not seem to be interested in producing such
machines and for most part focuses on embedded (low-end) as well as
things entirely irrelevant to a distro (AI/NPU etc.) that do not help
at all; at this point I don’t think we can wait any longer, especially
as no remedy has been announced.</p>

<p>We have no such problem with the other architectures; obviously x86 and
ARM are at this point mainstream and this does not surprise anyone, but
even the likes of LoongArch have perfectly acceptable hardware (not the
fastest, but also not a bottleneck) that performs reliably.</p>

<h2 id="will-risc-v-support-be-reintroduced">Will RISC-V support be reintroduced?</h2>

<p>If acceptable build hardware is released and is reasonably available to
us, the architecture will be reintroduced.</p>

<p>If that happens, the repositories will be rebuilt from scratch, as if
a new architecture, with a process similar to how it was recently done
with LoongArch64. It will be a tier-2 architecture with enforced tests
and without LTO just like LoongArch64.</p>

<p>However, whether or when that will happen is currently a big unknown
due to such hardware not existing and nothing being even announced.</p>

<p>Nothing will change in the other architecture support. The new tier
list will be:</p>

<ul>
  <li>Tier 1 for <code class="language-plaintext highlighter-rouge">aarch64</code>, <code class="language-plaintext highlighter-rouge">ppc64le</code>, and <code class="language-plaintext highlighter-rouge">x86_64</code></li>
  <li>Tier 2 for <code class="language-plaintext highlighter-rouge">loongarch64</code></li>
  <li>Tier 3 for <code class="language-plaintext highlighter-rouge">ppc64</code> and <code class="language-plaintext highlighter-rouge">ppc</code></li>
</ul>

<p>There is also some chance of ARMv7 and ARMv6 32-bit repositories being
introduced in the next few months’ timeframe, as we may be moving to
an oversized Ampere Altra machine for all ARM builds (right now AArch64
is served by a Hetzner Cloud VM and can’t take any more load). This is
yet not set in stone, however.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images</title>
    <link href="https://chimera-linux.org/news/2025/02/new-images.html"/>
    <id>https://chimera-linux.org/news/2025/02/new-images</id>
    <published>2025-02-14T00:00:00+00:00</published>
    <updated>2025-02-14T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>The 20250214 set of images is now published.</p>

<p>This took longer than originally expected but there have been
major changes that warranted waiting a bit longer for it.</p>

<!--more-->

<h2 id="changes">Changes</h2>

<p>The images come with a fresh version of <code class="language-plaintext highlighter-rouge">apk-tools</code>. This version
finally supports several features that we began using, particularly
variable expansion and being able to migrate most of its files into
a system-wide <code class="language-plaintext highlighter-rouge">/usr</code> location.</p>

<p>That means you finally have a way to properly change your mirror
of choice without having to mess with the repository definitions.
The process of doing that is in the relevant documentation section.</p>

<p>The repository definitions have been updated to use the new v3-style
index naming, though backwards compatibility is also provided.</p>

<p>Kernel 6.13 is used in the new images. That means updated hardware
support and other things.</p>

<p>Both the GNOME and Plasma images (the latter is still experimental)
come with the latest versions of their respective desktop environments.</p>

<p>Various fixes have been made to allow the live system to work better
and more seamlessly on more machines.</p>

<p>Additionally, 32-bit PowerPC images are now a standard release architecture
and included in the batch. We have some plans to also introduce support
for the LoongArch64 ISA, which may join them next time.</p>

<p>Due to all of these changes as well as updates in the infrastructure,
this new set is the recommended baseline for installation. Older images
have an out of date package manager and installation scripts, which may
be problematic with the current layout.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>Entering beta</title>
    <link href="https://chimera-linux.org/news/2024/12/entering-beta.html"/>
    <id>https://chimera-linux.org/news/2024/12/entering-beta</id>
    <published>2024-12-27T00:00:00+00:00</published>
    <updated>2024-12-27T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>Today we have updated <code class="language-plaintext highlighter-rouge">apk-tools</code> to an <code class="language-plaintext highlighter-rouge">rc</code> tag. With this,
the project is now entering beta phase, after around a year
and a half.</p>

<!--more-->

<h2 id="what-actually-changes">What actually changes?</h2>

<p>In general, this does not actually mean much, as the project
is rolling release and updates will simply keep coming. It is
more of an acknowledgement of current status, though new images
will be released in the coming days.</p>

<h2 id="changes-since-alpha">Changes since alpha</h2>

<p>At the point of entering alpha, the <code class="language-plaintext highlighter-rouge">cports</code> tree had roughly
1000 templates, most of them in <code class="language-plaintext highlighter-rouge">main</code>. There was a single
large desktop (GNOME) and a single major web browser (Firefox)
and an assortment of other software.</p>

<p>At this point, the tree contains ~2800 templates, i.e. almost 3x
more. We have all major desktop environments, all major browsers,
and overall much larger collection of both small and large programs.</p>

<p>The repo was also at ~6000 commits at the time, by 11 authors; now
it’s almost 20000 commits, by over 100 authors.</p>

<p>Significant under-the-hood improvements have been made in service
management, our build infrastructure, the <code class="language-plaintext highlighter-rouge">cbuild</code> build system
which is now significantly more powerful and has much better UX,
global switch to the <code class="language-plaintext highlighter-rouge">mimalloc</code> allocator, stateless <code class="language-plaintext highlighter-rouge">/var</code> and
progress towards stateless <code class="language-plaintext highlighter-rouge">/etc</code>, improvements in core userland,
introduction of <code class="language-plaintext highlighter-rouge">libdinitctl</code>, introduction of <code class="language-plaintext highlighter-rouge">sd-tools</code>,
and a lot more.</p>

<h2 id="infrastructure-situation-and-sponsorship">Infrastructure situation and sponsorship</h2>

<p>Currently, we support 5 architectures (<code class="language-plaintext highlighter-rouge">aarch64</code>, <code class="language-plaintext highlighter-rouge">ppc64le</code>, <code class="language-plaintext highlighter-rouge">ppc64</code>,
<code class="language-plaintext highlighter-rouge">riscv64</code>, <code class="language-plaintext highlighter-rouge">x86_64</code>), 3 being tier-1 (<code class="language-plaintext highlighter-rouge">aarch64</code>, <code class="language-plaintext highlighter-rouge">ppc64le</code>, <code class="language-plaintext highlighter-rouge">x86_64</code>).</p>

<p>This list will likely remain stable in 2025. The infrastructure is
self-funded and we control all of it. Besides the unsatisfactory
RISC-V situation, all of the machines are sufficient.</p>

<p>It would be nice to introduce CI for more architectures during next
year, particularly AArch64.</p>

<p>Chimera is a FOSS project and therefore does not and will not take
donations, and is driven by its community. However, for the past half
a year, I (q66) have been working on the project through my employment
at Igalia, thanks to a contract with Rubicon Communications, LLC
(aka Netgate). This collaboration will continue during 2025 and
is a significant help and a boost for the project’s progress, as it lets
me dedicate much more time.</p>

<p>Therefore, huge thanks to Netgate for giving me this opportunity.</p>

<h2 id="plans-for-2025">Plans for 2025</h2>

<p>During 2025, some notable things will be coming too:</p>

<ul>
  <li>Complete system logging overhaul</li>
  <li>Support for mount units in service management</li>
  <li>Support for network mounts in service management</li>
  <li>Better cgroups support and progress towards removal of elogind</li>
  <li>Support for service-based timers</li>
  <li>Overhaul of service configuration files</li>
  <li>Switch to dbus-broker as the system and session bus provider</li>
</ul>

<p>And likely much more than that. On the infrastructure side, we
plan to automate more things, and introduce better build hardware
for the RISC-V architecture if possible, as right now it is a
major bottleneck.</p>

<h2 id="upcoming-images">Upcoming images</h2>

<p>A new image set will be released before end of the year to match
this announcement. They will come with various fixes and a new
version of <code class="language-plaintext highlighter-rouge">apk-tools</code>.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images and welcoming new committers</title>
    <link href="https://chimera-linux.org/news/2024/12/new-images-committers.html"/>
    <id>https://chimera-linux.org/news/2024/12/new-images-committers</id>
    <published>2024-12-04T00:00:00+00:00</published>
    <updated>2024-12-04T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>As of 04 December 2024 new images have been published.</p>

<p>While there weren’t originally supposed to be any more images
before reaching the beta phase, a new apk feature proved to
be necessary.</p>

<p>Other than that, it’s an incremental refresh with software
updates.</p>

<!--more-->

<h2 id="new-committers">New committers</h2>

<p>We have two new committers, Jami Kettunen (deathmist) and
Isaac Freund (ifreund). Both have been a part of our community
for a long time and are active contributors; congratulations :)</p>

<p>Unfortunately, another of our contributors, nekopsykose, has
left the project recently. We thank her for being a part of
the community and all of the work over the years and wish her
the best.</p>

<h2 id="changes">Changes</h2>

<p>The <code class="language-plaintext highlighter-rouge">apk-tools</code> package manager has been updated again, ahead
of implementing a new kernel backup system. New static binaries,
new OCI images, and other things have also been updated to use
this new version of <code class="language-plaintext highlighter-rouge">apk</code>.</p>

<p>That means this image set is now the minimum that can be used
to perform new installations, unless you update <code class="language-plaintext highlighter-rouge">apk-tools</code>
in the live environment beforehand.</p>

<p>Various software has been updated. Linux kernel 6.12 is now the
default, most notably.</p>

<p>The ISOs now have a bootable partition in the protective MBR.
That means compatibility with certain x86 BIOS machines should
be better.</p>

<h2 id="upcoming-changes">Upcoming changes</h2>

<p>This is likely the last update before entering the beta phase,
for real this time.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images</title>
    <link href="https://chimera-linux.org/news/2024/10/new-images.html"/>
    <id>https://chimera-linux.org/news/2024/10/new-images</id>
    <published>2024-10-27T00:00:00+00:00</published>
    <updated>2024-10-27T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>As of 27 October 2024 new images have been published.</p>

<p>These are an incremental refresh with new software,
as well as new image types. They bring various minor changes.</p>

<!--more-->

<h2 id="changes">Changes</h2>

<p>The most notable change is a major update of <code class="language-plaintext highlighter-rouge">apk-tools</code>. From
now on, we will start requiring changes that were made to it,
so using older images to install is no longer supported.</p>

<p>Experimentally, KDE Plasma ISO images are now available alongside
the GNOME images. The GNOME images are based on GNOME 47, while
the KDE images use Plasma 6.2.</p>

<p>Additionally, the ISO images now use EROFS for its root file system
instead of SquashFS. This brings increased compatibility and increased
performance while in the live environment, in exchange for a minor
increase in image size.</p>

<p>Last but not least, the “force console” GRUB options are now gone
in the graphical ISOs, but the functionality is not. Adding <code class="language-plaintext highlighter-rouge">nogui</code>
to kernel command line in GRUB’s editor will achieve the same.</p>

<h2 id="upcoming-changes">Upcoming changes</h2>

<p>This is likely the last update before entering the beta phase.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>Welcoming a new committer</title>
    <link href="https://chimera-linux.org/news/2024/07/welcome.html"/>
    <id>https://chimera-linux.org/news/2024/07/welcome</id>
    <published>2024-07-12T00:00:00+00:00</published>
    <updated>2024-07-12T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>Since <code class="language-plaintext highlighter-rouge">@triallax</code> has been doing a bunch of excellent work
in addition to being a great community member, we have decided
to grow the cports committers list a bit.</p>

<p>Additionally, <code class="language-plaintext highlighter-rouge">@nekopsykose</code> is now a project owner, so it’s
no longer just <code class="language-plaintext highlighter-rouge">@q66</code>.</p>

<p>Congrats to both :)</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images</title>
    <link href="https://chimera-linux.org/news/2024/07/new-images.html"/>
    <id>https://chimera-linux.org/news/2024/07/new-images</id>
    <published>2024-07-07T00:00:00+00:00</published>
    <updated>2024-07-07T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>As of 07 July 2024 new images have been published.</p>

<p>These are an incremental refresh with new software.
They bring various minor changes.</p>

<!--more-->

<h2 id="changes">Changes</h2>

<p>The biggest visible change is that <code class="language-plaintext highlighter-rouge">core</code> and <code class="language-plaintext highlighter-rouge">minimal</code>
rootfs tarballs are no longer distributed; you are expected
to use either the <code class="language-plaintext highlighter-rouge">full</code> or <code class="language-plaintext highlighter-rouge">bootstrap</code> tarballs. Any regular
installation is expected to use the <code class="language-plaintext highlighter-rouge">base-full</code> metapackage
at very least (unwanted components can be removed by masking
them in the <code class="language-plaintext highlighter-rouge">apk</code> world file).</p>

<p>The images are still based on GNOME 46 and kernel 6.6, but with
all latest updates pulled in.</p>

<p>Otherwise, the images represent 3 months of software updates
in <code class="language-plaintext highlighter-rouge">cports</code>, which are reflected here.</p>

<h2 id="upcoming-changes">Upcoming changes</h2>

<p>Before the beta release, there will be at least one more image
refresh. The beta release is expected most likely during the
fall this year.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images</title>
    <link href="https://chimera-linux.org/news/2024/04/new-images.html"/>
    <id>https://chimera-linux.org/news/2024/04/new-images</id>
    <published>2024-04-21T00:00:00+00:00</published>
    <updated>2024-04-21T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>As of 21 April 2024 new images have been published.</p>

<p>These are mainly an incremental refresh. They bring a variety of
package updates and minor quality of life improvements, and
most importantly updated <code class="language-plaintext highlighter-rouge">apk-tools</code>.</p>

<!--more-->

<h2 id="changes">Changes</h2>

<p>The graphical images are based on GNOME 46 and Linux kernel 6.6,
alongside a variety of up to date software, such as the LLVM 18
toolchain.</p>

<p>The <code class="language-plaintext highlighter-rouge">apk</code> package manager in this set fully supports the <code class="language-plaintext highlighter-rouge">zstd</code>
compression. The distribution will start rolling out packages
compressed with <code class="language-plaintext highlighter-rouge">zstd</code> in the coming days (no world rebuild will
happen yet but newly built packages will be compressed with it).</p>

<p>The installer scripts had minor changes done in them, some of them
user-visible. Notably, <code class="language-plaintext highlighter-rouge">chimera-chroot</code> will now alter the prompt
to be less confusing, and it makes bind-mounted pseudo-filesystems
properly unmountable.</p>

<p>The ISOs are newly based on GRUB 2.12. If this causes any regressions,
please report them. All the ISO images were tested on their respective
architectures without any issues found.</p>

<p>The MNT Reform images have been dropped. The packaging of the bootloader
was unsatisfactory (done from binary builds) and there haven’t been any
opportunities to figure out a proper source build. Additionally, the
vendor now seems to be favoring newer SOMs by default. If you are
interested in maintaining support for this or any other hardware,
please reach out to us on one of the official channels.</p>

<h2 id="upcoming-changes">Upcoming changes</h2>

<p>There will be at least one more refresh before beta. Beta will likely
come with a world rebuild, which means <code class="language-plaintext highlighter-rouge">zstd</code> for all packages.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>2024 image refresh</title>
    <link href="https://chimera-linux.org/news/2024/01/image-refresh.html"/>
    <id>https://chimera-linux.org/news/2024/01/image-refresh</id>
    <published>2024-01-22T00:00:00+00:00</published>
    <updated>2024-01-22T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>The images have been refreshed yet again.</p>

<p>Most importantly these bring the 6.6 LTS kernel, an upgrade from
the 6.1 series (except Raspberry Pi images, which have their own
kernel) alongside minor user experience improvements.</p>

<!--more-->

<h2 id="changes">Changes</h2>

<p>We have upgraded the LTS kernel series from 6.1 to 6.6. Meanwhile,
the installable “stable” kernel is now at 6.7.x.</p>

<p>Raspberry Pi images had their firmware updated, so wireless networking
and Bluetooth should work equally well on 3, 4, and 5.</p>

<p>The apk package manager got a fix which likely resolves the issue when
some directories were very rarely created with 000 permissions. This
is not yet verified however, as the issue was not reproducible and
therefore it is not possible to verify it.</p>

<p>Minor user experience improvements include support for <code class="language-plaintext highlighter-rouge">fstab</code> <code class="language-plaintext highlighter-rouge">LABEL=</code>
and the likes for swap devices, support for timedated/localed/hostnamed
D-Bus services (mainly benefits GNOME) thanks to the openrc-settingsd
project from Gentoo/postmarketOS, various package updates, more atomic
apk transactions thanks to deployment of sysusers.d and tmpfiles.d,
chimerautils fixes (e.g. <code class="language-plaintext highlighter-rouge">stdbuf</code> command now works properly), the
<code class="language-plaintext highlighter-rouge">lsinitramfs</code> and <code class="language-plaintext highlighter-rouge">unmkinitramfs</code> commands have been fixed, the <code class="language-plaintext highlighter-rouge">cryptsetup</code>
initramfs scripts have their module copying fixed, Python 3.12, and a
ton of other things.</p>

<h2 id="upcoming-changes">Upcoming changes</h2>

<p>We will likely introduce an installer in one of the future images,
likely before beta release.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images again</title>
    <link href="https://chimera-linux.org/news/2023/12/new-images-again.html"/>
    <id>https://chimera-linux.org/news/2023/12/new-images-again</id>
    <published>2023-12-27T00:00:00+00:00</published>
    <updated>2023-12-27T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>A new set of images has been released once again.</p>

<p>This is once again a refresh without any major functionality
changes outside of new software; but it does bring important changes
to apk-tools as well as out of the box support for Raspberry Pi 5. It
comes with GNOME 45 and kernel 6.1.</p>

<!--more-->

<h2 id="changes">Changes</h2>

<p>As far as live-specific changes go, the strange GRUB message about
“booting in blind mode” should now be gone. This was always harmless
but was causing confusion in some users.</p>

<p>Additionally, the version of apk-tools available in these images comes
with full support for xattr metadata. That means we will stop using
post-install scripts for this in repo packages and instead migrate to
this. That means you should always install from at least this version
of the images from now on - older images may not work correctly for
installations.</p>

<p>Raspberry Pi 5 is now supported in the Raspberry Pi images. The support
has been present in cports since October and you could always generate
your own image with chimera-live, but now there is no need to as the
available images will work.</p>

<p>Outside of that, a lot of software has been updated, which affects the
live image as well. Most notably, this means using GNOME 45 now.</p>

<h2 id="upcoming-changes">Upcoming changes</h2>

<p>This is a transitional set. The next set of images will probably come
in relatively near future; this will bring some more major changes,
for instance the Linux 6.6 kernel (which will become the new LTS) as
well as quite possibly an installer and support for zstd in packages
instead of zlib/deflate.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images</title>
    <link href="https://chimera-linux.org/news/2023/09/new-images.html"/>
    <id>https://chimera-linux.org/news/2023/09/new-images</id>
    <published>2023-09-15T00:00:00+00:00</published>
    <updated>2023-09-15T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>A new set of images has been released once again.</p>

<p>This is mostly a refresh. The previous images still work fine for
installation. These new images bring updated software, and a few
other functional changes.</p>

<!--more-->

<h2 id="major-updates">Major updates</h2>

<ol>
  <li>The <code class="language-plaintext highlighter-rouge">dinit-chimera</code> core service set has been overhauled.</li>
  <li>NTP is active by default in the live images, so you will get
correct date/time even without RTC as long as connected to the
network.</li>
  <li>To avoid having files with timestamps in the future on hardware
without an RTC, the new <code class="language-plaintext highlighter-rouge">swclock</code> service will synchronize time
to at least a specific timestamp.</li>
  <li>PipeWire is now always implicitly active if present.</li>
  <li>The GNOME images no longer come with an X11 server (outside of
XWayland). It can still be installed from the contrib repo.</li>
  <li>HDMI audio should now work universally, as well as sound on
some laptops and devices such as the Steam Deck.</li>
  <li>And various minor changes.</li>
</ol>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>Entering alpha stage</title>
    <link href="https://chimera-linux.org/news/2023/06/entering-alpha.html"/>
    <id>https://chimera-linux.org/news/2023/06/entering-alpha</id>
    <published>2023-06-11T00:00:00+00:00</published>
    <updated>2023-06-11T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>Today marks the day when the project enters the alpha phase. This
has some implications, though it is not a release per se, considering
Chimera is a rolling distribution; let’s take a look at what it means
for potential users and contributors.</p>

<!--more-->

<h2 id="so-what-does-it-mean">So, what does it mean?</h2>

<p>Simply put, having entered the alpha phase means that the project is
somewhat more ready to deal with users and potential repository
expansion. A great deal of work has been done in all areas since
the last update, and the distribution is now a lot more stable,
with better infrastructure, and so on.</p>

<p>Of course, since it’s a mere alpha, it does not mean the system is
considered stable per se. There may still be large-scale changes
eventually (hopefully for the better) but early adopters may now
consider actually daily-driving the system, and we are ready for
the repositories to grow.</p>

<p>This phase is expected to last about a year. Obviously, it is not
possible to create a distribution from scratch and immediately mark
it stable. The current biggest things in the way are:</p>

<ol>
  <li>There isn’t enough software in general</li>
  <li>Major improvements are still planned for service management</li>
  <li>Documentation needs work in all areas</li>
  <li>And obviously a lot of testing</li>
</ol>

<p>During the next year, it is planned that those things (and others)
will be addressed and the project will move towards beta.</p>

<p>In summary, the current state of the project means it’s daily-driveable
and can be gradually updated without significant manual fixups, but
there may still be bugs, missing documentation, and some things may
still change at conceptual level.</p>

<h2 id="infrastructure">Infrastructure</h2>

<p>The distribution finally has proper infrastructure now. This means:</p>

<ol>
  <li>Central build system (using Buildbot), taking care of automatically
building and publishing packages for all supported architectures,
and native builders for each.</li>
  <li>Continuous integration for pull requests.</li>
  <li>Package repository browser with advanced filtering and search.</li>
  <li>Nightly global update-check for packagers.</li>
</ol>

<p>Thanks to all this, there is now streamlined workflow for adding new
packages and updating existing ones, making it a significantly lesser
effort.</p>

<h2 id="cports-updates-since-last-post">Cports updates since last post</h2>

<p>There has been a huge amount of changes since. A summary of these
includes:</p>

<ol>
  <li>Userland based on FreeBSD 13.2.</li>
  <li>All existing packages have been updated to their latest versions.</li>
  <li>LLVM 16 is now the system toolchain.</li>
  <li>GNOME 44 is the primary desktop environment.</li>
  <li>Qt6 toolkit is now present in the repositories.</li>
  <li>OpenJDK 17 Java is now in the repositories.</li>
  <li>Flatpak support.</li>
  <li>Several large pieces of software such as Thunderbird, GIMP, Inkscape,
LibreOffice, QEMU, OpenMW, Xonotic, Sauerbraten, etc. are now present.</li>
  <li>Smaller useful software such as Chrony, htop, Deluge, Weechat, Neovim,
Dino, Rsync, and others.</li>
  <li>The option of latest stable Linux kernel branch in addition to latest
LTS branch.</li>
  <li>The cports repository now features more than 1000 templates in <code class="language-plaintext highlighter-rouge">main</code>
and <code class="language-plaintext highlighter-rouge">contrib</code>, with more than 22000 total packages.</li>
</ol>

<p>This list is not exhaustive.</p>

<h2 id="new-images">New images</h2>

<p>This update comes with a new set of images. The main improvement is
streamlined installation thanks to new <code class="language-plaintext highlighter-rouge">chimera-install-scripts</code> package.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>New images</title>
    <link href="https://chimera-linux.org/news/2023/03/new-images.html"/>
    <id>https://chimera-linux.org/news/2023/03/new-images</id>
    <published>2023-03-06T00:00:00+00:00</published>
    <updated>2023-03-06T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>As of today, a new set of images has been released. This is following
the complete world rebuild that has been going on the last few days.</p>

<p>The new images are therefore generated from these new packages, and
are the last images that are released before the alpha release.</p>

<!--more-->

<h2 id="world-rebuild">World rebuild</h2>

<p>The world rebuild has been successful and mostly uneventful on all
architectures. There aren’t any or many updated versions, as that
will happen after this.</p>

<p>However, it is very important that the rebuild has happened for the
alpha release that will come soon after this.</p>

<h2 id="updates-since-last-post">Updates since last post</h2>

<p>A lot of the work since the last update has been on cleanups and
overall quality. Overall, a summary:</p>

<ol>
  <li>The hardening overhaul fallout has been mostly addressed. There
may be some crashes left, which will be dealt with over the next
few weeks.</li>
  <li>The login stack has been switched from <code class="language-plaintext highlighter-rouge">util-linux</code> to <code class="language-plaintext highlighter-rouge">shadow</code>.</li>
  <li>Various service management fixes and cleanups.</li>
  <li>Overhaul of <code class="language-plaintext highlighter-rouge">console-setup</code> to uses non-XKB keymaps by default,
removing base system dependency on Perl.</li>
  <li>Chimerautils has been tagged, and various new tools have been
ported (e.g. <code class="language-plaintext highlighter-rouge">locate</code>, <code class="language-plaintext highlighter-rouge">whereis</code>, <code class="language-plaintext highlighter-rouge">script</code>, <code class="language-plaintext highlighter-rouge">logger</code>, <code class="language-plaintext highlighter-rouge">cal</code>,
and others) and many others have been written from scratch.</li>
  <li>Util-linux has been split up, and much less of it is now
installed by default. Several new <code class="language-plaintext highlighter-rouge">chimerautils</code> tools
replace its various functionality.</li>
  <li>Base metapackages have been cleaned up.</li>
  <li>The system has been switched from <code class="language-plaintext highlighter-rouge">eudev</code> to <code class="language-plaintext highlighter-rouge">systemd-udev</code>.</li>
  <li>Support for kernel <code class="language-plaintext highlighter-rouge">efibootmgr</code> hook for automatic EFISTUB
boot entries.</li>
  <li>Automatic ZFS root detection has been fixed for GRUB, and
there is now a new tool to detect root for U-Boot menu and
other places.</li>
  <li>Overhaul of <code class="language-plaintext highlighter-rouge">agetty</code> handling, with support for config files
to specify various parameters such as baud rate.</li>
  <li>Our system toolchain now defaults to <code class="language-plaintext highlighter-rouge">-fno-semantic-interposition</code>.</li>
  <li>The <code class="language-plaintext highlighter-rouge">apk</code> package manager will not mess up early permissions anymore,
simplifying binary bootstrapping.</li>
</ol>

<p>This is not an exhaustive list.</p>

<h2 id="new-images">New images</h2>

<p>The new images are mostly an incremental refresh, to allow for cleaner
installations that do not update thousands of packages. There have
been some notable improvements too, however:</p>

<ol>
  <li>The new tools <code class="language-plaintext highlighter-rouge">chimera-live-bootstrap</code> and <code class="language-plaintext highlighter-rouge">chimera-live-chroot</code>
to simplify installations.</li>
  <li>Much improved detection of serial terminals, which means in a lot
of cases it is not even necessary to specify a <code class="language-plaintext highlighter-rouge">console=</code> anymore.
If the kernel is configured to output to serial in any way, the
respective <code class="language-plaintext highlighter-rouge">agetty</code> service will be configured, if it exists.</li>
  <li>The graphical images now use <code class="language-plaintext highlighter-rouge">networkmanager</code> by default.</li>
</ol>

<h2 id="upcoming-alpha">Upcoming alpha</h2>

<p>Up next is updating our packages to their latest versions, as a lot of
stuff in the repository is by now fairly out of date. Various minor
improvements will be done while doing this, and issues reported with
the new images will be addressed.</p>

<p>The alpha release should then come a few weeks from now, definitely
during March.</p>

<p>The release will mark the next stage of the project, where adventurous
people will be able to pick it up as their daily driver, and expansion
of the package set can begin.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>Chimera at FOSDEM 2023 and the path towards alpha</title>
    <link href="https://chimera-linux.org/news/2023/01/roadmap-updates.html"/>
    <id>https://chimera-linux.org/news/2023/01/roadmap-updates</id>
    <published>2023-01-16T00:00:00+00:00</published>
    <updated>2023-01-16T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>It has been a while without an update post, so perhaps it’s time to
refresh things a little.</p>

<p>No news does not mean progress hasn’t been happening; there has been
a continuous stream of commits in <code class="language-plaintext highlighter-rouge">cports</code> as well as other parts of
the project, so I will do my best to summarize it as well as provide
an updated overview of what’s going to happen.</p>

<!--more-->

<h2 id="fosdem-2023">FOSDEM 2023</h2>

<p><a href="https://fosdem.org">FOSDEM 2023</a> is happening once again with an
in-person format, as usual in Brussels, on the first weekend of
February, which is the 4th and 5th this time. I will be giving a
<a href="https://fosdem.org/2023/schedule/event/chimera_linux">talk</a> about
Chimera, this time in the BSD devroom (huge thanks to the organizers
for letting me have a slot, despite this project being a Linux system).</p>

<p>I will give a general overview of the project, our progress since last
FOSDEM, as well as what’s planned for the future, and perhaps more,
in the form of a full length talk (we have a 50 minute slot). The
devroom changes into the LLVM devroom right afterwards, which is
fitting considering we are also using the LLVM toolchain.</p>

<h2 id="cports-progress-since-last-post">Cports progress since last post</h2>

<p>The previous post was at the beginning of November, which is two and
a half months ago. Since then, there has been a lot of updates in
the project. Here are the main highlights, in chronological order.</p>

<ol>
  <li>A general refresh of packaging templates, with everything being
updated to its most recent version.</li>
  <li>Our suite of Dinit services, <code class="language-plaintext highlighter-rouge">dinit-chimera</code> has received a complete
overhaul. Besides being more fine-grained, it also provides a cleaned
up targets system, better thought-out configuration, and better
integration.</li>
  <li>Full-disk encryption is now supported, besides a variety of other
initramfs improvements, which includes better support for LVM,
root on ZFS and others.</li>
  <li>CKMS, our kernel module source build system that replaces DKMS,
got an initial release, and no longer conflicts with binary
modules (so you can have binary ZFS for some kernels while
letting CKMS manage it for others without interfering).</li>
  <li>We now use a custom version of the musl libc, which uses Scudo
(a part of LLVM and default in Android/Fuchsia) as the system
allocator (malloc implementation). This brings significantly
better performance in multithreaded scenarios.</li>
  <li>A big overhaul of kernel packaging, alongside Linux 6.1, which
is the new baseline version. The new packaging brings support
for kernel backups on upgrades besides other things.</li>
  <li>Cbuild hardening overhaul, with significantly expanded list of
hardening types, and new defaults. Now, templates are built with
UBSan integer overflow checks by default, as well as hidden
visibility and CFI (Control Flow Integrity) by default. Enabling
templates to properly use it is still a work in progress. There
is also initial infrastructure for other hardening including
Intel CET and ARM BTI (which will both need support in musl
to be useful) as well as Clang SafeStack. All ELF files are
now also checked for executable stack in the build system.</li>
  <li>Cbuild now supports locking, preventing race conditions when
building multiple things in parallel. The sources are properly
locked, as are the repositories when generating packages.</li>
  <li>Cbuild no longer requires <code class="language-plaintext highlighter-rouge">fakeroot</code> in the host system.</li>
  <li>New policy packages <code class="language-plaintext highlighter-rouge">base-devel</code> and <code class="language-plaintext highlighter-rouge">base-devel-static</code>. These
provide a way for users to declare that they want development
packages to be automatically installed alongside runtime packages.
This allows users to choose whether they wish to save space not
installing development files (default) or whether they want the
convenience of having development files for everything (similarly
to e.g. Arch Linux).</li>
</ol>

<p>This list is not exhaustive, but includes most major things.</p>

<h2 id="the-chimera-handbook">The Chimera handbook</h2>

<p>The documentation for the project has undergone significant expansion,
now containing detailed installation instructions including how to
deal with things like disk encryption and root oN ZFS, and various
configuration tasks.</p>

<p>The FAQ is now a part of the handbook and has been expanded as well.</p>

<h2 id="preparing-for-alpha">Preparing for alpha</h2>

<p>We still have plans to release an alpha as soon as possible. This will
be the point where the distro is ready for early adopters. The following
needs finishing:</p>

<ol>
  <li>The hardening overhaul fallout. Since we have enabled the UBSan
checks as well as CFI by default, this exposes all sorts of bugs
in libraries and applications, turning them into crashes. Therefore
we are rebuilding and testing things as necessary, trying to iron
out most issues to have a stable experience before the alpha launches.</li>
  <li>Packages will need updating to their latest version at the time of the
alpha.</li>
  <li>Automated build system for packages still needs launching. This is
experiencing delays, but we plan to have that up as soon as possible.</li>
  <li>There will be a world rebuild before the alpha happens, on all 4
architectures that are currently supported in repositories. This is
needed in order to accommodate the various cbuild updates that have
happened in the meantime.</li>
</ol>

<p>Since these are still pretty significant tasks, it will take some time
to get them done. Therefore, the alpha will not come out before the
FOSDEM talk. Right now, the idea is to make it coincide with one of
the beta releases of FreeBSD 13.2, to get a chance to rebase the
userland. That means mid February to early March most likely.</p>

<p>There will be a new set of ISO images before the alpha comes out, to
give people a chance to test and expose various issues. Another set
will then be made for the alpha release.</p>

<h2 id="after-the-alpha">After the alpha</h2>

<p>The alpha cycle is planned for 6 months to 1 year. Once it is over and
the project is ready to be declared beta quality, another world rebuild
will be done.</p>

<h2 id="summary">Summary</h2>

<p>I am hoping there will be no more significant delays. Right now, it is
very near, with only a small number of tasks remaining to do. Those tasks
however cover a lot of ground, so they take time.</p>
</p>
        </div>
    </content>
</entry>

<entry>
    <title>Roadmap for near future</title>
    <link href="https://chimera-linux.org/news/2022/11/roadmap.html"/>
    <id>https://chimera-linux.org/news/2022/11/roadmap</id>
    <published>2022-11-03T00:00:00+00:00</published>
    <updated>2022-11-03T00:00:00+00:00</updated>
    <content type="xhtml">
        <div xmlns="http://www.w3.org/1999/xhtml">
            <p><p>It is November, and so far without a release. While progress is happening
and there is pretty much constant flow of improvements, the idea was to
get something out faster, and that has unfortunately not happened yet.</p>

<p>So instead here is a rough plan for the near future, with an alpha release
at the end (hopefully).</p>

<!--more-->

<h2 id="current-work-in-progress">Current work in progress</h2>

<p>But first, about the progress. The packaging work is not quite finished
yet, and there are several things being worked on at the same time:</p>

<ol>
  <li>Service management. The <code class="language-plaintext highlighter-rouge">dinit-chimera</code> suite is currently receiving
a variety of improvements.</li>
  <li>Userland hardening. The idea is to enable CFI (Control Flow Integrity)
in some form on supported platforms, limited UBSan (Undefined Behavior
Sanitizer) with production runtime, GWP-ASan (a limited, low overhead
form of address sanitizer) and possibly other things before the distro
goes stable. Use of the Scudo hardened allocator (in use in production
by notably the Android and Fuchsia OSes) is being investigated for
improved performance over Musl stock allocator.</li>
  <li>Kernel packaging. The current form is not quite there yet, and needs
an implementation of kernel backups as well as packaging improvements
for better flexibility. Additionally, CKMS needs polishing.</li>
  <li>Various minor tasks.</li>
</ol>

<h2 id="work-done-since-last-update">Work done since last update</h2>

<p>A bunch of work has been done since the last update on October 12:</p>

<ol>
  <li>Kernel dotconfigs got a large sync and cleanup. That means they are
much closer between architectures in terms of feature sets.</li>
  <li>The vanilla kernel now has improved support for a large variety of
AArch64 devices, primarily from PINE64. The device-specific Pinebook
Pro kernel was removed, with the vanilla kernel now preferred.</li>
  <li>The redistributable binary firmware (<code class="language-plaintext highlighter-rouge">linux-firmware</code>) packaging
was carefully cleaned up and split into many individual packages.
Chimera’s elaborate policy packages system allows for simple
management.</li>
  <li>A shared <code class="language-plaintext highlighter-rouge">extlinux.conf</code> generator for U-Boot-based devices has
been implemented, so that all devices can use a single boot menu
system.</li>
  <li>A Clang-compatible implementation of <code class="language-plaintext highlighter-rouge">_FORTIFY_SOURCE</code> has been
added and is now in use by default for better hardening.</li>
  <li>Speaking of hardening, the toolchain now applies <code class="language-plaintext highlighter-rouge">-Wl,-z,relro</code>
and <code class="language-plaintext highlighter-rouge">-Wl,-z,now</code> by default (without explicit flags) along with
<code class="language-plaintext highlighter-rouge">-Wl,--as-needed</code> on top of FORTIFY.</li>
  <li>Full switch from linker <code class="language-plaintext highlighter-rouge">--hash-style=both</code> to <code class="language-plaintext highlighter-rouge">--hash-style=gnu</code>.</li>
  <li>The <code class="language-plaintext highlighter-rouge">dinit-userservd</code> project got an initial release.</li>
  <li>The core services (<code class="language-plaintext highlighter-rouge">dinit-chimera</code>) now support system-enabled
services, for both system and user. That means packaging can
install implicit service links and users do not have to enable
them manually. This applies to a select set of services such
as the D-Bus system and session buses, <code class="language-plaintext highlighter-rouge">udevd</code> and <code class="language-plaintext highlighter-rouge">elogind</code>.
The links are in dedicated packages with no hard dependencies,
so they are fully optional (but still implicit for most users).</li>
  <li>Console fonts and keymap are now managed using <code class="language-plaintext highlighter-rouge">console-setup</code>
from the Debian project.</li>
  <li>Various other improvements in core service management.</li>
  <li>Various packaging updates and <code class="language-plaintext highlighter-rouge">cbuild</code> cleanups, and so on.</li>
</ol>

<h2 id="future-plans">Future plans</h2>

<p>Now for the roadmap.</p>

<p>Right now, Chimera is not meant to be daily driven by most people.
One thing is missing software, but also updates are not guaranteed
to be safe and it takes a lot of knowing what one is doing to
safely use the system.</p>

<p>This should change with the first alpha release, which is planned
for the end of 2022 or beginning of 2023.</p>

<p>With the alpha release, new guarantees will be introduced. Notably,
package versioning will become more stable, with no more arbitrary
changes without incrementing revision numbers. That means it will
no longer be necessary to always use the <code class="language-plaintext highlighter-rouge">--latest</code> flag when
updating.</p>

<p>Initial, rudimentary documentation will be available with the alpha
release, covering things like installation, basic package management,
service management and so on.</p>

<p>To reach the alpha release, there are several tasks left to do, tagged
with the right milestone in the <code class="language-plaintext highlighter-rouge">cports</code> issue tracker.</p>

<p>The alpha release will not be suitable for general audience. It will
be an early adopter release, for careful daily driving and testing.
The amount of available software will grow during this period, and
bugs will be fixed. It is expected that users will package software
they need to use the system.</p>

<p>Sometime during this cycle, additional architecture support may be
introduced (notably for big-endian <code class="language-plaintext highlighter-rouge">ppc64</code> and maybe 32-bit <code class="language-plaintext highlighter-rouge">ppc</code>).
An automatic package build infrastructure should function during
this period and will be set up before the alpha phase begins.</p>

<p>Once the OS stabilizes further, the alpha cycle will be declared
finished, and all packages will be rebuilt from scratch for every
supported architecture. Users will be expected to carefully upgrade
their systems (this will be announced ahead of time). The beta
phase will begin, suitable for less adventurous users.</p>

<p>The current estimate for beta phase is sometime in 2023 (summer or
fall). Another cycle will begin. This is expected to take at least
until mid 2024, when the distro will be declared stable. This will
come with another world rebuild, most likely.</p>

<h2 id="alpha-and-blockers">Alpha and blockers</h2>

<p>Unfortunately, one of the main blockers for alpha is outside of
the project’s control. It’s <code class="language-plaintext highlighter-rouge">apk-tools</code>, which hasn’t had much
work done on it lately in the upstream, due to the maintainer
not having time. That means issues and pull requests also go
unaddressed, and there is nothing the project can do about it.</p>

<p>While currently most of the issues are minor and can be worked
around, it is blocking several features and improvements in
<code class="language-plaintext highlighter-rouge">cbuild</code>, such as getting rid of host requirement for <code class="language-plaintext highlighter-rouge">fakeroot</code>,
and cleanup of build dependency handling.</p>

<p>If the situation does not improve before the alpha release is
near, Chimera will continue to rely on a Git snapshot of <code class="language-plaintext highlighter-rouge">apk-tools</code>
during the alpha phase. The situation is supposedly temporary,
and the idea is to keep the amount of downstream patching to
a minimum. The project would definitely prefer not having to
fork the package manager, so as long as there is nothing truly
major, the preferred strategy is to wait and see, at least until
beta is near.</p>

<p>In addition to packaging work scheduled for before alpha, it will
be necessary to launch automated build infrastructure. This needs
work on Chimera’s own primary server (which currently does not have
its own public IP) as well as various improvements in <code class="language-plaintext highlighter-rouge">cbuild</code>.
The build infrastructure is absolutely necessary, as the current
manual workflow takes too much effort with the growing number
of supported architectures.</p>

<p>Other issues can be tracked <a href="https://github.com/chimera-linux/cports/milestone/1">here</a>.</p>

<h2 id="summary">Summary</h2>

<p>Hopefully this clears things up a little. There will be at least
one new set of testable images before the alpha phase is reached.
Soon there will also be initial work on the Chimera handbook, which
will serve as the primary source of documentation.</p>
</p>
        </div>
    </content>
</entry>

</feed>
