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_gnatdistnow 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).
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.