aDSA 1.1.0 — a ZeroMQ-backed PCS for the Distributed Systems Annex (PolyORB replacement)

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-ada upgrade

Links

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.

8 Likes

Impressive work! I know that the ARG is looking into inputs about the DSA, you may want to share your experience with it with them :slight_smile:

One point/question/request about this… Could the license be changed to that of GNAT (GPLv3 with linking exception, afaik). That way non-GPLv3 software can also make use of your DSA implementation and greatly facilitates the compilation/code distribution/reuse :slight_smile: The GPLv3 version of GCC-GNAT allows for anybody to link against the libraries without the code getting “infected” by the GPLv3. I love hard copyleft, but for these cases, even the FSF does not recommend going full-GPL, see Announcing our license recommendations guide — Free Software Foundation — Working together for free software and How to Choose a License for Your Own Work - GNU Project - Free Software Foundation (libraries section)

Congrats!
Fer

2 Likes

I quite recently posted to the ARG DSA discussion, altho w/o explicitly mentioning this project :slightly_smiling_face: .

Agreed and done :+1: .

3 Likes