Prototype Version History
Jump to navigation
Jump to search
Ouroboros is still in an early proof-of-concept prototype phase. Versions 0.x.y have no forward nor backward compatibility. We bump minor version with API or protocol changes. Within a minor version, different patch levels should be compatible (no guarantees).
Once the functionality has reached a minimal critical mass, and a sufficient degree of software stability has been achieved, a version 1.0.0 will be released with the intention to maintain backwards compatibility from that point. This is still many (man)years off.
This page summarizes the progress and the plans for the next prototype (minor) version. For a summary of the current implementation state, see our status page.
0.24 (Current development branch)
0.23
- Post-quantum cryptography support — Added PQC support to the library, including SLH-DSA tests and per-algorithm gating, and PQC-aware config loading in IRMd.
- Slab allocator replacing rdrbuff — Replaced the rdrbuff with a proper slab allocator for shared memory packet buffers, a significant data-plane redesign.
- Automatic key rotation for encryption — Added automatic key rotation for encrypted flows, with related fixes for IV/tag allocation and speedup of key rotation tests.
- Strength-based crypto negotiation — IRMd now negotiates encryption strength between endpoints, with fixes for client-side encryption requests.
- Per-user packet pools — Introduced per-user shared memory packet pools, improving multi-user isolation. Also added mlock() on shared memory buffers.
- Rbuff refactoring — Refactored the ring buffer implementation and removed the old "lockless" rbuff_ll variant.
- Direct rbuff between local processes — IRMd now allows direct ring buffer connections between local processes, reducing overhead for same-machine IPC.
- Linked list with length tracking — Added struct llist to the library, providing list operations that also track element count.
- CMake build system overhaul — Major refactoring of CMake modules back to in-tree CMakeLists, plus new targets for coverage reports, build_tests, and automatic version parsing from git tags.
- Container compatibility & OS X fixes — Added a container compatibility build option, and fixed SSM pool creation, OpenSSL includes, and explicit_bzero on OS X.
0.22 (Current version, November 7th 2025)
- Added flow authentication and the Flow Allocation Protocol header in the irmd
- Added UDP/IPv6 support
- Added protocol level debug logging
- Moved encryption control from qosspec to naming system
- Removed qosspec parameter from the broadcast API
- Refactored and simplified enrolment and connection manager
- Complete rewrite of the DHT for the unicast layer
- Refactored Ethernet IPCPs
- Deprecated appveyor in favor of codeberg/woodpecker CI
- Improved test coverage
- Improved systemd service and pkgconfig installation logic
- Improved ctest integration into build system
0.21
- Moved public key handling from library to IRMd
- Refactor of IRMd / registry implementation
0.20
- Improved configuration file handling
- Improved FUSE stability
- Log unique IDs to enrollment requests
- Print logo on startup when logging to std output
- Fix most common hangs on exit
0.19
- Pass the N-1 layer MPL at flow allocation
- Add flow liveness monitoring.
- Allow multiple directories in an IPCP
- Dropped support for raptor
- Use one UDP port for the IPCP over UDP/IPv4
0.18
- Use QoS cube for ECN marking
- Always use 64-bit endpoint IDs
- Add RIB statistics for flow allocator
- Add congestion avoidance policies
- Add flow control policies
- Add GCC 10 static analyzer build option
0.17
- Rename systemd service to ouroboros
- Add tests for LFA and ECMP routing
- Add Equal-Cost Multi-Path routing policy
0.16
- Removed support for SWIG bindings
- Add support for appveyor CI
- Add encryption support using OpenSSL
0.15
- Rename normal IPCP to unicast IPCP
- Add flow_join API for broadcast IPCP
0.14
- Add Explicit Congestion Notification field to DT
- Add broadcast IPCP
0.13
- Disable CRC32 by default
0.12
- Split error checking from FRCT
- Rename port_id to flow_id
- Rename SDU to packet
- Pass QoS spec at flow allocation
- Initial retransmission logic
- Support QoS specs for oping
- Use Endpoint ID's in fa protocol instead of fd
0.11
- Simplify reg/unreg API
- Support for partial packet reads
- Add IPCP over Ethernet DIX
0.10
- Revise lookup tracking in DHT
- Update man pages to CC-BY 4.0
0.9
- Add patchlevels for future versions
- Add support for Raptor FPGA Layer-1 PoC
0.8
- Use "program" instead of "application process"
- Use "process" instead of "application process instance"
- Send timestamp in oping
- Use 3-clause BSD license for tools
0.7
- Use ELF sections to init/fini ouroboros
- Simplify PFT for LFA routing
- Add RIB to expose metrics via FUSE
- Deprecate Common Distribution Application Protocol (CDAP)
- Simplify enroll API
- Deprecate Graph Adjancency Manager component
0.6
- Added a threadpool manager for improved concurrency
- Added Loop-Free Alternates (LFA) routing
- Add DHT as default directory policy
0.5
- Move FRCT logic from IPCP to application library
- Split connection establishment from flow allocation
- Split flow manager into flow allocator and data transfer
- Register hashes in a layer instead of cleartext name
- Add netmap support for LLC shim
- Initial lockless rbuff implementation
- Add generic thread pool management
- Revise flow allocation API
- Split authentication from CACEP
- Revise CACEP API
- Exchange application protocol information during CACEP
0.4
- Add support for syslog logging
- Revise RIB/CDAP as a btree structure
- Add B-tree implementation
- Add full-mesh policy for GAM
- Add Graph Adjacency Manager (GAM)
- Add flat address policy
- Add initial directory to normal IPCP
- Initial RIB/CDAP synchronization
- Add RIB/CDAP objects
- Add operf tool
0.3
- Move all shared memory (shm) mgmt to IRMd
- Use shared memory tx/rx ring buffer per flow
- Split off bind/unbind (map/unmap name to process) from reg/unreg
0.2
- Add shim DIF over LLC Ethernet
- Add CBR tool for performance testing
- Add IPCP over local memory
0.1
- Add full flow allocator to UDP shim
- Implementation of flow related ops
- Simple echo application
- Initial shim IPCP over UDP/IPv4
- Add RINA name helpers
- Initial library code
- Initial SDU/PDU buffer code
- Initial APIs for IRM/IPCP/CFAP/DIF allocator
- Initial CDAP header
- LICENSE and CONTRIBUTORS files
- Initial documenents and GPLv2 license