Internet DRAFT - draft-arslan-mimi-outer
draft-arslan-mimi-outer
MIMI B. Arslan
Internet-Draft Soba Yazılım A.Ş.
Intended status: Informational 20 April 2023
Expires: 22 October 2023
More Instant Messaging Interoperability (MIMI) Outer Layer
draft-arslan-mimi-outer-02
Abstract
This document describes a general purpose messaging format that is
flexible enough to capture the semantics of incumbent messaging
formats like MIME or XMPP or non-standard protocols like those of
apps like WhatsApp, Signal, etc. It can be used as the payload
format inside an MLS session.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 22 October 2023.
Copyright Notice
Copyright (c) 2023 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Arslan Expires 22 October 2023 [Page 1]
Internet-Draft MIMI Outer April 2023
Table of Contents
1. Conventions and Definitions . . . . . . . . . . . . . . . . . 2
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
3. MIMI-INK format . . . . . . . . . . . . . . . . . . . . . . . 3
4. Rationale . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1. Msgpack . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.2. Doing away with recursivity . . . . . . . . . . . . . . . 5
5. Content . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.1. Object definitions . . . . . . . . . . . . . . . . . . . 6
5.2. Validation . . . . . . . . . . . . . . . . . . . . . . . 6
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6
7. Normative References . . . . . . . . . . . . . . . . . . . . 6
8. Informative References . . . . . . . . . . . . . . . . . . . 6
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6
1. Conventions and Definitions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174]when, and only when, they appear in all
capitals, as shown here.
The reader may wish to note that one of the two RFC references in the
preceding paragraph was normative; the other was informative. These
will be correctly identified as such in the References section below.
2. Introduction
Compatibility with existing email systems is a nice property to have.
The email infrastructure is distributed, tries to deal with the spam
problem using its own means and most email clients are robust and
feature-rich, built with long-term archival in mind.
MIME is still the standard format in email exchange. It definitely
shows its age (it's rather complex to implement, text-only, self-
contained, etc) but otherwise stood the test of time so could very
well form the basis of a next generation messaging format.
The JMAP [RFC8621]Email object (§.4) is one such attempt -- it
simplifies MIME processing by shedding obsolete features like support
for non-unicode character encodings but keeps defining features like
being text-only and recursive structure. The JMAP protocol also adds
blob support which adds an alternate transport for binary data, which
not only dramatically lowers the impact of using a text-only format,
but also makes it possible to bundle arbitrary size or amount of
attachments together.
Arslan Expires 22 October 2023 [Page 2]
Internet-Draft MIMI Outer April 2023
However, email lacks structure, except in very niche applications
like meeting requests, which renders it non-suitable for most of
instant messaging applications.
The history of instant messaging so far makes it obvious that it's
not possible to foresee all actions a client may implement. For
example, at the height of its popularity, the MSN client famously let
its users shake the windows of their peers. WhatsApp is very good at
sending plain-text messages, but Snapchat came up with stickers and
expiring messages, which other clients eventually had to implement.
Any system that seeks to unify message exchange must be flexible
enough to capture and encode any current and future needs of
messaging applications.
3. MIMI-INK format
We propose the MIMI-INK format, message/mimi-ink, to be renamed to
message/mimi if it gets standardized, which is made of the following
elements:
1. A dict of headers. It "MUST" contain the defining entry named
"Root-Content-Id", among other ones.
2. An optional message body in any number of formats. It's supposed
to describe the purpose of the message for clients that don't
support the attached structure, though of course it can be
anything.
3. At least one blob that contains the main data structure with
Content-Id: [Root-Content-Id-Value]defined in the message
headers. This is called the "root content".
4. Zero or more additional blobs that may be referenced from inside
the main structure for any reason.
In MIME terms;
* headers with at least Root-Content-Id: XYZand Content-Type:
message/mimi-ink
* multipart/mixed
- multipart/alternative
o text/html
o text/plain
o etc.
- multipart/mixed
o one of application/{xml,json,msgpack,etc} with Content-
Id="XYZ"
o zero or more binary objects
Arslan Expires 22 October 2023 [Page 3]
Internet-Draft MIMI Outer April 2023
The root content must at least denote a namespace, name and actual
content. An optional errorcode could also be included, if the
content designates an error message. The client "MUST" validate the
content according to the information given in namespace/name values
and refuse to process the message by resorting to interpret it a
regular email message with attachments.
Some examples of this structure serialized as JMAP are as follows:
* https://github.com/plq/mimi/blob/main/reaction.jmap
(https://github.com/plq/mimi/blob/main/reaction.jmap)
* https://github.com/plq/mimi/blob/main/vibrate.jmap
(https://github.com/plq/mimi/blob/main/vibrate.jmap)
We omitted non-essential JMAP properties for sake of simplicity.
Corresponding objects serialized as MIME:
* https://github.com/plq/mimi/blob/main/reaction.eml
(https://github.com/plq/mimi/blob/main/reaction.eml)
* https://github.com/plq/mimi/blob/main/vibrate.eml
(https://github.com/plq/mimi/blob/main/vibrate.eml)
The mimi repository above contains software that converts the MIME
structure to the proposed JMAP structure. It is assumed that there
is a 1-to-1 releation between the MIME representation and the JMAP
representation of a message, even though that's not correct --
whatever gets lost in translation is not of interest.
JMAP standard specifies JSON as serialization format. We think JSON
has some fundamental shortcomings like missing an integer type or
being text-only. So we propose the msgpack format as serialization
format for MIME-INK.
Some other key differences with the JMAP Email object are as follows:
1. The "content" property was added to represent inline data where
appropriate.
2. The root content "MUST" represent an abstract structure,
serialized as any popular format (json, xml, msgpack, etc.).
3. An XML-like namespacing structure needs to be specified so that
both standards-compliant and proprietary objects can coexist.
(Forcing the inner layer format to be XML is a good first step.)
4. Using a message body with a well-defined structure makes the
recursivity of the outer layer (JMAP/MIME) redundant. This kind
of structure can be realized inside the payload.
Arslan Expires 22 October 2023 [Page 4]
Internet-Draft MIMI Outer April 2023
4. Rationale
4.1. Msgpack
msgpack is;
1. Binary
2. Simple to implement: Here's an implementation in ~400 lines of
python: https://github.com/plq/msgpack-python-pure/blob/master/
msgpack_pure/_core.py (https://github.com/plq/msgpack-python-
pure/blob/master/msgpack_pure/_core.py)
3. Supports enough primitives to be useful: null, true, false,
int64, uint64, float32, float64, string, bytearray, list, map
4. Doesn't overstep its boundaries by defining complex types like
Date
However, there is stuff that needs to be further/better specified:
1. msgpack doesn't have a standard way of defining a schema. We
could just imitate the relevant bits of XSD.
2. As said above, there is no standard way of serializing complex
objects like dates.
3. It's very easy to prepend additional headers to MIME, which eg.
makes it very easy to trace its origins via Receivedheaders.
"Patching" msgpack like this doesn't seem practical. However,
it's quite easy to tell concatenated msgpack objects apart. So
it may be desirable to specify MIMI as a bunch of concatenated
msgpack objects instead of just one object containing everything.
If there is a simpler binary format that provides equivalent
functionality, it could be adopted instead. msgpack is not a hard
requirement here but does have interesting properties that make it a
strong contender.
4.2. Doing away with recursivity
A MIME/JMAP object can contain an infinite amount of message parts,
which can also contain child message parts. We think:
* Recursive formats like MIME/JMAP add a great deal of flexibility
to the wrong layer.
* MIMI outer shell needs to be as simple as possible. If a complex
message bundle is needed, it can be easily expressed by the inner
structure(s).
* MIMI objects can be nested as attachments and the clients could
choose to interpret it further down anyway.
Arslan Expires 22 October 2023 [Page 5]
Internet-Draft MIMI Outer April 2023
That's why preventing the sub parts from containing further elements
could make sense in order to keep the implementations as simple as
possible.
5. Content
5.1. Object definitions
When specified in onion-like layers like this, the object definitions
become the subject of another standard. It's off-topic here.
5.2. Validation
To standardize how clients could validate incoming content, we need
to specify or choose a schema language first. XML is the clear
winner as the inner format here as it already has everything,
including widespread software support.
6. IANA Considerations
The inner format may require IANA to maintain a supported MIMI object
types registry.
7. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC8621] Jenkins, N. and C. Newman, "The JSON Meta Application
Protocol (JMAP) for Mail", RFC 8621, DOI 10.17487/RFC8621,
August 2019, <https://www.rfc-editor.org/info/rfc8621>.
8. Informative References
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
Author's Address
Burak Arslan
Soba Yazılım A.Ş.
Turkey
Email: burak@soba.email
Arslan Expires 22 October 2023 [Page 6]