Sula es un servidor del protocolo Gemini escrito en Scryer Prolog cuyo nombre proviene de la terminación de la palabra española «cápsula». Se trata de una herramienta experimental que sirve páginas en formato Gemini —un protocolo ligero alternativo a la web tradicional— a través de conexiones TLS cifradas.
El proyecto requiere una versión parcheada de Scryer Prolog, una implementación moderna de Prolog. Dichos parches añaden cinco mejoras clave: una primitiva nativa para transmitir archivos binarios directamente al cliente TLS sin cargarlos en la memoria del intérprete; un arreglo en la lectura perezosa de flujos para que termine al alcanzar el fin de archivo en lugar de entrar en bucle; un bucle de aceptación de sockets que responde a la señal SIGINT; una adaptación de la biblioteca TLS a rustls; y la inclusión opcional del certificado de cliente en la negociación.
Para ejecutarlo basta con clonar el repositorio y lanzar el script sula.pl, que es un polyglot capaz de autodetectar Scryer Prolog. Acepta opciones en línea de comandos para indicar la dirección de escucha, el nombre de host esperado en el certificado, el directorio con el contenido a servir y la carpeta con los certificados. La herramienta exige que OpenSSL esté disponible, ya que al arrancar verifica que el nombre común del certificado coincida con el host configurado.
Entre sus funcionalidades incluye negociación de contenido según la extensión del archivo, manejo de respuestas binarias mediante transmisión nativa, registro etiquetado de eventos y apagado controlado mediante Ctrl+C. El código se organiza en módulos independientes para configuración, certificados, MIME, URI, respuestas y registro. Entre las características pendientes figuran autenticación de clientes, hosting virtual, limitación de tasa, recarga en caliente y soporte multi-hilo.
