On the Amiga, every serious app had an ARexx port. AppMesh brings that to modern Linux.
| Amiga / ARexx | AMP |
|---|---|
ADDRESS 'APP' 'CMD' | appmesh port clipboard get |
| ARexx port name | DNS address: clipboard.appmesh.cachyos.amp |
rx script.rexx | amp run script.amp.php |
| REXX (universal glue) | PHP 8.5+ (universal glue) |
| Single machine IPC | Multi-node mesh (WireGuard + DNS) |
Working code, not a roadmap.
libappmesh_core.so — 8 C ABI symbolsAppMeshPort trait (ARexx-style)AppMeshFFI — PHP FFI bridge (~0.05ms)AppMeshBridge singleton (dlopen)appmesh type|key|port|ports[port].[app].[node].amp — maps directly to DNS hierarchy.
PHP is to AMP what REXX was to the Amiga.
// screenshot-and-notify.amp.php
$mesh = AppMeshFFI::instance();
$shot = $mesh->portExecute('screenshot', 'take');
$path = $shot['ok']['path'];
$mesh->portExecute('clipboard', 'set', ['text' => $path]);
$mesh->portExecute('notify', 'send', [
'title' => 'Screenshot saved',
'body' => $path,
]);
Callers address ports, not transports.
| Channel | Path | Latency |
|---|---|---|
| PHP FFI | PHP → libappmesh_core.so → KDE | ~0.05ms |
| D-Bus | subprocess → dbus-daemon → apps | ~1ms |
| Unix socket | PHP ↔ Rust daemon (streaming) | ~0.1ms est. |
| WebSocket/WG | Browser → Reverb → PHP → Rust | ~2ms est. |