<h1 align="center">
<img src="https://gitlab.com/atomiq-project/heros/-/raw/main/docs/_static/heros_logo.svg" width="150">
<br>
<img src="https://gitlab.com/atomiq-project/heros/-/raw/main/docs/_static/heros_text.svg" width="150">
</h1>
# HEROS - Highly Efficienct Remote Object Service
HEROS is a decentralized object sharing service. In simple words it makes your software objects network transparent.
To be fast and efficient, HEROS relies on the minimal overhead eclipse-zenoh protocol as a transport layer. It thus
supports different network topologies and hardware transports. Most notably, it can run completely decentralized,
avoiding a single point of failure and at the same time guaranteeing low latency and and high bandwidth communication
through p2p connections.
HEROS provides a logical representation of software objects and is not tied to any specific language. Even non-object
oriented programming languages might provide a collection of functions, variables, and events to be accessible as an
object in HEROS.
Very much like a Dynamic Invocation Infrastructure (DII) in a Common Object Broker Architecture (CORBA), HEROS handles
objects dynamically during runtime rather than during compile time. While this does not allow to map HEROS objects to
be mapped to the language objects in compiled languages, languages supporting monkey-patching (python, js, ...) are
still able create proxy objects during runtime.
Find the HEROS documentation under [https://atomiq-project.gitlab.io/heros](https://atomiq-project.gitlab.io/heros).
## Paradigms
### Realms
To isolate groups of HEROs from other groups, the concept of realms exists in HEROS. You can think of it as a
namespace where objects in the same namespace can talk to each other while communication across realms/namespaces is
not easily possible. Note that this is solely a management feature, not a security feature. All realms share the same
zenoh network and can thus talk to each other on this level.
### Objects
An object that should be shared via HEROS must inherit from the class `LocalHero`. When python instantiates such
an object, it will parse the methods, class attributes, and events (see event decorator) and automatically generate
a list of capabilities that describes this HEROS object. The capabilities are announced and a liveliness token for the
object is created. HEROSOberserver in the network will thus be notified that our new object joined the realm.
When the object is destroyed or the link gets lost, the liveliness token disappears and any remote object will notice
this.
### Capabilities
A HEROS object is characterized by the capabilities it provides. There are currently three types of capabilities:
* Attribute
* Method
* Event
### Metadata
A HERO can carry metadata that allows for easier classification in environments with many HEROs. In addition to a list of tags, the metadata can also carry information on what interfaces a HERO provides. This allow a HERO to signal that it can seamlessly be used as an object of a certain class.
Raw data
{
"_id": null,
"home_page": null,
"name": "heros",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "Thomas Niederpr\u00fcm <t.niederpruem@rptu.de>, Suthep Pomjaksilp <s.pomjaksilp@rptu.de>",
"keywords": "pub/sub, remote object, rpc, zenoh",
"author": null,
"author_email": "Thomas Niederpr\u00fcm <t.niederpruem@rptu.de>, Suthep Pomjaksilp <s.pomjaksilp@rptu.de>",
"download_url": "https://files.pythonhosted.org/packages/c0/36/79018ac7bec48b8459e029a9462e3a32ef4d1a199413dcc8e07bb7018af9/heros-0.8.3.tar.gz",
"platform": null,
"description": "<h1 align=\"center\">\n<img src=\"https://gitlab.com/atomiq-project/heros/-/raw/main/docs/_static/heros_logo.svg\" width=\"150\">\n<br>\n<img src=\"https://gitlab.com/atomiq-project/heros/-/raw/main/docs/_static/heros_text.svg\" width=\"150\">\n</h1>\n\n# HEROS - Highly Efficienct Remote Object Service\nHEROS is a decentralized object sharing service. In simple words it makes your software objects network transparent.\nTo be fast and efficient, HEROS relies on the minimal overhead eclipse-zenoh protocol as a transport layer. It thus\nsupports different network topologies and hardware transports. Most notably, it can run completely decentralized,\navoiding a single point of failure and at the same time guaranteeing low latency and and high bandwidth communication\nthrough p2p connections.\n\nHEROS provides a logical representation of software objects and is not tied to any specific language. Even non-object\noriented programming languages might provide a collection of functions, variables, and events to be accessible as an\nobject in HEROS.\n\nVery much like a Dynamic Invocation Infrastructure (DII) in a Common Object Broker Architecture (CORBA), HEROS handles\nobjects dynamically during runtime rather than during compile time. While this does not allow to map HEROS objects to\nbe mapped to the language objects in compiled languages, languages supporting monkey-patching (python, js, ...) are\nstill able create proxy objects during runtime.\n\nFind the HEROS documentation under [https://atomiq-project.gitlab.io/heros](https://atomiq-project.gitlab.io/heros).\n\n## Paradigms\n\n### Realms\nTo isolate groups of HEROs from other groups, the concept of realms exists in HEROS. You can think of it as a\nnamespace where objects in the same namespace can talk to each other while communication across realms/namespaces is\nnot easily possible. Note that this is solely a management feature, not a security feature. All realms share the same\nzenoh network and can thus talk to each other on this level.\n\n### Objects\nAn object that should be shared via HEROS must inherit from the class `LocalHero`. When python instantiates such\nan object, it will parse the methods, class attributes, and events (see event decorator) and automatically generate\na list of capabilities that describes this HEROS object. The capabilities are announced and a liveliness token for the\nobject is created. HEROSOberserver in the network will thus be notified that our new object joined the realm.\n\nWhen the object is destroyed or the link gets lost, the liveliness token disappears and any remote object will notice\nthis.\n\n### Capabilities\nA HEROS object is characterized by the capabilities it provides. There are currently three types of capabilities:\n\n * Attribute\n * Method\n * Event\n\n\n### Metadata\nA HERO can carry metadata that allows for easier classification in environments with many HEROs. In addition to a list of tags, the metadata can also carry information on what interfaces a HERO provides. This allow a HERO to signal that it can seamlessly be used as an object of a certain class.\n",
"bugtrack_url": null,
"license": "LGPL-3.0-or-later",
"summary": "Make your objects available everywhere",
"version": "0.8.3",
"project_urls": {
"Bug Tracker": "https://gitlab.com/atomiq-project/heros/issues",
"Documentation": "https://gitlab.com/atomiq-project/heros/wiki",
"Homepage": "https://gitlab.com/atomiq-project/heros",
"Repository": "https://gitlab.com/atomiq-project/heros"
},
"split_keywords": [
"pub/sub",
" remote object",
" rpc",
" zenoh"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "f593729c7e9a89ba5dac0ea0cc73e08e3ffa255f5529bbd454fee68d4a5e50ac",
"md5": "5630a6cfd8a19c34e965ab10f934bb42",
"sha256": "834479ef973f7150df3ccdfd2b3b0784c7a34e4eeb5a35323946e82983c113e8"
},
"downloads": -1,
"filename": "heros-0.8.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5630a6cfd8a19c34e965ab10f934bb42",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 40115,
"upload_time": "2025-11-05T12:45:24",
"upload_time_iso_8601": "2025-11-05T12:45:24.578831Z",
"url": "https://files.pythonhosted.org/packages/f5/93/729c7e9a89ba5dac0ea0cc73e08e3ffa255f5529bbd454fee68d4a5e50ac/heros-0.8.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c03679018ac7bec48b8459e029a9462e3a32ef4d1a199413dcc8e07bb7018af9",
"md5": "5517c17a7e835554f2dbe2dc11220fdc",
"sha256": "75dcec4afa51c8980c40bbe992ed65ca34e03cd60c9dddb42527870e4b861e1b"
},
"downloads": -1,
"filename": "heros-0.8.3.tar.gz",
"has_sig": false,
"md5_digest": "5517c17a7e835554f2dbe2dc11220fdc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 284330,
"upload_time": "2025-11-05T12:45:26",
"upload_time_iso_8601": "2025-11-05T12:45:26.027433Z",
"url": "https://files.pythonhosted.org/packages/c0/36/79018ac7bec48b8459e029a9462e3a32ef4d1a199413dcc8e07bb7018af9/heros-0.8.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-11-05 12:45:26",
"github": false,
"gitlab": true,
"bitbucket": false,
"codeberg": false,
"gitlab_user": "atomiq-project",
"gitlab_project": "heros",
"lcname": "heros"
}