eclipse-iceoryx / eclipse-iceoryx/iceoryx

iceoryx apps may not run on all platforms

Open
#1,428 2 comments 0 reactions 0 assignees View on GitHub
technical debt
Dominant language
C++
Stars
2.2k
Forks
492
Avg merge
18h 57m
Merged PRs (30d)
1

Description

## Brief feature description

The current idea of iceoryx is that we fully support Linux and QNX. Windows, MacOS and FreeBSD are handled as developer platforms, this means one can develop, compile and run iceoryx applications with a restricted functionality. So you can always establish a full communication on every platform but on some without certain safety or security insurances or tweaks like cpu affinity or priority.

But those platforms have different restrictions on certain system resources. For instance on Windows a path name cannot be longer than 255 characters, in linux it can have 1023 characters.
The underlying mechanism of iceoryx now may restrict the top level API on each platform differently, for once because we create a file lock or socket with the same name as the runtime name.

With that it is possible to have a runtime name in linux with at most 250 characters (the 5 remaining characters are used for the `.lock` suffix) - but not on Windows - since the whole path cannot be longer than 255 characters. In both platforms we store the sockets, lock files in directories, linux can handle this but in windows the file name length of the lock file is restricted by the identical maximum path length.

This issue restricts our iceoryx applications too much to a certain platforms when a simple thing like a slightly longer runtime name makes an application incompatible with windows for instance. To not support all features on every platform allows the developer still to run all applications and establish communication (without security/safety insurance) but those implicit platform resource restriction which directly influences the public API defeat the purpose of developer platforms.

## Detailed information

We have multiple ways of mitigating this.
* Every platform has the same upper limits for resources. For instance same `IOX_UDS_SOCKET_MAX_MESSAGE_SIZE`, `IOX_MAX_PATH_LENGTH` etc. Then we would be unable to use the full potential of some platforms but it can be implemented quickly.
* We have to handle this in the abstractions in iceoryx posh. This can take a lot of time but would be the most sustainable approach. For instance instead of naming the file locks and sockets like the runtime name we generate id's of a certain length which are supported on every platform.
* We could also handle this in the hoofs abstractions but then we again do not use the full potential of the underlying platform and we restrict also our wrappers. Sometimes the user wants to run only on linux therefore I suggest to handle it only in posh. The hoofs should always provide the full potential of the underlying platform.

Contributor guide

Open the contributing guide

Research direction

The issue names no files or tests; start by tracing the iceoryx posh abstractions that create file locks and sockets from runtime names, then compare the IOX_UDS_SOCKET_MAX_MESSAGE_SIZE and IOX_MAX_PATH_LENGTH limits across platforms. Done means selecting and implementing a sustainable mitigation so public API resource limits no longer make otherwise supported applications incompatible with Windows or other developer platforms.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
distributed-systems, operating-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.