<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-arash-ebrahimi-ump-protocol-01" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="UMP">Universal Modular Protocol (UMP)</title>
    <seriesInfo name="Internet-Draft" value="draft-arash-ebrahimi-ump-protocol-01"/>
    <author initials="" surname="Arash Ebrahimi" fullname="Arash Ebrahimi">
      <organization>none</organization>
      <address>
        <email>ebrahimi.arash@yahoo.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="24"/>
    <abstract>
      <?line 25?>

<t>The Universal Modular Protocol (UMP) proposes a modular approach to application-layer communication. Instead of implementing every protocol feature in a monolithic protocol or application, UMP allows communication behavior to be composed from modules that can be obtained from a peer or a repository. A protocol engine manages module execution, communication, signatures, and resource restrictions. Modules execute in a WebAssembly sandbox, while the Protocol Description Language (PDL) is intended to support module composition and analysis. UMP is designed to reduce the effort required to introduce new protocol features, reuse protocol components, and connect applications that otherwise require protocol-specific integration. This document describes the motivation, module model, protocol operation, PDL, repositories, and current implementation status of UMP.</t>
    </abstract>
  </front>
  <middle>
    <?line 29?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Universal Modular Protocol (UMP) is based on a modular approach to communication. Modules can be transferred between the two endpoints of a communication channel. If an endpoint does not have a required module, the endpoints can exchange the module package or use a repository address to obtain it.</t>
      <t>UMP is intended to support communication with the minimum number of modules installed at both endpoints. In its minimal configuration, no modules are required. UMP is intended to operate at multiple layers of the OSI model, from Layer 2 through Layer 7; this document describes its use at Layer 7. The approach is intended to let protocol functionality grow horizontally through composable modules.</t>
      <t>The Layer 7 design is based on UDP <xref target="RFC0768"/> and adds a UMP header to the UDP payload. The header is expected to contain fields such as a magic value and protocol version. With no modules configured, the design aims to keep the protocol engine's behavior minimal.</t>
    </section>
    <section anchor="problems-with-current-protocols">
      <name>Problems with Current Protocols</name>
      <section anchor="time-and-effort-required-to-adopt-new-ideas">
        <name>Time and Effort Required to Adopt New Ideas</name>
        <t>Adopting a new idea and completing the required specification work can take a long time, discouraging contributions from individuals and companies. A person or organization may have a useful idea but decide not to publish it because of the effort required to implement and deploy it. A new security or privacy feature, for example, often has to be implemented as a new protocol or added to an existing one. Updating an established protocol may require coordination with the people or organizations responsible for it, particularly when it is widely deployed. As a result, a substantial amount of time can pass between proposing an idea and using it in real systems.</t>
        <t>A related problem occurs when a new security or privacy feature is itself implemented as a protocol. Integrating that feature with an existing protocol, such as AMQP, may require changes to the existing protocol or its implementations. A developer who did not design or develop the existing protocol may not be able to integrate the new feature without depending on changes outside their control.</t>
      </section>
      <section anchor="duplication-across-protocols">
        <name>Duplication Across Protocols</name>
        <t>Different communication protocols sometimes share components or concepts. When these components are duplicated, multiple specifications and implementations must be reviewed and maintained. Duplication can also increase code size and resource consumption, which is especially significant on constrained systems such as IoT devices.</t>
      </section>
      <section anchor="the-cost-of-updating-legacy-software">
        <name>The Cost of Updating Legacy Software</name>
        <t>When legacy software uses a particular communication protocol, adopting a newer version or a different protocol may require updating the software. Such updates consume time and money. Developers maintaining software must also track protocol-version changes, which requires expertise and additional work that organizations may prefer to avoid.</t>
      </section>
      <section anchor="differences-between-protocol-implementations">
        <name>Differences Between Protocol Implementations</name>
        <t>There is no single organization that controls every implementation of a protocol in every real-world deployment. Different entities can implement the same protocol independently, and the resulting implementations may differ in behavior, security, or completeness.</t>
      </section>
      <section anchor="difficulty-connecting-independent-applications">
        <name>Difficulty Connecting Independent Applications</name>
        <t>Two independently developed applications generally cannot communicate directly unless they support a compatible protocol. Otherwise, an intermediary bridge may be required to translate between protocols supported by the applications. Such a bridge adds complexity and may require manual configuration by a network administrator.</t>
      </section>
      <section anchor="limitations-on-moving-processes-across-network-nodes">
        <name>Limitations on Moving Processes Across Network Nodes</name>
        <t>Processes cannot generally automatically move to another network node to use available or more powerful computing resources without additional supporting software. A solution may require an agent to be installed and supported on every participating platform, and the relevant machines must be accessible within the network's policies.</t>
      </section>
      <section anchor="limited-opportunities-to-optimize-existing-protocols">
        <name>Limited Opportunities to Optimize Existing Protocols</name>
        <t>Improving the performance or security of an existing protocol usually requires working with its existing design and implementation complexity. Even when an optimization is intended only for a particular network or set of applications, implementing it may require specialist knowledge. Consequently, many deployments use generally available implementations tuned for broad use cases rather than for their own needs, and therefore are not working at their optimum performance.</t>
      </section>
      <section anchor="security-of-protocol-designs-and-implementations">
        <name>Security of Protocol Designs and Implementations</name>
        <t>Protocol implementations are not always secure, and implementations may require independent review. In addition, a protocol design can itself contain security weaknesses, regardless of the quality of a particular implementation.</t>
      </section>
    </section>
    <section anchor="goals-of-ump">
      <name>Goals of UMP</name>
      <section anchor="reducing-the-adoption-cycle">
        <name>Reducing the Adoption Cycle</name>
        <t>UMP aims to reduce the need to implement every new protocol feature as a separate, monolithic protocol. The intended result is a shorter path from an idea to implementation and deployment, encouraging wider participation in protocol development.</t>
      </section>
      <section anchor="sharing-protocol-components">
        <name>Sharing Protocol Components</name>
        <t>UMP allows protocol functionality to be divided into reusable modules. Reuse is intended to reduce duplicated specification work, implementation effort, development time, costs, and code size. When memory is limited, a protocol engine may use cache-eviction policies to remove modules that are no longer needed and free up memory.</t>
      </section>
      <section anchor="adapting-to-supported-modules-and-updates-automatically">
        <name>Adapting to Supported Modules and Updates Automatically</name>
        <t>UMP aims to let endpoints use supported modules without requiring every application to be updated whenever a protocol changes. The intended benefit is that applications can gain updated supported functionality through the protocol engine, subject to module availability, compatibility, and local policy.</t>
      </section>
      <section anchor="a-small-and-verifiable-protocol-engine">
        <name>A Small and Verifiable Protocol Engine</name>
        <t>UMP places common execution and security responsibilities in a protocol engine. The engine is intended to be small enough to be reviewed and verified.
