ipDSA is a free (GPLv3 + GCC Runtime Library Exception) Partition
Communication Subsystem for Ada’s Distributed Systems Annex (Annex E),
for same-host deployments: the partitions of a distributed program
run as separate OS processes on one machine and talk over shared
memory. There is no network stack involved at all — endpoints are just
names, nothing listens on a port, and the security boundary is ordinary
file permissions.
It is the sibling of aDSA (the ZeroMQ-backed PCS announced separately)
with the transport swapped for interprocess streams built on Dmitry
Kazakov’s Simple Components — a vendored subset ships in the repo
(GM-GPL) and is spliced into the runtime, so partitions link against no
external transport library. Everything above the transport is shared
with aDSA: the same .cfg configuration language, the same
gnatdist-style build tool (pcs_gnatdist), full Annex E coverage — RCI,
RACW/RAS with callbacks, Shared_Passive (file / store-server /
shared-memory backends), asynchronous calls, termination policies,
restart recovery, the RM E.3 version check — validated against the
original PolyORB examples/dsa corpus. Fixes flow between the two
projects, in both directions.
New in 1.2.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), via an
os-windows variant of the interprocess layer. The verification corpus
passes 6/6 on both build paths — the same scoreboard as Linux. - FreeBSD 15.1: an os-pthreads variant; corpus and feature demos
green, with a scoreboard identical to Linux. - A new demo: Shared_Passive over shared memory between overlapping
partitions. 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.
The same FSF GNAT limitation noted in the aDSA announcement applies
here too (it is compiler-side, independent of the transport):
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 (PR ada/126014); the workaround is a concrete RCI.
On Arch Linux both projects install from their PKGBUILDs and co-install
cleanly (ipdsa-gnatdist / adsa-gnatdist), so you can develop against
one and switch transports by rebuilding your configuration with the
other tool — the application code and .cfg are identical.
Feedback, bug reports, and testing on other platforms are very welcome.