Skip to content

Legal

What Runlix is built on

Every third-party component Runlix ships or translates, with its licence checked at the source. The list is verified by a test: an unattributed dependency does not reach a release.

Updated 2026-09-12

Runlix is not written from nothing. It stands on Apple's MLX, on a set of Rust crates, on Avalonia, and — for the model architectures — on code translated from mlx-lm rather than merely called.

This page mirrors the NOTICE file in the repository, and that file is not maintained by good intentions: a test fails the build if a direct dependency of the application, its tests, or the engine does not appear in it. An unattributed dependency does not reach a release. Every licence below was read from the package's own metadata, not from memory.

Native code — MLX

MLX — MIT, © 2023 Apple Inc. Extracted from the mlx-metal PyPI wheel; libmlx.dylib and mlx.metallib are redistributed inside the bundle.

mlx-c — MIT, © 2023-2024 Apple Inc. MLX's C API, compiled from source; libmlxc.dylib is redistributed. The sources are vendored byte for byte unmodified, and our corrections live as separate patch files — a change made in place would disappear at the first update, and disappear silently.

Translated code — the model architectures

mlx-lm — MIT, © 2023 Apple Inc.

The architectures in the engine are ported from mlx_lm/models/. This is not copied code: it is a translation into idiomatic Rust, and the correspondence holds at the level of whole files rather than lines. mlx-lm also serves as the reference oracle that decides whether the translation is correct.

Ours Comes from Version
phi3 mlx_lm/models/phi3.py mlx-lm 0.31.3
llama mlx_lm/models/llama.py mlx-lm 0.31.3
qwen2, qwen3 mlx_lm/models/qwen2.py mlx-lm 0.31.3
gemma3 mlx_lm/models/gemma3_text.py mlx-lm 0.31.3
deepseek mlx_lm/models/deepseek_v2.py mlx-lm 0.31.3
RoPE mlx_lm/models/rope_utils.py mlx-lm 0.31.3
masks mlx_lm/models/base.py mlx-lm 0.31.3

A frozen copy of the sources translated from lives in the repository with its version recorded, which is how the project notices when the upstream changes. Nothing else does: no compiler and no package manager will ever warn you that derived code has drifted from its origin.

The encoders for text embeddings are translated the same way, from mlx-embeddings — MIT, © Prince Canuma — and verified against it as their own oracle. They are not reachable from the application yet.

Rust crates

tokenizers — Apache-2.0, Hugging Face · minijinja and minijinja-contrib — Apache-2.0, Armin Ronacher · serde_json — MIT or Apache-2.0.

minijinja-contrib earns its place for one specific reason: chat templates are written for Python's Jinja2 and call Python string methods on strings. Its pycompat module is what makes them render at all.

The downloader is a separate process and carries hf-hub — Apache-2.0, Hugging Face. Separate because hf-hub brings tokio, reqwest and hyper with it: 356 crates against the engine's 84. The engine that .NET loads in-process stays at 84.

Transitive dependencies are recorded in the engine's lock file.

.NET packages

Avalonia and its Desktop, Fluent, Inter font, ReactiveUI, Headless and Skia packages — MIT. Microsoft.Data.Sqlite — MIT. Tmds.DBus.Protocol — MIT.

LiveMarkdown.Avalonia — Apache-2.0, from DearVa, version 1.12.2 — is vendored rather than referenced, with its full licence text alongside the sources. It renders the live Markdown of streaming answers. It brings Markdig (BSD-2-Clause) and TextMateSharp with its grammars (MIT, each bundled grammar carrying its own licence) for syntax highlighting.

Test-only: xunit (Apache-2.0), Xunit.SkippableFact (MS-PL), Microsoft.NET.Test.Sdk (MIT), and Avalonia's headless packages, which draw the interface into a PNG with no screen and no permissions.

This website

Served by ASP.NET Core on .NET 10, rendered on the server, with no JavaScript sent to your browser. Typefaces are Newsreader, Inter and IBM Plex Mono, all under the SIL Open Font Licence, served from this domain rather than from Google Fonts. That is why the content security policy can be default-src 'none' with 'self': there is no external host for this site to contact, so there is no third party to disclose.

Where Runlix comes from

Runlix grew out of the code of OllamaManager, which is frozen and still works at github.com/alexander64/ollamanager. The roadmap explains what changed and why.