The engine enforces common execution restrictions on modules.</t>
      </section>
      <section anchor="reducing-the-need-for-protocol-bridges">
        <name>Reducing the Need for Protocol Bridges</name>
        <t>By allowing endpoints to exchange communication behavior from each other, UMP aims to remove the need for separate protocol-translation bridges.</t>
      </section>
      <section anchor="using-network-resources">
        <name>Using Network Resources</name>
        <t>UMP's sandboxed execution model is intended to support controlled use of processing resources available on participating network nodes. Any such use remains subject to endpoint policy and resource restrictions.</t>
      </section>
      <section anchor="composing-protocols-from-smaller-modules">
        <name>Composing Protocols from Smaller Modules</name>
        <t>Smaller modules are intended to make protocol functionality easier to inspect, reuse, and combine. UMP aims to let developers compose new behavior from existing modules rather than reimplementing complete protocols. This also allows to tune protocols to their most optimum performance by allowing the recomposition of existing protocols.</t>
      </section>
      <section anchor="using-pdl-to-support-security-analysis">
        <name>Using PDL to Support Security Analysis</name>
        <t>PDL is intended to let the compiler check module syntax and semantics and verify its security and apply specified restrictions to module behavior. The design goal is to make security properties easier to analyze and measure the level of security imposed on module behavior, and allow the protocol engine to decide whether to use a module based on its configuration.</t>
      </section>
    </section>
    <section anchor="modules">
      <name>Modules</name>
      <t>A module package contains metadata and code for the <tt>Process</tt> and <tt>Deprocess</tt> stages. These names are used because the two stages may be inverses of one another, but they do not necessarily have to be. They may transform data or manage protocol state, so the terms <tt>encoder</tt> and <tt>decoder</tt> would not cover all intended uses.</t>
      <t>The <tt>Process</tt> and <tt>Deprocess</tt> binaries are WebAssembly modules executed in a sandbox <xref target="WASM-CORE-2"/>. Module metadata at least includes a module identifier, module version, ABI version, protocol version, the <tt>Process</tt> and <tt>Deprocess</tt> WebAssembly or PDL code or both, a digital signature, permissions, and dependencies on other modules.</t>
      <t>A module may be composed from other modules and may share data or coordinate behavior with corresponding functionality at the other endpoint. Module execution and communication are mediated by the protocol engine.</t>
      <t>A module may also be described in PDL, which is intended to allow the engine to compile and analyze module behavior whenever a module digital signature is not present.</t>
    </section>
    <section anchor="protocol-operation">
      <name>Protocol Operation</name>
      <t>UMP is designed for the application layer and uses UDP as its underlying transport. The design therefore does not require changes to the underlying network structure. This section describes the intended operation when UMP is carried in UDP datagrams.</t>
      <t>The design of this protocol engine follows this principle: the possessor of data determines the security applied to that data, and the possessor of processing resources determines the resource quota. PDL is intended to express security-related requirements, while the protocol engine enforces those security-related requirements and applies resource limits when executing modules.</t>
      <section anchor="sending-and-receiving-data">
        <name>Sending and Receiving Data</name>
        <t>The sender passes data through a module's <tt>Process</tt> stage. The first packet identifies the required module in its UMP header. When possible, the sender may include some or all of the data in that packet to reduce the number of packets exchanged.</t>
        <t>The receiver checks the module identifier. If the module is not already available, the receiver checks its cache and, if configured, a repository. If the module is still unavailable, the receiver requests the module package from the sender. After obtaining the package, the receiver verifies its signature. If the package has no signature but contains PDL, the receiver may attempt to compile and sign it according to the engine's configured trust policy. The receiver then passes the data through the module's <tt>Deprocess</tt> stage and provides the resulting data to the upper-layer application. If the receiver fails to verify the module, it may continue processing or simply return an error to the sender and stop.</t>
      </section>
      <section anchor="security-and-resource-possessor">
        <name>Security and Resource Possessor</name>
        <t>The sender, as the possessor of the original data, chooses the module or modules used to apply the intended security protections. The sender may choose a module that does not provide security; UMP does not make the data secure merely by transporting it.</t>
        <t>The sender controls the resources used to execute <tt>Process</tt> on its own endpoint and may impose limits such as memory usage and execution time. The receiver similarly controls resources used to execute <tt>Deprocess</tt> on its endpoint and applies its own limits.</t>
      </section>
      <section anchor="bidirectional-communication">
        <name>Bidirectional Communication</name>
        <t>Data sent in the reverse direction is processed according to the module behavior selected by the endpoint sending that data. The endpoints exchange roles for that transmission. Because a receiver may not trust the security choices made by the peer, it may use its own module for outgoing data. In that case, the module identifier-and, if necessary, the module package-must be provided to the other endpoint.</t>
      </section>
      <section anchor="module-results-and-execution-cycles">
        <name>Module Results and Execution Cycles</name>
        <t>A module returns an array of buffers. The engine sends the buffers to the other endpoint. If the result's pending flag is set, the engine waits for a response, collects the response data, and calls the module again. This cycle continues until the pending flag is cleared or the execution-time limit is reached.</t>
        <t>The result also identifies whether the buffers are for negotiation or internal communication between peers, or represent the final payload. This distinction allows a module to exchange information with the peer before producing the final application data.</t>
      </section>
      <section anchor="module-composition">
        <name>Module Composition</name>
        <t>A complete protocol, such as TCP, could be implemented as a single module. However, one goal of UMP is to reduce duplicated code by composing protocols from smaller modules that can be reused across different protocols. A module may therefore act as a composer that invokes other modules or primitives. Module metadata contains a dependency list, which the engine uses to locate required module packages in its cache, a repository, or from the peer.</t>
        <t>For fast composing modules, an optional Composer component may accept a graph of modules and create a composite module package expressed in PDL, preserving the relationships represented in the graph. It may also accept an ordered list of modules and create a composite module that executes them as a pipeline.</t>
      </section>
      <section anchor="resource-restrictions-and-scheduling">
        <name>Resource Restrictions and Scheduling</name>
        <t>Modules have limited access to resources, such as execution time and persistent storage. They cannot perform I/O directly on peripherals. The engine is responsible for interacting with UDP and scheduling packet transmission to the other endpoint. In this respect, the engine is intended to provide some functions similar to those of a micro operating system.</t>
      </section>
    </section>
    <section anchor="protocol-description-language-pdl">
      <name>Protocol Description Language (PDL)</name>
      <t>PDL is intended to let the engine analyze modules and compile PDL into WebAssembly. A module without PDL must contain WebAssembly code that has been verified by a trusted third party and digitally signed. When PDL is present, the protocol engine may compile and analyze the module and, under its trust policy, sign the resulting package for later verification. A peer or repository client may then verify the signature without recompiling the module, provided that it trusts the signing engine and its signing policy. This can improve performance, for example, in local networks.</t>
      <t>A trusted party may also verify protocol engines and sign them to indicate that they implement the required rules for module verification, signing, and resource enforcement. This approach is intended to avoid requiring a trusted third party to review every module individually.</t>
      <t>These are design goals; their effectiveness depends on the language specification, compiler correctness, engine implementation, and the trust placed in those components.</t>
      <section anchor="protocol-description-intermediate-language-pdil">
        <name>Protocol Description Intermediate Language (PDIL)</name>
        <t>The ideal PDL code syntax and structure should be as compact as possible while retaining all metadata required for analysis by any protocol engine. It should also compile quickly and have as small memory footprint as possible. Alongside caching and signing already compiled WebAssembly by a trusted protocol engine, or a receiver capability to use its own trusted modules, this goal of designing PDL can increase performance too.</t>
        <t>To keep it compact and make compilation as fast as possible, PDL is transpiled into PDIL. PDIL follows very strict rules. It is case-sensitive, contains no whitespace, follows a specific order, and is designed to be as deterministic as possible to support static analysis. It is not intended to be human-readable; instead, it acts as a compact intermediate language containing all metadata required for compilation to WebAssembly.</t>
        <t>PDIL is going to develop gradually and any new feature will be added rigorously to not only support above mentioned goals but also does not being able to be accomplished by another feature and make redundancy.</t>
      </section>
      <section anchor="pdl-compiler">
        <name>PDL compiler</name>
        <t>PDL is a high-level language based on PDIL. It is more flexible and human-readable, and it transpiles into PDIL. The protocol engine accepts both PDL and PDIL.
