Skip to content

eclipse-uprotocol/up-spec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

uProtocol Logo

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF BCP14 (RFC2119 & RFC8174)

SPDX-FileCopyrightText: 2023 Contributors to the Eclipse Foundation

See the NOTICE file(s) distributed with this work for additional
information regarding copyright ownership.

This program and the accompanying materials are made available under
the terms of the Apache License Version 2.0 which is available at
https://www.apache.org/licenses/LICENSE-2.0

SPDX-FileType: DOCUMENTATION
SPDX-License-Identifier: Apache-2.0

1. Overview

uProtocol is a communication protocol that enables software (uEs) to easily communicate with each other running in distributed systems. The protocol is designed to be lightweight, efficient, easy to use, and run on top of any other communication middleware (transport) such as SOME/IP, MQTT, zenoh, HTTP, etc…​

To achieve the above mentioned objectives, we have split the specifications into sections (folders) that are:

  • The Basics: Foundational principles and concepts of uProtocol (ex. such as addressing, IDs, message header definitions, etc…​).

  • Transport layer (uP-L1): Common interface for sending and receiving of messages intended to be implemented employing a particular communication middleware technology (ex. MQTT, SOME/IP, HTTP, Zenoh, etc…​).

  • Communication Layer (uP-L2): The common transport agnostic, programming language specific, API for the publisher/subscriber, notification, and RPC messaging patterns used by application/service developers to communicate with each other.

  • Application Layer (uP-L3): Service contracts for subscription management, service/device discovery, and event caching that is common across all deployments (implementations) of uProtocol.

2. How to get started?

It is always best to start with the basics to familiarize yourself with common terminology used with uProtocol.

If you’re a developer who would like to use uProtocol in your application or service, please refer to the appropriate language library’s (ex. up-cpp, up-java, up-rust, etc..) README.adoc.

If you would like to contribute to uProtocol to develop a new language library or transport implementation, please checkout the CONTRIBUTING.adoc.

3. Tracing Requirements

Implementers of the uProtocol specification are encouraged to use OpenFastTrace (OFT) for making sure that they actually cover all requirements from the specification that are relevant for the implemented component.

The uProtocol CI/CD repository contains a reusable GitHub Action workflow for tracing requirements which can be used for that purpose. The uProtocol Rust Language Library also makes use of this workflow in its nightly build and can serve as a blueprint.

The uProtocol specification documents contain a lot of requirements that are defined as OFT specification items, which cover all aspects of uProtocol. In most cases, only of a subset of these requirements will be relevant/applicable for specific components. In order to make it easier for component developers to filter out these relevant requirements, the specification items that define more specific aspects of uProtocol have been tagged with corresponding labels. When running OpenFastTrace to trace the requirements, these labels can be used to filter out the relevant specification items.

Table 1. OpenFastTrace Specification Item Tags
Tag Value Description

CommunicationLayerImpl

Requirements that need to be covered by concrete implementations of uProtocol’s Communication Layer API

LanguageLibrary

Requirements that need to be covered by uProtocol Language Libraries

ServiceConsumer

Requirements that need to be covered by uEntities that invoke service operations via uProtocol

ServiceProvider

Requirements that need to be covered by uEntities that provide service operations to be invoked via uProtocol

TransportLayerImpl

Requirements that need to be covered by all concrete implementations of uProtocol’s Transport Layer API

TransportLayerImplPull

Requirements that need to be covered by concrete implementations of uProtocol’s Transport Layer API supporting the the pull message delivery method

TransportLayerImplPush

Requirements that need to be covered by concrete implementations of uProtocol’s Transport Layer API supporting the the push message delivery method