= Eclipse uProtocol Specification :toc: preamble :sectnums: :showtitle!:
image:https://github.com/eclipse-uprotocol/.github/blob/main/logo/uprotocol_logo.png?raw=true[uProtocol Logo,width=640]
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 https://www.rfc-editor.org/info/bcp14[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
== 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:
link:basics/README.adoc[The Basics:] Foundational principles and concepts of uProtocol (ex. such as addressing, IDs, message header definitions, etc...).
link:up-l1/README.adoc[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...).
link:up-l2/[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.
== How to get started?
It is always best to start with link:basics/README.adoc[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 (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 link:CONTRIBUTING.adoc[CONTRIBUTING.adoc].