- (Waitset), event multiplexing and advanced push notifications
- Finalize C and C++ API
- Fully dynamic payload for pub/sub
- ROS 2 rmw binding
- Health monitoring
- Reliability features for pub/sub
- Derive macro for SHM transferable types
-
serde
-based shm serialization to transmit arbitrary types - Request/Response
- high performance d-bus alternative (thanks to true zero-copy)
-
#![no_std]
onnightly
on all tier 1 platforms -
#![no_std]
onstable
on all tier 1 platforms - completely dynamic setup with dynamic shared memory
- iceoryx on a rover on the moon
- Make
iceoryx2_bb_container
public with announcement - Create and document dynamic size container concept for shared memory and
apply it to all existing containers:
ByteString
,Vec
,Queue
- Open Question: How can these containers be cloned, copied?
- Introduce additional containers:
HashMap
,Tree
,Set
,List
- Introduce elementary types, look into:
simple-si-units
crate- Add types like: memory size, percentage, strict percentage (0..100), data throughput, resolution (further types found in informatics)
- Add
derive
proc macro to ensure that only shm compatible types can be transferred via zero-copy
- C
- C++
- Lua
- Python
- Zig
- WaitSet - event multiplexer based on reactor pattern
- Introduce trait and proc macro to generate types that can be sent via
shared memory
- ensure that only these types are used for inter-process communication
- Host2Host Communication based on https://github.com/smoltcp-rs/smoltcp
- mqtt (rumqtt)
- dds (rustdds or dustdds)
- zenoh
- someip (maybe sommr)
- dbus (zbus)
- Service Discovery
- Introspection Service
- Process Monitor (process can register and cleans up resources when process dies)
- Health Monitor
- Basic command line introspection tooling
- Tooling for advanced introspection, cool WebGUI
- Command line client as interface to microservices
- System Monitor (show CPU load etc. like top)
- publish subscribe
- events
- integrated serialization to send non-shm compatible types, see: https://github.com/rkyv/rkyv
- Single Publisher Subscribe with history
- Multi Publisher without history (except there is a brilliant idea on how to realize it with history)
- Request Response Messaging Pattern
- Blackboard Messaging Pattern
- Pipeline Messaging Pattern
- PubSub, ReqRes, Pipeline variant that works with copies (poor mans mixed criticality)
- Zero-copy GPU communication with Cuda, NvSci, Vulkan
- Zero-copy across hypervisor partitions
- Zero-copy via QEMU ivshmem: https://www.qemu.org/docs/master/system/devices/ivshmem.html
- dmabuf support, see: https://blaztinn.gitlab.io/post/dmabuf-texture-sharing/
- Support dynamic sized types in a memory efficient manner
- Buddy allocator for sender data-segment
- Introduce runtime fixed-size types
- Untyped API
- Filtering/Routing of messages in pub-sub
- Handle approach to resend samples that could not be delivered caused by a full queue in pub-sub
- Node as basis for monitoring and resource cleanup
- Add ability to recover samples when subscriber died
- add sample tracker into ZeroCopyConnection
- add detection when subscriber returns non-received samples
- Large Communication Setup Support
- handle the restriction of a max amount of POSIX shared memory objects of an OS
- add
iceoryx2_cal
implementations that are using theSharedMemoryGroup
- Android
- Linux
- Windows
- Mac Os
- iOS
- WatchOS
- FreeBSD
- FreeRTOS
- QNX
- x86_64
- aarch64
- armv7
- x32
- risc-v
- ROS2 rmw binding
- dora-rs integration
- Mixed Criticallity setup, e.g. applications do not interfer with each other
- Sample Tracking when application crashes
- Identity and Access Management, e.g. service that create additional services
- Use Kani, Loom and Miri for tests of lock-free constructs
- Tracing integration for advanced performance measurements, see google chrome chrome://tracing/ and flame graphs See lttng, add trace points to the source code on the important functions
- Evaluate and refactor basic error handling approach based on enums
- all error classes should implement
std::error::Error
for the nonno_std
build (maybe usethiserror
) - should be compatible with
anyhow
andeyre
- explore error pyramid concept
- all error classes should implement
- Rename
enable_safe_overflow
intoset_safe_overflow
inServiceBuilder
publish_subscribe
- or maybe rename it into behavior: queue and ringbuffer, get inspired by crossbeam queues
- Provide
[T]
(slice) as special transmission type for pub/subloan_slice
,loan_uninit_slice
andloan_uninit_slice_with_alignment
- QoS feature for blocking publisher or pub/sub failures to perform custom
error handling or expert behavior
- explore implementation as trait
- explore implementation as callback
- Explore if it is useful to have the same service name for different
messaging patterns
- separate them via internal suffix/prefix
- simple use case: pub/sub + event to notify subscriber to notify sample send
- would reduce error handling: connect to service with wrong messaging pattern
- Implement Resizable SharedMemoryConcept that is able to extend the shared memory by adding additional POSIX shared memory objects
- Maybe Hyprland