Hi all,
With PolyORB deprecated and unmaintained, Annex E (distributed Ada) has been left effectively without a runtime. I’ve been building a replacement — aDSA — and 1.1.0 is now out.
It’s a Partition Communication Subsystem backed by ZeroMQ. The compiler side is untouched: it implements GNAT’s GARLIC_DSA personality, so the stubs exp_dist already generates — Remote_Call_Interface, RACW, RAS, Shared_Passive — call into it unchanged. You write ordinary Ada with the usual pragmas; aDSA supplies the runtime (System.RPC, System.Partition_Interface, System.Shared_Storage) plus pcs_gnatdist, a gnatdist replacement that builds and wires up the partitions from a .cfg file.
Where it’s at
Feature-complete against Annex E and validated against the unmodified PolyORB examples/dsa configurations, on both build paths (gnatmake and gprbuild/-P). The -P path now builds a real multi-project GtkAda / Ada-2022 application (the charlie5 arcana game) end to end, and I’ve run it cross-host over a real two-machine network.
Other bits:
- RPC/APC, RACW (incl. asynchronous), RAS,
Shared_Passive(file backend + a cross-host store server) - concurrent serve pool, per-peer socket caching
- optional XDR wire, zlib compression, CurveZMQ encryption + per-partition mutual authentication
- distributed quiescence/termination, restart recovery, the RM E.3 version check
- Arch packaging that rebuilds the runtime automatically on every
gcc-adaupgrade
Links
- Repo, examples and a User’s Guide: charlie5/aDSA: ZeroMQ-backed PCS for Ada's Distributed Systems Annex. - Codeberg.org
- GPLv3
A note on how it was built: aDSA was developed with substantial AI assistance (Anthropic’s Claude / Claude Code). I set the direction and the decisions, and I reviewed, tested and verified everything — but much of the implementation, debugging and documentation was AI-generated, and the commit history reflects that (the Co-Authored-By trailers). I’m flagging it for transparency, and because I know views on AI-generated code differ; I’d rather the validation (the full PolyORB examples/dsa corpus on both build paths, plus a real application end to end) speak for the result. Scrutiny is welcome.
I’d love feedback — especially if you have an existing PolyORB/DSA app you’d be willing to point it at, or if you hit something that doesn’t work. Happy to help get configs building.
Regards.