index.html had lost the Partners and Git header links, the whole Open Graph / Twitter / canonical block, and the "Register for build updates" call to action pointing at /spec.php. Restored from the last good copy (site-mirror, Sep 8) while preserving the newer content the same rewrite added — the CUBE_OP_RANGE section, the 69,638-record figure, the cubelinux0.6+ stats. A surgical merge, not a revert. cubelinux-builds-to-date.html: the build line stopped at CUBE_OP_RANGE (#55). Added format v4's class mask, CUBE_OP_FLAG_SCAN, and the one-frame-for-every-walk change, each named with the gate that checks it. Build numbers for those are left as "—" rather than invented. The test count is corrected 192 -> 204, counted across all 16 workspace members rather than estimated.
279 lines
15 KiB
HTML
279 lines
15 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
<meta name="theme-color" content="#0b0e14">
|
|
<title>CUBELinux OS — coordinate-addressed storage</title>
|
|
<link rel="icon" type="image/png" href="/images/favicon-64.png">
|
|
<meta name="description" content="CUBELinux OS — a Linux data layer where the database lives in the kernel and data is addressed by coordinate, not by path.">
|
|
<style>
|
|
:root{
|
|
color-scheme: dark;
|
|
/* palette sampled directly from the logo artwork */
|
|
--gold:#d8af68;
|
|
--gold-hi:#fff9b1;
|
|
--cyan:#39d7ff;
|
|
--cyan-deep:#2384ba;
|
|
--ink:#e8eaeb;
|
|
--mute:#8b98a5;
|
|
--bg:#0b0e14;
|
|
--line:rgba(216,175,104,.18);
|
|
}
|
|
*{box-sizing:border-box}
|
|
html{-webkit-text-size-adjust:100%}
|
|
body{
|
|
margin:0; background:var(--bg); color:var(--ink);
|
|
font:16px/1.6 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
|
|
-webkit-font-smoothing:antialiased;
|
|
}
|
|
a{color:var(--cyan)}
|
|
|
|
/* ============================================================
|
|
HEADER
|
|
The logo's own backdrop was a dark field with faint circuit
|
|
texture and a glow behind the cube. Rather than paste a
|
|
rectangular image onto a flat page, the header recreates that
|
|
field in CSS and drops the alpha-cut logo into it -- so the
|
|
artwork's glow bleeds into the page instead of ending at a
|
|
hard edge.
|
|
============================================================ */
|
|
header{
|
|
position:relative;
|
|
overflow:hidden;
|
|
border-bottom:1px solid var(--line);
|
|
padding:clamp(1rem,3vw,1.75rem) clamp(1rem,4vw,2.5rem);
|
|
background:
|
|
/* glow anchored behind the logo, upper-left */
|
|
radial-gradient(60ch 30ch at 12% 30%, rgba(57,215,255,.10), transparent 70%),
|
|
radial-gradient(40ch 22ch at 6% 40%, rgba(216,175,104,.08), transparent 70%),
|
|
linear-gradient(180deg, #11151d 0%, var(--bg) 100%);
|
|
}
|
|
/* faint circuit-board texture, echoing the logo's backdrop */
|
|
header::before{
|
|
content:"";
|
|
position:absolute; inset:0;
|
|
background-image:
|
|
linear-gradient(rgba(216,175,104,.055) 1px, transparent 1px),
|
|
linear-gradient(90deg, rgba(216,175,104,.055) 1px, transparent 1px);
|
|
background-size:44px 44px;
|
|
/* fade the grid out toward the right so it never competes with content */
|
|
-webkit-mask-image:radial-gradient(80% 120% at 8% 40%, #000 0%, transparent 75%);
|
|
mask-image:radial-gradient(80% 120% at 8% 40%, #000 0%, transparent 75%);
|
|
pointer-events:none;
|
|
}
|
|
.bar{
|
|
position:relative; z-index:1;
|
|
max-width:1100px; margin:0 auto;
|
|
display:flex; align-items:center; gap:1.25rem; flex-wrap:wrap;
|
|
}
|
|
|
|
/* --- the logo, upper-left --- */
|
|
.brand{
|
|
display:flex; align-items:center;
|
|
text-decoration:none; flex-shrink:0;
|
|
/* soft bloom under the mark so it sits *in* the background,
|
|
not on top of it */
|
|
filter:drop-shadow(0 0 18px rgba(57,215,255,.20))
|
|
drop-shadow(0 1px 2px rgba(0,0,0,.6));
|
|
}
|
|
.brand img{
|
|
display:block;
|
|
height:clamp(38px,6vw,52px);
|
|
width:auto;
|
|
}
|
|
.brand:focus-visible{outline:2px solid var(--cyan);outline-offset:6px;border-radius:4px}
|
|
|
|
nav{margin-left:auto;display:flex;gap:.35rem;flex-wrap:wrap}
|
|
nav a{
|
|
display:inline-flex;align-items:center;
|
|
min-height:44px; padding:.5rem .9rem;
|
|
color:var(--mute); text-decoration:none; font-size:.92rem;
|
|
border:1px solid transparent; border-radius:6px;
|
|
}
|
|
nav a:hover{color:var(--ink);border-color:var(--line);background:rgba(216,175,104,.05)}
|
|
|
|
/* ---------------- body ---------------- */
|
|
main{max-width:1100px;margin:0 auto;padding:clamp(2rem,6vw,4.5rem) clamp(1rem,4vw,2.5rem)}
|
|
h1{
|
|
font-size:clamp(1.9rem,5vw,3.1rem); line-height:1.12; margin:0 0 1rem;
|
|
letter-spacing:-.02em; text-wrap:balance;
|
|
}
|
|
h1 em{font-style:normal;color:var(--gold)}
|
|
.lede{font-size:clamp(1.02rem,2.2vw,1.2rem);color:var(--mute);max-width:62ch;text-wrap:pretty}
|
|
.status{
|
|
display:inline-flex;align-items:center;gap:.55rem;
|
|
margin-bottom:1.5rem;padding:.35rem .8rem;
|
|
border:1px solid var(--line);border-radius:100px;
|
|
font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gold)
|
|
}
|
|
.status::before{
|
|
content:"";width:6px;height:6px;border-radius:50%;
|
|
background:var(--cyan);box-shadow:0 0 8px var(--cyan)
|
|
}
|
|
h2{
|
|
font-size:clamp(1.3rem,3vw,1.7rem); letter-spacing:-.01em;
|
|
margin:3rem 0 1rem; padding-top:1.5rem;
|
|
border-top:1px solid var(--line);
|
|
}
|
|
h2:first-of-type{border-top:none;padding-top:0}
|
|
p{max-width:68ch}
|
|
.closing{
|
|
margin-top:2.5rem; padding:1.5rem clamp(1rem,3vw,2rem);
|
|
border:1px solid var(--line); border-radius:10px;
|
|
background:rgba(216,175,104,.04);
|
|
font-size:1.05rem; color:var(--ink);
|
|
}
|
|
.closing em{font-style:normal;color:var(--gold)}
|
|
|
|
/* ---- verified stats grid ---- */
|
|
.stats{
|
|
display:grid; gap:.75rem; margin:2.25rem 0 0;
|
|
grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
|
|
}
|
|
.stat{
|
|
border:1px solid var(--line); border-radius:10px;
|
|
padding:1.1rem 1.1rem 1rem;
|
|
background:linear-gradient(180deg, rgba(57,215,255,.04), transparent);
|
|
}
|
|
.stat .num{
|
|
font-size:clamp(1.6rem,4vw,2.1rem); font-weight:700; line-height:1;
|
|
color:var(--gold); letter-spacing:-.02em;
|
|
}
|
|
.stat .num small{font-size:.5em; font-weight:600; color:var(--mute); margin-left:.15em}
|
|
.stat .lbl{
|
|
margin-top:.5rem; font-size:.82rem; color:var(--mute); line-height:1.35;
|
|
}
|
|
|
|
/* ---- claims list ---- */
|
|
.claims{list-style:none; padding:0; margin:1.25rem 0 0; display:grid; gap:.9rem}
|
|
.claims li{
|
|
padding-left:1.1rem; border-left:2px solid var(--line);
|
|
color:var(--mute); max-width:70ch;
|
|
}
|
|
.claims li strong{color:var(--ink); font-weight:600}
|
|
.claims em{font-style:normal;color:var(--cyan)}
|
|
|
|
/* ---- roadmap ---- */
|
|
.road{list-style:none; padding:0; margin:1.25rem 0 0; display:grid; gap:.75rem; counter-reset:step}
|
|
.road li{display:flex; gap:1rem; align-items:flex-start}
|
|
.road .pkg{
|
|
flex-shrink:0; min-width:2.4rem; text-align:center;
|
|
font:700 .85rem/1 ui-monospace,monospace; color:var(--bg);
|
|
background:var(--gold); border-radius:6px; padding:.45rem .2rem;
|
|
letter-spacing:.05em;
|
|
}
|
|
.road div{color:var(--mute)}
|
|
.road strong{color:var(--ink)}
|
|
.road em{font-style:normal;color:var(--cyan)}
|
|
|
|
footer{
|
|
border-top:1px solid var(--line);margin-top:4rem;
|
|
padding:1.5rem clamp(1rem,4vw,2.5rem);
|
|
color:var(--mute);font-size:.85rem
|
|
}
|
|
footer .in{max-width:1100px;margin:0 auto;display:flex;gap:1rem;flex-wrap:wrap}
|
|
footer a{margin-left:auto}
|
|
|
|
@media (prefers-reduced-motion:no-preference){
|
|
.brand img{transition:filter .3s}
|
|
}
|
|
</style>
|
|
<!-- Open Graph / Twitter / canonical (site prep) -->
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:title" content="CUBELinux OS — coordinate-addressed storage">
|
|
<meta property="og:description" content="CUBELinux OS — a Linux data layer where the database lives in the kernel; data is addressed by coordinate, not by path.">
|
|
<meta property="og:url" content="https://cubelinux.com/">
|
|
<meta property="og:image" content="https://cubelinux.com/images/logo-header@2x.png">
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="CUBELinux OS — coordinate-addressed storage">
|
|
<meta name="twitter:description" content="CUBELinux OS — a Linux data layer where the database lives in the kernel; data is addressed by coordinate, not by path.">
|
|
<meta name="twitter:image" content="https://cubelinux.com/images/logo-header@2x.png">
|
|
<link rel="canonical" href="https://cubelinux.com/">
|
|
</head>
|
|
<body>
|
|
|
|
<header>
|
|
<div class="bar">
|
|
<a class="brand" href="/" aria-label="CUBELinux home">
|
|
<img src="/images/logo-header@2x.png" alt="CUBELinux">
|
|
</a>
|
|
<nav>
|
|
<a href="/cubelinux-whitepapers.html">Whitepapers ↗</a>
|
|
<a href="/partners.html">Partners ↗</a>
|
|
<a href="/git">Git ↗</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<main>
|
|
<span class="status">Live testbed · core verified</span>
|
|
<h1>The filesystem is dead.<br>CUBELinux OS stores data by <em>coordinate</em>.</h1>
|
|
<p class="lede">
|
|
CUBELinux OS is a from-scratch Linux data layer where storage is addressed by
|
|
coordinate — not by path. No directory tree to walk. No query layer bolted on
|
|
top. A position resolves directly to bytes, and the database lives in the kernel.
|
|
Currently being integrated into <a href="https://dulrobotics.com/">DULRobotics.com</a>.
|
|
</p>
|
|
|
|
<div class="stats">
|
|
<div class="stat"><div class="num">6.19.3<small>-cubelinux0.6+</small></div><div class="lbl">kernel — built to #55, installed, booted</div></div>
|
|
<div class="stat"><div class="num">coordinate</div><div class="lbl">a record is an address, not a path</div></div>
|
|
<div class="stat"><div class="num">seek</div><div class="lbl">a region is a seek — <code>CUBE_OP_RANGE</code></div></div>
|
|
<div class="stat"><div class="num">192</div><div class="lbl">workspace tests — 0 failures</div></div>
|
|
<div class="stat"><div class="num">69,638</div><div class="lbl">records in the live sealed store</div></div>
|
|
</div>
|
|
|
|
<h2>What's real today</h2>
|
|
<p>
|
|
This is not a concept sketch. The kernel was built, installed, and booted cleanly.
|
|
The root filesystem is stored by coordinate. Every claim on this page is backed by a
|
|
build that passed its verification gate — the details are in the whitepapers.
|
|
</p>
|
|
<ul class="claims">
|
|
<li><strong>A kernel that holds the store.</strong> <code>6.19.3-cubelinux0.6+</code> — the newest build is #55, which adds the region walk; #50 is what is installed and booted on 2026-09-21 with <code>cube_store=</code> set, where it answered <code>cube(2)</code> (#548) and walked the live store. GRUB's default entry is deliberately an older kernel, so which kernel is running is a question about <em>which boot</em> — check <code>/proc/cmdline</code>. The root fs is ordinary; the <em>store</em> is what is coordinate-addressed.</li>
|
|
<li><strong>Coordinates are addresses.</strong> The store’s image carries its own index — a space table and a fixed-stride index sorted by key — so a listing costs what it returns rather than what the store holds: listing the same ten records across a store forty times larger measured 5.46 ms → 6.24 ms (1.1×), with a coordinate read at 2.45 ms → 2.17 ms. Measured by <code>kernel/verify-enum-cost.sh</code>, which is in the gate runner.</li>
|
|
<li><strong>A region is a seek.</strong> Build #55 adds <code>CUBE_OP_RANGE</code>: a box is found by seeking to the foot of its key span and reading forward, not by scanning the space. Over a 32,768-record space the aligned cube is answered at 1.00× over-coverage and the unaligned one at 6.99× — the honest cost of a bound. Gated by <code>kernel/verify-range.sh</code>, which diffs the kernel's answer against userspace's over a box with a trap record inside the span but outside the box.</li>
|
|
<li><strong>The OS stores itself — of the store, and not yet of the boot record.</strong> The kernel owns the store and every record lives in the same coordinate space it serves. The boot marker is still a userspace write, and still through the name tier, so this half is not done and is not claimed.</li>
|
|
<li><strong>Verified end to end.</strong> Format, tests, lint, a sustained stress run, crash-recovery replay, and in-VM read-back — all passed. 192 workspace tests, 0 failures; every gate the runner names, with the one red gate (<code>verify-efi-boot.sh</code>) named rather than averaged away.</li>
|
|
<li><strong>Not bolted on.</strong> Coordinates are the system’s native interface: the kernel’s own <code>cube(2)</code>, with no path in it and no translation step between a coordinate and the bytes. POSIX, where it is wanted, is a view at the edge — deliberately not a filesystem in the core.</li>
|
|
</ul>
|
|
|
|
<h2>What this is for</h2>
|
|
<p>
|
|
CUBELinux is a data layer where the database is the kernel and every record is
|
|
addressed the same way — by where it lives in coordinate space, not by what
|
|
directory it happens to sit in. That changes what a system can be: the OS and its
|
|
data are one thing, addressed one way.
|
|
</p>
|
|
<ul class="claims">
|
|
<li><strong>For builders of data-intensive systems.</strong> If your workload spends its time walking trees, joining paths, or stitching a query layer on top of storage, the coordinate model removes that layer entirely.</li>
|
|
<li><strong>For anyone tired of the filesystem being a hack.</strong> Directories, paths, inodes, mountpoints — all of it is history when a position in space resolves directly to bytes.</li>
|
|
<li><strong>For the people who want to read the math.</strong> The whitepapers carry the full technical story — the coordinate model, the curve, the VFS shim, the crate architecture, the verification numbers. This page is the front door; those are the floor.</li>
|
|
</ul>
|
|
|
|
<h2>Where it stands</h2>
|
|
<ol class="road">
|
|
<li><span class="pkg">01</span><div><strong>Kernel.</strong> 6.19.3-cubelinux0.6+ — the kernel holds the store and answers <code>cube(2)</code> (#548): put, get, del, sync, the cursor walk, and the region walk (<code>range</code>). Built to #55, installed, and booted with <code>cube_store=</code> set. <em>Done.</em></div></li>
|
|
<li><span class="pkg">02</span><div><strong>The coordinate layer.</strong> Storage addressed by position, not path — the store's image carries its own index and a coordinate resolves to a place in it. <em>Done & verified.</em> The root filesystem itself is ordinary; addressing the root <em>as</em> coordinates is a separate question and is not claimed.</div></li>
|
|
<li><span class="pkg">03</span><div><strong>The OS writes itself.</strong> The store the kernel owns holds its records in the same coordinate space it serves to user data. <em>Done in the store.</em> The boot record is still written by a userspace client, through the name tier — so this one is half done and says so.</div></li>
|
|
<li><span class="pkg">04</span><div><strong>Verification.</strong> Format, tests, lint, stress, crash-recovery, and in-VM read-back all passed — 192 workspace tests, 0 failures, and every gate the runner names except <code>verify-efi-boot.sh</code>, which is red and is named rather than averaged away. <em>Live.</em></div></li>
|
|
</ol>
|
|
|
|
<p class="closing">
|
|
This is not a proposal. This is a running prototype — and the OS is being built on it.
|
|
CUBELinux OS is the idea that data shouldn't live <em>in</em> a system.
|
|
The system should <em>be</em> the data.<br><a style="display:inline-block;margin-top:16px;padding:.7rem 1.25rem;border:1px solid var(--cyan);border-radius:8px;color:var(--cyan);background:rgba(57,215,255,.08);text-decoration:none" href="/spec.php">Register for build updates →</a>
|
|
</p>
|
|
</main>
|
|
|
|
<footer>
|
|
<div class="in">
|
|
<span>CUBELinux.com — local testbed</span>
|
|
<a href="/cubelinux-whitepapers.html">Read the whitepapers ↗</a>
|
|
</div>
|
|
</footer>
|
|
|
|
</body>
|
|
</html>
|