For PDL input, the engine first transpiles it into PDIL. For PDIL input, it compiles the code directly into WebAssembly.
The PDL compiler is part of the protocol engine and is responsible for compiling PDL or PDIL into WebAssembly and syntax and semantic checks.</t>
      </section>
      <section anchor="third-party-pdls">
        <name>Third party PDLs</name>
        <t>There can be lots of variants of PDLs with their own transpilers created by other parties, that can transpile to proposed PDIL in here. 
Protocol engine as a default accepts PDIL or PDL specifications proposed in this document. Because PDL is going to be converted to PDIL, any restriction and strict rule that PDL specification in this document has, is because PDIL enforces that the same way it is, and from transpile performance aspect PDL follows as much as possible the PDIL structure and is as much as similar and direct to PDIL while is as flexible and human readable as possible.</t>
      </section>
      <section anchor="pdl-structure">
        <name>PDL Structure</name>
        <t>PDL semantic checks enforce the language's policy by requiring input data that will be exposed to untrusted environments to pass through the required encryption process. enforces the state machine of <tt>Process</tt> and <tt>Deprocess</tt> being in synchronization with each other and individually and also in co communication with each other do not fall in an infinite loop when data is not infinite. enforces that for any real payload data, if there is an encode then there is a corresponding decode mechanism at proper location for the other peer. enforces that timeout checks in both endpoints are according to each other.</t>
        <t>Encryption enforcement is made upon using encryption primitives or encryption functions made of encryption primitives. Encryption primitives are intended to be part of the language and may be extended through language versions.</t>
        <t>PDL does not have access to system I/O. It has access only to limited external information, such as system time, and can send and receive data between peers only through the protocol engine.</t>
        <t>PDL cannot allocate memory directly from upper layer OS; memory must be allocated to it by the protocol engine.</t>
        <t>The design favors compilation over interpretation for performance. PDL avoids garbage collection by using explicit memory ownership and ownership transfer to reduce memory-management errors.</t>
        <t>To describe <tt>Process</tt> and <tt>Deprocess</tt> together in a human-readable form, PDL contains the source code for both in a single combined description.</t>
        <t>PDL is based on running inside a state machine.
