// fulgis.net LOCAL · LIBRE · LEAL

// dev log · WIP 2026

SM-Soda

Servidor HTTP estático nativo. Binario único, cero dependencias.
Equivalente a python3 -m http.server sin Python, sin runtime, sin kraken de dependencias. Doble implementación Lazarus/FPC + C — misma spec, dos toolchains, métricas reales.

WIP · 2026 Lazarus / FPC C99 ↗ github.com/Pako-Autarkes/sm-soda

// comportamiento esperado · ambas implementaciones

Servir ficheros estáticos desde directorio arbitrario
Directory listing si no existe index.html
MIME types básicos: html · css · js · png · jpg · svg · pdf · txt
404 limpio en fichero no encontrado
Puerto y directorio configurables por argumento
·TLS · auth · CGI · range requests — fuera de scope
Métrica FPC C
Binario (stripped) pendiente pendiente
RSS idle pendiente pendiente
Startup hasta primer byte pendiente pendiente
req/s (wrk, 10 conn) pendiente pendiente
Compilador fpc 3.2+ gcc · C99
Deps externas ninguna ninguna

Origen del proyecto publicado

Jun 2026

Todo empieza con una necesidad real: servir ficheros estáticos en local durante desarrollo sin depender de que haya un intérprete Python disponible. python3 -m http.server funciona, pero requiere runtime. En un entorno donde el objetivo es binarios nativos sin zoológico de dependencias, la solución obvia es escribirlo.

La doble implementación FPC + C no es redundancia — es el punto. Mismo comportamiento especificado, dos toolchains distintos, métricas reales comparables. Si difieren, hay un bug. Si coinciden, la spec está bien cubierta.

Decisión: C puro sobre C++ cerrado

Jun 2026

Pregunta obvia: ¿C o C++? El proyecto es I/O + strings + sockets BSD. No hay nada que justifique C++: sin clases, sin templates, sin STL. socket() · bind() · listen() · accept() · send() · stat() · read() — todo POSIX estándar.

C++ añadiría std::string para evitar strncpy/snprintf. No es suficiente motivo. C99, gcc, sin flags raros. Binario más pequeño, comparación más justa con FPC, aprendizaje más limpio.

Implementación feature 1: servir fichero estático en curso

Jun 2026

Primera iteración: GET /fichero.html → leer del disco → responder con headers HTTP/1.0 mínimos. Sin directory listing aún, sin MIME types, sin 404 elaborado. Solo el flujo básico funcionando en ambas implementaciones antes de añadir nada más.

Métricas tras esta feature: pendiente de compilación y medición.