The NT-branch transport's real socket backend (NM_SynapseLink.pas) uses Ararat Synapse, a Pascal TCP/IP library.
- Free / open source, under a modified BSD-style license (per the project's own download page). Copyright (c) 1999-2024 Lukas Gebauer.
- The modified-BSD license is compatible with both licences in this repo —
GPLv3 for the revival work and GPLv2 for Dedrick Allen's original material — so
Synapse MAY be bundled (unlike Watt-32 in fpc264irc, whose licensing kept it
reference-only). Bundling is legal here. See
LICENSES.md.
- Official repository (current): https://github.com/geby/synapse (moved from SourceForge to GitHub in January 2024 — this is authoritative).
- SourceForge (older): the
synalistproject (older releases).
- "Not a components suite, but a group of classes and routines. No installation needed — just add the units to your uses clause." => trivial to bundle.
- Compiles with FreePascal AND Delphi (also C++Builder, Kylix) => matches both the fpc264irc toolchain and classic-Windows targets.
- Blocking sockets (with limited non-blocking mode) on Windows/Linux/POSIX; native Telnet support => exactly the model a modem<->TCP bridge wants.
- Core class used: TTCPBlockSocket (unit
blcksock), the class the NetModem docs already specified.
Synapse IS the FreePascal/Delphi library — it's free and supports FPC natively, so there is no need to substitute a different library. (An alternative, lNet, exists and is also free, but it's event-driven/async; Synapse's blocking model is the simpler fit for the pump-loop transport. Synapse is the primary choice.)
Since license is NOT a blocker here, and the project values being self-contained for "the person who can't chase dependencies":
- Recommended: git submodule pointing at github.com/geby/synapse — Synapse appears in-tree, stays current, one clone, no stale copy.
- Alternative: bundle a copy in e.g.
libs/synapse/— fully self-contained, license-OK, but a stale-copy maintenance burden. - Minimum: reference — document "install Synapse + build with -dHAS_SYNAPSE". NM_SynapseLink.pas is written so the repo BUILDS WITHOUT Synapse (stub returns nil from CreateSocketLink); define -dHAS_SYNAPSE + add Synapse to the unit path for a real networked build.
The emulation units (NM_UART16550, NM_Fossil, NM_ATCommand) and the transport logic (NetTransport) depend only on the FPC RTL (SysUtils) and each other. Synapse is the ONLY third-party lib, and only for the real socket backend.
The real Ararat Synapse core units are bundled in libs/synapse/, cloned from the official repo (github.com/geby/synapse). This makes the NT branch self-contained — no separate Synapse download needed.
Core units needed by NM_SynapseLink + their dependencies: blcksock.pas (TTCPBlockSocket — the class we use) synsock.pas (socket layer) synautil.pas, synaip.pas, synafpc.pas, synacode.pas, synaser.pas all *.inc files (jedi.inc + platform selectors ssfpc/sswin32/sslinux/etc.)
Modified BSD: "Copyright (c)1999-2026, Lukas Gebauer ... Redistribution and use in source and binary forms, with or without modification, are permitted..." => compatible with GPLv2 and GPLv3 alike, bundling is legal. Keep the copyright headers intact (they are embedded in each .pas file — do not strip them). The GPLv3 headers added to netmodem2irc source in 2026-07 were deliberately NOT applied to libs/synapse — those files are Lukas Gebauer's.
- Stub build (no -dHAS_SYNAPSE): compiles, CreateSocketLink returns nil.
- Real build (-dHAS_SYNAPSE -Fu libs/synapse -Fi libs/synapse): NM_SynapseLink compiles clean against the bundled Synapse (14,524 lines). Our API usage (Connect/SendBuffer/RecvBufferEx/NonBlockMode/LastError/WSAEWOULDBLOCK/ WSAETIMEDOUT/CloseSocket) matches real Synapse with no warnings.
- STILL PENDING: runtime test over a live TCP connection (compile-verified here, but actual send/recv against a real BBS must be tested on a real build).
fpc -Mobjfpc -dHAS_SYNAPSE -Fu libs/synapse -Fi libs/synapse