The point in having negotiable protocol modules would be: a simple protocol implementation just doesn't support many or any of these modules and is still capable of communicating with the rest of PSYCspace, in fact a few vars in a UDP packet can be sufficient to do a job. A full-fledged PSYC implementation would support all of these modules.
Nowadays we have had our share of experience with unnecessary negotiation protocols introducing latency and such, so we consider not negotiating modules over the network but rather to expect receiving nodes to support all important things from the start (at least syntactically/protocolwise) while peripheral nodes (clients, automations) know just as much as they need to do their job.
So for now consider the following list more like a way to structure the routing layer of PSYC rather than actually negotiable modules.
Modules of the routing layer
- _compact style (know all standard methods and variables in advance, allow 'psyc:' to be left out on uniforms)
- _binary: allow binary body by specifying its length in advance
- _length: encoding for escaping-free transparent binary variables.
- _multicast: support _context distribution with all its implications
- _state: use modifiers instead of defining everything every time
- _signature: leave out variable names, types (know signatures in advance or negotiate them)
- leaving out _templates (know all in advance, or negotiate them)