Bootstrap scripts
The reference implementation is a single-file executable.
A dk0 shell script (Unix) and a
dk0.cmd Windows batch script are also available that bootstrap and run the single-file executable.
They rely on a small set of external tools per platform; a different implementation may
use different tools or none at all.
Each dk0 version installs into its own dk0exe-<version>-<abi> directory
under the launcher data home (%LOCALAPPDATA%\Programs\dk0 on Windows,
$XDG_DATA_HOME/dk0 or ~/.local/share/dk0 on Unix, DKCODER_DATA_HOME
override). The launchers garbage collect that store on every run: the
version being launched is marked used, then version directories and
superseded verifier/mlfront-signify-* binaries that no launcher has used
in 30 days are removed. Everything in the store re-downloads on demand from
its signed manifest, so pruning is always safe and never blocks a launch.
Windows POSIX shells
Section titled “Windows POSIX shells”On Windows the dk0 shell script runs under Git Bash, MSYS2, and Cygwin, and
dk0.cmd runs under cmd.exe and PowerShell. Both select the windows_x86_64 or
windows_x86 binaries and share one launcher data home,
%LOCALAPPDATA%\Programs\dk0, so a project driven from both shells downloads
each version once.
The shell script looks for curl and wget in /usr/bin and /bin first, and then
on PATH. The PATH step is what finds /mingw64/bin/curl under Git for Windows.
Windows
Section titled “Windows”| File | What |
|---|---|
pwsh in PATH | enter-object interactive shell (optional; searched 1st) |
powershell in PATH | enter-object interactive shell (optional; searched 2nd) |
cmd in PATH | enter-object interactive shell (fallback; searched last) |
powershell.exe in PATH | dk0.cmd batch script - for InvokeWebRequest (optional; searched 1st) |
bitsadmin in PATH | dk0.cmd batch script - for download (fallback; searched last) |
certutil in PATH | dk0.cmd batch script - verify sha256sums |
forfiles in PATH | dk0.cmd batch script - prune old dk0 versions (optional) |
| File | What |
|---|---|
/usr/bin/codesign | executables are locally signed when -e GLOB_PATTERN |
/bin/sh | enter-object interactive shell unless SHELL env var set |
/bin/sh | dk0 shell script |
/usr/bin/shasum | dk0 shell script |
/usr/bin/curl | dk0 shell script (optional; searched 1st) |
/bin/curl | dk0 shell script (optional; searched 2nd) |
/usr/bin/wget | dk0 shell script (optional; searched 3rd) |
/bin/wget | dk0 shell script (optional; searched 4th) |
curl/wget in PATH | dk0 shell script (fallback; searched last) |
/usr/bin/mv | dk0 shell script (optional; searched 1st) |
/bin/mv | dk0 shell script (fallback; searched last) |
/usr/bin/rm | dk0 shell script (optional; searched 1st) |
/bin/rm | dk0 shell script (fallback; searched last) |
/usr/bin/uname | dk0 shell script (optional; searched 1st) |
/bin/uname | dk0 shell script (fallback; searched last) |
/usr/bin/awk | dk0 shell script - to parse sha256sums (optional; searched 1st) |
/bin/awk | dk0 shell script (fallback; searched last) |
Linux / BSDs / MSYS2 / Cygwin / Git Bash
Section titled “Linux / BSDs / MSYS2 / Cygwin / Git Bash”| File | What |
|---|---|
/bin/sh | enter-object interactive shell unless SHELL env var set |
/bin/sh | dk0 shell script |
/usr/bin/shasum | dk0 shell script (optional; searched 1st) |
/usr/bin/sha256sum | dk0 shell script (fallback; searched last) |
/usr/bin/curl | dk0 shell script (optional; searched 1st) |
/bin/curl | dk0 shell script (optional; searched 2nd) |
/usr/bin/wget | dk0 shell script (optional; searched 3rd) |
/bin/wget | dk0 shell script (optional; searched 4th) |
curl/wget in PATH | dk0 shell script (fallback; searched last) |
/usr/bin/mv | dk0 shell script (optional; searched 1st) |
/bin/mv | dk0 shell script (fallback; searched last) |
/usr/bin/rm | dk0 shell script (optional; searched 1st) |
/bin/rm | dk0 shell script (fallback; searched last) |
/usr/bin/uname | dk0 shell script (optional; searched 1st) |
/bin/uname | dk0 shell script (fallback; searched last) |
/usr/bin/awk | dk0 shell script - to parse sha256sums (optional; searched 1st) |
/bin/awk | dk0 shell script (fallback; searched last) |
/usr/bin/cygpath | dk0 shell script (optional) |
Dynamic linker (per ABI, not per OS)
Section titled “Dynamic linker (per ABI, not per OS)”The tables above list files that vary by operating system. The dynamic linker
is the exception: it varies by ABI. A dynamically linked executable names
its loader by absolute path in its ELF PT_INTERP header, so that exact path
must exist to run objects of that ABI. Statically linked objects carry no
PT_INTERP and need no loader. The loader is normally supplied by the host's
own libc, and must be provided explicitly only when objects of one ABI run on
a host of another.
| ABI | File | What |
|---|---|---|
Linux_arm64 | /lib/ld-linux-aarch64.so.1 | glibc dynamic linker for dynamically linked objects |
Linux_x86 | /lib/ld-linux.so.2 | glibc dynamic linker for dynamically linked objects |
Linux_x86_64 | /lib64/ld-linux-x86-64.so.2 | glibc dynamic linker for dynamically linked objects |
Minimum glibc (per ABI)
Section titled “Minimum glibc (per ABI)”The published Linux binaries are built on manylinux_2_28 container images,
so they run on any distribution carrying glibc 2.28 or newer.
| ABI | Minimum libc |
|---|---|
Linux_arm64 | glibc 2.28 |
Linux_x86 | glibc 2.28 |
Linux_x86_64 | glibc 2.28 |
- No check reads the glibc versions a published binary requires or runs the binary on a glibc 2.28 distribution.
System toolchains (per-ABI contract)
Section titled “System toolchains (per-ABI contract)”Slot artifacts that contain native code are built with one system toolchain per ABI family. This section is the contract for where that toolchain comes from and what compatibility floor the built artifacts inherit. The repositories whose builds enforce these requirements document their own checks.
| ABI family | System toolchain | How it is located |
|---|---|---|
Linux_* (glibc) | gcc, as, binutils | resolved from PATH at build time |
Windows_* | MSVC | at consume time: vswhere, then vcvarsall capture |
Darwin_* | /usr/bin/clang | fixed path (selected developer directory: Command Line Tools or full Xcode) |
Linux_*(glibc): distribution builds must run in a build environment whose glibc is 2.28 or older, canonically thequay.io/pypa/manylinux_2_28_*containers, so slot artifacts run on any distribution carrying glibc 2.28 or newer.Linux_*(glibc): glibc links are backward-compatible only, so a build on a newer-glibc host inherits that host's glibc floor.Linux_*(glibc): runtime objects are compiled as position-independent code, so native links succeed under PIE-default toolchains.Windows_*: MSVC is the sole official Windows slot toolchain, andCommonsBase_LLVM.Toolchain.MinGWis a cross toolchain for building C userland packages. No check enforces either statement.Windows_*:vswherefinds the Visual Studio installation, a version in the range[16.0,19.0)carrying theMicrosoft.VisualStudio.Component.VC.Tools.x86.x64component.Windows_*: avcvarsallenvironment capture suppliesINCLUDE,LIB,LIBPATHandPATH, and the slot determines thevcvarsallarchitecture. No check confirms the captured variables.Darwin_*:/usr/bin/clangis thexcruntrampoline, which runs theclangof the developer directoryxcode-selecthas selected. The build environment has a developer directory selected, either the Xcode Command Line Tools or a full Xcode installation, soxcode-select -psucceeds and/usr/bin/clangruns.