pub enum Os {
Debian,
Arch,
Ubuntu,
Alpine,
}Expand description
A system a profile’s image is built on.
Variants§
Debian
Debian 13, from the Node project’s own Debian image. The default, and what a profile file that names no system is.
Arch
Arch Linux, rolling.
Ubuntu
Ubuntu 24.04 LTS.
Alpine
Alpine, on musl rather than glibc; offered, and said to be not recommended.
Implementations§
Source§impl Os
impl Os
Sourcepub const ALL: [Self; 4]
pub const ALL: [Self; 4]
Every system, in the order the wizard offers them: the default first, the one said to be not recommended last.
Sourcepub fn display_name(self) -> &'static str
pub fn display_name(self) -> &'static str
The system’s own name and release, which is the same in every language.
Sourcepub fn recommended(self) -> bool
pub fn recommended(self) -> bool
Whether QCode recommends the system. Alpine is offered for other work and said not to be:
of the five harnesses, two do not run on it at all (see Os::refuses).
Sourcepub fn image(self) -> &'static str
pub fn image(self) -> &'static str
The name of the system’s base image. Debian’s is the name every image had before there was a choice, so the images already on a machine stay the ones it finds.
Sourcepub fn containerfile(self) -> &'static str
pub fn containerfile(self) -> &'static str
The Containerfile the system’s base image is built from, carried inside the binary.
Sourcepub fn image_mb(self) -> u64
pub fn image_mb(self) -> u64
How large the system’s base image is, in megabytes as podman reports them, so the wizard can say what is being chosen before it is built.
Measured on 2026-09-22 with podman on images built from the Containerfiles as they are
now; a change to a Containerfile is a reason to measure again (podman image inspect --format '{{.Size}}', and the live test in live.rs prints it).
Sourcepub fn gaps(self) -> &'static [Gap]
pub fn gaps(self) -> &'static [Gap]
What the system’s image does not carry that the Debian image does.
Sourcepub fn refuses(self, harness: HarnessKind) -> Option<Refusal>
pub fn refuses(self, harness: HarnessKind) -> Option<Refusal>
Why harness is not offered on this system, or None where it is.
Each answer was measured on the system’s own base image, by installing the harness the
way its recipe does and running it; the variants of Refusal say what was seen. Where a
harness is offered here, it was seen to install and start there: on Alpine, Claude Code
and opencode install their own musl builds and Codex’s program is a static musl build; Kimi
Code CLI is JavaScript and runs its shell commands without a terminal library, and a command
typed into it ran on all four systems (measured 2026-09-23 with 2.1.0), as one typed into
Qwen Code did on Debian, Arch and Ubuntu.
Sourcepub fn install(self, packages: &[&str]) -> String
pub fn install(self, packages: &[&str]) -> String
The shell command that installs packages from the system’s own repositories and leaves
no package lists or downloads behind in the layer. It runs as root.
Arch installs with -Syu: it supports no partial upgrade, so installing from a freshly
read package list means upgrading to it.
Sourcepub fn python(self) -> &'static [&'static str]
pub fn python(self) -> &'static [&'static str]
The packages graphify needs from the system: Python 3.10 or later, and pipx to install it with, under each system’s own names.
Sourcepub fn python_venv(self) -> &'static [&'static str]
pub fn python_venv(self) -> &'static [&'static str]
The packages a Python environment needs from the system: the interpreter, and where the system
keeps ensurepip out of the interpreter itself, the package that brings pip into it. All
four were measured on their own base image on 2026-09-29: Debian and Ubuntu ship
python3-venv apart from the interpreter, while Arch’s and Alpine’s python and python3
carry it. pipx is not among them: this is for an environment of our own making, which
brings its own pip.
Sourcepub fn build_tools(self) -> &'static [&'static str]
pub fn build_tools(self) -> &'static [&'static str]
The packages building the Quvyta apps needs from the system, under Quvyta development: a C
compiler and the tools around it, pkg-config, OpenSSL’s headers, git, ssh, curl, jq, the
process tools (ps, pgrep) and bash, under each system’s own names. Arch’s base-devel
carries pkg-config (pkgconf) itself.
Sourcepub fn chromium(self) -> Option<&'static [&'static str]>
pub fn chromium(self) -> Option<&'static [&'static str]>
Chromium’s package on this system, or None where the system has none that runs in a
container: Ubuntu 24.04’s chromium-browser is only a way to the snap, and snaps do not
run inside a container.
Sourcepub fn pipx(self, home: &str, package: &str) -> String
pub fn pipx(self, home: &str, package: &str) -> String
How pipx is told to install package outside the home directory, into home, with its
commands in /usr/local/bin.
Ubuntu 24.04 packages pipx 1.4.3, which has no --global (it came with 1.5, and 1.4.3
answers unrecognized arguments: --global), so there the location is given the older way,
through PIPX_HOME and PIPX_BIN_DIR; it lands in the same places.
Trait Implementations§
impl Copy for Os
impl Eq for Os
impl StructuralPartialEq for Os
Auto Trait Implementations§
impl Freeze for Os
impl RefUnwindSafe for Os
impl Send for Os
impl Sync for Os
impl Unpin for Os
impl UnsafeUnpin for Os
impl UnwindSafe for Os
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more