Skip to main content

Os

Enum Os 

Source
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

Source

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.

Source

pub fn id(self) -> &'static str

How the system is written in definition files.

Source

pub fn parse(id: &str) -> Option<Self>

The system written as id, if there is one.

Source

pub fn display_name(self) -> &'static str

The system’s own name and release, which is the same in every language.

Source

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).

Source

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.

Source

pub fn containerfile(self) -> &'static str

The Containerfile the system’s base image is built from, carried inside the binary.

Source

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).

Source

pub fn gaps(self) -> &'static [Gap]

What the system’s image does not carry that the Debian image does.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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§

Source§

impl Clone for Os

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Os

Source§

impl Debug for Os

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Os

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for Os

Source§

impl PartialEq for Os

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.