eclipse-iceoryx / eclipse-iceoryx/iceoryx2
Interoperability between 32-bit and 64-bit applications.
- Dominant language
- Rust
- Stars
- 2.5k
- Forks
- 185
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 47
Description
## Brief feature description
Having interoperability between 32-bit and 64-bit applications would help porting legacy application to 64-bit by opening the path to port one application at a time and keep the system running.
Additionally, there are SoCs with 32-bit realtime cores and 64-bit performance cores. An interoperability between 32-bit and 64-bit application is a precondition for zero-copy between those cores.
The goal is to get iceoryx2 running on the [Kria KR260 Robotics Starter Kit](https://www.amd.com/en/products/system-on-modules/kria/k26/kr260-robotics-starter-kit.html)
## Detailed information
Due to differences in the alignment of 64-bit PODs on 32-bit architectures compared to 64-bit architectures, it must be ensured that all data structures have the same data layout. With C++ and GCC this can be done via the `-malign-double` flag, which ensures that the alignment of 64-bit PODs on 32-bit architectures matches the alignment of the 64-bit architectures.
If Rust does not support such a compiler flag, all 64-bit data structures must have an explicit alignment to 8 bytes.
Additionally, POSIX data structures like ´sem_t´ have a different size on 32-bit than on 64-bit. These structures cannot be used in shared memory and need an replacement. On Linux, a futex based solution can be used and on Windows a similar approach with `WaitOnAddress` is feasible. Operating systems which do not support such a mechanism, can either use a spin based solution or a completely different concept which does not rely on such a data structure being placed into the shared memory.
## References
- https://github.com/eclipse-iceoryx/iceoryx/blob/main/doc/website/advanced/iceoray-on-32-bit.md
- https://github.com/eclipse-iceoryx/iceoryx/issues/2301
Contributor guide
Research direction
Read the linked 32-bit documentation and issue #2301 first, then trace the shared-memory data structures and synchronization primitives described in this issue. Done means 32-bit and 64-bit applications can interoperate with identical layouts and compatible synchronization, including on the Kria KR260 target.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- linux, rust
- Domain
- distributed-systems, embedded-iot, operating-systems
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100