Hi Kenton-
That's excellent... I still haven't had the time to wrap my head around those two discussions at more than a superficial level, but I may have some input when I do.
RE pointerless protocols: Yes, at first this is the only type I plan on supporting. My plan is to use capnp structs, but use an annotation indicating they should be inline. It should just be a simple matter of inserting a schema transform between capnp and the codegen plugin to convert that struct to a group. That would destroy version compatibility, so it'll also change the message IDs deterministically. I think it's reasonable to require the same version on both the PCIe attached device and the host software... at least for the time being. Eventually, I'll want to support the capnp wire format especially over the network for RPC purposes. This is where inline structs being standard would be nice so people have the option to avoid the re-ordering buffer overhead with protocol optimizations.
RE variably-sized data: Any large fixed or variably-sized data can be treated as a stream. In general, in hardware one has to consider both the temporal and spatial dimensions, which leads to off-by-one bugs in both dimensions! Lotsa fun to debug.
~John