Files

61 lines
3.6 KiB
Plaintext

USB and upstream transport assessment — 2026-11-12
Current candidate: stable jmcorgan/fips v0.5.3 at
f4a5b4a8e61e340e6be7551608109a5c399f8353. Companion embeds that exact revision;
upgrading a node's daemon does not upgrade an already-installed APK.
Reference snapshots:
MYCO Origami74/myco 23029ee8c401d26e65faacfa6b4ee71db955d69f
FIPS master 028432e70faf1983748b84a67d14ad4e8340a43f (0.6.0-dev)
FIPS feat/usb-transport 7ded9810f85278ee3e4b61a2b8c992a8948e6a4d
MYCO's CI selects feat/usb-transport, stacked on multi-path-switchover. Its
build guide mentioning master does not describe the shipped transport stack.
Neither the reviewed stable release nor master contains this USB transport.
Floating master is therefore not a substitute for an explicit dependency update.
Relevant implementation references in that MYCO snapshot:
- android/app/src/main/java/app/myco/usb/: accessory and host attach activities,
permission watcher, already-attached discovery and detach handling.
- myco-core/src/usb_bridge.rs: Node.enable_app_owned_usb, attachment queue and
native descriptor ownership across node lifecycle changes.
- myco-core/src/usb_bridge_jni.rs: accessory and host descriptor transfer.
- myco-core/Cargo.toml: usb-host feature for host-side transport.
- .github/workflows/ci.yml: actual FIPS dependency revision selection.
Required implementation work, after core performance/Bump acceptance:
1. Evaluate a pinned transport revision against stable 0.5.3 node interoperability
and the preserved stale-LAN reproducer before replacing the dependency.
Multipath is probed active/standby failover, not bandwidth aggregation.
2. Implement both Android Open Accessory and USB host roles. Check capabilities,
request Android USB permissions, and bind permission results to the actual
attached device and current service generation. No permission loops.
3. Transfer one owned descriptor through JNI. Close exactly once on rejection,
cancellation, detach and node shutdown; handle attach-before-native-ready,
duplicate broadcasts and stale accessory enumeration. Never attach an old
descriptor to a replacement node instance.
4. Keep the same FIPS identity, VPN and mesh origin while USB becomes preferred
or disappears. Do not reload WebView or alter application federation trust.
5. Validate two real phones with a data cable in both roles: attach, permission
denial, detach during request, fallback, reattach, background/service restart,
loss of one peer and sustained authenticated transfers. Record actual bytes,
duration and CPU/battery behaviour. An AOA switch can interrupt USB debugging;
use an independent recording path and reconnect after the run.
MYCO reports 127 Mbps Pixel-to-Mac, not an Archipelago measurement and not a
phone-to-phone result. No USB UI, permission request, transport or throughput
claim ships in this candidate. USB implementation and device acceptance remain
open; this assessment is not a declaration of completion.
Techniques already applied without experimental dependencies: explicit Android
Network socket binding, owned socket/TUN descriptors, bounded teardown, stable
browser origins, bounded caches and generation guards. Stable 0.5.3 supplies
rekey recovery, fresh lookup on route loss and preserved link-quality estimates.
These do not eliminate the reproduced remote stale-direct-link issue.
Sources:
https://github.com/jmcorgan/fips/releases/tag/v0.5.3
https://github.com/Origami74/myco/tree/23029ee8c401d26e65faacfa6b4ee71db955d69f
https://github.com/jmcorgan/fips/tree/7ded9810f85278ee3e4b61a2b8c992a8948e6a4d
https://developer.android.com/develop/connectivity/usb/accessory