Prototype Version History

From Ouroboros
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 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.26 (Current development branch)

Main plan: TBD

0.25 (Current version)

  • Replaced the Ethernet and UDP shim IPCPs with direct points of attachment (PoAs) for the unicast IPCP.
  • Ethernet LLC support is dropped.
  • Unicast routing now uses directed graphs, with separate link and forwarding flags per edge.
  • Reworked the MB-ECN congestion controller with heartbeat-based collapse detection.
  • Transmit rings now block on queueing delay to limit buffer bloat.
  • Added NIST curve hybrid KEMs (SecP256r1MLKEM768, SecP384r1MLKEM1024).
  • Replaced tomlc99 with tomlc17 for the IRMd configuration file.

0.24

  • Reworked FRCP: SACK/D-SACK, RACK-TLP-based loss detection, nonce-authenticated RTT probing, fragmentation, stream service with FIN.
  • Replaced the in_order QoS field with a service class (raw, message, stream).
  • Added the oftp file transfer tool over a stream flow.
  • Added periodic re-keying of encrypted flows (see Ouroboros_Tutorial_07.
  • Renamed enc.conf to sec.conf and added the auth (required/optional) peer authentication policy, cacert issuer pinning.
  • Reworked congestion avoidance (MB-ECN).
  • Added CRC-8, CRC-16 and CRC-64/NVMe checksums.

0.23

  • Added PQC support to the library, including ML-KEM, Hybrid ECDH-KEM key exchange and ML-DSA and SLH-DSA based authentication.
  • IRMd now negotiates encryption strength between endpoints based on lowest-floor exchange.
  • Replaced the rdrbuff with per-user and priviliged shared slab allocator pools for shared memory packet buffers.
  • Added automatic key rotation for encrypted flows.
  • Refactored the ring buffer implementation and removed the old rbuff_ll variant.
  • IRMd now allows direct ring buffer connections between local processes, reducing overhead for same-machine IPC.
  • Major refactoring of CMake modules, plus new targets for coverage reports and automatic version parsing from git tags.

0.22

  • 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