PDL is case sensitive.</t>
        <t>Users cannot define arbitrary infinite loops; loop conditions are restricted by rules intended to prevent them.
Everything is passed by reference. To pass data by copy, the user must call the appropriate reserved keywords.
PDL memory is always little-endian similar to WebAssembly specification.</t>
        <t>The design goal is to make memory allocation strict and deterministic, allowing the compiler to estimate memory growth, to pass as a module meta data to allow protocol engine better know how to deliver memory to module.
The design goal is to be deterministic as much as that compiler could be able to assess growth order of loops and iterations and states between two peers.</t>
        <t>Timeout management is coupled with state decision making. When a state changes from for example <tt>Process</tt> side to <tt>Deprocess</tt> side state, Protocol engine checks what states of <tt>Process</tt> side are addressed from <tt>Deprocess</tt> state side that jump is going to happen. Then starts a timer for all of those <tt>Process</tt> side states that
new <tt>Deprocess</tt> state may change to them and check each state's specified time with it, if any of them expires then fails.</t>
        <t>Only functions with the <tt>encoder</tt> and <tt>decoder</tt> operation-limiter directives may modify user-level input data and return the result. Operations performed on the input data by these two functions should be reverses of each other. A PDL source may contain many of these functions.</t>
        <t>Only functions with the <tt>encrypt</tt> and <tt>decrypt</tt> operation-limiter directives must be used for encryption and decryption. Operations performed on the input data by these two functions should be reverses of each other. A PDL source may contain many of these functions. Encryptor functions are only allowed to call encryption primitives or other functions with <tt>encrypt</tt> directives, and as a fact <tt>decypt</tt> follows that too but in reverse. If an unencrypted branch of input data merges with encrypted data that will be returned by an <tt>encrypt</tt> function, compilation fails.</t>
        <t>The goal is to let the compiler check and verify functions with operation limiter directives being in reverse of each other.</t>
      </section>
      <section anchor="pdl-syntax">
        <name>PDL syntax</name>
        <t>This is a sample of PDL syntax</t>
        <t>&lt;CODE BEGINS&gt;</t>
        <t>// This is an inline comment</t>
        <t>/*
 This is a block comment
*/</t>
        <t>/*
 user level input data is accessible as global::input variable
 user level settings is accessible as global::settings variable
 user level platform config is accessible as global::info variable
*/</t>
        <t>includes section</t>
        <t>variables ...</t>
        <t>user functions declaration section [if it is not called before definition]</t>
        <t>user functions definition section</t>
        <t>/*
 This is an encoder function. keyword encoder indicates that there should be a decoder with the same name.
 When an encoder function gets called in a state, then the other peer should have call its corresponding decoder.
*/
function encoder A(buf)
{
  variables ...</t>
        <t>code ...</t>
        <t>return // Should return a buffer type variable
}</t>
        <t>/*
 This is a decoder function. keyword decoder indicates that there should be an encoder with the same name.
 When a decoder function gets called in a state, then the other peer should have call its corresponding encoder.
*/
function decoder A(buf)
{
  variables ...</t>
        <t>code ...</t>
        <t>return  // Should return a buffer type variable
}</t>
        <t>function encrypt TestEncryptor(buf) // This is an encryptor function, for each encryptor there should be a decryptor with the same name
{
  variables ...</t>
        <t>code ...</t>
        <t>// every single byte of input buffer  before leaving this function should be passed through another encrypt function or encrypt primitive
  // this also checks merges and forks of input buffer
  // if input buffer is encrypted but further is merged with a non encrypt version of itself, then compile fails</t>
        <t>return // Should return an encrypted buffer
}</t>
        <t>function decrypt TestEncryptor(buf)
{
  variables ...</t>
        <t>code ...</t>
        <t>return // Should return a decrypted buffer
}</t>
        <t>/*
  This specifies encryptor function that is going to be used when sending
  out the data to the other peer, and its complementary counterpart will
  be used when receiving data.
*/
encryptor = TestEncryptor</t>
        <t>/*
  This is always last function with exact same name. This controls the state machine for both peer at same code.
  This will be splitted to <tt>Process</tt> and <tt>Deprocess</tt> functions after transpile into PDIL.
<em>/
control()
{
  /</em>
    P indicates this state is for <tt>Process</tt> side.
    label in front of P is state label to refer to. label should be unique in entire of this file.
    time indicates this state's timeout.
  */
  P:01:time</t>
        <artwork><![CDATA[
variables ...

code ...

/*
  This returns back the control to protocol engine. 
  Protocol engine sends data inside variable buf to specified state,
  with specified label in current peer or the other side peer.
*/
state(label, buf)
]]></artwork>
        <t>/*
    D indicates this state is for <tt>Deprocess</tt> side.
    label in front of D is state label to refer to. label should be unique in entire of this file.
    time indicates this state's timeout.
  */
  D:02:time</t>
        <artwork><![CDATA[
variables ...

code ...

/*
  This returns back control to protocol engine.
  Protocl engine delivers data inside variable buf to user level,
  in same peer that this engine resides.
  This only can be called in `Deprocess` side.
*/
user(buf)

/*
  This returns back the control to protocol engine. 
  Protocol engine sends data inside variable buf to specified state,
  with specified label in current peer or the other side peer.
*/
state(label, buf)   .   .   .   . }
]]></artwork>
        <t>&lt;CODE ENDS&gt;</t>
        <t>The details of these mechanisms, as well as PDL's structure, syntax, and capabilities, are subject to change and remain areas for specification and implementation work.</t>
      </section>
    </section>
    <section anchor="repositories">
      <name>Repositories</name>
      <t>Any party may operate a repository that stores modules locally or on the web. Repository-management software is expected to support the storage and exchange of module packages. Repositories are not responsible for enforcing module security, but their signed modules or modules with PDL can be trusted, if verified by endpoints. Endpoints must apply their own execution policies to modules obtained from repositories.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>UMP introduces security considerations associated with downloading and executing code supplied by peers or repositories. A module package must be treated as untrusted until it has been validated according to the protocol and receiving endpoint's extra policy.</t>
      <t>The protocol engine is a critical security boundary. Its implementation must correctly validate module metadata and signatures, enforce permissions and dependencies, isolate module execution, limit resource consumption, and mediate network I/O. A defect in the engine, runtime, compiler, or sandbox could undermine these protections. Resource limits reduce some denial-of-service risks but do not eliminate all risks, including risks caused by excessive network traffic, repeated module transfers, or expensive validation.</t>
      <t>The design relies on a clear trust policy for signatures and for engines permitted to compile and sign PDL modules. An endpoint must not treat a signature as proof of safety unless it trusts the signing identity and the process used to produce the signed package. Key provisioning, revocation, signature algorithms, and the policy for trusting signed modules require further specification.</t>
      <t>The proposal intends PDL to support security analysis and to require specified encryption primitives for outgoing data. Such checks do not, by themselves, prove that a protocol is secure. Security depends on the precise language semantics, compiler implementation, cryptographic primitives, module composition, and endpoint configuration.</t>
      <t>Because modules may exchange data and coordinate with peer modules, implementations also need well-defined rules for data possession, information sharing, module identity, dependency resolution, and the handling of malformed or unexpected results. The details of these mechanisms remain areas for specification and implementation work.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions at this time. Any UMP identifiers, header fields, or registries that may require allocation will be specified in a future revision if needed.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>UMP is under development. The design and implementation are not yet complete.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC0768" target="https://www.rfc-editor.org/info/rfc768" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0768.xml">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC768"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="WASM-CORE-2" target="https://www.w3.org/TR/wasm-core-2/">
          <front>
            <title>WebAssembly Core Specification, Version 2.0</title>
            <author>
              <organization>World Wide Web Consortium</organization>
            </author>
            <date year="2024" month="December" day="05"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 390?>

<section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document is an early proposal and does not yet identify additional contributors.</t>
    </section>
    <section anchor="authors-address">
      <name>Author's Address</name>
      <t>Arash Ebrahimi</t>
      <t>Email: <eref target="mailto:ebrahimi.arash@yahoo.com">ebrahimi.arash@yahoo.com</eref></t>
    </section>
  </back>
  <!-- ##markdown-source:
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
AA==

-->

</rfc>
