Desafíos de ingeniería al desarrollar desde cero un núcleo sencillo de acceso a Internet científico (perspectiva de programación asistida por IA)

Tercer inning, esto realmente hacerlo desde cero: la dificultad ni siquiera está en “escribir un retransmisor”, sino en “aguantar un montón de trabajos sucios y pesados”.

Más o menos hay estas cuantas “pilas”:

  1. Diseño del protocolo
    Cómo hacer el handshake
    Cómo hacer la autenticación
    Si hay que hacer multiplexación o no
    Cómo manejar de forma unificada UDP, TCP, DNS
    Al principio por ahorrar esfuerzo, después casi siempre terminas reescribiendo por extensibilidad

  2. Pila de red multiplataforma
    Windows / Linux / macOS / Android / iOS se comportan todos distinto
    TUN/TAP, proxy del sistema, rutas, formas de tomar el control de DNS, todo es diferente
    Lo realmente asqueroso es la compatibilidad entre plataformas, no esas pocas líneas de socket

  3. Rendimiento
    En cuanto sube el número de conexiones, salen los problemas
    buffer, copias, contención de locks, planificación de corrutinas, fragmentación de memoria, coste de syscalls
    Que una sola conexión corra no significa que en producción aguante

  4. Estabilidad
    Reconexión tras cortes
    Cambio de red
    Suspensión y reanudación
    NAT / IPv6 / MTU / fragmentación
    Con muchos escenarios anómalos, los logs te pueden dar PTSD de mirarlos

  5. Cifrado y seguridad
    Intercambio de claves
    Protección contra replay
    Forward secrecy
    Reanudación de sesión
    Seguridad en la distribución de configuración
    Aquí lo que más da miedo es “inventarte tu propia criptografía”, eso es subirte la dificultad tú mismo

  6. Estrategia de tráfico y encapsulado
    Cómo trocear los paquetes
    Cómo ocultar el header
    Cómo evitar que las huellas sean demasiado fijas
    Esto no es “que se pueda comunicar” y ya, sino “que no explote a largo plazo”

  7. Manejo de DNS
    Resolver localmente o resolver en remoto
    DoH / DoT / UDP puro
    Envenenamiento, caché, consistencia, fugas
    Muchos problemas de “claramente conecta pero está raro” vienen de DNS

  8. Enrutamiento y split tunneling
    Global, por reglas, por dominio, por IP, por proceso
    GeoIP / GeoSite / reglas personalizadas
    El sistema de reglas cuanto más lo escribes más se parece a medio intérprete

  9. Observabilidad
    Logs
    tracing
    Estado de conexiones
    Panel de estadísticas
    Sin esto, depuras a base de esoterismo y “si eres sincero, funciona”

  10. Sistema de configuración
    Actualización en caliente
    Compatibilidad de configuración
    Migración de versiones
    Validación de schema
    A los usuarios les encanta escribir configuraciones como basura y luego culpar al core de inestable

  11. Ecosistema de cliente
    GUI
    Suscripciones
    Importación/exportación de configuración
    Integración con el sistema
    Cuando haces un producto de verdad, el core no necesariamente es la parte con más código; lo de alrededor lo es

  12. Los propios agujeros de la programación asistida por IA
    La IA es muy buena escribiendo código de red “que parece correcto”
    Pero en concurrencia, condiciones de borde y máquinas de estados de protocolo es especialmente fácil que meta minas
    Puede ayudarte a montar el armazón, completar boilerplate, escribir tests
    No puede sustituirte verificando que el protocolo es correcto
    Al final suele quedar: la IA saca código en 5 minutos, tú te pasas 5 horas capturando paquetes para encontrar el culpable

Si solo haces un núcleo sencillo, la dificultad más realista en ingeniería en realidad es:
Definir primero un objetivo mínimo
No hacerlo multiplataforma desde el arranque
No inventarte un protocolo desde el arranque
No hacer un motor de reglas desde el arranque
No montar desde el arranque una “arquitectura universal de alto rendimiento”

Si no, es muy fácil que acabe así:

Primera semana: voy a hacer el núcleo de nueva generación
Segunda semana: primero que corra el reenvío TCP
Tercera semana: ¿por qué DNS volvió a explotar?
Cuarta semana: mejor me voy a modificar a lo bestia un proyecto existente

Una frase de crítica afilada:
Desde cero escribir algo que “corra” no es tan difícil; lo difícil es escribir algo “mantenible a largo plazo, multiplataforma, estable, extensible y con un rendimiento no lamentable”.

Si lo que quieres es evaluar la dificultad de “con ayuda de IA, de cero a un MVP usable”, puedo seguir con ese criterio y desglosártelo en:
Prototipo de 2 semanas
1 mes para uso propio
3 meses para que mantenerlo no sea ir a la cárcel
En esas versiones.