<?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-02" category="std" consensus="true" 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-02"/>
    <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="25"/>
    <abstract>
      <?line 24?>

<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 28?>

<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.
*/</t>
        <t>function encoder A(buf)
{</t>
        <t>variables ...</t>
        <t>code ...</t>
        <t>return // Should return a buffer type variable</t>
        <t>}</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.
*/</t>
        <t>function decoder A(buf)
{</t>
        <t>variables ...</t>
        <t>code ...</t>
        <t>return  // Should return a buffer type variable</t>
        <t>}</t>
        <t>/*
 This is an encryptor function, for each encryptor there should be a decryptor with the same name.
*/</t>
        <t>function encrypt TestEncryptor(buf) 
{</t>
        <t>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>}</t>
        <t>function decrypt TestEncryptor(buf)
{</t>
        <t>variables ...</t>
        <t>code ...</t>
        <t>return // Should return a decrypted buffer</t>
        <t>}</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.
*/</t>
        <t>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.
*/</t>
        <t>function control()
{</t>
        <t>/*
    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.
  */</t>
        <t>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.
  */</t>
        <t>D:02:time</t>
        <artwork><![CDATA[
variables ...

code ...

/*
  This returns back data 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>}</t>
        <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 411?>

<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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
PhTJSIU7UGgLX/PZxeTKU63wsa7d1N+3ElfZWw/Ag3Yck9wiFQpzoFFugU7F
PXLrSs4qr3MrZDS/IoZTOkfS1+LCojQ5FwWDlHXTtgTe6wL5VPcSiIg5t+Ya
5OePmT+xqEH8CF+AZjJf5KdP80V9Mtced1MYJXbIfvw/yAvDb6gXpnmgOgxm
2MLptUFyVugR5KhZkylHMzczt7RFH6q0Q9YJPOZXchsooHAInL3he1N4pXaH
1tjpoHBehCRqrk4WrCP13Ouhsyq/eh09iaBa1qeg1RaxnCAl0ygY7MJSP3Lc
ojhSMeNJ7qC9IUkpjLIOnOnupthSUhwgBnl/TjGKSZVURXr+s3b4/PnrFy+r
L17+/tXX7362Hz5fLJ48qdJ3CKBatqgUd5GBp6e/XOTH1Yb86of08JdPFvIC
o4Er9W9ieYictnjfho1r7+7kHc6n0JPJ55GcJa05Pv5xeuPm93bCXbsEP0XD
LuQheCWp/1+bnhcLex6r9Zq4zfPk/SNJbZ1unvVJ/ydZ4SblX2s5m69NGIzp
GK79142x7Fmefcp7Cz3zV2tDV+mJ1ZtyJmVaptDAtM8GjhMtOGCyXqiXvp6n
2nvuNGjbdLZC3LAFwUUMa7NxKMYmQg7OXEfHJL7geprEZr3/bDPufrH4frGo
qhn/KwHn+m/1LCS+72RO65LUBp1quJx83uLFD3NhNmZc89Oe/Bg/M9WfYOjV
PP/T/FQaZvy0Wf9afv5VDL0hojPnoXVWGK388KZg6rNbnJwLCl6t3hNOT86K
F1n9BasEwZXWNzWu21wGn52GrtWUtvVOm1RohYmGTLrGTalHvrMWCSEyfZFh
QPaUa5AypJOFimLVYXHKE5XoOWn8VTMjF1cxZT84YuJeAmAdUAG6w7W8iZJ0
AdJOrzxQGbTyoji5Cuz/hL51k6lBDstGKYmPbNjfpOU67HRSFkg9uqI4Od6Q
Sm0qmKa9Ga9xylD7UmmkIKfmJn3fWTutJmMX23CVGg0QuBzO95zhAr5YVNPx
+3TwQhrvwOBM5D9POTVZVBE6o5aZ1iPw5iMQVNYbbYAou5ynOdyU5mBT4/Rb
sH9tExo8iifE6gL9Hs+7FJCRzxjkdH0uIU21Wan7TGVB1LN6MzG9fP4BdDfS
IjENrlgfiB0bRh8I7ORivjdV+k4ecn5JEk1r/VXW47Frvhv5XAqKhr1Px5N2
TatTcLh1iy4KyjRXixdFW97cPf3VHX674G+vZHwq5WnhynVr3N3gOjDBk8wm
rRVNewP0w3lQLE29ejiGo1AjAgrDCdIUSYoD0oEkkk/PEmftel7r+Mm6wKNL
pyEGIA7gPzzoZ/w5jp+Suhc7/OLTOzwL/B/b4xf/q3v84u7pM9ljfPo377PZ
mKukbbm/aXs1h/TpHc7I2DYXNRm+J81bTyuvUQclVIFDL+uSRg78tBaaQcvt
HRK+VDyvWPj/j8L9qHT/UIRYL79+oQGWZSwHPgaUYu5UHYp8DufscR0In5ZC
kseqhUsN3qzyoA01cmc2QFS+1EHTR5J1wZUPeMGJQk3LsjfuwULTG/dXvi2u
5V4scJFE7n5LVy+X3X6DZN1Cn65tj9JLJ2ebNZlx9pt1HnuS20/3IM4uJrZm
DvFb3A+rR2h0panTN7VFryfkp1uj5t0DUg/LTdDFHX96TL7ptf2ybPIuL7BJ
nUkbb81MnIIrmzyL669fpqKdXPZoR6W0dyA3A5dX+qSpJ5fpl/em846lE1+4
MQw3LNltWtxXb/fHFxc51JP3kCIOtRy55pVtiSIUQK0tLJ8klV64UY/W0gq1
ztVPiaqubkOwlNigfREuFiVqOcHRlJ2yrm3khp6rs0XJQOTaW3k1zM8hQoQ6
8mU7txpjpGRLvMAVRpkvm4CWHj5/eXVtrXX69lqUMxLLQkBKepZ/nMAK+8Xh
/auz+2iJCG0xWvF3D+Scyu1rWOVuDOnQshPcXO7EDbvow7TueWvP68FruZBK
8lPcsWdXJUjxgLuDj3w0nu3U5Oje29lRYy3YcVM3LaZx7SrsVtzZj5tkmvhB
2q60Uu/xGd8mgFCWHy/1aC8fv+b3uTNEFOgjp24e8upoa3HdJv/1ABEla+bX
KqIcrYEZ6fhD3aerylHvW700wclBoUkvtNjMtIsWjKVOX95Mg8NXx1e51GXX
i90XZwVZhuRYmsflVEU7tONmHVzasaP92PkhXe15u/VZziZpz7gqBte27Zjg
Sf9shH3Ebcysjevq3/1F+qshjtxX3PuHcPWnNWiT9qTRw+EYy6PziUFMFrfn
T02lXTdgMeitAp50Jjm7BCTa7TapqzEfY9XWWCYgTC9NZEt7Owl948geX0iq
UbYI5FIz60cKfjkZLX3icnVYcZes3Ti4zsZ21tp86lH0Kluc7T6dor153sos
ER4fbeGL+Iz4dNtIcT+Q7EASpfldNNbOZXsAd50cZXH/TLrOg009o53Ug3t1
6SKyEnw/FsDJSmrSZa86j6uHh5nE8iBalLv70lpMYpflKSjYtXacNnYTzVtu
7YN/d60VRXrk+g0eSC0p2sUXj0KrvwUJvbr/+v7Kp76ft7OhzZffdBb5KqSW
870AUOyH06lQYrT+IQb5iwt6FnCPm20bSzVO7nzN1ewcjZvwc/5wN7K6onmf
8zl85BSX/ck6put7x39OJV1DIodBypsXy8tEbvDHQNXFD+lcoP5VFiB6zHhf
p3tMj3JX45Rtmizkk87JELBTtFaeS75C4lLelZv+toJ0g/wUdxEeQk9u/15K
uwRZp3+8avFS/nLVP+E/Q7h77C9Y/cvivwEn8Rbst2sAAA==

-->

</rfc>
