Repository navigation
Doc seed linux README
Copia di
seed/linux-x86_64/README.md— torna a Documenti · Home
Il seed Linux è un ELF64 statico senza libc né linker dinamico, che usa solo le
syscall Linux (openat/read/write/exit, isolate nelle routine os_*). E2
copre lo stesso dominio di codice macchina del PE Windows: interi Triad-Core, variabili,
funzioni (forma breve e function … end), ricorsione, Bool, operatori, if/elseif/
else, while, let, begin, lambda/chiusure, stringhe base + string(), nothing,
simboli, liste (costruzione, stampa, push!, get). Lo stdout è byte-identico al
PE sui golden condivisi (parità N17, TASK.md).
Il dump esadecimale è seed.hex: è la fonte committata.
| invocazione | stdout | stderr | exit |
|---|---|---|---|
./seed file.td [ARG…] |
output del programma, byte-exatto | vuoto |
0 (o l'exit del programma) |
./seed (nessun argomento) |
vuoto | usage: seed FILE.td |
2 |
./seed "" (path vuoto) |
vuoto | usage: seed FILE.td |
2 |
./seed missing.td |
vuoto | seed: cannot open file |
1 |
sorgente ≥ 0x100000 byte |
vuoto | seed: read error |
1 |
I codici di uscita seguono il contratto os_*
(.scratch/seed-linux-nativo/issues/03): 2 = uso errato, 1 = fallimento di
apertura/lettura o sorgente troppo grande (l'arena riserva 1 MiB di sorgente dalla N20,
lo slot della mask di blocco è a +0x100000, stesso limite del PE). Il caso
«troppo grande» condivide l'etichetta read_fail con i veri errori di lettura (limite
noto del seed: una sola etichetta di uscita per i due casi, quindi la diagnostica è
seed: read error).
Il PE è muto: le diagnostiche su stderr esistono solo sull'ELF, fuori dal contratto
di parità (che copre solo lo stdout byte-identico). Gli errori di runtime di un programma
(es. i probe bad_*) escono con codice non zero e stdout vuoto, identicamente al PE; i
limiti noti del PE restano limiti documentati (vedi
tests/probes/README.md).
-
File ELF: 11977 byte (
0x2ec9) -
Base:
0x400000; entry:0x400078 -
Program header: un solo
PT_LOADR|X, offset 0, filesz/memsz0x2ec9, align0x1000(nessun section header, come il dump del PE: l'artefatto è puro codice macchina) -
sha256 di
seed.hex:8457051F7D083AB834EC860502605A58F1ECCE4A5ABCA88391A804898315D613 -
sha256 dell'ELF decodificato:
CDBC3C3D901D534B66C6FE4C0E4248E968AA2F6333F8F9C10B052B5FAD7D6361
cd seed/linux-x86_64
xxd -r -p seed.hex seed
chmod +x seed
./seed ../../../tests/probes/test_simple.td # stampa: test
echo $? # 0
sh check_seed.sh # 7 casi di accettazione (contratto errori/limiti), byte-exattiGate completo dalla radice del repository (conformance 42 + probe + golden S1 + smoke):
sh verify.shVerifiche opzionali con binutils:
readelf -h seed # ELF64, ET_EXEC, entry 0x400078
readelf -l seed # un PT_LOAD R Enode seed/dev/gen_seed.js linux seed/linux-x86_64/seed.hex(il path di uscita predefinito è già seed/linux-x86_64/seed.hex; la forma esplicita
è mostrata per chiarezza). Il dump è la fonte canonica e riproducibile; l'ELF prodotto
può essere committato insieme a esso (non è più in .gitignore). Il generatore è uno
strumento di sviluppo e non fa parte della catena S0→S4. Il job CI seed-linux riesegue
il generatore e richiede l'uguaglianza con cmp (anti-drift), più check_seed.sh e
verify.sh.
- Buffer del path: 256 byte, copia non limitata (rispecchia il parsing di
GetCommandLineAnel PE). - Sorgente: max
0xFFFFFbyte (1 MiB − 1, arena N20;0x100000è lo slot della mask); buffer di lettura0x100000. Una sorgente di0x100000byte o più è rifiutata (exit 1). - I limiti del dominio di codice macchina del PE (heap dei letterali di lista, scope
dinamico, massimo 4 parametri, letterali di lista su più righe, …) sono misurati e
registrati in
tests/probes/README.md. Tutti i 42 casi Core,listecompreso, sono richiesti dal gate senza esclusioni.
-
E3 (N18) ✅ chiusa: toolchain Linux senza Node —
install.sh→bin/triadcon questo seed come unico runtime (la logica di stub/fallback è uscita dal launcher), CLI POSIXbin/triad-cli(run/test/status), CIseed-linuxsull'ELF nativo.
Task principale dal 2026-11-03: E1/E2/E3 sono la task principale del progetto (
TASK.md→ «Task principale (2026-11-03): seed Linux nativo — senza Wine», N15–N18) e precedono N03 e le altre sotto-task meccaniche.
La toolchain POSIX è pronta: ./install.sh ridecodifica questo seed da seed.hex
(anti-drift), installa bin/triad e bin/triad-cli come wrapper a percorso assoluto in
~/.local/bin e supera uno smoke test byte-exatto (mismatch => installazione
fallisce). Il launcher esegue sempre il seed: nessun fallback JS nel percorso utente
(il riferimento ../dev/triad_core.cjs resta solo nel tooling di sviluppo). Il job CI
linux-toolchain copre launcher + install + gate; seed-linux copre check_seed.sh,
hash PE/ELF, dump riproducibili e verify.sh.
Vedi ../dev/README.md e
../../BOOTSTRAP.md.
Parte prima
Parte seconda 4. Le parole del linguaggio 5. Valori e tipi 6. Espressioni, operatori e variabili 7. Decidere e ripetere 8. Funzioni e ricorsione 9. Lambda, chiusure e visibilità dei nomi 10. Liste e dati strutturati 11. Stringhe, simboli e byte 12. Quando le cose vanno storte 13. Progetto: un piccolo interprete
Parte terza 14. Tipi, struct e multiple dispatch 15. Programmazione logica 16. Codice come dato e macro 17. Garanzie, costrutti Full e interfaccia
Parte quarta 18. Anatomia del progetto e contratto di conformità 19. L'interprete di riferimento 20. Il seed in codice macchina 21. Verso il self-hosting 22. Gli strumenti di sviluppo
Appendici
- Riferimento dei builtin Core
- Catalogo conformance Core
- Catalogo conformance Full
- Sorgenti degli esempi
- Sorgenti self-hosted
- Documenti di riferimento
- Indice analitico
Manuale di consultazione