[ANN] ipDSA 1.2.0 — same-host Annex E (DSA) runtime over shared memory — now on Windows and FreeBSD

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_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.

Repo

Release
User’s Guide

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.

8 Likes

I have one question about this and I am not knowledgeable enough to know this… Since @dmitry-kazakov’s components are licensed under GPLv2+, I assume that anybody making use of this DSA implementation would have to license their programs under such license too no? I am asking as GNAT and your sources are GPLv3-with-lining-exception but that is not allowed by Simple Components, so the most restrictive clause is in effect. I believe this is valid code but only under the GPLv3 as things would go like:

  • Simple Components gets its license promoted from GPLv2+ to strict GPLv3
  • GNATs and your code get the liking exception demoted to be strict GPLv3

I do not know if Simple Components has a linking or interface exception to the license (similar to the Linux kernel), but I could not find such a thing.

Best regards and wonderful work!
Fer

I’m afraid I have a poor understanding of these licenses. The license info given on @dmitry-kazakov Simple Components website is as follows …

"This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

As a special exception, if other files instantiate generics from this unit, or you link this unit with other files to produce an executable, this unit does not by itself cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU Public License."

Perhaps Dmitry can clarify. Of course, I will be happy to change the license to make it legal, if needed.

Oh, I had not seen that part. It seems that it does have the linking exception too! So all good :slight_smile:

It is so-called GNAT-modified GPL. In short it is as permissive as possible.

2 Likes