Dear Apache Incubator Community,
I would like to start a discussion about an idea to start the
development of a new Java library, designed to simplify
the implementation and setup of custom communication protocols,
particularly for networked environments and device
interactions (e.g., serial ports, proprietary network protocols).
A library for building and setting up I/O (read/write, send/receive)
protocols. Custom, non-standard,
proprietary, domain-, and vendor-specific protocol implementations,
while remaining loosely coupled from the data
structures (message data structures) being transferred.
## Background: Why is this Needed?
In many projects, developers must work with proprietary or
vendor-specific communication I/O protocols that are not
based on widely supported implementations like HTTP (REST, GraphQL,
etc.) for which libraries exist. And the protocol
needs to be implemented by developers themselves. Shortly: no libraries
to take.
### Use cases
* Integrating with (legacy) serial port devices in industrial systems.
* Implementing vendor-specific communication for IoT gateways or edge
devices.
* Interacting with specialized network or hardware devices in
telecommunications or data centers.
* Developing custom communication protocols for specific use cases,
between devices and systems.
Such protocols often require developers to implement custom solutions
from scratch, following detailed technical
documentation or specifications provided by the (protocol) vendor.
The problem is that doing it yourself is labor-intensive, requires
precision, and is tedious work. The larger the
specification, the greater the struggle with implementation. It is also
quite difficult to recall and follow what was
done later on. Additionally, there is little reusable code, and
identifying parts of the code that can be reused is also
difficult.
This project aims to address these issues by providing a reusable
library that simplifies working with such
vendor-specific protocols, reducing development time and ensuring
consistency across implementations.
# Proposed Solution: A Graph-Based Approach to Protocols
The proposed library simplifies the development of custom client-server
(sender-receiver and vice versa) communication
protocols by representing them as execution graphs.
In this model:
* Nodes in the graph represent protocol steps - reading or writing data
(receive or send).
* Edges define the flow of execution between steps, governed by
configurable rules and conditions.
The library provides functionality to build and execute graphs, handle
basic I/O operations (and potentially more),
bind data structures to steps (or with the whole defined graph) to carry
over protocol, handle events, and manage a
callback system.
**I assume that a graph, even when implemented in (fluent) code, is more
readable (repairable/improvable) than a fully
custom implementation.**
By abstracting protocol logic into an execution graph, the library
minimizes the complexity of handling vendor-specific
communication requirements and promotes easier maintenance.
The MVP implementation of the library will focus exclusively on Java to
validate the concept and gather community
feedback before considering broader adoption or porting to other
languages like C++ or other.
# Summary
To summarize, this project aims to simplify the implementation of
non-standard protocols by providing a graph-based
framework that can handle basic I/O operations on its own through a
defined graph. Most of the basic I/O functions are
handled within the library, compared to a custom-made solution where
everything is cross-referenced and tightly coupled.
The initial focus will be on Java, with the potential for future
expansion based on community input.
The initial base structure, skeleton, and proof of concept (PoC) will be
independently developed by me and my team as a
preliminary effort in our own repository, serving as an example for
further development and eventual transition into the
Apache Incubator.
# Feedback Request
The idea is still quite abstract, but I would greatly appreciate your
feedback:
- Do you see value in such a project?
- Does this project align with ASF's ecosystem and goals?
- Is it potential ASF software?
- Are there existing projects or initiatives that we should consider or
learn from?
Looking ahead:
- Would anyone be interested in collaborating, contributing or providing
feedback during development?
- Would anyone be interested in mentoring?
If this aligns with your interests or expertise, please share your
thoughts, questions, or suggestions.
Thank you!
Best regards,
Imre Tabur
---------------------------------------------------------------------
To unsubscribe, e-mail: general-unsubscr...@incubator.apache.org
For additional commands, e-mail: general-h...@incubator.apache.org