takana-os.net: el sitio propio, servido del repo y con las dos direcciones
El dominio se registró hoy. La página entra al repo takana y NO al de gioser-web — la que hay en `takana.gioser.net` la genera `hermanas.py` desde otro repo y todavía apunta a `git.gioser.net/sergio/hammer`, un nombre que dejó de existir hace doce días: una página sobre el proyecto que vive fuera del proyecto envejece sin que nadie se entere. Lo que la página publica, que es lo que se pidió: **dos direcciones**, no una. código https://git.gioser.net/sergio/takana (clone por HTTPS) paquetes https://takana-os.net/repo/ (el MISMO /srv/repo firmado) El `/repo/` cuelga por `handle_path` del mismo árbol que sirve `repo.gioser.net`, así que es la dirección en el dominio propio sin DNS ni certificado nuevos. Comprobado de punta a punta antes de escribirlo en la página, no supuesto: takana install age --repo https://repo.gioser.net --trust ./trust ⇒ release: trusted (by release) · apply OK ⚠ De paso se vio que `takana repo list --repo <url>` NO habla HTTP —sólo mira directorios locales— y ante una URL responde «repo vacío» con salida 0 en vez de decir que no sabe. Queda anotado en el README del sitio; el arreglo es otra unidad. Las cifras de la tabla salen de `docs/state/build-state.json` y del store de la caja, contadas hoy: 941 recetas, 926 selladas, 15 en deuda, 1407 artefactos, y las clausuras de los cuatro escritorios (KDE 418/420, GNOME 318/319, COSMIC 282/283, sway 269/270). No se estiman. Sin terceros: las tipografías de la marca viajan en `fuentes/` (154 KB, subconjuntos latin y latin-ext, las dos SIL OFL con su licencia al lado). Un sitio sobre no depender de binarios ajenos que pidiera las fuentes a Google en cada visita sería una contradicción barata. Contraste medido, no a ojo: el brasa `#DF6B2A` de la marca sobre alpaca da 2,9:1 y no se lee, así que el acento del tema claro es un brasa oscurecido `#9E3F16`. Ninguna combinación de la página baja de 4,5:1. El vhost ya está puesto en la caja (respaldo del Caddyfile + `caddy validate` + `arjectl restart caddy` + testigo `git.gioser.net` respondiendo antes de darlo por bueno). Falta lo único que no puedo hacer yo: los dos registros A a 2.29.29.217.
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# `takana-os.net` — el sitio del proyecto
|
||||
|
||||
Una sola página, autocontenida, en dos idiomas y dos temas. **No le pide nada a terceros:** las
|
||||
tipografías de la marca (Chivo e IBM Plex, las dos SIL OFL) viajan acá en `fuentes/`, subconjuntos
|
||||
`latin` y `latin-ext`, 154 KB en total. Un sitio sobre no depender de binarios ajenos que cargara
|
||||
las fuentes de Google en cada visita sería una contradicción barata.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| `index.html` | la página entera: CSS y JS adentro, el símbolo como `<symbol>` SVG inline |
|
||||
| `fuentes.css` + `fuentes/` | las ocho caras `@font-face`, servidas de acá |
|
||||
| `simbolo.svg` | el favicon — el martillo tocapu 7×7, derivado de `docs/marca/simbolo-fondo-claro.svg` |
|
||||
|
||||
La paleta y la tipografía salen de **`docs/marca/README.md`** y no se inventan acá. La única
|
||||
desviación, deliberada: en tema claro el texto de acento usa un brasa oscurecido (`#9E3F16`), porque
|
||||
el `#DF6B2A` de la marca sobre alpaca da 2,9:1 y no se lee. Las combinaciones de la página están
|
||||
medidas: ninguna baja de 4,5:1.
|
||||
|
||||
## Las dos direcciones que publica
|
||||
|
||||
- **código** → `https://git.gioser.net/sergio/takana` (público; `git clone` por HTTPS)
|
||||
- **paquetes** → `https://takana-os.net/repo/`, que es el MISMO `/srv/repo` firmado que sirve
|
||||
`repo.gioser.net`. Comprobado: `takana install age --repo https://repo.gioser.net --trust ./trust`
|
||||
responde `release: trusted (by release)`.
|
||||
|
||||
⚠ `takana repo list --repo <url>` **no habla HTTP** — sólo directorios locales — y ante una URL dice
|
||||
«repo vacío» con salida 0 en vez de decir que no sabe. El que sí baja por red es `install --repo`.
|
||||
|
||||
## Cómo se sirve
|
||||
|
||||
Caddy, en la caja `takana`, vhost `takana-os.net, www.takana-os.net`. La raíz es
|
||||
**`/work/sergio/takana/web/takana-os.net`**, el árbol de trabajo vivo: *publicar es guardar el
|
||||
fichero*. No lo refresca `publicar-webs.sh` a propósito — un `pull` sobre el árbol compartido mueve
|
||||
HEAD bajo los pies de otro agente (CLAUDE.md §2 ter).
|
||||
|
||||
El bloque, por si hay que rehacer la caja (`caddy validate` → `arjectl restart caddy`, **nunca**
|
||||
`caddy reload`: el Caddyfile lleva `admin off`, SDD 28 §6.14):
|
||||
|
||||
```caddyfile
|
||||
takana-os.net, www.takana-os.net {
|
||||
import acceso
|
||||
encode gzip zstd
|
||||
|
||||
redir /repo /repo/ permanent
|
||||
handle_path /repo/* {
|
||||
root * /srv/repo
|
||||
file_server browse
|
||||
}
|
||||
|
||||
handle {
|
||||
root * /work/sergio/takana/web/takana-os.net
|
||||
@oculto path /.* */.*
|
||||
respond @oculto 404
|
||||
file_server
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## DNS
|
||||
|
||||
El dominio se registró el 2026-09-21 y **el vhost está puesto antes que los registros**: hasta que
|
||||
`takana-os.net` resuelva a la caja, Caddy no puede pedir el certificado y el nombre no responde.
|
||||
Hacen falta dos `A` a `2.29.29.217` (la IP de la caja), igual que la de `repo`:
|
||||
|
||||
```
|
||||
takana-os.net. A 2.29.29.217
|
||||
www.takana-os.net. A 2.29.29.217
|
||||
```
|
||||
|
||||
Con eso puesto, el certificado sale solo en la primera petición — y **tarda unos segundos más que
|
||||
el primer `curl`**: si da error, reintentar antes de ir a mirar logs (SDD 28 §6.14).
|
||||
@@ -0,0 +1,68 @@
|
||||
/* Chivo (900) e IBM Plex Sans/Mono — subconjuntos latin y latin-ext, SERVIDOS DE ACÁ.
|
||||
Bajados de Google Fonts una vez y commiteados: la página no le pide nada a terceros,
|
||||
que es lo mínimo coherente para un sitio sobre no depender de binarios ajenos.
|
||||
Las dos familias son SIL OFL 1.1 — ver fuentes/LICENCIA-OFL-*.txt. */
|
||||
@font-face {
|
||||
font-family: 'Chivo';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: url(fuentes/chivo-900-latin.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Sans';
|
||||
font-style: normal;
|
||||
font-weight: 100 700;
|
||||
font-display: swap;
|
||||
src: url(fuentes/ibm-plex-sans-var-latin.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(fuentes/ibm-plex-mono-400-latin.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Mono';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url(fuentes/ibm-plex-mono-500-latin.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Chivo';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: url(fuentes/chivo-900-latin-ext.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Sans';
|
||||
font-style: normal;
|
||||
font-weight: 100 700;
|
||||
font-display: swap;
|
||||
src: url(fuentes/ibm-plex-sans-var-latin-ext.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(fuentes/ibm-plex-mono-400-latin-ext.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Mono';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: url(fuentes/ibm-plex-mono-500-latin-ext.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
Copyright 2019 The Chivo Project Authors (https://github.com/Omnibus-Type/Chivo)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
https://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,93 @@
|
||||
Copyright © 2017 IBM Corp. with Reserved Font Name "Plex"
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
|
||||
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,390 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es" data-lang="es">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>takana — la forja determinista</title>
|
||||
<meta name="description" content="Una distribución de Linux con dos pisos: un laboratorio hermético que compila todo desde fuente y direcciona por hash, y un Linux clásico y mutable encima.">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<link rel="icon" href="simbolo.svg" type="image/svg+xml">
|
||||
<link rel="stylesheet" href="fuentes.css">
|
||||
<meta property="og:title" content="takana — la forja determinista">
|
||||
<meta property="og:description" content="Un laboratorio hermético abajo, un Linux clásico y mutable arriba. 941 recetas, 926 selladas.">
|
||||
<meta property="og:url" content="https://takana-os.net/">
|
||||
<meta property="og:type" content="website">
|
||||
<style>
|
||||
/* ── paleta oficial (docs/marca/README.md) ─────────────────────────────────────
|
||||
Obsidiana #17130E · Piedra #2A241B · Alpaca #F2EBDD
|
||||
Brasa #DF6B2A · Inti #E3A63D · Rojo fragua #A63A25 · Chispa #FFF6DE
|
||||
El tema claro OSCURECE brasa para el texto: #DF6B2A sobre alpaca no llega a 3:1. */
|
||||
:root{
|
||||
--obsidiana:#17130E;--piedra:#2A241B;--alpaca:#F2EBDD;
|
||||
--brasa:#DF6B2A;--inti:#E3A63D;--fragua:#A63A25;--chispa:#17130E;
|
||||
--fondo:#F2EBDD;--papel:#FAF6EC;--papel2:#EAE0CC;--linea:#DBCFB5;--linea2:#C4B593;
|
||||
--texto:#17130E;--tenue:#544A3C;--debil:#6B604E;
|
||||
--acento:#9E3F16;--acento2:#8A5A12;
|
||||
--display:"Chivo","Arial Black",system-ui,sans-serif;
|
||||
--sans:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
|
||||
--mono:"IBM Plex Mono",ui-monospace,"DejaVu Sans Mono",monospace;
|
||||
color-scheme:light}
|
||||
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
|
||||
--chispa:#FFF6DE;
|
||||
--fondo:#17130E;--papel:#1D1813;--papel2:#2A241B;--linea:#332B21;--linea2:#4A3F30;
|
||||
--texto:#F2EBDD;--tenue:#B8AB95;--debil:#9C907B;
|
||||
--acento:#E8834A;--acento2:#E3A63D;
|
||||
color-scheme:dark}}
|
||||
:root[data-theme="dark"]{
|
||||
--chispa:#FFF6DE;
|
||||
--fondo:#17130E;--papel:#1D1813;--papel2:#2A241B;--linea:#332B21;--linea2:#4A3F30;
|
||||
--texto:#F2EBDD;--tenue:#B8AB95;--debil:#9C907B;
|
||||
--acento:#E8834A;--acento2:#E3A63D;
|
||||
color-scheme:dark}
|
||||
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
html{scroll-behavior:smooth}
|
||||
body{background:var(--fondo);color:var(--texto);font:17px/1.62 var(--sans);
|
||||
-webkit-font-smoothing:antialiased;overflow-x:hidden}
|
||||
.envoltura{max-width:840px;margin:0 auto;padding:0 1.5rem}
|
||||
p{margin:0 0 1rem}
|
||||
a{color:inherit;text-decoration:none}
|
||||
h1,h2,h3{font-weight:600;letter-spacing:-.01em;line-height:1.15}
|
||||
code{font:.86em/1.5 var(--mono);background:var(--papel2);border:1px solid var(--linea);
|
||||
border-radius:5px;padding:.08em .38em}
|
||||
:root[data-lang="es"] [data-l="en"],:root[data-lang="en"] [data-l="es"]{display:none!important}
|
||||
|
||||
/* el símbolo: martillo en retícula tocapu 7×7 */
|
||||
.simbolo{display:inline-block;flex:0 0 auto;aspect-ratio:1}
|
||||
.simbolo .chispa{fill:var(--chispa)}
|
||||
|
||||
header.barra{position:sticky;top:0;z-index:60;
|
||||
background:color-mix(in srgb,var(--fondo) 88%,transparent);
|
||||
backdrop-filter:blur(10px);border-bottom:1px solid var(--linea)}
|
||||
.barra .envoltura{display:flex;align-items:center;gap:1rem;height:58px;max-width:1080px}
|
||||
.marca{display:flex;align-items:center;gap:.55rem;
|
||||
font:900 .95rem/1 var(--display);letter-spacing:.06em;text-transform:uppercase}
|
||||
.marca .simbolo{width:20px}
|
||||
nav.enlaces{margin-left:auto;display:flex;gap:1.15rem;font-size:.88rem}
|
||||
nav.enlaces a{color:var(--tenue)}
|
||||
nav.enlaces a:hover{color:var(--acento)}
|
||||
.perillas{display:flex;gap:.35rem}
|
||||
.perilla{font:500 .76rem/1 var(--sans);color:var(--tenue);background:transparent;
|
||||
border:1px solid var(--linea2);border-radius:99px;padding:.42rem .6rem;cursor:pointer}
|
||||
.perilla:hover{color:var(--texto);border-color:var(--acento)}
|
||||
.perilla.on{color:var(--acento);font-weight:700;border-color:var(--acento)}
|
||||
@media(max-width:860px){nav.enlaces{display:none}.perillas{margin-left:auto}}
|
||||
|
||||
.portada{position:relative;padding:4.6rem 0 2.6rem;overflow:hidden}
|
||||
.portada .fragua{position:absolute;inset:-45% -25% 5% -25%;pointer-events:none;z-index:0;
|
||||
background:radial-gradient(42% 46% at 22% 32%,color-mix(in srgb,var(--brasa) 26%,transparent),transparent 70%),
|
||||
radial-gradient(42% 46% at 76% 22%,color-mix(in srgb,var(--inti) 20%,transparent),transparent 70%),
|
||||
radial-gradient(38% 42% at 55% 60%,color-mix(in srgb,var(--fragua) 16%,transparent),transparent 70%);
|
||||
filter:blur(14px)}
|
||||
.portada .envoltura{position:relative;z-index:1}
|
||||
.antetitulo{font:.72rem/1 var(--mono);letter-spacing:.2em;text-transform:uppercase;
|
||||
color:var(--debil);margin-bottom:1rem}
|
||||
.titular{display:flex;align-items:center;gap:1.1rem;margin-bottom:.9rem}
|
||||
.titular .simbolo{width:clamp(48px,9vw,74px)}
|
||||
h1{font:900 clamp(3rem,10vw,5.2rem)/.92 var(--display);letter-spacing:.01em;
|
||||
text-transform:uppercase;
|
||||
background:linear-gradient(100deg,var(--fragua),var(--brasa) 52%,var(--inti));
|
||||
-webkit-background-clip:text;background-clip:text;color:transparent}
|
||||
.lema{font:400 clamp(1.1rem,2.4vw,1.35rem)/1.45 var(--sans);color:var(--texto);max-width:44ch}
|
||||
.botones{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1.6rem}
|
||||
.boton{display:inline-flex;align-items:center;gap:.4rem;font:600 .9rem/1 var(--sans);
|
||||
padding:.75rem 1.1rem;border-radius:99px;border:1px solid var(--linea2);color:var(--texto);
|
||||
transition:border-color .2s,transform .2s}
|
||||
.boton:hover{transform:translateY(-1px);border-color:var(--acento)}
|
||||
.boton.lleno{border-color:transparent;color:#17130E;
|
||||
background:linear-gradient(100deg,var(--brasa),var(--inti))}
|
||||
|
||||
section.franja{padding:3.4rem 0;border-top:1px solid var(--linea)}
|
||||
.sello{display:flex;align-items:center;gap:.5rem;font:.7rem/1 var(--mono);letter-spacing:.18em;
|
||||
text-transform:uppercase;color:var(--debil);margin-bottom:.9rem}
|
||||
.sello .simbolo{width:12px}
|
||||
.franja h2{font-size:clamp(1.55rem,3.4vw,2rem);margin-bottom:1rem}
|
||||
.franja p{color:var(--tenue)}
|
||||
.franja p strong,.franja li strong{color:var(--texto)}
|
||||
|
||||
ul.limpia{list-style:none;margin:.4rem 0 1rem}
|
||||
ul.limpia li{position:relative;padding-left:1.15rem;margin-bottom:.45rem;color:var(--tenue);font-size:.95rem}
|
||||
ul.limpia li::before{content:"";position:absolute;left:0;top:.62em;width:7px;height:2px;background:var(--brasa)}
|
||||
|
||||
.marco{border:1px solid var(--linea);border-radius:14px;background:var(--papel);
|
||||
padding:1.3rem 1.4rem;margin-bottom:1rem;position:relative;overflow:hidden}
|
||||
.marco::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;
|
||||
background:linear-gradient(90deg,var(--fragua),var(--brasa),var(--inti))}
|
||||
.marco h3{font-size:1.15rem;margin-bottom:.4rem}
|
||||
|
||||
/* la ficha de repo: la dirección, grande y copiable */
|
||||
.direccion{border:1px solid var(--linea2);border-radius:12px;background:var(--papel);
|
||||
padding:1rem 1.1rem;margin:.2rem 0 1rem}
|
||||
.direccion .etiqueta{font:.68rem/1 var(--mono);letter-spacing:.18em;text-transform:uppercase;
|
||||
color:var(--debil);margin-bottom:.5rem}
|
||||
.direccion .url{font:500 clamp(.86rem,2.3vw,1.02rem)/1.45 var(--mono);color:var(--acento);
|
||||
word-break:break-all}
|
||||
.direccion .url:hover{text-decoration:underline}
|
||||
|
||||
pre{font:.84rem/1.65 var(--mono);background:var(--papel2);border:1px solid var(--linea);
|
||||
border-radius:10px;padding:.85rem 1rem;overflow-x:auto;margin:0 0 1rem;color:var(--texto)}
|
||||
pre .p{color:var(--debil);user-select:none}
|
||||
pre .c{color:var(--debil)}
|
||||
|
||||
table{border-collapse:collapse;width:100%;margin:1rem 0 1.4rem;font-size:.9rem;display:block;overflow-x:auto}
|
||||
th,td{border:1px solid var(--linea);padding:.52rem .7rem;text-align:left;vertical-align:top}
|
||||
th{background:var(--papel2);font-weight:600;white-space:nowrap}
|
||||
td{color:var(--tenue)}
|
||||
td.n{font-family:var(--mono);white-space:nowrap;color:var(--texto)}
|
||||
.semaforo{white-space:nowrap}
|
||||
|
||||
.nota{font-size:.82rem;color:var(--debil);border-left:2px solid var(--linea2);padding-left:.8rem}
|
||||
|
||||
footer.pie{border-top:1px solid var(--linea);background:var(--papel);padding:2.6rem 0 3.4rem}
|
||||
.pie-rejilla{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:1.4rem}
|
||||
.pie-rejilla a.casa{display:block;font-weight:600;margin-bottom:.15rem}
|
||||
.pie-rejilla a.casa:hover{color:var(--acento)}
|
||||
.pie-rejilla p{font-size:.84rem;color:var(--debil);margin:0}
|
||||
.pie-fin{margin-top:2rem;font-size:.8rem;color:var(--debil)}
|
||||
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<svg width="0" height="0" style="position:absolute" aria-hidden="true">
|
||||
<symbol id="tocapu" viewBox="0 0 748 748">
|
||||
<rect x="0" y="0" width="100" height="100" fill="#A63A25"/>
|
||||
<rect x="108" y="0" width="100" height="100" fill="#DF6B2A"/>
|
||||
<rect x="216" y="0" width="100" height="100" fill="#E3A63D"/>
|
||||
<rect x="324" y="0" width="100" height="100" fill="#E3A63D"/>
|
||||
<rect x="432" y="0" width="100" height="100" fill="#E3A63D"/>
|
||||
<rect x="540" y="0" width="100" height="100" fill="#DF6B2A"/>
|
||||
<rect x="648" y="0" width="100" height="100" fill="#A63A25"/>
|
||||
<rect x="108" y="108" width="100" height="100" fill="#DF6B2A"/>
|
||||
<rect x="216" y="108" width="100" height="100" fill="#E3A63D"/>
|
||||
<rect x="324" y="108" width="100" height="100" class="chispa"/>
|
||||
<rect x="432" y="108" width="100" height="100" fill="#E3A63D"/>
|
||||
<rect x="540" y="108" width="100" height="100" fill="#DF6B2A"/>
|
||||
<rect x="0" y="216" width="100" height="100" fill="#A63A25"/>
|
||||
<rect x="108" y="216" width="100" height="100" fill="#DF6B2A"/>
|
||||
<rect x="216" y="216" width="100" height="100" fill="#E3A63D"/>
|
||||
<rect x="324" y="216" width="100" height="100" fill="#E3A63D"/>
|
||||
<rect x="432" y="216" width="100" height="100" fill="#E3A63D"/>
|
||||
<rect x="540" y="216" width="100" height="100" fill="#DF6B2A"/>
|
||||
<rect x="648" y="216" width="100" height="100" fill="#A63A25"/>
|
||||
<rect x="324" y="324" width="100" height="100" fill="#DF6B2A"/>
|
||||
<rect x="324" y="432" width="100" height="100" fill="#A63A25"/>
|
||||
<rect x="324" y="540" width="100" height="100" fill="#A63A25"/>
|
||||
<rect x="324" y="648" width="100" height="100" fill="#A63A25"/>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
<header class="barra"><div class="envoltura">
|
||||
<a class="marca" href="/"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg>takana</a>
|
||||
<nav class="enlaces">
|
||||
<a href="#pisos"><span data-l="es">Los dos pisos</span><span data-l="en">The two floors</span></a>
|
||||
<a href="#codigo"><span data-l="es">El código</span><span data-l="en">The code</span></a>
|
||||
<a href="#estado"><span data-l="es">El estado</span><span data-l="en">State</span></a>
|
||||
<a href="#paquetes"><span data-l="es">Paquetes</span><span data-l="en">Packages</span></a>
|
||||
</nav>
|
||||
<div class="perillas">
|
||||
<button class="perilla" data-poner-lang="es">ES</button>
|
||||
<button class="perilla" data-poner-lang="en">EN</button>
|
||||
<button class="perilla" id="tema" title="tema">◐</button>
|
||||
</div>
|
||||
</div></header>
|
||||
|
||||
<section class="portada"><div class="fragua" aria-hidden="true"></div><div class="envoltura">
|
||||
<p class="antetitulo"><span data-l="es">takana · de <em>takay</em>: golpear, martillar</span><span data-l="en">takana · from <em>takay</em>: to strike, to hammer</span></p>
|
||||
<div class="titular">
|
||||
<svg class="simbolo" viewBox="0 0 748 748" aria-hidden="true"><use href="#tocapu"/></svg>
|
||||
<h1>takana</h1>
|
||||
</div>
|
||||
<p class="lema">
|
||||
<span data-l="es">Una distribución de Linux con dos pisos: abajo un laboratorio hermético que compila todo desde fuente y guarda cada artefacto por su hash; arriba un Linux clásico y mutable donde se pueden romper cosas y volver atrás.</span>
|
||||
<span data-l="en">A Linux distribution with two floors: downstairs a hermetic laboratory that compiles everything from source and keeps every artefact by its hash; upstairs a classic, mutable Linux where you can break things and go back.</span>
|
||||
</p>
|
||||
<div class="botones">
|
||||
<a class="boton lleno" href="https://git.gioser.net/sergio/takana"><span data-l="es">El repositorio</span><span data-l="en">The repository</span> ↗</a>
|
||||
<a class="boton" href="#paquetes"><span data-l="es">Paquetes</span><span data-l="en">Packages</span></a>
|
||||
<a class="boton" href="https://tawasuyu.net">tawasuyu.net ↗</a>
|
||||
</div>
|
||||
</div></section>
|
||||
|
||||
<section class="franja" id="pisos"><div class="envoltura">
|
||||
<p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">01 · los dos pisos</span><span data-l="en">01 · the two floors</span></p>
|
||||
<h2><span data-l="es">Por qué dos pisos y no uno</span><span data-l="en">Why two floors and not one</span></h2>
|
||||
<p>
|
||||
<span data-l="es">Una distribución inmutable da reproducibilidad y quita la máquina: no se puede tocar nada sin aprender antes un lenguaje declarativo. Una clásica deja tocar todo y no sabe decir de dónde salió un binario. <strong>takana pone las dos, en pisos separados.</strong></span>
|
||||
<span data-l="en">An immutable distribution gives you reproducibility and takes the machine away: you cannot touch anything without first learning a declarative language. A classic one lets you touch everything and cannot tell you where a binary came from. <strong>takana has both, on separate floors.</strong></span>
|
||||
</p>
|
||||
<p>
|
||||
<span data-l="es">El <strong>laboratorio</strong> compila desde fuentes upstream con commits fijados, aislado (<code>bubblewrap</code> + <code>zig cc</code> + musl estático), y direcciona cada artefacto por su hash BLAKE3. El <strong>userland</strong> es un Linux normal, con <code>/bin</code>, <code>/lib</code> y <code>/etc</code> de verdad; los binarios se hidratan del almacén por enlaces duros. Se pueden pisar archivos en caliente y revertir cuando se quiera.</span>
|
||||
<span data-l="en">The <strong>laboratory</strong> compiles from upstream sources at pinned commits, sandboxed (<code>bubblewrap</code> + <code>zig cc</code> + static musl), and addresses every artefact by its BLAKE3 hash. The <strong>userland</strong> is an ordinary Linux, with a real <code>/bin</code>, <code>/lib</code> and <code>/etc</code>; binaries are hydrated from the store by hard links. You can overwrite files live and revert whenever you want.</span>
|
||||
</p>
|
||||
<div class="marco">
|
||||
<h3><span data-l="es">Las tres piezas del medio</span><span data-l="en">The three pieces in between</span></h3>
|
||||
<ul class="limpia">
|
||||
<li><span data-l="es"><strong>Overlay de experimentación.</strong> Un cambio sobre el sistema real, con red: <code>try</code>, <code>commit</code>, <code>discard</code>.</span><span data-l="en"><strong>Experimentation overlay.</strong> A change on the real system, with a safety net: <code>try</code>, <code>commit</code>, <code>discard</code>.</span></li>
|
||||
<li><span data-l="es"><strong>Diario de mutaciones.</strong> Un demonio <code>fanotify</code> registra lo que se cambia a mano. Se vive de forma imperativa y el sistema calcula el delta contra la base limpia — el diario <em>es</em> la configuración.</span><span data-l="en"><strong>Mutation journal.</strong> A <code>fanotify</code> daemon records what you change by hand. You live imperatively and the system computes the delta against the clean base — the journal <em>is</em> the configuration.</span></li>
|
||||
<li><span data-l="es"><strong>Manifiesto <code>.swm</code>.</strong> Se comparte la receta de la mutación —parche de fuente, banderas, ediciones de config—, no el binario cocinado. Quien lo recibe lo reproduce y lo verifica.</span><span data-l="en"><strong><code>.swm</code> manifest.</strong> You share the recipe for the mutation — source patch, flags, config edits — not the cooked binary. Whoever receives it reproduces and verifies it.</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div></section>
|
||||
|
||||
<section class="franja" id="codigo"><div class="envoltura">
|
||||
<p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">02 · el código</span><span data-l="en">02 · the code</span></p>
|
||||
<h2><span data-l="es">Dónde vive el repositorio</span><span data-l="en">Where the repository lives</span></h2>
|
||||
<p>
|
||||
<span data-l="es">Todo —el CLI, el laboratorio, el catálogo de recetas y el diseño completo— está en un solo repositorio, bajo licencia MIT.</span>
|
||||
<span data-l="en">Everything — the CLI, the laboratory, the recipe catalogue and the full design — lives in a single repository, under the MIT licence.</span>
|
||||
</p>
|
||||
|
||||
<div class="direccion">
|
||||
<p class="etiqueta"><span data-l="es">repositorio de código</span><span data-l="en">code repository</span></p>
|
||||
<a class="url" href="https://git.gioser.net/sergio/takana">https://git.gioser.net/sergio/takana</a>
|
||||
</div>
|
||||
|
||||
<pre><span class="p">$</span> git clone https://git.gioser.net/sergio/takana.git
|
||||
<span class="p">$</span> cd takana && cargo build --release
|
||||
<span class="p">$</span> ./target/release/takana --help</pre>
|
||||
|
||||
<p>
|
||||
<span data-l="es">El repositorio no trae binarios: trae <strong>recetas</strong>. Cada una fija la fuente upstream por commit o por sha256, y el hash del artefacto sale de la receta entera —fuente, compilador, banderas, fases y los hashes de sus dependencias—, así que se puede saber qué va a salir <em>antes</em> de compilar:</span>
|
||||
<span data-l="en">The repository ships no binaries: it ships <strong>recipes</strong>. Each one pins the upstream source by commit or sha256, and the artefact hash is derived from the whole recipe — source, compiler, flags, phases and the hashes of its dependencies — so you can know what will come out <em>before</em> building it:</span>
|
||||
</p>
|
||||
|
||||
<pre><span class="p">$</span> takana hash ripgrep <span class="c"># el ArtifactHash vigente, sin construir</span>
|
||||
<span class="p">$</span> takana build ripgrep <span class="c"># compila aislado y sella en el store</span>
|
||||
<span class="p">$</span> takana why-differs a/ b/ <span class="c"># si dos builds no coinciden, NOMBRA la causa</span></pre>
|
||||
|
||||
<div class="marco">
|
||||
<h3><span data-l="es">Cómo está repartido</span><span data-l="en">How it is laid out</span></h3>
|
||||
<ul class="limpia">
|
||||
<li><code>crates/</code> — <span data-l="es">el CLI, el laboratorio de build, el demonio, el diario y el overlay.</span><span data-l="en">the CLI, the build lab, the daemon, the journal and the overlay.</span></li>
|
||||
<li><code>recipes/</code> — <span data-l="es">el catálogo: una receta <code>.toml</code> por paquete.</span><span data-l="en">the catalogue: one <code>.toml</code> recipe per package.</span></li>
|
||||
<li><code>docs/</code> — <span data-l="es">el diseño entero (SDD y ADR). Empieza por <code>00-vision.md</code>.</span><span data-l="en">the entire design (SDDs and ADRs). Start at <code>00-vision.md</code>.</span></li>
|
||||
<li><code>scripts/</code> — <span data-l="es">la granja de compilación, la cosecha y los arneses de verificación.</span><span data-l="en">the build farm, the harvest and the verification harnesses.</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div></section>
|
||||
|
||||
<section class="franja" id="estado"><div class="envoltura">
|
||||
<p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">03 · el estado, medido</span><span data-l="en">03 · the state, measured</span></p>
|
||||
<h2><span data-l="es">Qué anda y qué no</span><span data-l="en">What works and what doesn't</span></h2>
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th><span data-l="es">Pieza</span><span data-l="en">Piece</span></th>
|
||||
<th class="semaforo"><span data-l="es">Estado</span><span data-l="en">State</span></th>
|
||||
<th><span data-l="es">Qué quiere decir</span><span data-l="en">What that means</span></th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span data-l="es">Núcleo del laboratorio</span><span data-l="en">Laboratory core</span></td><td class="semaforo">🟢</td><td><span data-l="es">Compila aislado y direcciona por hash BLAKE3.</span><span data-l="en">Sandboxed builds, BLAKE3 content addressing.</span></td></tr>
|
||||
<tr><td><span data-l="es">Auto-hospedaje</span><span data-l="en">Self-hosting</span></td><td class="semaforo">🟢</td><td><span data-l="es">El toolchain se reconstruye a sí mismo dentro de una máquina virtual, bit por bit igual.</span><span data-l="en">The toolchain rebuilds itself inside a VM, bit for bit identical.</span></td></tr>
|
||||
<tr><td><span data-l="es">Cadena Rust/LLVM</span><span data-l="en">Rust/LLVM chain</span></td><td class="semaforo">🟢</td><td><span data-l="es">De mrustc hasta rustc, sin binarios ajenos de confianza.</span><span data-l="en">From mrustc up to rustc, with no trusted foreign binaries.</span></td></tr>
|
||||
<tr><td><span data-l="es">Kernel propio</span><span data-l="en">Own kernel</span></td><td class="semaforo">🟢</td><td><span data-l="es">Linux compilado acá (6.16.12 y 7.1.2), que arranca la máquina y reproduce idéntico.</span><span data-l="en">Linux built here (6.16.12 and 7.1.2), boots the machine and reproduces identically.</span></td></tr>
|
||||
<tr><td><span data-l="es">Catálogo</span><span data-l="en">Catalogue</span></td><td class="n">941</td><td><span data-l="es"><strong>926 selladas</strong>, 15 en deuda. Una granja compila y promueve las que funcionan.</span><span data-l="en"><strong>926 sealed</strong>, 15 in debt. A farm builds and promotes the ones that work.</span></td></tr>
|
||||
<tr><td><span data-l="es">Almacén</span><span data-l="en">Store</span></td><td class="n">1407</td><td><span data-l="es">Artefactos direccionados por contenido, cada uno con su hash.</span><span data-l="en">Content-addressed artefacts, each with its hash.</span></td></tr>
|
||||
<tr><td><span data-l="es">Paquetería</span><span data-l="en">Packaging</span></td><td class="semaforo">🟢</td><td><span data-l="es">Empaquetar, repositorio firmado, instalar, desinstalar, dependencias y repo por red.</span><span data-l="en">Package, signed repository, install, uninstall, dependencies and network repo.</span></td></tr>
|
||||
<tr><td><span data-l="es">Escritorios</span><span data-l="en">Desktops</span></td><td class="semaforo">🟢</td><td><span data-l="es">Cuatro perfiles con su clausura sellada: KDE 418/420, GNOME 318/319, COSMIC 282/283, sway 269/270.</span><span data-l="en">Four profiles with their closure sealed: KDE 418/420, GNOME 318/319, COSMIC 282/283, sway 269/270.</span></td></tr>
|
||||
<tr><td><span data-l="es">Instalar en disco real</span><span data-l="en">Install on a real disk</span></td><td class="semaforo">🟡</td><td><span data-l="es">Las imágenes EFI/ISO arrancan en metal; el instalador desde el vivo está a medias.</span><span data-l="en">EFI/ISO images boot on bare metal; the installer from the live system is half done.</span></td></tr>
|
||||
<tr><td><span data-l="es">Distro redonda</span><span data-l="en">A rounded distro</span></td><td class="semaforo">⚪</td><td><span data-l="es">Instalable por alguien que no la escribió. Todavía no.</span><span data-l="en">Installable by somebody who didn't write it. Not yet.</span></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>
|
||||
<span data-l="es">Lo más difícil ya está: <strong>no dependemos de binarios precocidos de nadie</strong>. Partiendo de un compilador mínimo, takana reconstruye su propio Rust, su propio kernel y sus propias herramientas — y al hacerlo dos veces da exactamente el mismo resultado. Se probó dentro de una máquina virtual, no en teoría.</span>
|
||||
<span data-l="en">The hardest part is done: <strong>we depend on nobody's precooked binaries</strong>. Starting from a minimal compiler, takana rebuilds its own Rust, its own kernel and its own tools — and doing it twice gives exactly the same result. It was proved inside a virtual machine, not in theory.</span>
|
||||
</p>
|
||||
<p class="nota">
|
||||
<span data-l="es">Las cifras salen de <code>docs/state/build-state.json</code> y del almacén de la caja, medidas el 2026-09-21. No se estiman: se cuentan.</span>
|
||||
<span data-l="en">The figures come from <code>docs/state/build-state.json</code> and the box's store, measured on 2026-09-21. They are not estimated: they are counted.</span>
|
||||
</p>
|
||||
</div></section>
|
||||
|
||||
<section class="franja" id="paquetes"><div class="envoltura">
|
||||
<p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">04 · los paquetes</span><span data-l="en">04 · the packages</span></p>
|
||||
<h2><span data-l="es">El repositorio de paquetes</span><span data-l="en">The package repository</span></h2>
|
||||
<p>
|
||||
<span data-l="es">El índice está firmado y cada paquete trae la <em>receta</em> de su contenido, no el binario cocinado: <code>install</code> resuelve el nombre, verifica la firma del índice y <strong>reconstruye desde fuente</strong> antes de hidratar. Un origen de descarga no necesita ser de confianza — lo que se verifica es el contenido.</span>
|
||||
<span data-l="en">The index is signed and each package carries the <em>recipe</em> for its content, not the cooked binary: <code>install</code> resolves the name, verifies the index signature and <strong>rebuilds from source</strong> before hydrating. A download origin does not need to be trusted — what gets verified is the content.</span>
|
||||
</p>
|
||||
|
||||
<div class="direccion">
|
||||
<p class="etiqueta"><span data-l="es">repositorio de paquetes</span><span data-l="en">package repository</span></p>
|
||||
<a class="url" href="/repo/">https://takana-os.net/repo/</a>
|
||||
</div>
|
||||
|
||||
<pre><span class="p">$</span> takana install age --repo https://takana-os.net/repo --trust ./trust</pre>
|
||||
|
||||
<p class="nota">
|
||||
<span data-l="es">Hoy publica la clausura del perfil <code>servidor</code>. El mismo repo se sirve también en <a href="https://repo.gioser.net/">repo.gioser.net</a>; <code>--repo</code> acepta varios orígenes separados por coma y los prueba en orden.</span>
|
||||
<span data-l="en">It currently publishes the closure of the <code>servidor</code> profile. The same repo is also served at <a href="https://repo.gioser.net/">repo.gioser.net</a>; <code>--repo</code> takes several comma-separated origins and tries them in order.</span>
|
||||
</p>
|
||||
</div></section>
|
||||
|
||||
<section class="franja"><div class="envoltura">
|
||||
<p class="sello"><svg class="simbolo" viewBox="0 0 748 748"><use href="#tocapu"/></svg><span data-l="es">05 · la frontera</span><span data-l="en">05 · the border</span></p>
|
||||
<h2><span data-l="es">Qué tiene que ver con tawasuyu</span><span data-l="en">How it relates to tawasuyu</span></h2>
|
||||
<p>
|
||||
<span data-l="es"><strong>takana es el suelo; tawasuyu es lo que se para encima.</strong> No son dos mundos sueltos: comparten el almacén direccionado por contenido (BLAKE3), un bus entre el init de tawasuyu y el demonio de takana con contrato por bytes, el grafo de arranque, y <code>arje</code> —el proceso número uno de tawasuyu— como init de las imágenes, estático contra musl.</span>
|
||||
<span data-l="en"><strong>takana is the ground; tawasuyu is what stands on it.</strong> They are not two loose worlds: they share the content-addressed store (BLAKE3), a bus between tawasuyu's init and takana's daemon with a byte-level contract, the boot graph, and <code>arje</code> — tawasuyu's process number one — as the init of the images, statically linked against musl.</span>
|
||||
</p>
|
||||
<p>
|
||||
<span data-l="es">Lo que sigue abierto está escrito y priorizado, no supuesto: consenso de reconstrucción M-de-N, y explicar <em>por qué difiere</em> cuando dos compilaciones no dan el mismo hash.</span>
|
||||
<span data-l="en">What is still open is written down and prioritised, not assumed: M-of-N rebuild consensus, and explaining <em>why it differs</em> when two builds don't produce the same hash.</span>
|
||||
</p>
|
||||
</div></section>
|
||||
|
||||
<footer class="pie"><div class="envoltura">
|
||||
<div class="pie-rejilla">
|
||||
<div>
|
||||
<a class="casa" href="https://git.gioser.net/sergio/takana"><span data-l="es">El repositorio</span><span data-l="en">The repository</span> ↗</a>
|
||||
<p>git.gioser.net/sergio/takana</p>
|
||||
</div>
|
||||
<div>
|
||||
<a class="casa" href="/repo/"><span data-l="es">Paquetes</span><span data-l="en">Packages</span></a>
|
||||
<p>takana-os.net/repo</p>
|
||||
</div>
|
||||
<div>
|
||||
<a class="casa" href="https://tawasuyu.net">tawasuyu.net ↗</a>
|
||||
<p><span data-l="es">El territorio que se para encima.</span><span data-l="en">The territory that stands on top.</span></p>
|
||||
</div>
|
||||
<div>
|
||||
<a class="casa" href="https://hifas.gioser.net">hifas ↗</a>
|
||||
<p><span data-l="es">Réplicas sin coordinarse, con demostración.</span><span data-l="en">Replicas without coordination, with a proof.</span></p>
|
||||
</div>
|
||||
</div>
|
||||
<p class="pie-fin">
|
||||
<span data-l="es">takana · licencia MIT · esta página se sirve del propio repositorio (<code>web/takana-os.net/</code>) y no le pide nada a terceros: las tipografías —Chivo e IBM Plex, ambas SIL OFL— viajan con ella.</span>
|
||||
<span data-l="en">takana · MIT licence · this page is served from the repository itself (<code>web/takana-os.net/</code>) and asks nothing of third parties: the typefaces — Chivo and IBM Plex, both SIL OFL — travel with it.</span>
|
||||
</p>
|
||||
</div></footer>
|
||||
|
||||
<script>
|
||||
(function(){
|
||||
var r=document.documentElement;
|
||||
function pintar(){
|
||||
var l=r.dataset.lang;
|
||||
document.querySelectorAll('[data-poner-lang]').forEach(function(b){
|
||||
b.classList.toggle('on', b.dataset.ponerLang===l);
|
||||
});
|
||||
r.setAttribute('lang', l);
|
||||
}
|
||||
try{ var g=localStorage.getItem('takana-lang'); if(g) r.dataset.lang=g;
|
||||
var t=localStorage.getItem('takana-tema'); if(t) r.dataset.theme=t; }catch(e){}
|
||||
if(!r.dataset.lang) r.dataset.lang = (navigator.language||'es').slice(0,2)==='es' ? 'es' : 'en';
|
||||
pintar();
|
||||
document.querySelectorAll('[data-poner-lang]').forEach(function(b){
|
||||
b.addEventListener('click', function(){
|
||||
r.dataset.lang=b.dataset.ponerLang; pintar();
|
||||
try{ localStorage.setItem('takana-lang', r.dataset.lang); }catch(e){}
|
||||
});
|
||||
});
|
||||
document.getElementById('tema').addEventListener('click', function(){
|
||||
var oscuro = r.dataset.theme ? r.dataset.theme==='dark'
|
||||
: matchMedia('(prefers-color-scheme:dark)').matches;
|
||||
r.dataset.theme = oscuro ? 'light' : 'dark';
|
||||
try{ localStorage.setItem('takana-tema', r.dataset.theme); }catch(e){}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 748 748"><style>.chispa{fill:#17130E}@media (prefers-color-scheme:dark){.chispa{fill:#FFF6DE}}</style><rect x="0" y="0" width="100" height="100" fill="#A63A25"/><rect x="108" y="0" width="100" height="100" fill="#DF6B2A"/><rect x="216" y="0" width="100" height="100" fill="#E3A63D"/><rect x="324" y="0" width="100" height="100" fill="#E3A63D"/><rect x="432" y="0" width="100" height="100" fill="#E3A63D"/><rect x="540" y="0" width="100" height="100" fill="#DF6B2A"/><rect x="648" y="0" width="100" height="100" fill="#A63A25"/><rect x="108" y="108" width="100" height="100" fill="#DF6B2A"/><rect x="216" y="108" width="100" height="100" fill="#E3A63D"/><rect x="324" y="108" width="100" height="100" class="chispa"/><rect x="432" y="108" width="100" height="100" fill="#E3A63D"/><rect x="540" y="108" width="100" height="100" fill="#DF6B2A"/><rect x="0" y="216" width="100" height="100" fill="#A63A25"/><rect x="108" y="216" width="100" height="100" fill="#DF6B2A"/><rect x="216" y="216" width="100" height="100" fill="#E3A63D"/><rect x="324" y="216" width="100" height="100" fill="#E3A63D"/><rect x="432" y="216" width="100" height="100" fill="#E3A63D"/><rect x="540" y="216" width="100" height="100" fill="#DF6B2A"/><rect x="648" y="216" width="100" height="100" fill="#A63A25"/><rect x="324" y="324" width="100" height="100" fill="#DF6B2A"/><rect x="324" y="432" width="100" height="100" fill="#A63A25"/><rect x="324" y="540" width="100" height="100" fill="#A63A25"/><rect x="324" y="648" width="100" height="100" fill="#A63A25"/></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
Reference in New Issue
Block a user