[ANN] aDSA 1.3.0 — ZeroMQ-backed Annex E (DSA) runtime for GNAT — now runs on Windows and FreeBSD

aDSA is a free (GPLv3 + GCC Runtime Library Exception) Partition
Communication Subsystem for Ada’s Distributed Systems Annex (Annex E),
built on ZeroMQ — a runtime replacement for the deprecated PolyORB /
GLADE. The compiler side of Annex E is alive and well in FSF GNAT; aDSA
supplies the other half: System.RPC / System.Partition_Interface
implementations the generated stubs call into, plus pcs_gnatdist, a
gnatdist-style build tool that takes the classic .cfg configuration
language and produces the partition executables and a launcher.

It covers the full annex — RCI, RACW/RAS (including callbacks),
Shared_Passive (three backends: file, a cross-host store server, and
same-host shared memory), asynchronous calls, termination policies,
restart recovery, and the RM E.3 version check — plus opt-ins for zlib
compression, XDR wire format, and CurveZMQ encryption with per-partition
peer authentication. It is validated against the original PolyORB
examples/dsa corpus.

New in 1.3.0 — the platform release:

  • Windows 11: full bring-up with the Alire toolchain (gnat_native
    15.2.1 + gprbuild 26.0.1, Alire’s bundled MSYS2 bash). The verification
    corpus passes 6/6 on both build paths — the same scoreboard as Linux —
    and all three Shared_Passive backends run, including shared memory.
  • FreeBSD 15.1: corpus plus the full feature sweep (XDR, peer-auth,
    and a real two-machine cross-host deployment).
  • pcs_gnatdist now lints RCI specs against the RM E.2.3 legality rules
    up front, instead of letting violations surface as puzzling linker
    errors.
  • Assorted fixes — details in the changelog.

Linux remains the primary platform (Arch users get a PKGBUILD whose
pacman hook rebuilds the runtime automatically on every gcc-ada
upgrade).

Repo

Release

User’s Guide

One known FSF GNAT limitation worth mentioning: dispatching to an RACW
of a Remote_Types interface can pick the wrong slot when the concrete
type declares its own primitives before its overrides (filed as PR
ada/126014, reproducer included in the repo). The documented workaround
is to route such calls through a concrete RCI.

There is also a sibling project, ipDSA
( charlie5/ipDSA: An Ada DSA implementation using Kazakov simple component inter-process streams and sockets for comms. - Codeberg.org ), which is the same PCS with the
transport swapped for shared-memory interprocess streams — for
same-host-only deployments with no network stack involved. The two
Arch packages co-install cleanly.

Feedback, bug reports, and testing on other platforms are very welcome.

7 Likes